first commit

This commit is contained in:
2026-09-21 19:21:35 +08:00
commit 6c944c4ffd
2733 changed files with 296956 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
#!/bin/bash
set -e
# 自动创建 external 数据卷(首次部署时)
for vol in changzhou_mysql_data; do
docker volume inspect "$vol" >/dev/null 2>&1 || docker volume create "$vol" >/dev/null
done
# 环境选择:ENV=dev 使用开发规格,否则按 CPU 核数自动检测
if [ "${ENV:-prod}" = "dev" ]; then
SIZE="dev"
else
CPUS=$(nproc)
if [ "$CPUS" -le 16 ]; then
SIZE="16c32g"
else
SIZE="32c64g"
fi
fi
# 镜像源:默认海外,PROXY=cn 切换国内代理
if [ "${PROXY:-overseas}" = "cn" ]; then
export COMPOSE_FILE="docker-compose.yml:docker-compose.cn.yml:docker-compose.${SIZE}.yml"
else
export COMPOSE_FILE="docker-compose.yml:docker-compose.${SIZE}.yml"
fi
echo "Env: ${ENV:-prod} | Size: ${SIZE} | Proxy: ${PROXY:-cn}"
exec docker compose "$@"
+18
View File
@@ -0,0 +1,18 @@
services:
mysql:
build:
args:
MYSQL_CONF: my.cnf.16c32g
shm_size: 128m
mem_limit: 8g
cpus: 4
redis:
volumes:
- ../config/redis/redis.16c32g.conf:/usr/local/etc/redis/redis.conf:ro
mem_limit: 2g
cpus: 1
rabbitmq:
mem_limit: 2g
cpus: 1
+18
View File
@@ -0,0 +1,18 @@
services:
mysql:
build:
args:
MYSQL_CONF: my.cnf.32c64g
shm_size: 256m
mem_limit: 12g
cpus: 8
redis:
volumes:
- ../config/redis/redis.32c64g.conf:/usr/local/etc/redis/redis.conf:ro
mem_limit: 4g
cpus: 2
rabbitmq:
mem_limit: 4g
cpus: 2
+11
View File
@@ -0,0 +1,11 @@
services:
mysql:
build:
args:
MYSQL_BASE_IMAGE: m.daocloud.io/docker.io/mysql:8.0.24
redis:
image: m.daocloud.io/docker.io/redis:latest
rabbitmq:
image: m.daocloud.io/docker.io/rabbitmq:3.9-management
+15
View File
@@ -0,0 +1,15 @@
services:
mysql:
build:
args:
MYSQL_CONF: my.cnf.dev
shm_size: 64m
mem_limit: 1g
redis:
volumes:
- ../config/redis/redis.dev.conf:/usr/local/etc/redis/redis.conf:ro
mem_limit: 256m
rabbitmq:
mem_limit: 256m
+89
View File
@@ -0,0 +1,89 @@
services:
# MySQL 8.0.24 服务
mysql:
build:
context: ../config/mysql
dockerfile: Dockerfile
args:
MYSQL_BASE_IMAGE: mysql:8.0.24
MYSQL_CONF: my.cnf.16c32g
container_name: mysql_db
restart: unless-stopped
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: changzhou
MYSQL_USER: changzhou
MYSQL_PASSWORD: iTSJSPPZM3LSGAPC
ports:
- "127.0.0.1:23306:3306"
volumes:
- mysql_data:/var/lib/mysql
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p123456"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
networks:
- changzhou_app_network
# Redis 服务
redis:
image: redis:latest
container_name: redis_cache
restart: unless-stopped
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- "127.0.0.1:26379:6379"
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
networks:
- changzhou_app_network
# RabbitMQ 3.9 服务
rabbitmq:
image: rabbitmq:3.9-management
container_name: rabbitmq_server
restart: unless-stopped
environment:
RABBITMQ_DEFAULT_USER: skins
RABBITMQ_DEFAULT_PASS: mk
ports:
- "127.0.0.1:25672:5672"
- "127.0.0.1:35672:15672"
command: >
bash -c "rabbitmq-server &
sleep 20 &&
rabbitmqctl add_vhost /skins &&
rabbitmqctl set_permissions -p /skins skins '.*' '.*' '.*' &&
rabbitmqadmin --vhost=/skins --username=skins --password=mk declare queue name=notice_queue durable=true &&
rabbitmqadmin --vhost=/skins --username=skins --password=mk declare queue name=dlk_queue durable=true &&
rabbitmqadmin --vhost=/skins --username=skins --password=mk declare queue name=delivery_queue durable=true &&
wait"
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
networks:
- changzhou_app_network
# 定义数据卷(external 固定卷名,不随目录变化,防止换目录丢数据)
volumes:
mysql_data:
external: true
name: changzhou_mysql_data
# 定义网络
networks:
changzhou_app_network:
driver: bridge
+63
View File
@@ -0,0 +1,63 @@
#!/bin/bash
# MySQL 数据卷迁移脚本
# 将旧自动命名卷的数据复制到 external 卷 changzhou_mysql_data
# 用法:bash migrate-mysql-volume.sh [旧卷名]
# 不传参数时自动检测 docker_changzhou_mysql_data 和 docker-cn_changzhou_mysql_data
set -e
NEW_VOL="changzhou_mysql_data"
IMAGE="mysql:8.0.24"
# 自动检测旧卷名
if [ -n "$1" ]; then
OLD_VOL="$1"
else
for candidate in docker_changzhou_mysql_data docker-cn_changzhou_mysql_data; do
if docker volume inspect "$candidate" >/dev/null 2>&1; then
OLD_VOL="$candidate"
break
fi
done
fi
if [ -z "$OLD_VOL" ]; then
echo "ERROR: 未找到旧数据卷,请手动指定:bash migrate-mysql-volume.sh <旧卷名>"
echo "可用的卷列表:"
docker volume ls --format ' {{.Name}}' | grep -i mysql || echo " (无 mysql 相关卷)"
exit 1
fi
# 检查新卷是否存在
if ! docker volume inspect "$NEW_VOL" >/dev/null 2>&1; then
echo "创建 external 卷: $NEW_VOL"
docker volume create "$NEW_VOL"
fi
# 检查旧卷数据大小
OLD_SIZE=$(docker run --rm -v "${OLD_VOL}:/data" "$IMAGE" sh -c "du -sh /data" 2>/dev/null | awk '{print $1}')
echo "旧卷 $OLD_VOL 数据量: $OLD_SIZE"
# 停掉 MySQL 容器(如果在运行)
if docker inspect mysql_db >/dev/null 2>&1; then
echo "停止 MySQL 容器..."
docker stop mysql_db 2>/dev/null || true
fi
# 清空新卷(避免数据叠加)
echo "清空新卷 $NEW_VOL ..."
docker volume rm "$NEW_VOL" >/dev/null
docker volume create "$NEW_VOL" >/dev/null
# 复制数据
echo "开始迁移 $OLD_VOL -> $NEW_VOL ..."
docker run --rm \
-v "${OLD_VOL}:/from" \
-v "${NEW_VOL}:/to" \
"$IMAGE" \
sh -c "cp -a /from/. /to/"
# 验证
NEW_SIZE=$(docker run --rm -v "${NEW_VOL}:/data" "$IMAGE" sh -c "du -sh /data" 2>/dev/null | awk '{print $1}')
echo "新卷 $NEW_VOL 数据量: $NEW_SIZE"
echo "迁移完成!旧卷 $OLD_VOL 保留作为备份。"