880 字
4 分钟
部署项目记录
前后端 Docker 部署指南(生产环境优化版)
重要提示
- 所有路径
/home/User/需替换为实际服务器路径- 密码
123456As仅用于测试,生产环境必须修改- 后端 IP
47.xxx.28.xxx需替换为实际服务器公网 IP- 依赖环境:已安装 Docker 和 Docker Compose(未安装需先执行
sudo apt install docker.io docker-compose)
一、数据库部署(MySQL + Redis)
1. MySQL 容器部署
# 拉取镜像sudo docker pull mysql:8.0
# 启动容器(关键参数已优化)sudo docker run -d \ --name mysql \ -p 9506:3306 \ -v /data/mysql:/var/lib/mysql \ # 实际路径替换为服务器目录 -e MYSQL_ROOT_PASSWORD=YourStrongPassword \ # ✅ 必须修改! -e MYSQL_ROOT_HOST='%' \ mysql:8.0验证:
docker exec -it mysql mysql -uroot -pYourStrongPassword # 连接数据库操作:用 Navicat 连接
localhost:9506,创建big_even数据库并导入big_even.sql
2. Redis 容器部署
sudo docker run -d \ --name redis \ -p 6379:6379 \ redis:alpine # 使用轻量镜像二、后端服务部署(Java 应用)
1. 准备 Dockerfile
# DockerfileFROM docker.1ms.run/java:8u111-jdk
WORKDIR /appCOPY bigeven.jar /app/bigeven.jarRUN mkdir -p /app/logsEXPOSE 8080CMD ["java", "-jar", "bigeven.jar"]2. 构建与运行
# 1. 上传打包好的 bigeven.jar 到当前目录# 2. 构建镜像sudo docker build -t bigevent:1.0 .
# 3. 运行容器(关键:端口映射与名称)sudo docker run -d \ --name bigevent \ -p 8456:8080 \ bigevent:1.0验证:访问
http://47.xxx.28.xxx:8456/api/user/login测试接口
三、前端部署(Nginx)
1. 准备目录结构
mkdir -p /data/nginx/{conf,conf.d,log,html}2. 拷贝 Nginx 配置文件(仅首次执行)
# 1. 启动临时容器sudo docker run --name tmp-nginx -d nginx
# 2. 复制配置到宿主机sudo docker cp tmp-nginx:/etc/nginx/nginx.conf /data/nginx/conf/sudo docker cp tmp-nginx:/etc/nginx/conf.d /data/nginx/conf/sudo docker cp tmp-nginx:/usr/share/nginx/html /data/nginx/sudo docker cp tmp-nginx:/var/log/nginx /data/nginx/log/
# 3. 停止临时容器sudo docker stop tmp-nginx && docker rm tmp-nginx3. 启动正式 Nginx 容器
sudo docker run -d \ --name nginx \ -p 8080:80 \ -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /data/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /data/nginx/log:/var/log/nginx \ -v /data/nginx/html:/usr/share/nginx/html \ nginx:alpine # 使用轻量镜像四、关键配置文件
1. Nginx 代理配置(/data/nginx/conf/conf.d/proxy.conf)
server { listen 80; server_name localhost;
# 代理后端服务(IP需替换为实际服务器IP) location /api/ { proxy_pass http://47.xxx.28.xxx:8456; # ✅ 后端服务地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Cookie $http_cookie; client_max_body_size 10m; }
# 前端路由(必须) location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; }}说明:
proxy_pass中的47.xxx.28.xxx:8456是后端容器的访问地址(非容器名,因 Nginx 与后端不在同一网络)- 前端
dist文件需放至/data/nginx/html
五、前端打包与部署
# 1. 前端项目打包cd /your-frontend-projectnpm run build
# 2. 将 dist 文件上传到 Nginx 目录scp -r dist/* User@47.xxx.28.xxx:/data/nginx/html/六、常用运维命令
| 操作 | 命令 |
|---|---|
| 重启 Nginx | sudo docker restart nginx |
| 查看后端日志 | docker logs -f bigevent |
| 重新加载 Nginx 配置 | sudo docker exec nginx nginx -s reload |
| 停止并删除容器 | sudo docker stop nginx && docker rm nginx |
| 检查容器状态 | docker ps -a |
七、关键注意事项(⚠️ 必读)
-
安全加固
- MySQL 密码
123456As→ 必须修改为强密码(如P@ssw0rd!2024) MYSQL_ROOT_HOST='%'→ 生产环境需限制为内网 IP(如MYSQL_ROOT_HOST='192.168.1.0/24')
- MySQL 密码
-
网络配置
- 若后端与 Nginx 在同一 Docker 网络,
proxy_pass应使用容器名(如http://bigevent:8080),而非 IP
- 若后端与 Nginx 在同一 Docker 网络,
-
路径规范
- 所有
/home/User/→ 替换为服务器实际路径(如/data/app/)
- 所有
-
资源优化
- 使用
nginx:alpine和redis:alpine减少镜像体积(比官方版小 50%+)
- 使用
-
端口冲突
- 检查
8080和9506端口是否被占用(sudo netstat -tuln | grep 8080)
- 检查
部署完成验证
- 访问
http://47.xxx.28.xxx:8080→ 应显示前端页面- 尝试登录 → 后端接口应返回
200状态码- 检查 Nginx 日志:
tail -f /data/nginx/log/access.log
本指南已通过 Ubuntu 20.04 + Docker 24.0.7 测试,适用于生产环境。
建议:后续使用docker-compose.yml管理多容器,避免重复命令。