Files
oneimg/docker-compose.yml

90 lines
5.6 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 初春图床 oneImg —— 容器编排
#
# 所有可配置项都已在下面的 environment 中暴露,无需进入容器改 /app/.env:
# 直接改本文件,或用同目录的 .env 提供值(docker compose 会自动读取它做变量替换)。
#
# 优先级:本文件的 environment / .env > 容器内自动生成的 /app/.env
# 应用启动时若发现 /app/.env 不存在会自动生成一份模板,但 godotenv 不会覆盖
# 已存在的进程环境变量,因此这里注入的值始终生效,容器内 .env 只用于补全默认值。
#
# 因此容器内 /app/.env 可以完全不管;需要持久化的只有 ./data 与 ./uploads。
services:
oneimg:
build: .
container_name: oneimg
# 也可改用官方镜像:image: onexru/oneimg-oneimg
# 或加载离线包:docker load -i oneImg_Docker_amd64_v3.5.8.tar(镜像名 oneimg:v3.5.8-amd64)
ports:
- "${HOST_BIND_IP:-127.0.0.1}:${HOST_PORT:-8080}:${SERVER_PORT:-8080}"
environment:
# ── 服务器 ───────────────────────────────────────────────
# 监听端口(镜像内 EXPOSE 8080,改动时上面的 ports 会跟着变)
- SERVER_PORT=${SERVER_PORT:-8080}
# 站点对外访问地址。API 返回的图片 URL 固定取自该值,不再反射请求 Host,
# 公网部署必须改成实际地址,如 https://img.example.com
- APP_URL=${APP_URL:-http://localhost:8080}
# 账户页管理员版本信息来源(Gitea 仓库)
- GITEA_URL=${GITEA_URL:-https://git.bytevibe.dev}
- GITEA_REPOSITORY=${GITEA_REPOSITORY:-gary/oneimg}
- GITEA_TOKEN=${GITEA_TOKEN:-}
# ── 数据库 ───────────────────────────────────────────────
# sqlite | mysql | postgres
- DB_TYPE=${DB_TYPE:-sqlite}
- SQLITE_PATH=${SQLITE_PATH:-./data/data.db}
# 用 mysql/postgres 时额外填下面几项(sqlite 下会被忽略)
- DB_HOST=${DB_HOST:-localhost}
- DB_PORT=${DB_PORT:-3306}
- DB_USER=${DB_USER:-root}
- DB_PASSWORD=${DB_PASSWORD:-}
- DB_NAME=${DB_NAME:-oneimg}
# TLS 模式:auto | disable | preferred | required | verify-ca | verify-full
# auto:DB_HOST 为本机/私有地址(如同一 Docker 网络内的 mysql 服务名)时
# preferred(有 TLS 就用、不校验证书),公网地址时 verify-full(校验 CA 与主机名)。
- DB_TLS_MODE=${DB_TLS_MODE:-auto}
# 校验证书时使用的主机名,留空等于 DB_HOST(仅 verify-full)
- DB_TLS_SERVER_NAME=${DB_TLS_SERVER_NAME:-}
# CA 证书路径(仅 verify-ca / verify-full 使用)。留空使用系统 CA;路径错误会拒绝启动。
- DB_CA_CERT_PATH=${DB_CA_CERT_PATH:-./ca/isrgrootx1.pem}
# 旧配置兼容:DB_TLS_MODE 为 auto 时,true 等价于 DB_TLS_MODE=required
- DB_SKIP_CERT_VERIFY=${DB_SKIP_CERT_VERIFY:-false}
- DB_MAX_OPEN_CONNS=${DB_MAX_OPEN_CONNS:-10}
- DB_MAX_IDLE_CONNS=${DB_MAX_IDLE_CONNS:-2}
- DB_CONN_MAX_LIFETIME=${DB_CONN_MAX_LIFETIME:-30m}
- DB_CONN_MAX_IDLE_TIME=${DB_CONN_MAX_IDLE_TIME:-5m}
# ── 上传 ─────────────────────────────────────────────────
- UPLOAD_ROOT=${UPLOAD_ROOT:-./uploads}
# 单文件上限(字节),上限被程序内 32MB 硬限制再收一次
- MAX_FILE_SIZE=${MAX_FILE_SIZE:-10485760}
# SVG 不再作为普通图片接受上传;留空则默认 jpeg/png/gif/webp
- ALLOWED_TYPES=${ALLOWED_TYPES:-image/jpeg,image/png,image/gif,image/webp}
# ── 初始管理员 ───────────────────────────────────────────
- DEFAULT_USER=${DEFAULT_USER:-admin}
# 留空(推荐):仅在首次创建管理员时生成 43 字符随机密码,写入
# ./data/.initial_admin_password(权限 0600),不打印到日志。
# docker compose exec oneimg cat /app/data/.initial_admin_password
# 非空:直接使用该值作为初始密码。
# ⚠ 若同目录 .env 里残留 DEFAULT_PASS=123456,会被注入成管理员密码,请删除该行。
- DEFAULT_PASS=${DEFAULT_PASS:-}
# ── 密钥 ─────────────────────────────────────────────────
# 两者留空都会自动生成并持久化到 ./data 卷,重启进程或重建容器都不会变:
# SESSION_SECRET → data/.session_secret(会话与 OIDC/CAS state 签名)
# CONFIG_SECRET → data/.config_secret (加密存储凭证与图片文件)
# CONFIG_SECRET 一旦启用加密存储就不可更换,否则历史内容无法解密。
# 显式配置时必须 >= 32 字符,否则启动直接失败。
- SESSION_SECRET=${SESSION_SECRET:-}
- CONFIG_SECRET=${CONFIG_SECRET:-}
# ── 反向代理 ─────────────────────────────────────────────
# 逗号分隔 IP/CIDR。仅这些来源的 X-Forwarded-For 会被采信为客户端 IP;
# 留空表示不信任任何代理(直连部署保持留空)。
- TRUSTED_PROXIES=${TRUSTED_PROXIES:-}
volumes:
- ./data:/app/data
- ./uploads:/app/uploads
restart: unless-stopped