2025-11-24 11:50:15 +08:00
|
|
|
|
# 校园新闻管理系统 - MySQL数据库镜像
|
|
|
|
|
|
# 基于reInit.sh的数据库初始化方案
|
|
|
|
|
|
FROM mysql:8.0
|
|
|
|
|
|
|
|
|
|
|
|
# 设置环境变量
|
|
|
|
|
|
ENV LANG=C.UTF-8 \
|
|
|
|
|
|
TZ=Asia/Shanghai
|
|
|
|
|
|
|
2025-11-24 12:59:51 +08:00
|
|
|
|
# 注意:MySQL配置有两种方式
|
|
|
|
|
|
# 1. 通过docker-compose.yml的command参数(基础配置)
|
|
|
|
|
|
# 2. 通过挂载my.cnf文件(高级配置,可选)
|
|
|
|
|
|
# docker-compose.yml中可以取消注释: ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
|
2025-11-24 11:50:15 +08:00
|
|
|
|
|
|
|
|
|
|
# 创建SQL目录
|
|
|
|
|
|
RUN mkdir -p /docker-entrypoint-initdb.d /opt/sql
|
|
|
|
|
|
|
|
|
|
|
|
# 复制所有SQL文件(保持目录结构)
|
|
|
|
|
|
COPY schoolNewsServ/.bin/mysql/sql/ /opt/sql/
|
|
|
|
|
|
|
2025-11-24 16:53:17 +08:00
|
|
|
|
# 复制并调整reInit.sh为Docker环境,设置执行权限
|
2025-11-24 11:50:15 +08:00
|
|
|
|
COPY schoolNewsServ/.bin/mysql/sql/reInit.sh /opt/sql/
|
|
|
|
|
|
RUN sed -i 's/DB_HOST="localhost"/DB_HOST="localhost"/' /opt/sql/reInit.sh && \
|
|
|
|
|
|
sed -i 's/DB_PORT="3306"/DB_PORT="3306"/' /opt/sql/reInit.sh && \
|
|
|
|
|
|
sed -i 's/DB_USER="root"/DB_USER="root"/' /opt/sql/reInit.sh && \
|
|
|
|
|
|
sed -i 's/DB_PASSWORD="123456"/DB_PASSWORD="${MYSQL_ROOT_PASSWORD}"/' /opt/sql/reInit.sh && \
|
|
|
|
|
|
sed -i 's/DB_NAME="school_news"/DB_NAME="${MYSQL_DATABASE}"/' /opt/sql/reInit.sh && \
|
2025-11-24 16:53:17 +08:00
|
|
|
|
sed -i 's|LOG_FILE="$SCRIPT_DIR/reInit.log"|LOG_FILE="/tmp/reInit.log"|' /opt/sql/reInit.sh && \
|
|
|
|
|
|
chmod +x /opt/sql/reInit.sh && \
|
|
|
|
|
|
chmod +x /opt/sql/sensitiveData/importSensitiveWords.sh
|
2025-11-24 11:50:15 +08:00
|
|
|
|
# 创建Docker初始化适配脚本
|
|
|
|
|
|
RUN cat > /docker-entrypoint-initdb.d/01-init-database.sh <<'EOF'
|
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
|
echo "校园新闻管理系统 - 数据库初始化"
|
|
|
|
|
|
echo "使用 reInit.sh + Docker配置更新"
|
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
|
|
|
|
|
|
|
# 等待MySQL完全启动
|
|
|
|
|
|
echo "等待MySQL启动..."
|
|
|
|
|
|
until mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" -e "SELECT 1" >/dev/null 2>&1; do
|
|
|
|
|
|
sleep 1
|
|
|
|
|
|
done
|
|
|
|
|
|
echo "MySQL已就绪"
|
|
|
|
|
|
|
|
|
|
|
|
# 切换到SQL目录
|
|
|
|
|
|
cd /opt/sql
|
|
|
|
|
|
|
|
|
|
|
|
# 设置环境变量供reInit.sh使用
|
|
|
|
|
|
export DB_HOST="localhost"
|
|
|
|
|
|
export DB_PORT="3306"
|
|
|
|
|
|
export DB_USER="root"
|
|
|
|
|
|
export DB_PASSWORD="${MYSQL_ROOT_PASSWORD}"
|
|
|
|
|
|
export DB_NAME="${MYSQL_DATABASE}"
|
|
|
|
|
|
export MYSQL_PWD="${MYSQL_ROOT_PASSWORD}"
|
|
|
|
|
|
|
|
|
|
|
|
# Source reInit.sh并调用其初始化函数
|
2025-11-24 16:53:17 +08:00
|
|
|
|
echo "执行数据库初始化(使用reInit.sh)..."
|
2025-11-24 11:50:15 +08:00
|
|
|
|
source reInit.sh
|
|
|
|
|
|
|
|
|
|
|
|
# 调用reInit.sh的核心函数(跳过备份和删除)
|
|
|
|
|
|
execute_init_script # 执行initAll.sql
|
|
|
|
|
|
import_sensitive_words # 导入敏感词
|
2025-11-24 12:59:51 +08:00
|
|
|
|
|
2025-11-24 11:50:15 +08:00
|
|
|
|
# Docker环境特定配置:更新爬虫路径
|
|
|
|
|
|
echo "更新Docker环境配置..."
|
|
|
|
|
|
mysql -uroot "${MYSQL_DATABASE}" <<EOSQL
|
|
|
|
|
|
-- 更新爬虫配置为Docker容器内路径
|
|
|
|
|
|
UPDATE tb_sys_config
|
|
|
|
|
|
SET config_value = '/usr/bin/python3'
|
|
|
|
|
|
WHERE config_key = 'crawler.pythonPath';
|
|
|
|
|
|
|
|
|
|
|
|
UPDATE tb_sys_config
|
|
|
|
|
|
SET config_value = '/app/crawler'
|
|
|
|
|
|
WHERE config_key = 'crawler.basePath';
|
|
|
|
|
|
|
2025-11-24 16:53:17 +08:00
|
|
|
|
UPDATE _db_init_status
|
|
|
|
|
|
SET status = 'success'
|
|
|
|
|
|
WHERE script_name = '01-init-database.sql';
|
2025-11-24 11:50:15 +08:00
|
|
|
|
|
|
|
|
|
|
SELECT '✅ 数据库初始化完成!' AS message;
|
|
|
|
|
|
SELECT '默认用户: admin, 密码: admin123' AS tip;
|
|
|
|
|
|
SELECT '爬虫配置已更新为Docker容器路径' AS docker_config;
|
|
|
|
|
|
EOSQL
|
|
|
|
|
|
|
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
|
echo "✅ 初始化完成!"
|
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
|
|
# 设置执行权限
|
|
|
|
|
|
RUN chmod +x /docker-entrypoint-initdb.d/01-init-database.sh
|
|
|
|
|
|
|
|
|
|
|
|
# 暴露端口
|
|
|
|
|
|
EXPOSE 3306
|
|
|
|
|
|
|
|
|
|
|
|
# 健康检查
|
|
|
|
|
|
HEALTHCHECK --interval=10s --timeout=5s --retries=5 --start-period=30s \
|
|
|
|
|
|
CMD mysqladmin ping -h localhost -p${MYSQL_ROOT_PASSWORD} || exit 1
|