基于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软件环境检查 Dockerdocker --version检查 Docker Composedocker compose version如果没有安装sudo apt update sudo apt install docker.io docker-compose-plugin -y启动 Dockersudo 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-webTornado日志docker logs tornado-appMySQL日志docker logs mysql-db实时查看docker logs -f 容器名七、服务测试查看服务器IPhostname -I例如192.168.146.1431. 测试首页访问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.ymlvolumes: - mysql_data:/var/lib/mysql查看Volumedocker 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 -d2. Nginx 502 Bad Gateway排查流程查看Nginxdocker logs nginx-web查看Tornadodocker 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