Skip to content

Docker Compose Doc

trueai-org edited this page Feb 9, 2026 · 14 revisions

Midjourney Proxy Docker Compose 部署文档

基于 Docker Compose 的 Midjourney API 一键部署方案

目录


快速开始

一键部署(推荐)

# 1. 创建项目目录
mkdir -p /root/mjopen && cd /root/mjopen

# 2. 下载 docker-compose.yml
wget -O docker-compose.yml https://raw.githubusercontent.com/trueai-org/midjourney-proxy/main/docker-compose. yml

# 3. 启动服务
docker compose up -d

# 4. 查看日志
docker compose logs -f mjopen

访问服务

  • 管理后台http://服务器IP:8086
  • 默认 Tokenadmin(首次登录后请立即修改)
  • API 文档http://服务器IP:8086/swagger

服务架构

服务列表

服务名 镜像 端口 说明 默认启动
mjopen midjourney-proxy 8086→8080 主程序
mjopen-redis redis:6.2.11 6379 缓存数据库
mjopen-mysql mysql:8.4 3306 关系数据库(默认)
mjopen-mariadb mariadb:11 3306 等价mysql(可选)
mjopen-postgres postgres:18-alpine 5432 PostgreSQL(可选)
mjopen-sqlserver mssql/server:2022 1433 SQL Server(可选)

架构图

┌─────────────────────────────────────────────────┐
│              Midjourney Proxy API               │
│           (http://IP:8086)                      │
└───────────────┬─────────────────────────────────┘
                │
    ┌───────────┴───────────┐
    │                       │
┌───▼────┐            ┌─────▼─────┐
│ Redis  │            │   MySQL   │ (默认)
│ :6379  │            │   :3306   │
└────────┘            └───────────┘
                            │
              ┌─────────────┴─────────────┐
              │                           │
      ┌───────▼────────┐      ┌──────────▼─────────┐
      │  PostgreSQL    │      │    SQL Server      │
      │  :5432 (可选)  │      │    :1433 (可选)    │
      └────────────────┘      └────────────────────┘

环境要求

系统要求

  • 操作系统

    • ✅ CentOS 7+
    • ✅ Ubuntu 18.04+
    • ✅ Debian 10+
    • ✅ RHEL 8+
  • 硬件要求

    • CPU:2 核心及以上
    • 内存:2 GB 及以上(推荐 4 GB)
    • 硬盘:20 GB 及以上

软件要求

  • Docker:>= 20.10
  • Docker Compose:>= 2.0

安装 Docker 和 Docker Compose

# CentOS/RHEL
curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker

# Ubuntu/Debian
curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker

# 验证安装
docker --version
docker compose version

安装部署

方式一:自动部署(推荐)

# 下载一键部署脚本
wget -O docker-upgrade.sh https://raw.githubusercontent.com/trueai-org/midjourney-proxy/main/scripts/docker-upgrade.sh

# 首次安装
bash docker-upgrade.sh

# 以后升级
sh docker-upgrade.sh

方式二:手动部署

1. 创建目录结构

mkdir -p /root/mjopen/{redis,mysql,postgres,sqlserver,logs,data,attachments,ephemeral-attachments}
cd /root/mjopen

2. 创建 docker-compose.yml

# 数据库参数说明
# Buffer Pool(数据库专用服务器 0.7 ~ 0.75)
innodb_buffer_pool_size = 服务器内存 × 0.7

# Log File Size (MariaDB)
innodb_log_file_size = innodb_buffer_pool_size × 0.25

# Redo Log Capacity (MySQL 8.4) 
innodb_redo_log_capacity = innodb_log_file_size × 2
cat > docker-compose.yml << 'EOF'
services:
  # Redis 服务
  mjopen-redis:  
    image: redis:6.2.11
    container_name: mjopen-redis
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - /root/mjopen/redis:/data
    command: redis-server --appendonly yes --requirepass "123456"
    networks:
      - mjopen-network

  # MySQL 服务
  mjopen-mysql: 
    image:  mysql:8.4
    container_name: mjopen-mysql
    restart: always
    ports: 
      - "3306:3306"
    volumes:
      - /root/mjopen/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      TZ: Asia/Shanghai
    networks:
      - mjopen-network
    command: >
      --innodb_buffer_pool_size=1G
      --innodb_redo_log_capacity=512M

  # MariaDB 服务
  mjopen-mariadb: 
    image: mariadb:11
    container_name: mjopen-mariadb
    restart: always
    ports: 
      - "3306:3306"
    volumes:
      - /root/mjopen/mariadb:/var/lib/mysql
    environment: 
      MARIADB_ROOT_PASSWORD: "***"
      TZ: Asia/Shanghai
    networks:
      - mjopen-network
    command: >
      --innodb_buffer_pool_size=1G
      --innodb_log_file_size=256M

  # PostgreSQL 服务(可选,默认不启动)
  mjopen-postgres:  
    image: postgres:18-alpine
    container_name: mjopen-postgres
    restart: always
    ports:
      - "5432:5432"
    volumes: 
      - /root/mjopen/postgresql:/var/lib/postgresql/18/docker
    environment:
      POSTGRES_USER: mj
      POSTGRES_PASSWORD: 123456
      POSTGRES_DB: mjopen
      TZ: Asia/Shanghai
    command: 
      - "postgres"
      - "-c"
      - "shared_buffers=1GB"
    networks:
      - mjopen-network
    profiles:
      - postgres


  # SQL Server 服务(可选,默认不启动)
  mjopen-sqlserver:
    image: mcr.microsoft.com/mssql/server:2022-latest
    container_name: mjopen-sqlserver
    restart: always
    ports:
      - "1433:1433"
    volumes:
      - /root/mjopen/sqlserver:/var/opt/mssql
    environment:
      ACCEPT_EULA: "Y"
      SA_PASSWORD: "Midjourney@123"
      MSSQL_PID: Express
      TZ: Asia/Shanghai
    networks:
      - mjopen-network
    profiles:
      - sqlserver

  # 主程序
  mjopen:  
    image: registry.cn-guangzhou.aliyuncs. com/trueai-org/midjourney-proxy
    container_name: mjopen
    restart: always
    user: root
    ports:
      - "8086:8080"
    volumes:
      - /root/mjopen/logs:/app/logs: rw
      - /root/mjopen/data:/app/data:rw
      - /root/mjopen/attachments:/app/wwwroot/attachments: rw
      - /root/mjopen/ephemeral-attachments:/app/wwwroot/ephemeral-attachments:rw
      - /etc/localtime:/etc/localtime:ro
    environment:
      TZ: Asia/Shanghai
      # CONCURRENT:  10
      # HOST_IP: 10.0.0.1
    networks:
      - mjopen-network
    depends_on:  
      - mjopen-redis
      - mjopen-mysql

networks:
  mjopen-network: 
    driver: bridge

volumes:
  mjopen-pgdata: 
    driver: local

EOF

3. 启动服务

docker compose up -d

4. 验证部署

# 检查服务状态
docker compose ps

# 查看日志
docker compose logs -f mjopen

# 访问管理后台
curl http://localhost:8086

数据库配置

Redis 连接字符串(推荐配置)

mjopen-redis:6379,password=123456,defaultDatabase=1,prefix=mjopen:  

配置步骤:

  1. 登录管理后台:http://IP:8086
  2. 进入 系统设置Redis 配置
  3. 粘贴连接字符串
  4. 保存并重启服务

优势:

  • ✅ 支持分布式部署
  • ✅ 支持实时调整队列数、并发数
  • ✅ 支持重启后继续任务
  • ✅ 自动过 CloudFlare 验证

数据库选择

方案一:MySQL(默认,推荐)

连接字符串:

Data Source=mjopen-mysql;Port=3306;User ID=root;Password=123456;Initial Catalog=mjopen;SslMode=none;AllowPublicKeyRetrieval=true;Min pool size=1;Default Command Timeout=120;Connection Timeout=30

启动命令:

# 默认已启动,无需额外操作
docker compose up -d

适用场景:

  • ✅ 通用场景
  • ✅ 稳定可靠
  • ✅ 生态完善

方案二:PostgreSQL(可选)

连接字符串:

Host=mjopen-postgres;Port=5432;Username=mj;Password=123456;Database=mjopen;ArrayNullabilityMode=Always;Pooling=true;Minimum Pool Size=1

启动命令:

# 停止默认服务
docker compose down

# 启动 PostgreSQL
docker compose --profile postgres up -d

配置步骤:

  1. 登录管理后台
  2. 进入 系统设置数据库配置
  3. 选择 PostgreSQL
  4. 粘贴连接字符串
  5. 保存并重启服务

适用场景:

  • ✅ 高性能需求
  • ✅ 复杂查询
  • ✅ JSON 数据处理

方案三:SQL Server(可选)

连接字符串:

Data Source=mjopen-sqlserver;User Id=sa;Password=Midjourney@123;Initial Catalog=mjopen;Encrypt=True;TrustServerCertificate=True;Pooling=true;Min Pool Size=1

启动命令:

# 停止默认服务
docker compose down

# 启动 SQL Server
docker compose --profile sqlserver up -d

配置步骤:

  1. 登录管理后台
  2. 进入 系统设置数据库配置
  3. 选择 SQL Server
  4. 粘贴连接字符串
  5. 保存并重启服务

适用场景:

  • ✅ Windows 生态集成
  • ✅ 企业级应用
  • ✅ . NET 技术栈

版本说明:

  • Express:免费版,数据库最大 10 GB,适合小型项目
  • Developer:开发版,全功能,仅限非生产环境

数据库对比

数据库 免费 性能 易用性 生态 推荐场景
SQLite ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ < 10万任务
MySQL ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ < 100万任务
PostgreSQL ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ 高性能需求
SQL Server ⚠️ 部分 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ Windows 生态

服务管理

基本操作

# 启动所有服务
docker compose up -d

# 停止所有服务
docker compose down

# 重启所有服务
docker compose restart

# 重启单个服务
docker compose restart mjopen

# 查看服务状态
docker compose ps

# 查看所有服务(包括未启动)
docker compose ps -a

日志管理

# 查看所有服务日志
docker compose logs -f

# 查看指定服务日志
docker compose logs -f mjopen
docker compose logs -f mjopen-mysql
docker compose logs -f mjopen-redis

# 查看最近 100 行日志
docker compose logs --tail=100 mjopen

# 查看指定时间范围日志
docker compose logs --since 2024-01-01 mjopen

Profile 管理(数据库切换)

# 启动 PostgreSQL
docker compose --profile postgres up -d

# 启动 SQL Server
docker compose --profile sqlserver up -d

# 同时启动多个 profile
docker compose --profile postgres --profile sqlserver up -d

# 查看 profile 服务
docker compose --profile postgres ps

# 停止 profile 服务
docker compose --profile postgres down

资源监控

# 查看容器资源使用情况
docker stats

# 查看指定容器
docker stats mjopen mjopen-mysql mjopen-redis

# 查看容器详细信息
docker inspect mjopen

# 查看网络信息
docker network inspect mjopen_mjopen-network

配置说明

环境变量

主程序环境变量

变量名 说明 默认值 示例
TZ 时区设置 - Asia/Shanghai
CONCURRENT 最大并行任务数 不限制 10
HOST_IP 宿主机私网 IP 不配置 10.0.0.1

配置示例:

environment:
  TZ:  Asia/Shanghai
  CONCURRENT:  10
  HOST_IP:  10.0.0.1

Redis 环境变量

command: redis-server --appendonly yes --requirepass "123456"

参数说明:

  • --appendonly yes:启用 AOF 持久化
  • --requirepass "密码":设置 Redis 密码

MySQL 环境变量

environment:
  MYSQL_ROOT_PASSWORD: 123456  # root 密码
  TZ:  Asia/Shanghai            # 时区

PostgreSQL 环境变量

environment:
  POSTGRES_USER: mj           # 用户名
  POSTGRES_PASSWORD: 123456   # 密码
  POSTGRES_DB: mjopen         # 数据库名
  TZ: Asia/Shanghai           # 时区

SQL Server 环境变量

environment:
  ACCEPT_EULA: "Y"                    # 接受许可协议
  SA_PASSWORD: "Midjourney@123"       # 管理员密码
  MSSQL_PID: Express                  # 产品版本
  TZ: Asia/Shanghai                   # 时区

端口映射

服务 容器端口 宿主机端口 说明
主程序 8080 8086 Web 管理界面和 API
Redis 6379 6379 Redis 服务
MySQL 3306 3306 MySQL 数据库
PostgreSQL 5432 5432 PostgreSQL 数据库
SQL Server 1433 1433 SQL Server 数据库

修改端口示例:

ports:
  - "8087:8080"  # 将主程序端口改为 8087

数据卷映射

容器路径 宿主机路径 说明
/app/logs /root/mjopen/logs 应用日志
/app/data /root/mjopen/data 应用数据(包括 SQLite)
/app/wwwroot/attachments /root/mjopen/attachments 绘图文件
/app/wwwroot/ephemeral-attachments /root/mjopen/ephemeral-attachments 临时图片
/data /root/mjopen/redis Redis 数据
/var/lib/mysql /root/mjopen/mysql MySQL 数据
/var/lib/postgresql/18/docker /root/mjopen/postgresql PostgreSQL 数据
/var/opt/mssql /root/mjopen/sqlserver SQL Server 数据

网络配置

networks:
  mjopen-network:
    driver: bridge

特点:

  • ✅ 自动创建,无需手动操作
  • ✅ 容器间通过服务名互相访问
  • ✅ 隔离外部网络,更安全

容器间通信示例:

# 主程序访问 MySQL
mysql://mjopen-mysql:3306

# 主程序访问 Redis
redis://mjopen-redis:6379

常见问题

1. 端口被占用

问题:

Error starting userland proxy: listen tcp 0.0.0.0:8086: bind: address already in use

解决方案:

# 方案一:查找并关闭占用端口的进程
lsof -i: 8086
kill -9 <PID>

# 方案二:修改端口映射
# 编辑 docker-compose.yml
ports:
  - "8087:8080"  # 改为其他端口

2. 容器无法启动

问题:

Error response from daemon: driver failed programming external connectivity

解决方案:

# 重启 Docker 服务
systemctl restart docker

# 重新启动容器
docker compose up -d

3. 数据库连接失败

问题:

Unable to connect to database

解决方案:

# 检查数据库容器状态
docker compose ps mjopen-mysql

# 查看数据库日志
docker compose logs mjopen-mysql

# 验证连接字符串
# 确保使用容器名而非 localhost
Data Source=mjopen-mysql  # ✅ 正确
Data Source=localhost     # ❌ 错误

4. Redis 连接失败

问题:

Redis connection failed

解决方案:

# 检查 Redis 容器
docker compose ps mjopen-redis

# 测试 Redis 连接
docker exec -it mjopen-redis redis-cli -a 123456 ping
# 应该返回 PONG

# 检查连接字符串
mjopen-redis:6379,password=123456,defaultDatabase=1,prefix=mjopen: 

5. 权限问题

问题:

Permission denied

解决方案:

# 修改目录权限
chown -R root:root /root/mjopen
chmod -R 755 /root/mjopen

# 或在 docker-compose.yml 中添加
user: root

6. SQL Server 密码不符合要求

问题:

Password validation failed.  The password does not meet SQL Server password policy requirements

解决方案:

密码必须满足:

  • 至少 8 位
  • 包含大写字母
  • 包含小写字母
  • 包含数字
  • 包含特殊字符
SA_PASSWORD: "Midjourney@123"  # ✅ 符合要求
SA_PASSWORD:  "123456"          # ❌ 不符合

7. 磁盘空间不足

问题:

no space left on device

解决方案:

# 清理 Docker 镜像和容器
docker system prune -a

# 查看磁盘使用情况
df -h

# 清理日志文件
rm -rf /root/mjopen/logs/*

# 清理旧的绘图文件
find /root/mjopen/attachments -mtime +30 -delete

故障排查

诊断命令

# 1. 检查所有服务状态
docker compose ps

# 2. 查看资源使用
docker stats

# 3. 查看完整配置
docker compose config

# 4. 查看网络
docker network ls
docker network inspect mjopen_mjopen-network

# 5. 进入容器调试
docker exec -it mjopen bash
docker exec -it mjopen-mysql bash
docker exec -it mjopen-redis bash

# 6. 查看容器详细信息
docker inspect mjopen

# 7. 测试网络连通性
docker exec -it mjopen ping mjopen-mysql
docker exec -it mjopen ping mjopen-redis

日志分析

# 主程序日志
docker compose logs -f mjopen | grep -i error

# 数据库日志
docker compose logs -f mjopen-mysql | grep -i error

# Redis 日志
docker compose logs -f mjopen-redis

# 导出日志
docker compose logs mjopen > /tmp/mjopen.log

性能调优

MySQL 优化

# 创建自定义 MySQL 配置
cat > /root/mjopen/mysql.cnf << 'EOF'
[mysqld]
max_connections=500
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
EOF

# 在 docker-compose.yml 中添加
volumes:
  - /root/mjopen/mysql. cnf:/etc/mysql/conf.d/custom.cnf:ro

Redis 优化

command: >
  redis-server
  --appendonly yes
  --requirepass "123456"
  --maxmemory 512mb
  --maxmemory-policy allkeys-lru

数据备份

自动备份脚本

# 创建备份脚本
cat > /root/backup-mjopen.sh << 'EOF'
#!/bin/bash

# 配置
BACKUP_DIR="/root/mjopen-backups"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7

# 创建备份目录
mkdir -p ${BACKUP_DIR}

# 备份数据库
echo "开始备份 MySQL..."
docker exec mjopen-mysql mysqldump -uroot -p123456 mjopen > ${BACKUP_DIR}/mysql_${DATE}.sql

echo "开始备份 Redis..."
docker exec mjopen-redis redis-cli -a 123456 --rdb ${BACKUP_DIR}/redis_${DATE}.rdb

# 备份应用数据
echo "开始备份应用数据..."
tar -czf ${BACKUP_DIR}/data_${DATE}.tar.gz /root/mjopen/data

# 删除旧备份
echo "清理旧备份..."
find ${BACKUP_DIR} -name "*.sql" -mtime +${RETENTION_DAYS} -delete
find ${BACKUP_DIR} -name "*.rdb" -mtime +${RETENTION_DAYS} -delete
find ${BACKUP_DIR} -name "*.tar.gz" -mtime +${RETENTION_DAYS} -delete

echo "备份完成!"
EOF

# 设置执行权限
chmod +x /root/backup-mjopen. sh

# 添加定时任务(每天凌晨 2 点执行)
(crontab -l 2>/dev/null; echo "0 2 * * * /root/backup-mjopen.sh") | crontab -

手动备份

MySQL 备份

# 备份
docker exec mjopen-mysql mysqldump -uroot -p123456 mjopen > /root/mjopen_backup_$(date +%Y%m%d).sql

# 恢复
docker exec -i mjopen-mysql mysql -uroot -p123456 mjopen < /root/mjopen_backup_20240101.sql

PostgreSQL 备份

# 备份
docker exec mjopen-postgres pg_dump -U mj mjopen > /root/mjopen_backup_$(date +%Y%m%d).sql

# 恢复
docker exec -i mjopen-postgres psql -U mj mjopen < /root/mjopen_backup_20240101.sql

Redis 备份

# 备份
docker exec mjopen-redis redis-cli -a 123456 SAVE
cp /root/mjopen/redis/dump.rdb /root/mjopen_redis_backup_$(date +%Y%m%d).rdb

# 恢复
docker compose stop mjopen-redis
cp /root/mjopen_redis_backup_20240101.rdb /root/mjopen/redis/dump.rdb
docker compose start mjopen-redis

完整备份

# 备份所有数据
tar -czf mjopen_full_backup_$(date +%Y%m%d).tar.gz /root/mjopen

# 恢复
tar -xzf mjopen_full_backup_20240101.tar.gz -C /

升级维护

升级步骤

# 1. 备份数据(重要!)
sh /root/backup-mjopen. sh

# 2. 拉取最新镜像
docker compose pull

# 3. 停止服务
docker compose down

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

# 5. 查看日志
docker compose logs -f mjopen

# 6. 验证服务
curl http://localhost:8086

回滚操作

# 1. 停止当前版本
docker compose down

# 2. 使用指定版本
# 修改 docker-compose.yml
image: registry.cn-guangzhou.aliyuncs.com/trueai-org/midjourney-proxy:v3.0.0

# 3. 启动服务
docker compose up -d

# 4. 恢复数据(如需要)
# 参考数据备份章节

清理维护

# 清理未使用的镜像
docker image prune -a

# 清理未使用的容器
docker container prune

# 清理未使用的卷
docker volume prune

# 清理未使用的网络
docker network prune

# 一键清理所有未使用资源
docker system prune -a --volumes

# 查看磁盘使用
docker system df

安全建议

1. 修改默认密码

# Redis
command: redis-server --appendonly yes --requirepass "你的强密码"

# MySQL
environment:
  MYSQL_ROOT_PASSWORD: 你的强密码

# PostgreSQL
environment:
  POSTGRES_PASSWORD: 你的强密码

# SQL Server
environment:
  SA_PASSWORD: "你的强密码"

2. 修改管理员 Token

  1. 登录管理后台
  2. 进入 用户管理
  3. 重置 admin 用户的 Token

3. 关闭不必要的端口

# 仅允许主程序对外访问
mjopen:
  ports:
    - "8086:8080"

# 数据库不对外暴露
mjopen-mysql: 
  # ports:  # 注释掉端口映射
  #   - "3306:3306"

4. 启用 HTTPS

# 使用 Nginx 反向代理
# 配置 SSL 证书
# 参考:https://certbot.eff.org/

监控告警

使用 Portainer(可选)

# 安装 Portainer
docker volume create portainer_data
docker run -d -p 9000:9000 -p 8000:8000 --name portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce

# 访问:http://IP:9000

健康检查

# 在 docker-compose.yml 中添加
mjopen:
  healthcheck: 
    test: ["CMD", "curl", "-f", "http://localhost:8080"]
    interval: 30s
    timeout: 10s
    retries: 3
    start_period: 40s

技术支持

官方资源

常用链接


附录

完整配置文件

[docker-compose.yml 完整内容]

连接字符串速查

数据库 连接字符串
Redis mjopen-redis:6379,password=123456,defaultDatabase=1,prefix=mjopen:
MySQL Data Source=mjopen-mysql;Port=3306;User ID=root;Password=123456;Initial Catalog=mjopen;SslMode=none;AllowPublicKeyRetrieval=true;Min pool size=1;Default Command Timeout=120;Connection Timeout=30
PostgreSQL Host=mjopen-postgres;Port=5432;Username=mj;Password=123456;Database=mjopen;ArrayNullabilityMode=Always;Pooling=true;Minimum Pool Size=1
SQL Server Data Source=mjopen-sqlserver;User Id=sa;Password=Midjourney@123;Initial Catalog=mjopen;Encrypt=True;TrustServerCertificate=True;Pooling=true;Min Pool Size=1

端口速查

服务 端口 访问地址
管理后台 8086 http://IP:8086
Redis 6379 redis://IP:6379
MySQL 3306 mysql://IP:3306
PostgreSQL 5432 postgresql://IP:5432
SQL Server 1433 sqlserver://IP:1433

数据库连接字符串汇总

Redis 连接字符串

mjopen-redis:6379,password=123456,defaultDatabase=1,prefix=mjopen: 

参数说明:

  • mjopen-redis - 容器服务名
  • 6379 - Redis 端口
  • password=123456 - Redis 密码
  • defaultDatabase=1 - 默认数据库编号
  • prefix=mjopen: - 键前缀

MySQL 连接字符串

Data Source=mjopen-mysql;Port=3306;User ID=root;Password=123456;Initial Catalog=mjopen;SslMode=none;AllowPublicKeyRetrieval=true;Min pool size=1;Default Command Timeout=120;Connection Timeout=30

参数说明:

  • Data Source=mjopen-mysql - 服务器地址(容器名)
  • Port=3306 - MySQL 端口
  • User ID=root - 用户名
  • Password=123456 - 密码
  • Initial Catalog=mjopen - 数据库名
  • SslMode=none - 不使用 SSL
  • Min pool size=1 - 最小连接池大小

PostgreSQL 连接字符串

Host=mjopen-postgres;Port=5432;Username=mj;Password=123456;Database=mjopen;ArrayNullabilityMode=Always;Pooling=true;Minimum Pool Size=1

参数说明:

  • Host=mjopen-postgres - 服务器地址(容器名)
  • Port=5432 - PostgreSQL 端口
  • Username=mj - 用户名
  • Password=123456 - 密码
  • Database=mjopen - 数据库名
  • ArrayNullabilityMode=Always - 数组空值模式
  • Pooling=true - 启用连接池
  • Minimum Pool Size=1 - 最小连接池大小

SQL Server 连接字符串

Data Source=mjopen-sqlserver;User Id=sa;Password=YourStrong@Passw0rd;Initial Catalog=mjopen;Encrypt=True;TrustServerCertificate=True;Pooling=true;Min Pool Size=1

参数说明:

  • Data Source=mjopen-sqlserver - 服务器地址(容器名)
  • User Id=sa - 用户名(默认管理员)
  • Password=YourStrong@Passw0rd - 密码(必须强密码)
  • Initial Catalog=mjopen - 数据库名
  • Encrypt=True - 启用加密连接
  • TrustServerCertificate=True - 信任服务器证书
  • Pooling=true - 启用连接池
  • Min Pool Size=1 - 最小连接池大小

PostgreSQL 生产环境必须配置的参数

核心必须参数

参数 默认值 问题 建议值
shared_buffers 128MB 太小,性能差 内存的 25%
max_connections 100 可能不够 按需 200-500
effective_cache_size 4GB 影响查询计划 内存的 50-75%
work_mem 4MB 复杂查询慢 64MB-256MB
maintenance_work_mem 64MB VACUUM/索引慢 512MB-1GB

shared_buffers 建议值速查表

服务器内存 shared_buffers shm-size
4GB 1GB 1g
8GB 2GB 2g
16GB 4GB 4g
32GB 8GB 8g
64GB 16GB 16g

⚠️ 注意shared_buffers 超过 8-16GB 后收益递减,一般不超过 16GB

生产环境 Docker Run 示例(16GB 内存服务器)

docker run -d \
  --name bench_postgresql \
  -e POSTGRES_PASSWORD=123456 \
  -e POSTGRES_DB=benchmark_test \
  -p 5432:5432 \
  --shm-size=4g \
  -v /root/mjopen/postgresql:/var/lib/postgresql/18/docker \
  postgres:18-alpine \
  postgres \
    -c shared_buffers=4GB \
    -c effective_cache_size=12GB \
    -c work_mem=128MB \
    -c maintenance_work_mem=1GB \
    -c max_connections=200

按服务器内存的完整配置

8GB 内存:

postgres \
  -c shared_buffers=2GB \
  -c effective_cache_size=6GB \
  -c work_mem=64MB \
  -c maintenance_work_mem=512MB \
  -c max_connections=200

32GB 内存:

postgres \
  -c shared_buffers=8GB \
  -c effective_cache_size=24GB \
  -c work_mem=256MB \
  -c maintenance_work_mem=2GB \
  -c max_connections=300

参数说明

参数 作用
shared_buffers PostgreSQL 专用缓存,存放热数据
effective_cache_size 告诉优化器系统总缓存大小(含 OS 缓存),影响查询计划
work_mem 每个排序/哈希操作的内存,注意:每个连接可能用多个
maintenance_work_mem VACUUM、CREATE INDEX 等维护操作的内存
max_connections 最大并发连接数

💡 简化记忆公式

shared_buffers     = 内存 × 25%
effective_cache_size = 内存 × 75%
work_mem           = 内存 / 连接数 / 4
maintenance_work_mem = 内存 × 5%(最大2GB)

Clone this wiki locally