Skip to content

Docker 部署

安装Docker

安装Docker

以 Ubuntu Server 22.04 LTS 为例,设置 Docker 的 apt 源

sh
# 信任 Docker 的 GPG 公钥
sudo apt-get update && apt-get install ca-certificates curl gnupg -y
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 添加仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装Docker

sh
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# 安装成功后查看版本
docker version

设置开机启动

sh
systemctl start docker
systemctl enable docker
systemctl status docker

设置镜像加速

配置镜像源

sh
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://docker.m.daocloud.io",
    "https://dislabaiot.xyz"
  ]
}
EOF

# 重启服务生效
sudo systemctl daemon-reload && sudo systemctl restart docker

# 查看配置结果
root@ubuntu22:/etc/docker# docker info
Client: Docker Engine - Community
 Version:    28.1.1
 Context:    default
 ...
 ...
 Registry Mirrors:
  https://docker.1ms.run/
  https://docker.xuanyuan.me/
  https://docker.m.daocloud.io/
  https://dislabaiot.xyz/
 Live Restore Enabled: false

构建后端镜像

上传后端文件

上传前准备工作:《运维手册——后端项目打包》

上传方式一:

使用 WindTerm 等SSH工具登录服务器,进入/opt目录下,上传整个mars-mgn项目后端目录。注意:不要上传venv文件夹。

上传方式二:

可以将自己开发的代码上传到Gitee或Gitlab等私人仓库,再从私人代码仓库中下载代码。SSH登录服务器,执行下面命令

sh
cd /opt && git clone https://gitee.com/zhulj993/mars-mgn.git  # 替换为您的私人仓库地址
# 或者克隆指定分支:git clone -b develop https://gitee.com/zhulj993/mars-mgn.git 
# 如果有代码更新,运行 git pull 拉取新代码

修改配置文件

SSH登录服务器,修改Django项目配置文件:/opt/mars-mgn/mysite/mysite/settings.py

  • 关闭DEBUG:DEBUG = False
  • 修改MySQL数据库配置
    • 地址:DATABASE_HOST = "mars-db"
    • 数据库名称:"NAME": "mars-mgn"
    • 用户名:"USER": "mars-mgn"
    • 密码:"PASSWORD": "123456"
  • 修改Redis配置
    • 地址:REDIS_HOST = "mars-redis"
    • 密码:REDIS_PASSWORD = ""
  • 修改NGINX_BASE_URL配置:NGINX_BASE_URL = "http://<IP>" # <IP>修改为物理服务器的IP

构建后端镜像

构建镜像所需文件(上一步已上传)

  • Dockerfile文件:/opt/mars-mgn/Dockerfile
  • 入口文件:/opt/mars-mgn/entrypoint.sh
sh
# 构建镜像
cd /opt/mars-mgn/ && docker build -t django-app .
# 如果报错,使用: docker build --no-cache -t django-app .

# 查看构建结果
root@ubuntu22:/opt/mars-mgn# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
django-app   latest    c8628bf668db   53 seconds ago   777MB

部署项目

上传前端文件

上传前准备工作:《运维手册——前端项目打包》

使用 WindTerm 等SSH工具登录服务器,进入/opt目录下,新建文件夹mars-mgn-vue并进入

  • 进入前端构建生成的dist-prod目录,然后全选拖动上传到服务器
  • 上传后效果如下
sh
root@ubuntu22:/opt/mars-mgn-vue# ls /opt/mars-mgn-vue
assets  favicon.ico  index.html  logo.gif

创建数据目录并复制文件

sh
# 创建目录,复制文件
mkdir -p /opt/mars-deploy/{nginx,redis,mysql,flags}
cp /opt/mars-mgn/devops/docker/nginx.conf /opt/mars-deploy/nginx/
cp /opt/mars-mgn/docker-compose.yml /opt/mars-deploy/

# 查看结果
root@ubuntu22:/opt/mars-mgn/devops/docker# ll /opt/mars-deploy/
...
-rw-r--r-- 1 root root 1498 Aug  4 10:39 docker-compose.yml
drwxr-xr-x 2 root root 4096 Jul 29 16:25 mysql/
drwxr-xr-x 2 root root 4096 Aug  4 09:47 nginx/
drwxr-xr-x 2 root root 4096 Jul 29 16:25 redis/
root@ubuntu22:/opt/mars-mgn/devops/docker# ll /opt/mars-deploy/nginx/
...
-rw-r--r-- 1 root root  823 Aug  4 10:39 nginx.conf

部署项目

创建并启动所有容器

sh
cd /opt/mars-deploy/ && docker compose up -d
# 或 docker compose up -d --force-recreate

日常运维

docker常用命令

sh
# 查看容器状态
docker ps
# 查看日志
docker logs mars-app
docker logs mars-db
docker logs mars-redis
docker logs mars-nginx
# 查看容器内部进程
docker top mars-app


# 停止容器
cd /opt/mars-deploy/ && docker compose stop
# 启动容器
cd /opt/mars-deploy/ && docker compose start
# 停止并删除所有容器
cd /opt/mars-deploy/ && docker compose down

目录结构

名称目录
后端代码/opt/mars-mgn/
前端代码/opt/mars-mgn-vue/
数据库数据/opt/mars-deploy/mysql/
Redis数据/opt/mars-deploy/redis/
Nginx配置/opt/mars-deploy/nginx/nginx.conf
数据库初始化标记/opt/mars-deploy/flags/.db_initialized
环境初始化标记/opt/mars-deploy/flags/.env_initialized

测试

参考:《生产测试》

排错

启动报错

错误信息:pull access denied for django-app

b4a42f4c8e615369d9bb0e4b34f155ee

解决方法:django-app是指后端镜像。需要按上面步骤先构建后端镜像,再启动。