-
-
Notifications
You must be signed in to change notification settings - Fork 119
Docker Compose Doc
trueai-org edited this page Feb 9, 2026
·
14 revisions
基于 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 -
默认 Token:
admin(首次登录后请立即修改) -
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
# 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.shmkdir -p /root/mjopen/{redis,mysql,postgres,sqlserver,logs,data,attachments,ephemeral-attachments}
cd /root/mjopen# 数据库参数说明
# 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
EOFdocker compose up -d# 检查服务状态
docker compose ps
# 查看日志
docker compose logs -f mjopen
# 访问管理后台
curl http://localhost:8086mjopen-redis:6379,password=123456,defaultDatabase=1,prefix=mjopen:
配置步骤:
- 登录管理后台:
http://IP:8086 - 进入 系统设置 → Redis 配置
- 粘贴连接字符串
- 保存并重启服务
优势:
- ✅ 支持分布式部署
- ✅ 支持实时调整队列数、并发数
- ✅ 支持重启后继续任务
- ✅ 自动过 CloudFlare 验证
连接字符串:
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适用场景:
- ✅ 通用场景
- ✅ 稳定可靠
- ✅ 生态完善
连接字符串:
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配置步骤:
- 登录管理后台
- 进入 系统设置 → 数据库配置
- 选择 PostgreSQL
- 粘贴连接字符串
- 保存并重启服务
适用场景:
- ✅ 高性能需求
- ✅ 复杂查询
- ✅ JSON 数据处理
连接字符串:
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配置步骤:
- 登录管理后台
- 进入 系统设置 → 数据库配置
- 选择 SQL Server
- 粘贴连接字符串
- 保存并重启服务
适用场景:
- ✅ 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# 启动 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.1command: redis-server --appendonly yes --requirepass "123456"参数说明:
-
--appendonly yes:启用 AOF 持久化 -
--requirepass "密码":设置 Redis 密码
environment:
MYSQL_ROOT_PASSWORD: 123456 # root 密码
TZ: Asia/Shanghai # 时区environment:
POSTGRES_USER: mj # 用户名
POSTGRES_PASSWORD: 123456 # 密码
POSTGRES_DB: mjopen # 数据库名
TZ: Asia/Shanghai # 时区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问题:
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" # 改为其他端口问题:
Error response from daemon: driver failed programming external connectivity
解决方案:
# 重启 Docker 服务
systemctl restart docker
# 重新启动容器
docker compose up -d问题:
Unable to connect to database
解决方案:
# 检查数据库容器状态
docker compose ps mjopen-mysql
# 查看数据库日志
docker compose logs mjopen-mysql
# 验证连接字符串
# 确保使用容器名而非 localhost
Data Source=mjopen-mysql # ✅ 正确
Data Source=localhost # ❌ 错误问题:
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: 问题:
Permission denied
解决方案:
# 修改目录权限
chown -R root:root /root/mjopen
chmod -R 755 /root/mjopen
# 或在 docker-compose.yml 中添加
user: root问题:
Password validation failed. The password does not meet SQL Server password policy requirements
解决方案:
密码必须满足:
- 至少 8 位
- 包含大写字母
- 包含小写字母
- 包含数字
- 包含特殊字符
SA_PASSWORD: "Midjourney@123" # ✅ 符合要求
SA_PASSWORD: "123456" # ❌ 不符合问题:
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 配置
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:rocommand: >
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 -# 备份
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# 备份
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# 备份
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# Redis
command: redis-server --appendonly yes --requirepass "你的强密码"
# MySQL
environment:
MYSQL_ROOT_PASSWORD: 你的强密码
# PostgreSQL
environment:
POSTGRES_PASSWORD: 你的强密码
# SQL Server
environment:
SA_PASSWORD: "你的强密码"- 登录管理后台
- 进入 用户管理
- 重置 admin 用户的 Token
# 仅允许主程序对外访问
mjopen:
ports:
- "8086:8080"
# 数据库不对外暴露
mjopen-mysql:
# ports: # 注释掉端口映射
# - "3306:3306"# 使用 Nginx 反向代理
# 配置 SSL 证书
# 参考:https://certbot.eff.org/# 安装 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- GitHub:https://github.com/trueai-org/midjourney-proxy
- 官网:https://trueai.org
- 文档:https://github.com/trueai-org/midjourney-proxy/wiki
- QQ 群:565908696
- 在线演示:https://ai.trueai.org
- API 文档:https://ai.trueai.org/swagger
- 问题反馈:https://github.com/trueai-org/midjourney-proxy/issues
[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 |
mjopen-redis:6379,password=123456,defaultDatabase=1,prefix=mjopen:
参数说明:
-
mjopen-redis- 容器服务名 -
6379- Redis 端口 -
password=123456- Redis 密码 -
defaultDatabase=1- 默认数据库编号 -
prefix=mjopen:- 键前缀
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- 最小连接池大小
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- 最小连接池大小
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- 最小连接池大小
| 参数 | 默认值 | 问题 | 建议值 |
|---|---|---|---|
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 | shm-size |
|---|---|---|
| 4GB | 1GB | 1g |
| 8GB | 2GB | 2g |
| 16GB | 4GB | 4g |
| 32GB | 8GB | 8g |
| 64GB | 16GB | 16g |
⚠️ 注意:shared_buffers超过 8-16GB 后收益递减,一般不超过 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=2008GB 内存:
postgres \
-c shared_buffers=2GB \
-c effective_cache_size=6GB \
-c work_mem=64MB \
-c maintenance_work_mem=512MB \
-c max_connections=20032GB 内存:
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)