本篇教程的使用到的技术有springboot、springcloud、Nacos、Docker、Nginx部署前后端分离访问的微服务。
部署一下Nacos
首先我们需要在服务器中(或者本地部署启动一下Nacos),这里我采用服务器的方式进行部署,这里有一点不一样的是数据源采用MySQL5+的方式进行,替换了原先Nacos中默认的Java数据库方式。
大神总结的Docker安装Naocs文章一
大神总结的Docker安装Nacos文章二
这里简单的做一下说明就是需要在文章一中的数据库配置中格外注意需要将Nacos的数据源显示的指明为MySQL5+,如下图所示。
打包一下Docker镜像并上传到指定的位置
这里可以直接使用IDEA自带的工具进行打包,打包完成之后直接上传得到的jar包
在文件所在的目录,使用后台启动的方式执行jar包
这里仔细分享一下大家如何后台启动的方式执行Fat jar
在Spring Boot应用中,一个常见的方式是将应用打包为一个fat jar(或uber jar),这样可以方便地在不同环境下部署和运行。下面是如何在后台启动这样的jar包以及查看其日志的步骤:
如何后台启动Spring Boot的fat jar
-
使用nohup命令启动:
- 在Linux或Unix系统中,你可以使用
nohup
命令来启动jar包,以确保即使你关闭了终端或断开了SSH连接,程序仍然可以在后台运行。 - 命令格式如下:
nohup java -jar yourapp.jar > app.log 2>&1 &
- 这条命令做了几件事:
nohup
:确保命令在用户登出后继续运行。java -jar yourapp.jar
:使用Java运行你的jar包。> app.log
:将标准输出重定向到app.log
文件。2>&1
:将标准错误也重定向到标准输出(即app.log
文件)。&
:将进程放到后台执行。
- 在Linux或Unix系统中,你可以使用
-
使用screen或tmux:
- 这些工具可以创建一个虚拟会话,你可以在其中运行应用程序,然后断开连接,应用仍然在后台运行。
- 使用
screen
或tmux
,你可以随时重新连接到这个会话来查看应用的输出。
如何查看日志
-
直接查看日志文件:
- 如果你按照上面的命令启动应用,日志将被写入到
app.log
文件中。 - 你可以使用
tail
命令查看日志文件的内容:tail -f app.log
- 这个命令会持续输出新增到
app.log
中的日志,非常适合实时监控日志。
- 如果你按照上面的命令启动应用,日志将被写入到
-
配置Spring Boot的日志设置:
- 你可以在应用的
application.properties
或application.yml
文件中配置日志文件的路径和级别,例如:logging.file.name=application.log logging.level.root=WARN
- 这样,Spring Boot会自动将日志写入到指定的文件,你也可以用类似
tail -f
的方式查看这个文件。
- 你可以在应用的
这里我采用的是上面nohup命令启动方式。下面简单演示一下启动的命令
启动其中的一个服务
nohup java -jar km-module-base-biz-1.1.1.jar > km-module-base-biz-1.1.1.log 2>&1 &
使用上述命令保证服务可以被重定向到各自的日志中查看。
如何优雅的关闭掉启动的服务
1. 找到运行服务的进程ID(PID)
每个在后台运行的进程都有一个唯一的进程标识号(PID)。你可以使用ps
命令结合grep
来查找与你的服务相关的PID。假设你的服务名为km-module-base-biz-1.1.1.jar
,可以使用如下命令:
ps aux | grep km-module-base-biz-1.1.1.jar
这将列出所有包含服务名的进程。输出通常看起来像这样:
username 1234 0.5 1.2 143036 24508 ? Ssl 10:31 0:01 java -jar km-module-base-biz-1.1.1.jar
在这里,1234
是进程ID。
2. 使用kill
命令终止进程
一旦你找到了进程ID,你可以使用kill
命令来终止它。如果进程不响应普通的kill
命令,你可能需要使用更强力的信号,如SIGKILL
(信号编号9):
kill 1234
或者,如果进程不响应,你可以使用:
kill -9 1234
3. 验证进程是否已关闭
执行kill
命令后,你可以再次运行ps aux | grep km-module-base-biz-1.1.1.jar
来确认进程是否已经被成功终止。
注意事项
- 平稳关闭:如果你的应用支持平稳关闭(graceful shutdown),尝试首先只用
kill
(发送SIGTERM
)来允许应用完成当前任务并释放资源。 - 强制关闭:使用
kill -9
(SIGKILL
)强制关闭进程,应该是最后的手段,因为它不允许进程进行任何清理操作。
下面展示一下服务启动之后的效果,启动之后会有日志的输出。
在Naocs上会出现服务启动的实例。
前端服务演示如何通过Docker+Nginx打包的方式进行执行
前端服务配置地址信息
打包完成之后会得到对应的dist文件夹。
将dist文件夹上传到服务器中的对应位置
编写一下Docker打包文件信息
# 使用官方Nginx镜像作为基础镜像
FROM nginx:alpine
# 将dist目录下的文件复制到容器中的/usr/share/nginx/html目录下
COPY dist/ /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 暴露80端口
# 这里需要注意的是暴露的端口需要和nginx配置的监听端口一致
EXPOSE 8541
# 使用Nginx运行Vue应用
CMD ["nginx", "-g", "daemon off;"]
配置一下nginx中的配置文件信息
server {
listen 8541;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
#这里需要注意的是文件的路径需要是真实有效正确的容器中的目录不然会出现500或者404报错
root /usr/share/nginx/html/;
index index.html index.htm;
try_files $uri &uri/ /index.html;
}
location /api/{
rewrite ^/api/(.*) /$1 break;
proxy_pass http://192.168.0.170:9000;
}
#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 html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
执行打包命令
docker build -t front-project .
执行运行命令
docker run -d -p 8541:8541 front-project
最后就可以执行访问查看最终的页面效果了
注意点总结
- 首先在执行jar之后需要注意服务器中的Java版本需要和本地开发环境的版本保持一致。
- 配置Nacos的时候,如果需要切换不用默认的数据源一定需要在配置文件中指明。
- 在配置Nginx监听的时候需要注意将监听的root地址一定要配置和dockerfile打包地址一致不然会出现报错,如果采用微服务的方式访问需要在配置文件中明确正确配置断言的网关地址。
最后说一句(求关注,别白嫖我)
如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。
求一键三连:点赞、转发、在看。
关注公众号:【舒一笑的架构笔记】,在公众号中回复:面试、代码神器、开发手册、时间管理有超赞的粉丝福利,另外回复:加群,可以跟很多BAT大厂的前辈交流和学习。