配置(运维层)
配置(运维层)
业务参数(站点名、注册模式、用户组、存储策略、SMTP、机审)全部在管理后台,不在 YAML。
运维层只负责:监听、公网 URL、数据目录、数据库驱动、反代信任、URL 抓取白名单。
优先级
默认值 → YAML(imgli serve -config imgli.yaml)→ 环境变量 IMGLI_*
环境变量覆盖 YAML。
环境变量一览
| 环境变量 | 默认 | 含义 |
|---|---|---|
IMGLI_LISTEN | :8686 | 监听地址 |
IMGLI_BASE_URL | http://localhost:8686 | 生成外链 / 邮件链接的基础地址(生产必改) |
IMGLI_DATA_DIR | ./data(容器内常为 /data) | 本地存储与 SQLite 目录 |
IMGLI_DATABASE_DRIVER | sqlite | sqlite 或 postgres |
IMGLI_DATABASE_DSN | <data_dir>/imgli.db | Postgres 时的 DSN |
IMGLI_TRUST_PROXY | false | 信任 X-Forwarded-For(仅可信反代后开启) |
IMGLI_FETCH_ALLOW | (空) | URL 抓取上传额外放行的 host/CIDR |
YAML 示例
完整示例见仓库 deploy/imgli.example.yaml:
# 优先级: 默认值 → 本文件 → IMGLI_* 环境变量
# 业务参数在管理后台配置,不在这里。
listen: ":8686"
base_url: "https://img.example.com"
data_dir: "/opt/imgli/data"
database:
driver: sqlite # sqlite | postgres
# dsn: "host=127.0.0.1 user=imgli password=change-me dbname=imgli port=5432 sslmode=disable"
trust_proxy: true # 仅在可信反代之后打开
# URL 抓取上传默认拒绝内网;确需放行时追加:
# fetch_allow:
# - "10.0.0.0/8"
启动:
imgli serve -config /opt/imgli/imgli.yaml
SQLite vs PostgreSQL
| SQLite | PostgreSQL | |
|---|---|---|
| 适用 | 单机、小中型、运维简单 | 多实例准备、备份体系已有 PG、规模更大 |
| 路径 | 默认 <data_dir>/imgli.db | 设 driver: postgres + dsn |
| 备份 | 拷贝 db + 对象文件 | pg_dump + 对象文件 |
单二进制两种驱动都内置,无 CGO。
生产最小检查表
-
base_url为用户可见的 https 域名(无尾斜杠习惯以实际生成 URL 为准,按后台预览验证) -
data_dir在独立磁盘/卷,权限仅运行用户可写 -
反代 +
trust_proxy配对正确 - 防火墙只暴露 443(及必要 SSH),不直接裸奔管理端口到公网(若可避免)
- 定期备份 DB + 对象
与业务配置的边界
| 运维层(本文) | 管理后台(admin) |
|---|---|
| listen / base_url / data_dir | 站点名称、注册开关、邀请码 |
| database driver/dsn | 用户组容量、限速、月流量配额 |
| trust_proxy / fetch_allow | 存储策略、CDN 域、SMTP、机审策略 |