参考资料

  1. Docker部署dzzoffice+onlyoffice
  2. 可道云KODBOX是一款基于Web的在线文件管理与协作平台
  3. DBERP是一款开源的进销存管理系统
  4. OA协同办公系统是一款基于Web的企业办公自动化软件
  5. firIII是一个轻量级的文件索引和检索系统
  6. 微擎是一款基于PHP+MySQL的开源微信公众号管理系统
  7. 九块记账(Docker-Compose)数据库分离部署教程
  8. Bitrix24是一款集CRM、任务管理、通讯、文档协作等功能于一体的企业级协同办公平台

九块记账(Docker-Compose)完整部署教程

以下是一个详细且包含示例说明的九块记账(Docker-Compose)部署教程,包含数据库独立部署和完整配置说明:


九块记账(Docker-Compose)完整部署教程

一、基础架构说明

[九块记账系统架构]
应用容器 (jiukuai-app:8080)  ←─→  数据库容器 (mysql:3306)
       ↑                               ↑
   宿主机8080端口                  宿主机3306端口

二、完整部署示例

1. 创建项目目录结构

mkdir -p jiukuai/{app,db,config,backup}
tree jiukuai

输出示例:

jiukuai
├── app
│   └── data        # 应用数据持久化
├── db
│   ├── data        # 数据库文件
│   └── init.sql    # 初始化脚本
├── config          # 配置文件
└── backup          # 备份目录

2. 数据库部署 (db/docker-compose.yml)

version: '3.8'

services:
  mysql:
    image: mysql:8.0.33
    container_name: jiukuai_db
    environment:
      MYSQL_ROOT_PASSWORD: "Jiuk@ai!2023R00t"  # 示例密码,实际需更改
      MYSQL_DATABASE: jiukuai_prod
      MYSQL_USER: jiukuai_user
      MYSQL_PASSWORD: "JiuK@ai!2023Db"
    volumes:
      - ./data:/var/lib/mysql
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
      - ./my.cnf:/etc/mysql/conf.d/my.cnf
    ports:
      - "3306:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 3
    networks:
      - jiukuai_net

networks:
  jiukuai_net:
    driver: bridge

3. 数据库配置文件 (db/my.cnf)

[mysqld]
max_connections = 500
innodb_buffer_pool_size = 512M
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
default-authentication-plugin = mysql_native_password
skip-name-resolve

[client]
default-character-set = utf8mb4

4. 数据库初始化脚本 (db/init.sql)

-- 创建专用账户(与docker-compose中的分开)
CREATE USER IF NOT EXISTS 'jiukuai_app'@'%' IDENTIFIED BY 'App@Jiukai!2023';
GRANT ALL PRIVILEGES ON jiukuai_prod.* TO 'jiukuai_app'@'%';
FLUSH PRIVILEGES;

-- 创建核心表(示例)
CREATE TABLE IF NOT EXISTS `accounts` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(100) NOT NULL,
  `balance` DECIMAL(15,2) DEFAULT 0.00,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

5. 应用部署 (app/docker-compose.yml)

version: '3.8'

services:
  jiukuai:
    image: jiukuai/accounting:2.1.0  # 替换为实际镜像
    container_name: jiukuai_web
    environment:
      - DB_HOST=jiukuai_db
      - DB_PORT=3306
      - DB_NAME=jiukuai_prod
      - DB_USER=jiukuai_app
      - DB_PASSWORD=App@Jiukai!2023
      - APP_PORT=8080
      - TZ=Asia/Shanghai
    volumes:
      - ./data:/app/storage
      - ../config:/app/config
    ports:
      - "8080:8080"
    depends_on:
      mysql:
        condition: service_healthy
    networks:
      - jiukuai_net
    restart: unless-stopped

networks:
  jiukuai_net:
    external: true

6. 启动流程

# 1. 先启动数据库
cd jiukuai/db
docker-compose up -d

# 等待数据库初始化完成(约1-2分钟)
docker logs jiukuai_db --tail 50

# 2. 启动应用
cd ../app
docker-compose up -d

# 查看应用日志
docker logs jiukuai_web --follow

三、配置详解

1. 数据库连接配置

# 连接池配置示例(在应用环境变量中添加)
DB_POOL_MAX_ACTIVE=20
DB_POOL_MAX_IDLE=10
DB_POOL_MIN_IDLE=5
DB_POOL_MAX_WAIT=30000

2. 健康检查端点

应用应暴露健康检查接口:

curl http://localhost:8080/health

期望响应:

{
  "status": "UP",
  "db": {
    "status": "UP",
    "latency": 45
  }
}

3. 备份方案

创建 backup/backup.sh

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_FILE="/backup/jiukuai_db_$DATE.sql.gz"

docker exec jiukuai_db mysqldump \
  -u root \
  -p"Jiuk@ai!2023R00t" \
  --single-transaction \
  --routines \
  --triggers \
  jiukuai_prod | gzip > $BACKUP_FILE

# 保留最近7天备份
find /backup -name "*.sql.gz" -mtime +7 -delete

添加到crontab:

0 3 * * * /path/to/backup.sh

四、常见问题解决

1. 连接超时问题

ERROR: JDBC Connection Exception: Connection timed out

解决方案:

# 在应用环境变量中添加
DB_CONNECTION_TIMEOUT: "30000"
DB_SOCKET_TIMEOUT: "60000"

2. 字符集问题

Incorrect string value: '\xE4\xB8\xAD\xE6\x96\x87'

确保数据库配置包含:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

3. 性能优化建议

# 数据库服务添加资源限制
deploy:
  resources:
    limits:
      cpus: '2'
      memory: 2G
    reservations:
      memory: 1G

五、升级流程示例

# 1. 备份数据库
./backup.sh

# 2. 停止旧应用
docker stop jiukuai_web

# 3. 更新镜像
docker pull jiukuai/accounting:2.2.0

# 4. 修改docker-compose.yml中的版本号
sed -i 's/2.1.0/2.2.0/g' app/docker-compose.yml

# 5. 启动新版本
docker-compose up -d

六、监控配置(可选)

在docker-compose中添加Prometheus监控:

services:
  jiukuai:
    # ...原有配置...
    labels:
      - "prometheus.enable=true"
      - "prometheus.port=8081"
      - "prometheus.path=/metrics"

这个部署方案具有以下特点:

  1. 完全分离的数据库容器

  2. 数据持久化配置

  3. 健康检查机制

  4. 自动备份方案

  5. 完整的配置示例

  6. 故障排查指南

实际部署时,请务必:

  • 替换所有示例密码

  • 根据实际服务器资源调整配置参数

  • 在测试环境验证后再上生产