diff --git a/docker/Dockerfile b/docker/Dockerfile index 33fd584b..499177a2 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -68,7 +68,6 @@ RUN cp -f /app/docker/nginx.common.conf /etc/nginx/common.conf \ && cp -f /app/docker/update.sh /usr/local/bin/mp_update.sh \ && cp -f /app/docker/entrypoint.sh /entrypoint.sh \ && cp -f /app/docker/docker_http_proxy.conf /etc/nginx/docker_http_proxy.conf \ - && cp -f /app/docker/postgresql/pg_hba.conf /app/docker/postgresql/pg_hba.conf.template \ && chmod +x /entrypoint.sh /usr/local/bin/mp_update.sh \ && mkdir -p ${HOME} \ && groupadd -r moviepilot -g 918 \ @@ -78,6 +77,7 @@ RUN cp -f /app/docker/nginx.common.conf /etc/nginx/common.conf \ && echo 'fs.inotify.max_user_watches=5242880' >> /etc/sysctl.conf \ && echo 'fs.inotify.max_user_instances=5242880' >> /etc/sysctl.conf \ && locale-gen zh_CN.UTF-8 \ + && for cmd in /usr/lib/postgresql/*/bin/*; do ln -sf "$cmd" /usr/local/bin/; done \ && FRONTEND_VERSION=$(sed -n "s/^FRONTEND_VERSION\s*=\s*'\([^']*\)'/\1/p" /app/version.py) \ && curl -sL "https://github.com/jxxghp/MoviePilot-Frontend/releases/download/${FRONTEND_VERSION}/dist.zip" | busybox unzip -d / - \ && mv /dist /public \ diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 996c4266..45440db6 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -222,19 +222,13 @@ chown -R moviepilot:moviepilot \ /var/log/nginx chown moviepilot:moviepilot /etc/hosts /tmp -# 如果使用PostgreSQL,确保数据目录权限正确 -if [ "${DB_TYPE:-sqlite}" = "postgresql" ]; then - POSTGRESQL_DATA_DIR="${CONFIG_DIR}/postgresql" - POSTGRESQL_LOG_DIR="${CONFIG_DIR}/postgresql/logs" - mkdir -p "${POSTGRESQL_DATA_DIR}" "${POSTGRESQL_LOG_DIR}" - chown -R postgres:postgres "${POSTGRESQL_DATA_DIR}" "${POSTGRESQL_LOG_DIR}" -fi # 下载浏览器内核 if [[ "$HTTPS_PROXY" =~ ^https?:// ]] || [[ "$HTTPS_PROXY" =~ ^https?:// ]] || [[ "$PROXY_HOST" =~ ^https?:// ]]; then HTTPS_PROXY="${HTTPS_PROXY:-${https_proxy:-$PROXY_HOST}}" gosu moviepilot:moviepilot playwright install chromium else gosu moviepilot:moviepilot playwright install chromium fi + # 启动PostgreSQL服务 if [ "${DB_TYPE:-sqlite}" = "postgresql" ]; then INFO "→ 启动PostgreSQL服务..." @@ -242,18 +236,29 @@ if [ "${DB_TYPE:-sqlite}" = "postgresql" ]; then # 使用配置目录下的postgresql子目录作为数据目录 POSTGRESQL_DATA_DIR="${CONFIG_DIR}/postgresql" POSTGRESQL_LOG_DIR="${CONFIG_DIR}/postgresql/logs" - - # 创建PostgreSQL数据目录和日志目录 - mkdir -p "${POSTGRESQL_DATA_DIR}" "${POSTGRESQL_LOG_DIR}" + INFO "数据目录: ${POSTGRESQL_DATA_DIR}" + INFO "日志目录: ${POSTGRESQL_LOG_DIR}" # 初始化PostgreSQL数据目录 - if [ ! -f "${POSTGRESQL_DATA_DIR}/postgresql.conf" ]; then + if [ ! -f "${POSTGRESQL_DATA_DIR}/PG_VERSION" ]; then INFO "初始化PostgreSQL数据目录..." + + # 如果目录存在但不为空,清空它 + if [ -d "${POSTGRESQL_DATA_DIR}" ] && [ "$(ls -A "${POSTGRESQL_DATA_DIR}")" ]; then + WARN "数据目录不为空,清空目录..." + rm -rf "${POSTGRESQL_DATA_DIR:?}"/* + fi + + # 确保日志目录存在 + mkdir -p "${POSTGRESQL_LOG_DIR}" + + # 确保目录权限正确 chown -R postgres:postgres "${POSTGRESQL_DATA_DIR}" "${POSTGRESQL_LOG_DIR}" + INFO "执行 initdb 命令..." + INFO "数据目录: ${POSTGRESQL_DATA_DIR}" su - postgres -c "initdb -D '${POSTGRESQL_DATA_DIR}'" # 配置PostgreSQL - # 复制PostgreSQL配置文件 INFO "复制PostgreSQL配置文件..." cp /app/docker/postgresql/pg_hba.conf "${POSTGRESQL_DATA_DIR}/pg_hba.conf" @@ -265,13 +270,20 @@ if [ "${DB_TYPE:-sqlite}" = "postgresql" ]; then chown postgres:postgres "${POSTGRESQL_DATA_DIR}/pg_hba.conf" "${POSTGRESQL_DATA_DIR}/postgresql.conf" chmod 600 "${POSTGRESQL_DATA_DIR}/pg_hba.conf" chmod 644 "${POSTGRESQL_DATA_DIR}/postgresql.conf" + else + INFO "PostgreSQL数据目录已存在,跳过初始化..." fi - # 确保目录权限正确 - chown -R postgres:postgres "${POSTGRESQL_DATA_DIR}" "${POSTGRESQL_LOG_DIR}" - # 启动PostgreSQL服务 - su - postgres -c "pg_ctl -D '${POSTGRESQL_DATA_DIR}' -l '${POSTGRESQL_LOG_DIR}/postgresql.log' start" + if ! su - postgres -c "pg_ctl -D '${POSTGRESQL_DATA_DIR}' -l '${POSTGRESQL_LOG_DIR}/postgresql.log' start"; then + ERROR "PostgreSQL 服务启动失败!" + ERROR "请检查日志文件: ${POSTGRESQL_LOG_DIR}/postgresql.log" + if [ -f "${POSTGRESQL_LOG_DIR}/postgresql.log" ]; then + ERROR "PostgreSQL 日志内容:" + tail -20 "${POSTGRESQL_LOG_DIR}/postgresql.log" + fi + exit 1 + fi # 等待PostgreSQL启动 INFO "等待PostgreSQL服务启动..." @@ -285,7 +297,7 @@ if [ "${DB_TYPE:-sqlite}" = "postgresql" ]; then su - postgres -c "psql -c \"CREATE DATABASE ${DB_POSTGRESQL_DATABASE:-moviepilot} OWNER ${DB_POSTGRESQL_USERNAME:-moviepilot};\" 2>/dev/null || true" su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE ${DB_POSTGRESQL_DATABASE:-moviepilot} TO ${DB_POSTGRESQL_USERNAME:-moviepilot};\" 2>/dev/null || true" - INFO "PostgreSQL服务启动完成,数据目录: ${POSTGRESQL_DATA_DIR}" + INFO "PostgreSQL服务启动完成" fi # 证书管理 diff --git a/docker/postgresql/postgresql.conf.template b/docker/postgresql/postgresql.conf.template index 392e74ed..bb53ce01 100644 --- a/docker/postgresql/postgresql.conf.template +++ b/docker/postgresql/postgresql.conf.template @@ -3,7 +3,7 @@ # Connection and Authentication listen_addresses = '*' -port = ${DB_POSTGRESQL_PORT:-5432} +port = ${DB_POSTGRESQL_PORT} max_connections = 100 # Memory Configuration