外观
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
解决方法:django-app
是指后端镜像。需要按上面步骤先构建后端镜像,再启动。