Skip to content

云服务器部署实战

把前两章的 Docker + Nginx 用到一台真实云服务器上,部署完整商城。

一、购买与初始化服务器

以阿里云/腾讯云为例,选最便宜的轻量应用服务器即可:

建议
地域离用户近(国内选华东/华南)
镜像Ubuntu 22.04 / CentOS Stream 9
配置2C4G 起步(带 MySQL + 后端 + 前端够用)
安全组放行 22(SSH)、80、443

购买后顺手做:改 root 密码为强密码、创建新用户、配置密钥登录(安全)。

bash
# 登录服务器(macOS/Linux 终端、Windows 用 SSH 工具)
ssh root@你的服务器IP

二、装 Docker(一次性)

bash
# 官方脚本安装(国内可配镜像加速)
curl -fsSL https://get.docker.com | bash
sudo usermod -aG docker $USER     # 免 sudo 用 docker
newgrp docker
docker version                     # 验证

Docker 国内拉镜像慢:给 Docker 配置 registry-mirrors(百度"Docker 镜像加速 阿里云/腾讯云")。

三、准备数据库与配置

方案 A:MySQL 也用 Docker(推荐入门)

bash
# 运行 MySQL 容器,挂载数据卷 + 自动执行建表 SQL
docker run -d --name mall-mysql \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=你的强密码 \
  -e MYSQL_DATABASE=mall \
  -e TZ=Asia/Shanghai \
  -v /opt/mall/mysql-data:/var/lib/mysql \
  -v /opt/mall/sql:/docker-entrypoint-initdb.d \
  mysql:8.0

把第 7 部分的建表 SQL 放到 /opt/mall/sql/,容器首次启动自动执行。

方案 B:用云数据库

阿里云 RDS / 腾讯云 CDB 的 MySQL,买最小规格。好处:免运维、自动备份。连接串换成云数据库内网地址。

四、部署后端

把代码传到服务器(git clone 或 scp),然后构建:

bash
cd /opt/mall && git clone 你的仓库地址 .
# 或在本地打包 jar 后 scp 上传
scp server/target/*.jar root@IP:/opt/mall/server-app.jar

用 Docker 运行后端(生产 profile):

bash
docker build -t mall-server ./server

docker run -d --name mall-server \
  -p 8080:8080 \
  -e SPRING_PROFILES_ACTIVE=prod \
  -e SPRING_DATASOURCE_URL="jdbc:mysql://127.0.0.1:3306/mall?serverTimezone=Asia/Shanghai" \
  -e SPRING_DATASOURCE_USERNAME=root \
  -e SPRING_DATASOURCE_PASSWORD=你的密码 \
  mall-server

数据库连接 127.0.0.1:3306 因为 MySQL 容器映射到了宿主机端口。

五、部署前端

本地构建前端产物上传,或服务器上直接构建:

bash
# 方式一:本地构建后上传(推荐,服务器压力小)
cd web-vue && npm install && npm run build
scp -r dist/* root@IP:/var/www/mall-web/

# 方式二:服务器构建(需要 Node)
cd /opt/mall/web-vue && npm install && npm run build
sudo cp -r dist/* /var/www/mall-web/

六、配置宿主机 Nginx

/etc/nginx/conf.d/mall.conf(用第 2 章的配置),核心是 /api/ 代理到 127.0.0.1:8080、静态文件指向 /var/www/mall-web,然后:

bash
sudo apt install nginx -y
sudo nginx -t && sudo systemctl enable nginx && sudo systemctl restart nginx

七、HTTPS + 域名

bash
sudo certbot --nginx -d mall.example.com

域名解析:在域名服务商(如阿里云万网)添加 A 记录指向服务器 IP。

八、防火墙与安全组

bash
# Ubuntu UFW(或云控制台安全组)
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

只开 22/80/443。3306 不要对公网开(数据库只允许本机/内网访问)。

九、上线检查清单

curl http://服务器IP           → 前端页面 HTML
curl http://服务器IP/api/product/list → JSON 数据
curl -I https://域名          → 200 + 证书正常
浏览器走一遍:注册→登录→加购→下单→看订单

上线后必做(安全)

  1. 修改 MySQL root 密码为强密码,绝不使用默认密码。
  2. JWT 密钥、数据库密码通过环境变量注入,不写进 jar。
  3. 后端日志只记必要信息,不打印密码/token。
  4. 定期 docker system prune 清理无用镜像。

十、上线了!然后呢

项目上线只是开始。接下来:

  • 接监控(第 10 部分):日志、错误、慢接口。
  • 接 CI/CD(下一章):以后 git push 自动发布。
  • 做备份:MySQL 定时 mysqldump 到对象存储。

基于 MIT 协议发布,可自由学习与修改