Loading... <div class="tip share">请注意,本文编写于 540 天前,最后修改于 321 天前,其中某些信息可能已经过时。</div> > 部署完内存占用保持在 12GB 上下。如果要加上 Jenkins 之类持续集成的工具,保守估计服务器需要达到 16GB。你可以做一下限制内存的动作,比如限制 jvm 内存占用等。 > > 项目演示地址:http://video-test.xn2001.com/ > > 暂不公开后台管理界面的演示地址。 > > 腾讯云镜像仓库:https://mirrors.cloud.tencent.com/ # 部署后端项目 后端模块较多,为了统一管理,我使用了 docker-compose 一键部署,但这同样需要大量的工作量,我们一一道来。 首先打包每个微服务模块的 jar 包,很多朋友打包都会出现问题,要么是失败,要么是无法运行,要么是没有资源文件,反正这些都是我踩过的坑。推荐 pom.xml 参考我 Github。 打包的话,在项目根模块,**clean -> package** 即可。然后把 jar 复制出来,每个 jar 包配合一个 Dockerfile   Dockerfile 内容基本一致,只需小改一下 jar 包名。两个例子: **api_gateway** ```dockerfile FROM java:8 # 这里要修改成你的jar包名 ADD api_gateway-0.0.1-SNAPSHOT.jar app.jar # 镜像要暴露的端口,此端口对于 docker run -p xx:xxx 后者的端口号 EXPOSE 9110 ENTRYPOINT ["java","-jar","app.jar","-Xms256m -Xmx256m"] ``` **service_cms** ```dockerfile FROM java:8 # 这里要修改成你的jar包名 ADD service_cms-0.0.1-SNAPSHOT.jar app.jar # 镜像要暴露的端口,此端口对于 docker run -p xx:xxx 后者的端口号 EXPOSE 8140 ENTRYPOINT ["java","-jar","app.jar","-Xms256m -Xmx256m"] ``` 然后把这些文件夹全部上传到服务器上。 接下来我们去搭建环境和 build 这些镜像。下面是完整的 **docker-compose.yml**。 > 正确的食用方式:把内容全部复制出去,然后按需添加到服务器上,循序渐进从0到1启动一个 docker-compose。 > > 例如:我先把 mysql 那一段加到服务器,启动 mysql 数据库,测试,导入 nacos 官方 sql 文件,然后再把 nacos 那一段加到服务器。 > > 除了最基本的端口要修改为你实际的需求外,数据卷目录也应该适当根据需求修改。 > > mysql 容器启动后,需要导入 nacos 官方 sql 文件(官方找),才能正常启动 nacos。 > > nginx 主要用来做反向代理,也就是域名的绑定。 > > redis 配置文件需要自备,官方找,建议设置密码。 > > 微服务模块我也加在了 docker-compose,实现一键生成镜像和启动容器,也方便后续管理。 ```yml version: "3" networks: nginx_bridge: driver: bridge services: #nginx主要用于反向代理 nginxCollege: container_name: nginxCollege image: nginx restart: always ports: - 80:80 privileged: true volumes: - /docker/nginxCollege/conf/proxy.conf:/etc/nginx/proxy.conf - /docker/nginxCollege/conf/nginx.conf:/etc/nginx/nginx.conf - /docker/nginxCollege/conf/conf.d/:/etc/nginx/conf.d/ - /docker/nginxCollege/html/:/usr/share/nginx/html/ - /docker/nginxCollege/logs/:/var/log/nginx/ networks: - nginx_bridge #mysql数据库 mysqlCollege: image: mysql:8.0 container_name: mysqlCollege restart: always command: --default-authentication-plugin=mysql_native_password environment: - MYSQL_DATABASE=nacos - MYSQL_ROOT_PASSWORD=123456 ports: - 39510:3306 volumes: - /docker/mysqlCollege/logs:/logs - /docker/mysqlCollege/data:/var/lib/mysql nacosCollege: image: nacos/nacos-server container_name: nacosCollege restart: always depends_on: - mysqlCollege environment: PREFER_HOST_MODE: hostname #如果支持主机名可以使用hostname,否则使用ip,默认也是ip SPRING_DATASOURCE_PLATFORM: mysql #数据源平台 仅支持mysql或不保存empty MODE: standalone MYSQL_SERVICE_HOST: mysqlCollege #数据库地址,在这里可以直接写容器 MYSQL_SERVICE_DB_NAME: nacos #数据库名 MYSQL_SERVICE_PORT: 3306 MYSQL_SERVICE_USER: root #数据库管理账号 MYSQL_SERVICE_PASSWORD: 123456 #数据库管理密码 JVM_XMS: 512m JVM_MMS: 320m volumes: - /docker/nacosCollege/logs:/home/nacos/logs ports: - 39520:8848 redisCollege: image: redis container_name: redisCollege restart: always ports: - 39530:6379 environment: - TZ=Asia/Shanghai volumes: - /docker/redisCollege/data:/data - /docker/redisCollege/redis.conf:/usr/local/redis/redis.conf - /docker/redisCollege/logs:/logs command: ["redis-server", "/usr/local/redis/redis.conf"] api_gateway: restart: always build: context: ./jar/api_gateway #该jar和Dockerfile一起存放的目录 dockerfile: Dockerfile #Dockerfile文件名 container_name: api_gateway ports: - 39110:9110 environment: - TZ=Asia/Shanghai service_mail: restart: always build: context: ./jar/service_mail #该jar和Dockerfile一起存放的目录 dockerfile: Dockerfile #Dockerfile文件名 container_name: service_mail ports: - 39111:8090 environment: - TZ=Asia/Shanghai service_cms: restart: always build: context: ./jar/service_cms dockerfile: Dockerfile container_name: service_cms ports: - 39112:8140 environment: - TZ=Asia/Shanghai service_edu: restart: always build: context: ./jar/service_edu dockerfile: Dockerfile container_name: service_edu ports: - 39113:8110 environment: - TZ=Asia/Shanghai service_oss: restart: always build: context: ./jar/service_oss dockerfile: Dockerfile container_name: service_oss ports: - 39114:8120 environment: - TZ=Asia/Shanghai service_sms: restart: always build: context: ./jar/service_sms dockerfile: Dockerfile container_name: service_sms ports: - 39115:8150 environment: - TZ=Asia/Shanghai service_statistics: restart: always build: context: ./jar/service_statistics dockerfile: Dockerfile container_name: service_statistics ports: - 39116:8180 environment: - TZ=Asia/Shanghai service_trade: restart: always build: context: ./jar/service_trade dockerfile: Dockerfile container_name: service_trade ports: - 39117:8170 environment: - TZ=Asia/Shanghai service_ucenter: restart: always build: context: ./jar/service_ucenter dockerfile: Dockerfile container_name: service_ucenter ports: - 39118:8160 environment: - TZ=Asia/Shanghai service_vod: restart: always build: context: ./jar/service_vod dockerfile: Dockerfile container_name: service_vod ports: - 39119:8130 environment: - TZ=Asia/Shanghai ``` **docker-compose 相关命令** > docker-compose up -d 构建并启动所有容器 > > docker-compose up -d nginx 构建并启动 nginx 容器 > > docker-compose exec nginx bash 登录到 nginx 容器中 > > docker-compose down 删除所有nginx容器,镜像 > > docker-compose ps 显示所有容器 > > docker-compose restart nginx 重新启动 nginx 容器 > > docker-compose build nginx 构建 nginx 镜像 > > docker-compose logs nginx 查看 nginx 的日志 > > docker-compose logs -f nginx 查看 nginx 的实时日志 > > docker-compose pause nginx 暂停 nignx 容器 > > docker-compose unpause nginx 恢复 ningx 容器 > > docker-compose stop nginx 停止 nignx 容器 > > docker-compose start nginx 启动 nignx 容器 **nginx.conf** ```nginx worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; #监听的端口 server_name video-test.xn2001.com; #域名或ip location / { proxy_pass http://ip:端口; #反向代理的地址 index index.html; #配置首页 } } } ``` # 部署前端项目 部署之前介绍个东西,PM2,想要让项目托管在服务器中,使用 [PM2](https://pm2.keymetrics.io/) 进行部署是将 Nuxt 应用程序托管在服务器或 VM 上的一个快速简便的解决方案。安装如下: ```bash npm install pm2 -g ``` 在项目根目录下添加一个文件:`ecosystem.config.js`,其中 name 和 mode 是可以修改的。 ```javascript module.exports = { apps: [ { name: 'site', exec_mode: 'fork_mode', script: './node_modules/nuxt/bin/nuxt.js', args: 'start' } ] } ``` 这里有本地编译和服务器编译两种方式,前者是你本地将 build 后的文件上传到服务器。后者是文件全部上传服务器,让服务器去 build。 前者方案,执行命令 `npm run build`,执行之后将 **.nuxt**, **static**, **ecosystem.config.js**, **package.json**, **nuxt.config.js** 上传到服务器。**在服务器中进入该目录**执行 `npm install` 以及 `npm run start` 测试是否正常。 各种奇葩错误,基本都是 node 或 npm 版本较低,百度升级方法,记得重连一下服务器才会生效。 一切都没问题,但是浏览器就是访问不了怎么办,检查防火墙,查看 **nuxt.config.js** 配置是否有欠缺。**host: '0.0.0.0'** 一定要加。 ```javascript module.exports = { server: { port: 3001, // 线上端口 host: '0.0.0.0' }, } ``` 访问正常后,使用 pm2 做守护,保持网站的在线状态。直接使用 `pm2 start` 命令即可。  测试正常访问后,使用 Nginx 反向代理。(上面已经提及,就用 docker-compose 来启动 nginx,又快又省事。) > 演示地址:http://video-test.xn2001.com/ 接下来部署后台管理,直接打包出来是静态页面,放到 Nginx 容器即可。 命令:`npm run build` 将 dist 目录下所有文件丢到 Nginx 容器数据卷中。  也就是上图的 **/docker/nginxCollege/html/** 下,当然这里我也是将 dist 改成 admin 再上传到服务器上。 在 nginx.conf 添加多一个 `server` ```nginx server { listen xxx; #监听的端口 server_name 域名; #域名或ip location / { #访问路径配置 root /usr/share/nginx/html/admin;#根目录 index index.html index.htm; #默认首页 } error_page 500 502 503 504 /50x.html; #错误页面 location = /50x.html { root html; } } ``` 上面 `listen: xxx` 中端口号记得去 **docker-compose.yml** 中新增一个端口映射。  聪明的你会发现上面访问域名**还得加端口号才能进后台管理**,原因是我们域名同样默认端口为80,因此我们还是是要做反向代理: ```nginx server { listen 80; # 监听的端口 server_name 域名; #域名或ip location / { proxy_pass http://xxx:xx; #反向代理的地址(ip+端口) index index.html; #配置首页 } } ``` 当然也可以选择使用同个域名,然后根据目录来访问不同的网站。我的 Nginx 配置文件中,一个静态网站部署(后台管理),两个反向代理(一个代理前台网站端口,一个代理后台网站端口)。 > 到这里部署就完成啦。 > > 有志者事竟成! > > 阳光虽明码标价,但心中一团火不会熄灭。 Last modification:September 28, 2021 © Reprint prohibited Support Appreciate the author AliPayWeChat Like 1 如果觉得我的文章对你有用,请随意赞赏
3 comments
这将是一个大佬
快递代发,礼品代发快递单号上88单号网www.88danhw.com
讲师列表里面,点击修改的时候,浏览器地址跳转了http://localhost:9528/teacher/edit/1277161332654862338,但是页面是空白的。这是怎么回事?