添加对 PostgreSQL 的支持

This commit is contained in:
jxxghp
2025-08-18 11:19:17 +08:00
parent e8058c8813
commit b6cf54d57f
23 changed files with 304 additions and 78 deletions

View File

@@ -28,6 +28,9 @@ RUN apt-get update -y \
rsync \
ffmpeg \
nano \
postgresql-client \
postgresql \
postgresql-contrib \
&& dpkg-reconfigure --frontend noninteractive tzdata \
&& \
if [ "$(uname -m)" = "x86_64" ]; \
@@ -84,6 +87,6 @@ RUN cp -f /app/docker/nginx.common.conf /etc/nginx/common.conf \
&& curl -sL "https://github.com/jxxghp/MoviePilot-Resources/archive/refs/heads/main.zip" | busybox unzip -d /tmp - \
&& mv -f /tmp/MoviePilot-Resources-main/resources.v2/* /app/app/helper/ \
&& rm -rf /tmp/*
EXPOSE 3000
EXPOSE 3000 5432
VOLUME [ "${CONFIG_DIR}" ]
ENTRYPOINT [ "/entrypoint.sh" ]

View File

@@ -43,6 +43,16 @@ function load_config_from_app_env() {
["GITHUB_TOKEN"]=""
["MOVIEPILOT_AUTO_UPDATE"]="release"
# database
["DB_TYPE"]="sqlite"
["DB_POSTGRESQL_HOST"]="localhost"
["DB_POSTGRESQL_PORT"]="5432"
["DB_POSTGRESQL_DATABASE"]="moviepilot"
["DB_POSTGRESQL_USERNAME"]="moviepilot"
["DB_POSTGRESQL_PASSWORD"]="moviepilot"
["DB_POSTGRESQL_POOL_SIZE"]="20"
["DB_POSTGRESQL_MAX_OVERFLOW"]="30"
# cert
["ENABLE_SSL"]="false"
["SSL_DOMAIN"]=""
@@ -211,12 +221,70 @@ chown -R moviepilot:moviepilot \
/var/lib/nginx \
/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服务..."
# 使用配置目录下的postgresql子目录作为数据目录
POSTGRESQL_DATA_DIR="${CONFIG_DIR}/postgresql"
POSTGRESQL_LOG_DIR="${CONFIG_DIR}/postgresql/logs"
# 创建PostgreSQL数据目录和日志目录
mkdir -p "${POSTGRESQL_DATA_DIR}" "${POSTGRESQL_LOG_DIR}"
# 初始化PostgreSQL数据目录
if [ ! -f "${POSTGRESQL_DATA_DIR}/postgresql.conf" ]; then
INFO "初始化PostgreSQL数据目录..."
chown -R postgres:postgres "${POSTGRESQL_DATA_DIR}" "${POSTGRESQL_LOG_DIR}"
su - postgres -c "initdb -D '${POSTGRESQL_DATA_DIR}'"
# 配置PostgreSQL
echo "host all all 0.0.0.0/0 md5" >> "${POSTGRESQL_DATA_DIR}/pg_hba.conf"
echo "listen_addresses = '*'" >> "${POSTGRESQL_DATA_DIR}/postgresql.conf"
echo "port = ${DB_POSTGRESQL_PORT:-5432}" >> "${POSTGRESQL_DATA_DIR}/postgresql.conf"
echo "log_destination = 'stderr'" >> "${POSTGRESQL_DATA_DIR}/postgresql.conf"
echo "logging_collector = on" >> "${POSTGRESQL_DATA_DIR}/postgresql.conf"
echo "log_directory = '${POSTGRESQL_LOG_DIR}'" >> "${POSTGRESQL_DATA_DIR}/postgresql.conf"
echo "log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'" >> "${POSTGRESQL_DATA_DIR}/postgresql.conf"
echo "log_rotation_age = 1d" >> "${POSTGRESQL_DATA_DIR}/postgresql.conf"
echo "log_rotation_size = 100MB" >> "${POSTGRESQL_DATA_DIR}/postgresql.conf"
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"
# 等待PostgreSQL启动
INFO "等待PostgreSQL服务启动..."
until su - postgres -c "pg_isready -h localhost -p ${DB_POSTGRESQL_PORT:-5432}"; do
sleep 1
done
# 创建数据库和用户
INFO "创建PostgreSQL数据库和用户..."
su - postgres -c "psql -c \"CREATE USER ${DB_POSTGRESQL_USERNAME:-moviepilot} WITH PASSWORD '${DB_POSTGRESQL_PASSWORD:-moviepilot}';\" 2>/dev/null || true"
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}"
fi
# 证书管理
source /app/docker/cert.sh
# 启动前端nginx服务