优化 PostgreSQL 数据目录初始化和启动逻辑

This commit is contained in:
jxxghp
2025-08-18 20:55:33 +08:00
parent d9ad2630f0
commit 324ad2a87c
3 changed files with 31 additions and 19 deletions

View File

@@ -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 \

View File

@@ -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
# 证书管理

View File

@@ -3,7 +3,7 @@
# Connection and Authentication
listen_addresses = '*'
port = ${DB_POSTGRESQL_PORT:-5432}
port = ${DB_POSTGRESQL_PORT}
max_connections = 100
# Memory Configuration