Created by huqi at 2019-5-24 21:01:30
Updated by huqi at 2019-5-26 00:00:42

前言

最近后端的小伙伴在探索docker部署,给我也提了需求,希望我别掉链子,也能将前端服务通过docker部署。于是乎,我在大掘金找到了一篇不错的实践,@快狗打车前端团队 的 [手把手系列之]Docker 部署 vue 项目。出于Copy的职业本能,看完文章立马动手尝试了一下,一顿操作猛如虎,通过Docker部署了一个vue-cli生成的demo,当然,理论上来看,也就是部署了一个静态目录dist。简单的实践效果如图。介于目前项目的前端开发基于D2Admin 人人企业版,有了快狗团队的手摸手,很快就能用Docker部署这样一个后台管理平台。本文默认使用linux且安装了docker@18.09.6、node@8.9.0及git@1.8.3.1。

git clone及项目打包

“巧妇难为无米之炊”,代码都没有,何谈部署?说时迟那时快,先clone一下源代码。D2Admin 人人企业版大概9.25M的样子,我的ECS配置极差,网络环境也比较差,拉取的时间稍微长一点,都吃完一片西瓜了,都还在95%的进度。当然,乳沟您本地已经打包好了请略过一下操作,还有时间可以多吃几片西瓜。一般来说在实际上线中,前端可能只要给到打包之后的文件夹就够了。

git clone https://github.com/d2-projects/d2-admin-renren-security-enterprise.git
cd d2-admin-renren-security-enterprise
npm install
npm run build
复制代码

这里build主要目的还是为了获取到dist目录。

构建镜像,部署静态资源

这里借助docke获取nginx镜像,通nginx镜像作为基础来构建D2Admin 人人企业版镜像。
拉取nginx镜像:

docker pull nginx
复制代码

创建nginx配置文件:

mkdir nginx
vi nginx/deafult.conf
复制代码

deafult.conf

server {listen  80;server_name  localhost;#charset koi8-r;access_log  /var/log/nginx/host.access.log  main;error_log  /var/log/nginx/error.log  error;location / {root   /usr/share/nginx/html;index  index.html index.htm;}#error_page  404  /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}
复制代码

新建Dockerfile文件:

vi Dockerfile
复制代码

Dockerfile

FROM nginx
复制代码

新建sh脚本文件,如:

vi D2AdminRenren.sh
复制代码

.sh

docker run  -p 4443:80 -d --name d2adminrenren --mount type=bind,source=/home/huqi/d2-admin-renren-security-enterprise/nginx,target=/etc/nginx/conf.d --mount type=bind,source=/home/huqi/d2-admin-renren-security-enterprise/dist,target=/usr/share/nginx/html nginx
复制代码

部署静态资源:

sh D2AdminRenren.sh
复制代码

一波操作下来基本上就把D2Admin 人人企业版部署上去了。

简单说下上面几个操作的作用。docker拉取nginx,这里能够在不影响本机之前装的nginx的情况下,在docker容器中装了一个单独的nginx,一个简单的命令似乎见识到了docker的强大之处。nginx的配置文件我就不细说,因为我不会,这方面的资料还是蛮多的,之前看极客学院就推出过相关的专栏还是蛮火的,也可以参考@快狗打车前端团队 写的几篇相关的文章,这里为啥设置目录为 /usr/share/nginx/html,是因为后续会复制dist目录到这个文件夹,从而达到静态部署的目的。至于Dockerfile这个文件为啥只有 FROM nginx这一行仅仅说明镜像来源于官方nginx,是因为具体的配置写到了后边的sh脚本中。这里的sh脚本又长又臭,主要还是因为我不会断行,不过还是很好理解,其实就一条 docker run 的指令,-p指定容器暴露的端口,-d指定容器将会运行在后台模式,--name 指定容器名字,后续可以通过名字进行容器管理,--mount这里是关键,主要用于容器数据持久化,这样一来无论是修改nginx配置文件还是重新打包vue应用,都只要重启容器docker restart 就能生效。

跨域转发

一般来说,前后分离的项目都会存在跨域的问题,D2Admin人人企业版看似不存在跨域,那是因为后台接口做了跨域处理,这样一来,谁都可以调这个接口,如图所示,后台接口展示得比较明显,接下来想处理一来,在nginx上做一下代理转发。

修改前端api配置:

vi scr/.env
复制代码

.env

# 所有环境默认
# 优先级最低# 网络请求公用地址
VUE_APP_API=security-enterprise-server
复制代码

重新build:

npm run build
复制代码

修改nginx配置,增加接口转发,将 security-enterprise-server路径下的请求全部转发到后台。

修改后的deafult.conf

server {listen  80;server_name  localhost;#charset koi8-r;access_log  /var/log/nginx/host.access.log  main;error_log  /var/log/nginx/error.log  error;location / {root   /usr/share/nginx/html;index  index.html index.htm;}#error_page  404  /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}location ~  /security-enterprise-server/ {proxy_pass https://demo.renren.io;}
}
复制代码

重启:

docker restart d2adminrenren
复制代码

后记

一次简单的尝试,居然踩了很多莫名其妙的坑,比如我的docker没有快狗前端团队文中提到的docker exect指令,只有 docker exec,比如docker ps 查看到端口已开,netstat -tnpl没看到端口……不管怎样,总算是又迈出了一步,至少在后端都讨论docker的时候,也能插上一句“那个,前端也能用docker部署”。也许是又做了一个梦,梦中copy了不少代码,梦醒时分,继续漫无目的地前行!

本作品 由 Loner 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于github.om/hu-qi/Loner上的作品创作。
本许可协议授权之外的使用权限可以从 creativecommons.org/licenses/by… 处获得。

转载于:https://juejin.im/post/5ce955b7f265da1b5f263167

Docker部署D2Admin 人人企业版相关推荐

  1. 记一次开源学习--D2Admin 人人企业版

    Created by huqi at 2019-5-5 13:01:14 Updated by huqi at 2019-5-20 15:57:37 前言 上个月月底@D2开源组 开源了使用 D2Ad ...

  2. D2Admin 人人企业版适配发布

    使用 D2Admin 适配 人人企业版(专业版) 的前端工程.实现所有人人企业版前端功能,并保留绝大部分 D2Admin 特性. (如果你不知道人人企业版是什么,请参考:www.renren.io/. ...

  3. Docker部署renren-fast人人开源后台项目

    引言:renren-fast是一个轻量级的,前后端分离的Java快速开发平台,能快速开发项目并交付.由于开源脚手架部署方式各不相同,本文仅仅针对renren-fast开源框架的docker部署. do ...

  4. 浅谈在centos中使用docker部署war包项目(jsp篇)

    ​ 在centos中使用docker部署war包项目(jsp篇) 一.环境的准备 二.Docker优点 1.简化程序 2.避免选择恐惧症 3.节省开支 三.Docker结构 1.Client( Doc ...

  5. Docker学习篇——使用Docker部署账单微服务项目

    Docker概念 Docker 是一个开源的应用容器引擎 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc) Docker 可以让开发者打包他们 ...

  6. Docker 部署 SeafilePro + OnlyOffice(CentOS版)

    Docker 部署 SeafilePro + OnlyOffice(CentOS版) 前言 本教程完全基于Seafile官方文档进行安装部署的完全操作(傻瓜式)指南. 官方文档 1.Seafile 官 ...

  7. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  8. Docker 部署SpringBoot项目不香吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...

  9. docker部署springboot_Docker+SpringBoot快速构建和部署应用

    前言 Docker技术发展为当前流行的微服务提供了更加便利的环境,使用SpringBoot+Docker部署和发布应用,其实也是一件比较简单的事情.当前,前提是得有Docker的基础. 构建一个Spr ...

最新文章

  1. Activity中KeyEvent的传递
  2. 第一期站立会议2(11.16个人)
  3. python数据科学指南是什么_《Python数据科学指南》——导读
  4. windows服务器的DDOS防御,
  5. shell获取/etc/passwd中的用户名和id
  6. Linux—JVM等性能调优监控
  7. go语音protobuf_总结一下protobuf安装-Go语言中文社区
  8. python svm 实战_opencv-python 入门实战:传统方法Hog+svm实现目标检测
  9. jquery.form.js ajax提交上传文件
  10. 逐帧动画 and 有限状态机(fsm)
  11. Audition人声美化
  12. 【分享】测试小白如何测试手机整机系统测试
  13. kali android命令大全,让你的安卓设备跑起kali——kali for android
  14. 使用c++filt命令还原C++编译后的函数名
  15. 计算机管理格式化硬盘,教你电脑怎么格式化硬盘
  16. Django教程 —— 站点后台管理
  17. 【建议收藏】50 道硬核的 Python 面试题
  18. 古筝d调变降e调怎么办_古筝转调方法_古筝怎么转调
  19. 洗牌、发牌算法 (打乱扑克牌顺序)
  20. Android RecyclerView设置paddingBottom,scrollbars跟随滑动到底部

热门文章

  1. C++标准输出流换向(cout打印到文件)
  2. 如何加入知识星球参与开源优测交流圈子
  3. 1130: 杨辉三角 C语言
  4. 织梦模板 diy.php修改,dedecms织梦模板源代码修改教程
  5. JavaScript常用事件详解
  6. 为Solaris服务器配置款安全的防火墙
  7. Matlab 并行计算(一)
  8. 以太坊gas、gaslimit、gasPrice说明
  9. 第五人格显示没有服务器怎么办,第五人格 查看自己服务器 | 手游网游页游攻略大全...
  10. QT开发--仿写一个智能家居APP