九块记账(Docker-Compose)数据库独立部署教程
2025-07-07
9
参考资料
九块记账(Docker-Compose)数据库独立部署教程
九块记账(Docker-Compose)数据库独立部署教程
本教程将指导您如何将九块记账应用的数据库与应用程序完全独立部署在不同的服务器上,实现真正的分离部署。
方案概述
应用服务器:运行九块记账主程序
数据库服务器:独立运行MySQL数据库
两服务器通过内网或安全组规则连接
第一部分:数据库服务器部署
1. 在数据库服务器上操作
mkdir -p /data/jiukuai/mysql/{data,conf} cd /data/jiukuai/mysql
2. 创建自定义MySQL配置文件
conf/my.cnf
文件内容:
[mysqld] bind-address = 0.0.0.0 default_authentication_plugin=mysql_native_password character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci max_connections=1000 [client] default-character-set=utf8mb4
3. 创建docker-compose.yml
version: '3.8' services: mysql: image: mysql:8.0 container_name: jiukuai_mysql environment: MYSQL_ROOT_PASSWORD: your_very_strong_root_password MYSQL_DATABASE: jiukuai_accounting MYSQL_USER: jiukuai_prod_user MYSQL_PASSWORD: your_very_strong_db_password volumes: - ./data:/var/lib/mysql - ./conf/my.cnf:/etc/mysql/conf.d/my.cnf ports: - "3306:3306" restart: unless-stopped command: --max-allowed-packet=64M --innodb-buffer-pool-size=1G networks: - jiukuai_network networks: jiukuai_network: driver: bridge
4. 启动数据库服务
docker-compose up -d
5. 安全配置(重要)
# 进入MySQL容器 docker exec -it jiukuai_mysql mysql -uroot -p # 执行以下SQL命令 CREATE USER 'jiukuai_prod_user'@'应用服务器IP' IDENTIFIED BY 'your_very_strong_db_password'; GRANT ALL PRIVILEGES ON jiukuai_accounting.* TO 'jiukuai_prod_user'@'应用服务器IP'; FLUSH PRIVILEGES;
6. 防火墙配置
# 只允许应用服务器访问数据库端口 iptables -A INPUT -p tcp -s 应用服务器IP --dport 3306 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP
第二部分:应用服务器部署
1. 在应用服务器上操作
mkdir -p /data/jiukuai/app/{data,config} cd /data/jiukuai/app
2. 创建docker-compose.yml
version: '3.8' services: jiukuai-app: image: jiukuai/accounting:latest container_name: jiukuai_app environment: DB_HOST: 数据库服务器IP DB_PORT: 3306 DB_NAME: jiukuai_accounting DB_USER: jiukuai_prod_user DB_PASSWORD: your_very_strong_db_password DB_SSL: "false" # 如果启用SSL改为true volumes: - ./data:/app/data - ./config:/app/config ports: - "8080:8080" restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3
3. 启动应用服务
docker-compose up -d
第三部分:高级配置
1. 数据库连接池配置(可选)
在应用服务器的环境变量中添加:
environment: DB_POOL_MAX: "20" DB_POOL_MIN: "5" DB_CONNECTION_TIMEOUT: "30000"
2. SSL加密连接(推荐)
在数据库服务器生成SSL证书
修改MySQL配置启用SSL
将CA证书复制到应用服务器
在应用配置中启用SSL连接
3. 数据库定期备份
创建备份脚本 /data/jiukuai/mysql/backup.sh
:
#!/bin/bash DATE=$(date +%Y%m%d%H%M) BACKUP_DIR="/data/backups/mysql" mkdir -p $BACKUP_DIR docker exec jiukuai_mysql mysqldump -u jiukuai_prod_user -p'your_very_strong_db_password' jiukuai_accounting | gzip > $BACKUP_DIR/jiukuai_$DATE.sql.gz find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -delete
添加到cronjob:
0 2 * * * /data/jiukuai/mysql/backup.sh
验证部署
检查应用日志:
docker logs jiukuai_app
测试数据库连接:
docker exec jiukuai_app ping 数据库服务器IP
验证数据库连接:
docker exec jiukuai_app telnet 数据库服务器IP 3306
故障排查
连接问题:
检查防火墙规则
验证数据库用户权限
检查网络连通性
性能问题:
监控数据库服务器资源使用情况
优化MySQL配置参数
考虑添加数据库读写分离
数据不一致:
验证备份是否正常
检查应用日志中的数据库错误
注意事项
生产环境务必使用强密码并定期更换
建议启用数据库的SSL加密连接
定期监控数据库性能指标
考虑设置数据库主从复制提高可用性
重要操作前先进行完整备份
这种架构提供了更好的安全性和可扩展性,允许您独立扩展应用服务器或数据库服务器资源。