SpringBoot 系列 20:Jar 打包 + Docker 容器化 + Compose 一键部署|服务器上线 零停机平滑升级全教程
文章目录 专栏SpringBoot进阶实战系列 本文独家核心收获一、前言为什么必须掌握标准化部署流程二、SpringBoot项目标准Jar打包Maven零报错2.1 打包前置配置必须配置否则启动报错2.2 多环境配置隔离生产必备2.3 IDEA可视化打包新手推荐2.4 Maven命令行打包服务端通用2.5 打包常见报错与解决方案三、传统服务器Jar部署方案适合小型项目、测试环境3.1 服务器环境准备3.2 上传Jar包至服务器3.3 后台启动Jar包生产基础命令3.4 项目启停、重启、查看日志命令3.5 配置Linux开机自启传统部署终极方案四、Docker容器化部署企业生产标准方案4.1 Docker部署核心优势4.2 服务器Docker环境准备4.3 编写生产级Dockerfile核心4.4 构建Docker镜像4.5 启动Docker容器生产完整命令4.6 Docker常用运维命令五、服务器防火墙与端口放行访问必备六、项目版本更新与平滑上线流程6.1 Jar部署更新流程6.2 Docker容器化更新流程推荐七、生产部署高频故障排查全网最全问题1项目启动成功外网无法访问问题2启动瞬间闪退无报错日志问题3Docker容器启动成功但接口不通问题4服务器重启后项目无法自动启动问题5容器日志时间相差8小时八、两种部署方案优劣对比生产选型指南九、大厂面试高频问答十、全文总结 专栏SpringBoot进阶实战系列文章评级零基础上手本地打包Docker容器化服务器部署开机自启生产避坑运维全流程 适用人群后端初学者、SpringBoot项目上线、个人项目部署、企业生产交付、运维开发 前置基础SpringBoot基础项目、Linux服务器基础操作、Maven基础️ 文章标签#SpringBoot #项目部署 #Jar打包 #Docker部署 #服务器上线 #开机自启 #生产运维 本文独家核心收获两套部署方案全覆盖传统Jar包服务器部署 Docker容器化标准化部署满足测试/生产不同场景零报错打包流程解决Maven打包失败、依赖缺失、配置环境切换、资源导出异常等常见问题生产级Docker规范手把手编写最优Dockerfile、构建镜像、启动容器、端口映射、日志挂载服务器完整上线流程文件上传、环境准备、启动命令、后台运行、开机自启、防火墙配置高频线上故障解决端口占用、启动闪退、日志乱码、容器重启失效、配置不生效、跨域访问失败企业运维规范版本更新、平滑重启、日志查看、服务监控、下线流程全套标准操作面试高频考点容器化优势、Docker与传统部署区别、生产部署规范、上线风险规避一、前言为什么必须掌握标准化部署流程很多开发者只会写代码不会项目上线部署本地运行正常传到服务器就启动失败、端口冲突、配置失效、环境不一致。传统开发部署存在致命痛点本地环境与服务器环境不一致、部署步骤混乱、无法快速迁移、无开机自启、更新项目繁琐。Docker容器化部署是目前企业生产唯一标准一次打包、随处运行、环境隔离、版本可控、迁移便捷、运维成本极低。本文带你从零完成Maven打包Jar → 服务器环境准备 → 传统Jar部署 → Docker容器化部署 → 开机自启 → 运维监控 → 故障排查全闭环流程可直接用于企业项目上线。二、SpringBoot项目标准Jar打包Maven零报错2.1 打包前置配置必须配置否则启动报错SpringBoot项目打包必须在pom.xml中指定打包插件否则无法生成可执行Jar包。buildplugins!-- SpringBoot打包核心插件 --plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion2.7.15/versionexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/build2.2 多环境配置隔离生产必备开发、测试、生产环境配置分离打包时动态切换避免改配置上线出错。项目资源目录新建配置文件application.yml公共配置application-dev.yml本地开发application-prod.yml生产环境pom.xml添加打包环境激活配置profilesprofileiddev/idpropertiesactive.profiledev/active.profile/properties/profileprofileidprod/idpropertiesactive.profileprod/active.profile/properties/profile/profiles2.3 IDEA可视化打包新手推荐打开IDEA右侧Maven面板选择对应项目 → Lifecycle先执行clean清空旧包切换prod生产环境执行package打包打包成功后Jar包位置项目根目录/target/xxx.jar2.4 Maven命令行打包服务端通用# 清空旧文件 生产环境打包mvn clean package-Pprod-Dmaven.test.skiptrue参数说明-P prod激活生产环境配置-Dmaven.test.skiptrue跳过单元测试加速打包2.5 打包常见报错与解决方案打包后无法启动未配置spring-boot-maven-plugin插件依赖缺失报错网络问题导致依赖下载失败重新clean打包配置文件不生效未激活生产环境、配置文件名不规范中文日志乱码IDEA编码统一设置为UTF-8三、传统服务器Jar部署方案适合小型项目、测试环境3.1 服务器环境准备Linux服务器必须提前安装JDK8环境# 查看JDK版本java-version3.2 上传Jar包至服务器在服务器新建项目目录统一存放Jar包和日志# 创建项目目录mkdir-p/home/springboot/project# 创建日志目录mkdir-p/home/springboot/logs通过Xshell、FinalShell、宝塔等工具将本地打好的Jar包上传至/home/springboot/project目录。3.3 后台启动Jar包生产基础命令# 后台启动项目输出日志到指定文件nohupjava-jar/home/springboot/project/demo.jar--spring.profiles.activeprod/home/springboot/logs/project.log21参数详解nohup后台运行关闭终端不停止服务--spring.profiles.activeprod指定生产环境配置 日志路径输出正常日志21输出错误日志末尾持续后台运行3.4 项目启停、重启、查看日志命令# 查看项目进程ps-ef|grepjava# 杀死项目进程重启必备kill-9进程号# 实时查看日志tail-f/home/springboot/logs/project.log# 查看最新100行日志tail-n100/home/springboot/logs/project.log3.5 配置Linux开机自启传统部署终极方案配置服务器重启自动启动项目避免服务器断电后服务失联。编辑开机自启文件vim/etc/rc.local添加启动命令到文件末尾nohupjava-jar/home/springboot/project/demo.jar--spring.profiles.activeprod/home/springboot/logs/project.log21赋予执行权限chmodx /etc/rc.local四、Docker容器化部署企业生产标准方案4.1 Docker部署核心优势环境隔离容器独立环境不污染服务器本机环境一次打包随处运行解决环境不一致问题部署极速秒级启动、版本切换简单运维简单统一启停、日志、重启、迁移方案高可用适配适配微服务、集群部署、CI/CD自动部署4.2 服务器Docker环境准备安装DockerCentOS通用# 安装依赖yuminstall-yyum-utils# 设置docker源yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安装dockeryuminstall-ydocker-ce# 启动dockersystemctl startdocker# 设置开机自启systemctlenabledocker4.3 编写生产级Dockerfile核心在Jar包同级目录新建文件Dockerfile无后缀以下为生产最优模板# 基础JDK8镜像 FROM openjdk:8-jre-alpine # 作者信息 MAINTAINER SpringBoot-Docker # 设置时区解决容器时间错乱问题 ENV TZAsia/Shanghai RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime echo $TZ /etc/timezone # 复制Jar包到容器内 COPY demo.jar /app.jar # 暴露项目端口 EXPOSE 8080 # 启动命令指定生产环境 ENTRYPOINT [java,-jar,/app.jar,--spring.profiles.activeprod]4.4 构建Docker镜像进入Jar包和Dockerfile所在目录执行构建命令# 构建镜像镜像名springboot-demo版本1.0dockerbuild-tspringboot-demo:1.0.注意末尾小数点不能省略代表当前目录4.5 启动Docker容器生产完整命令dockerrun-d\--namespringboot-project\-p8080:8080\--restartalways\-v/home/springboot/logs:/logs\springboot-demo:1.0参数逐行详解-d后台守护进程运行--name指定容器名称方便管理-p 8080:8080端口映射服务器端口:容器端口--restart always容器开机自启、异常自动重启生产必备-v日志目录挂载容器日志持久化到服务器本地4.6 Docker常用运维命令# 查看运行中容器dockerps# 查看容器日志dockerlogs springboot-project# 实时查看日志dockerlogs-fspringboot-project# 重启容器dockerrestart springboot-project# 停止容器dockerstop springboot-project# 删除容器dockerrmspringboot-project# 查看本地镜像dockerimages五、服务器防火墙与端口放行访问必备项目启动成功后外网无法访问99%是防火墙未放行端口。# 放行8080端口firewall-cmd --add-port8080/tcp--permanent# 重启防火墙生效firewall-cmd--reload# 查看已放行端口firewall-cmd --list-ports云服务器阿里云/腾讯云需额外在安全组放行对应端口否则依然无法访问。六、项目版本更新与平滑上线流程6.1 Jar部署更新流程停止旧项目进程kill -9上传新Jar包替换旧包重新执行启动命令查看日志验证启动成功6.2 Docker容器化更新流程推荐停止并删除旧容器上传新Jar包重新构建新版本镜像启动新容器挂载目录不变验证接口可用性完成更新七、生产部署高频故障排查全网最全问题1项目启动成功外网无法访问根因服务器防火墙未放行端口、云服务器安全组未配置、项目绑定localhost解决方案放行端口、配置安全组、yml中监听0.0.0.0问题2启动瞬间闪退无报错日志根因端口占用、JDK版本不匹配、配置文件错误、数据库连接失败解决方案更换端口、统一JDK版本、检查数据库配置、查看详细启动日志问题3Docker容器启动成功但接口不通根因端口映射错误、容器未暴露端口、防火墙拦截解决方案核对EXPOSE端口与映射端口、重启防火墙问题4服务器重启后项目无法自动启动根因传统部署未配置rc.local、Docker未设置restart always解决方案补全开机自启配置容器统一设置自动重启问题5容器日志时间相差8小时根因容器默认时区非东八区解决方案Dockerfile中添加时区配置本文模板已内置八、两种部署方案优劣对比生产选型指南部署方式优点缺点适用场景传统Jar部署操作简单、无需Docker环境、上手快环境污染、迁移麻烦、无隔离、运维繁琐个人项目、测试环境、小型单机项目Docker容器部署环境隔离、统一标准、迁移便捷、高可用、适配集群需要掌握Docker命令、初次部署稍复杂企业生产、微服务、集群项目、正式上线项目九、大厂面试高频问答QDocker容器化部署相比传统Jar部署有什么优势**A**1. 环境隔离容器内部环境与服务器隔离不会污染宿主机2. 标准化交付一次打包所有环境均可运行解决环境不一致问题3. 运维高效启停、重启、迁移、版本回滚极其便捷4. 天然支持集群、微服务、CI/CD自动化部署5. 支持自动重启、自愈服务稳定性更高。Q项目启动成功但外网访问不通排查思路是什么**A**1. 本地服务器curl自测接口是否通2. 检查防火墙端口是否放行3. 检查云服务器安全组策略4. 查看项目是否绑定127.0.0.1本地回环5. Docker部署核对端口映射是否正确。Q生产环境为什么要开启容器自动重启**A**线上服务需要7*24小时运行程序异常崩溃、服务器重启、意外宕机后容器可以自动恢复服务无需人工介入极大提升服务高可用性是生产上线必备配置。十、全文总结本文完整落地SpringBoot项目从零上线全流程覆盖Maven标准打包、多环境配置隔离、传统Jar部署、Docker容器化生产部署、开机自启、端口放行、版本更新、故障排查全套核心能力掌握零报错Jar打包规范解决90%打包异常、配置不生效问题熟练使用传统部署方案适配小型项目快速上线精通企业级Docker容器化部署标准掌握生产Dockerfile模板与运维命令具备项目版本迭代、平滑更新、线上故障快速排查能力理清两种部署方案选型逻辑适配不同业务场景。容器化部署是现代后端开发的必备技能也是企业项目上线的唯一标准本文所有脚本、命令、配置均可直接复制投产使用。 点赞收藏关注专栏持续更新SpringBoot底层原理、生产实战、架构优化、大厂面试硬核干货