feat: support optional Traefik compose deployment
This commit is contained in:
1 parent
3581f62139
commit
eec7eef96d
5 files changed
+56
-9
No files matched your search
@@ -11,6 +11,24 @@
|
||||
#
|
||||
# 所有项都有内置默认值,全部留空也能启动;下面只列需要按部署环境改的几项。
|
||||
|
||||
# ── 部署入口 ─────────────────────────────────────────────────────
|
||||
# 空值:开发/直连模式,只发布到 127.0.0.1:8080。
|
||||
# 设为 1:加载 Traefik 覆盖配置,不发布宿主机端口。
|
||||
TRAEFIK_ENABLED=
|
||||
COMPOSE_FILE=docker-compose.yml${TRAEFIK_ENABLED:+:docker-compose.traefik.yml}
|
||||
HOST_BIND_IP=127.0.0.1
|
||||
HOST_PORT=8080
|
||||
|
||||
# Traefik 模式设置;TRAEFIK_ENABLED=1 时生效。
|
||||
TRAEFIK_HOST=img.example.com
|
||||
TRAEFIK_NETWORK=frontend
|
||||
TRAEFIK_ENTRYPOINTS=https
|
||||
TRAEFIK_TLS=true
|
||||
TRAEFIK_CERTRESOLVER=cloudflare
|
||||
TRAEFIK_PRIORITY=10
|
||||
# 需在 Traefik file provider 中定义此中间件;没有中间件时请同步移除覆盖文件中的对应 label。
|
||||
TRAEFIK_MIDDLEWARES=real-ip@file
|
||||
|
||||
# ── 必改 ─────────────────────────────────────────────────────────
|
||||
# 站点对外地址:API 返回的图片 URL 固定取自该值(不再反射请求 Host)。
|
||||
# 公网部署必须改成实际地址,否则返回的图片链接不可用。
|
||||
@@ -73,5 +91,6 @@ ALLOWED_TYPES=image/jpeg,image/png,image/gif,image/webp
|
||||
|
||||
# ── 反向代理 ─────────────────────────────────────────────────────
|
||||
# 逗号分隔 IP/CIDR。仅这些来源的 X-Forwarded-For 会被采信为客户端 IP,
|
||||
# Traefik 模式请填写 Traefik 在共享 Docker 网络中的 IP 或子网;
|
||||
# 留空表示不信任任何代理(直连部署保持留空)。
|
||||
TRUSTED_PROXIES=
|
||||
+1
-1
@@ -18,7 +18,7 @@ COPY backend/ ./backend/
|
||||
COPY main.go ./
|
||||
COPY --from=frontend-builder /src/frontend/dist ./frontend/dist
|
||||
COPY --from=frontend-builder /src/frontend/src/assets/fonts ./frontend/src/assets/fonts
|
||||
RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build go build -p 8 -trimpath -ldflags="-s -w" -o /out/oneimg ./main.go
|
||||
RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build go build -p 16 -trimpath -ldflags="-s -w" -o /out/oneimg ./main.go
|
||||
|
||||
FROM alpine:3.23
|
||||
RUN apk add --no-cache ca-certificates tzdata libwebp
|
||||
|
||||
@@ -151,10 +151,14 @@ S3 存储默认启用 **Path Style** 请求(`Endpoint/Bucket/Object`),适
|
||||
```bash
|
||||
git clone https://git.bytevibe.dev/gary/oneimg.git
|
||||
cd oneimg
|
||||
cp .env.example .env
|
||||
docker compose up -d
|
||||
docker compose exec oneimg cat /app/data/.initial_admin_password
|
||||
```
|
||||
|
||||
默认直连模式只在本机发布 `127.0.0.1:8080`,访问 `http://127.0.0.1:8080`。
|
||||
使用 Traefik 时,在 `.env` 设置 `TRAEFIK_ENABLED=1`、`TRAEFIK_HOST` 和公网 `APP_URL`,并确认 Traefik 与 oneImg 共用 `TRAEFIK_NETWORK` 指定的外部网络(默认 `frontend`)。例如网络尚未创建时先执行 `docker network create frontend`,然后运行 `docker compose up -d`。Traefik 模式不会发布宿主机端口;`TRUSTED_PROXIES` 应设为该网络中 Traefik 的 IP 或子网。示例默认挂载 `real-ip@file`,需在 Traefik file provider 中定义;没有该中间件时移除覆盖文件中的对应 label。关闭 Traefik 时清空 `TRAEFIK_ENABLED` 再运行 `docker compose up -d`。
|
||||
|
||||
### Gitea 容器镜像
|
||||
|
||||
仓库内的 Gitea Actions 工作流在推送版本标签(`v*`)或手动触发时构建 `linux/amd64` 和
|
||||
@@ -166,7 +170,7 @@ docker compose exec oneimg cat /app/data/.initial_admin_password
|
||||
默认注册表为 `git.bytevibe.dev`。如需覆盖,设置仓库 Actions Variable `GITEA_REGISTRY`。
|
||||
镜像标签为 `latest` 和触发构建的版本标签,例如 `git.bytevibe.dev/gary/oneimg:latest`。
|
||||
|
||||
启动后访问 `http://localhost:8080`
|
||||
启动后访问 `http://127.0.0.1:8080`
|
||||
|
||||
### Docker 直接运行
|
||||
|
||||
@@ -287,7 +291,14 @@ docker run -d --name oneimg -p 8080:8080 \
|
||||
| `GITEA_URL` | `https://git.bytevibe.dev` | 账户页管理员版本信息使用的 Gitea 地址 |
|
||||
| `GITEA_REPOSITORY` | `gary/oneimg` | 账户页管理员版本信息使用的仓库路径(`所有者/仓库名`) |
|
||||
| `GITEA_TOKEN` | 空 | 私有仓库访问令牌,公开仓库留空 |
|
||||
| `SERVER_PORT` | `8080` | 监听端口 |
|
||||
| `SERVER_PORT` | `8080` | 容器内监听端口 |
|
||||
| `HOST_BIND_IP` / `HOST_PORT` | `127.0.0.1` / `8080` | 直连模式发布到宿主机的地址与端口 |
|
||||
| `TRAEFIK_ENABLED` | 空 | 设为 `1` 加载 Traefik 覆盖配置;空值使用直连模式 |
|
||||
| `TRAEFIK_HOST` | `img.example.com` | Traefik Host 路由域名 |
|
||||
| `TRAEFIK_NETWORK` | `frontend` | Traefik 与 oneImg 共用的外部 Docker 网络 |
|
||||
| `TRAEFIK_ENTRYPOINTS` | `https` | Traefik 入口点 |
|
||||
| `TRAEFIK_CERTRESOLVER` | `cloudflare` | Traefik TLS 证书解析器 |
|
||||
| `TRAEFIK_MIDDLEWARES` | `real-ip@file` | Traefik 中间件列表,需在 Traefik 中预先定义 |
|
||||
| `DB_TYPE` | `sqlite` | `sqlite` / `mysql` / `postgres` |
|
||||
| `DB_TLS_MODE` | `auto` | 数据库 TLS 模式,见上文「数据库」 |
|
||||
| `DEFAULT_USER` / `DEFAULT_PASS` | `admin` / 空 | 初始管理员;`DEFAULT_PASS` 留空则随机生成 |
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
services:
|
||||
oneimg:
|
||||
ports: !reset []
|
||||
expose:
|
||||
- "${SERVER_PORT:-8080}"
|
||||
networks:
|
||||
- frontend
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.oneimg.rule=Host(`${TRAEFIK_HOST:-img.example.com}`)"
|
||||
- "traefik.http.routers.oneimg.entrypoints=${TRAEFIK_ENTRYPOINTS:-https}"
|
||||
- "traefik.http.routers.oneimg.tls=${TRAEFIK_TLS:-true}"
|
||||
- "traefik.http.routers.oneimg.tls.certresolver=${TRAEFIK_CERTRESOLVER:-cloudflare}"
|
||||
- "traefik.http.routers.oneimg.priority=${TRAEFIK_PRIORITY:-10}"
|
||||
- "traefik.http.routers.oneimg.middlewares=${TRAEFIK_MIDDLEWARES:-real-ip@file}"
|
||||
- "traefik.http.routers.oneimg.service=oneimg"
|
||||
- "traefik.http.services.oneimg.loadbalancer.server.port=${SERVER_PORT:-8080}"
|
||||
|
||||
networks:
|
||||
frontend:
|
||||
external: true
|
||||
name: ${TRAEFIK_NETWORK:-frontend}
|
||||
+1
-6
@@ -15,7 +15,7 @@ services:
|
||||
# 也可改用官方镜像:image: onexru/oneimg-oneimg
|
||||
# 或加载离线包:docker load -i oneImg_Docker_amd64_v3.5.8.tar(镜像名 oneimg:v3.5.8-amd64)
|
||||
ports:
|
||||
- "${SERVER_PORT:-8080}:${SERVER_PORT:-8080}"
|
||||
- "${HOST_BIND_IP:-127.0.0.1}:${HOST_PORT:-8080}:${SERVER_PORT:-8080}"
|
||||
environment:
|
||||
# ── 服务器 ───────────────────────────────────────────────
|
||||
# 监听端口(镜像内 EXPOSE 8080,改动时上面的 ports 会跟着变)
|
||||
@@ -86,8 +86,3 @@ services:
|
||||
- ./data:/app/data
|
||||
- ./uploads:/app/uploads
|
||||
restart: unless-stopped
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
Reference in new issue
Block a user