待部署的项目包括:前端front,服务提供者backend,服务消费者gateway,注册中心nacos
服务器信息:腾讯云入门级服务器2核2G(后续有对服务器进行升级)
部署工具:前端使用宝塔部署,消费者和服务者使用打包jar的方式部署,其他后端项目使用docker部署
基于rpc框架项目的部署相对于只有一个后端程序的项目部署会要复杂很多,博主在这里踩了很多坑,耗费了很多时间,本篇博客记录下一些大大小小的坑,希望对读者有所帮助~
nacos部署
- 在部署nacos之前需要先部署java jdk 和 maven环境
- 先把服务器上自带的javaopenjdk全部删除
- 按照本地环境的jdk版本下载linux的jdk,并且配置好java的环境变量
- 直接把linux版本的nacos解压到服务器上即可,注意版本要和项目中的版本一致
- sh startup.sh -m standalone 单机运行nacos,此时只会显示正在starting,但是不会本地一样打印出详细的启动信息,具体的启动信息在nacos/logs/start.out里面
- 如果报内存不够无法启动的错误,可以调整startup.sh里面的jvm内存,具体看自己的服务器调小一点:JAVA_OPT=“${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m”
- 如果是报其他错误,可以指定一下startup.sh里面的 JAVA_HOME为刚刚装的jdk(因为宝塔在添加站点的时候会要求再装一个Tomcat和jdk)
- 如果日志里面显示正常启动,但是无法在自己的电脑上访问nacos主页,需要检查一下application.yml里面配置的address: nacos://ip:8848是不是外网的ip,然后按照外网ip访问主页:http://外网ip:8848/nacos/。如果是顺利启动会很快访问到主页,如果一直在nacos页面上转圈加载说明肯定启动有问题,检查日志中是不是有错误
- 如果显示无法访问,检查防火墙是不是开放了端口,注意有两层防火墙,一个是直接在腾讯云设置的防火墙规则,一个是服务器自己的防火墙服务。端口要开齐,9848 9849,8848等
提供者部署(backend)
- 注意把application.yml中的数据库信息和nacos地址修改为服务器的外网信息
- 把client-sdk项目中的网关地址改外外网地址,重新打包client-sdk和backend
- 把打包好的backend jar包传到服务器上直接java -jar运行 (先确保nacos能正确启动再运行backend项目)
- 如果有问题的话注意观察日志
消费者部署(gateway)
-
修改gateway中的白名单以及interface_host,打包成jar之后传到服务器
-
先启动naocs,再启动backend,确保正确之后启动gateway
-
此时发现gateway一直启动错误,日志显示客户端无法连接,dubbo实例创建失败(在这一步上花了很多时间!)
-
启动gateway失败之后,我尝试关闭nacos,先ps -ef | grep nacos查看nacos的运行状态,此时显示有一条nacos项目,我便判断nacos是正常运行的,然后使用sh shutdown.sh关闭nacos,但是却显示目前没有正在运行的nacos
-
此时我恍然大悟,重新开启nacos,再启动backend,检查到此时是可以运行sh shutdown.sh成功,说明backend启动之后nacos正常,随后启动gateway,发现此时使用sh shutdown.sh已经会提示没有运行的nacos了,说明在启动gateway的过程中,nacos挂掉了。
-
回到宝塔面板主页,显示内存已经爆红了。我再一次尝试调整startup.sh里面的jvm内存,不过调小了之后连backend都启动不了,显然问题出在了硬件上
-
我实在是太贫穷了,贪小便宜买了2G的服务器,加了200块钱升到了4G,里面就启动成功了
-
果然,钱能解决大部分问题!
前端部署
- 安装工作:
- 在服务器上安装宝塔
- 在宝塔上安装Tomcat(为了装java),Nginx, Mysql,docker
- 安装完毕之后停止tomcat,在服务器防火墙中放行8888(宝塔),8080(后端项目),和 3306(数据库)
- 宝塔部署前端:添加网站,PHP项目添加站点,在根目录下上传前端npm build 后dist目录中的所有内容
- docker部署除了消费者和提供者之外的其他后端项目:本地maven package生成jar包,将项目传到服务器上,根据Dockerfile build后端镜像,并启动该镜像
- 数据库准备:创建一个mysql超级用户(允许远程访问,并赋予所有权限),创建数据库和用户表
- 域名配置:由于域名注册和备案需要一段时间,暂时用ip访问
- 跨域配置:在站点配置文件中设置允许跨域
DockerFile
# Docker 镜像构建
FROM maven:3.5-jdk-8-alpine as builder
# Copy local code to the container image. # test
WORKDIR /app
COPY pom.xml .
COPY src ./src# Build a release artifact.
RUN mvn package -DskipTests# Run the web service on container startup.
CMD ["java","-jar","/app/target/user-center-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
docker相关命令:
# 创建镜像
docker build -t user-center-frontend:v0.0.1 .
# 显示已经安装的镜像
docker images
# 前端启动镜像
docker run -p 80:80 -d user-center-frontend:v0.0.1
# 后端启动镜像
docker run -p 8080:8080 user-center-backend:v0.0.1