基于Docker Compose部署Tornado+MySQL+Nginx三层Web应用
一、项目介绍
本项目基于 Docker Compose 部署一个完整的三层 Web 应用环境。
架构:
用户
|
|
Nginx
(80端口)
|
|
Tornado Web应用
(8888端口)
|
|
MySQL数据库
(3306端口)
实现功能:
Docker容器化部署
Docker Compose多服务编排
Nginx反向代理
Tornado Web服务部署
MySQL数据库部署
Docker Volume数据持久化
数据库自动备份
服务日志查看
基础故障排查
二、环境准备
服务器环境
操作系统:
Ubuntu 22.04 LTS
硬件:
CPU > 2核
内存 > 2GB
磁盘 > 20GB
软件环境
检查 Docker:
docker --version
检查 Docker Compose:
docker compose version
如果没有安装:
sudo apt update
sudo apt install docker.io docker-compose-plugin -y
启动 Docker:
sudo systemctl start docker
sudo systemctl enable docker
三、项目目录结构
docker-web-project/
├── app
│ ├── Dockerfile
│ ├── main.py
│ └── requirements.txt
├── nginx
│ └── nginx.conf
├── mysql
│ └── init.sql
├── mysql-backup
├── backup_mysql.sh
├── docker-compose.yml
└── README.md
四、部署流程
1. 获取项目
下载项目:
git clone 项目地址
进入目录:
cd docker-web-project
查看文件:
ls
五、启动服务
执行:
docker compose up -d --build
参数说明:
-d
后台运行
--build
重新构建镜像
查看运行状态:
docker ps
正常状态:
nginx-web
tornado-app
mysql-db
六、查看容器日志
Nginx日志
docker logs nginx-web
Tornado日志
docker logs tornado-app
MySQL日志
docker logs mysql-db
实时查看:
docker logs -f 容器名
七、服务测试
查看服务器IP:
hostname -I
例如:
192.168.146.143
1. 测试首页
访问:
curl http://192.168.146.143/
返回:
{
"status":"success",
"message":"Docker Tornado Running"
}
说明:
Nginx → Tornado
通信正常。
2. 测试数据库连接
访问:
curl http://192.168.146.143/db
返回:
{
"status":"success",
"database":"webdb"
}
说明:
Tornado → MySQL
通信正常。
3. 测试用户接口
访问:
curl http://192.168.146.143/users
返回:
{
"status":"success",
"data":[]
}
八、MySQL数据库管理
进入MySQL容器:
docker exec -it mysql-db bash
登录:
mysql -uroot -p123456
查看数据库:
show databases;
进入数据库:
use webdb;
查看数据表:
show tables;
查询数据:
select * from users;
九、数据持久化
MySQL使用Docker Volume保存数据。
docker-compose.yml:
volumes:
- mysql_data:/var/lib/mysql
查看Volume:
docker volume ls
查看详细信息:
docker volume inspect docker-web-project_mysql_data
作用:
即使删除MySQL容器:
docker rm mysql-db
数据仍然保留。
十、数据库备份
手动备份
执行:
docker exec mysql-db mysqldump \
-uroot -p123456 webdb \
> mysql-backup/webdb.sql
查看:
ls mysql-backup
生成:
webdb.sql
十一、自动备份
备份脚本:
backup_mysql.sh
内容:
#!/bin/bash
DATE=$(date +%F)
docker exec mysql-db mysqldump \
-uroot -p123456 webdb \
> mysql-backup/webdb-$DATE.sql
增加权限:
chmod +x backup_mysql.sh
添加定时任务:
crontab -e
每天凌晨2点执行:
0 2 * * * /home/k8s2/docker-web-project/backup_mysql.sh
查看:
crontab -l
十二、服务停止与删除
停止服务:
docker compose down
重新启动:
docker compose up -d
重新构建:
docker compose up -d --build
十三、故障排查记录
1. MySQL启动失败
错误:
data directory has files in it
原因:MySQL Volume存在旧数据。
解决:
测试环境:
docker compose down
docker volume rm docker-web-project_mysql_data
docker compose up -d
2. Nginx 502 Bad Gateway
排查流程:
查看Nginx:
docker logs nginx-web
查看Tornado:
docker logs tornado-app
确认:
Tornado是否运行。8888端口是否监听。Nginx代理地址是否正确
3. Docker Compose YAML错误
检查:
docker compose config
常见原因:
缩进错误。volumes位置错误。services层级错误
十四、项目总结
通过本项目完成:
Linux服务器部署
Docker容器管理
Docker Compose编排
Nginx反向代理
Python Web服务部署
MySQL数据库维护
Volume数据持久化
自动备份
日志查看
常见故障排查
配置文件:app docs nginx .gitignore backup_ mysql.sh docker-compose.yml
更多推荐
所有评论(0)