mirror of
https://gitee.com/wanwujie/sub2api
synced 2026-04-03 06:52:13 +08:00
Docker named volumes and host bind-mounts may be owned by root, causing "open data/model_pricing.sha256: permission denied" when the container runs as the non-root sub2api user. Add an entrypoint script that fixes /app/data ownership before dropping to sub2api via su-exec. Replace USER directive with the entrypoint approach across all three Dockerfiles and update both GoReleaser configs to include the script in Docker build contexts.
209 lines
6.9 KiB
YAML
209 lines
6.9 KiB
YAML
version: 2
|
||
|
||
project_name: sub2api
|
||
|
||
before:
|
||
hooks:
|
||
- go mod tidy -C backend
|
||
|
||
builds:
|
||
- id: sub2api
|
||
dir: backend
|
||
main: ./cmd/server
|
||
binary: sub2api
|
||
flags:
|
||
- -tags=embed
|
||
env:
|
||
- CGO_ENABLED=0
|
||
goos:
|
||
- linux
|
||
- windows
|
||
- darwin
|
||
goarch:
|
||
- amd64
|
||
- arm64
|
||
ignore:
|
||
- goos: windows
|
||
goarch: arm64
|
||
ldflags:
|
||
- -s -w
|
||
- -X main.Commit={{.Commit}}
|
||
- -X main.Date={{.Date}}
|
||
- -X main.BuildType=release
|
||
|
||
archives:
|
||
- id: default
|
||
format: tar.gz
|
||
name_template: >-
|
||
{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}
|
||
format_overrides:
|
||
- goos: windows
|
||
format: zip
|
||
files:
|
||
- LICENSE*
|
||
- README*
|
||
- deploy/*
|
||
|
||
checksum:
|
||
name_template: 'checksums.txt'
|
||
algorithm: sha256
|
||
|
||
changelog:
|
||
# 禁用自动 changelog,完全使用 tag 消息
|
||
disable: true
|
||
|
||
# Docker images
|
||
dockers:
|
||
# DockerHub images (skipped if DOCKERHUB_USERNAME is 'skip')
|
||
- id: amd64
|
||
goos: linux
|
||
goarch: amd64
|
||
skip_push: '{{ if eq .Env.DOCKERHUB_USERNAME "skip" }}true{{ else }}false{{ end }}'
|
||
image_templates:
|
||
- "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}-amd64"
|
||
dockerfile: Dockerfile.goreleaser
|
||
use: buildx
|
||
extra_files:
|
||
- deploy/docker-entrypoint.sh
|
||
build_flag_templates:
|
||
- "--platform=linux/amd64"
|
||
- "--label=org.opencontainers.image.version={{ .Version }}"
|
||
- "--label=org.opencontainers.image.revision={{ .Commit }}"
|
||
|
||
- id: arm64
|
||
goos: linux
|
||
goarch: arm64
|
||
skip_push: '{{ if eq .Env.DOCKERHUB_USERNAME "skip" }}true{{ else }}false{{ end }}'
|
||
image_templates:
|
||
- "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}-arm64"
|
||
dockerfile: Dockerfile.goreleaser
|
||
use: buildx
|
||
extra_files:
|
||
- deploy/docker-entrypoint.sh
|
||
build_flag_templates:
|
||
- "--platform=linux/arm64"
|
||
- "--label=org.opencontainers.image.version={{ .Version }}"
|
||
- "--label=org.opencontainers.image.revision={{ .Commit }}"
|
||
|
||
# GHCR images (owner must be lowercase)
|
||
- id: ghcr-amd64
|
||
goos: linux
|
||
goarch: amd64
|
||
image_templates:
|
||
- "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}-amd64"
|
||
dockerfile: Dockerfile.goreleaser
|
||
use: buildx
|
||
extra_files:
|
||
- deploy/docker-entrypoint.sh
|
||
build_flag_templates:
|
||
- "--platform=linux/amd64"
|
||
- "--label=org.opencontainers.image.version={{ .Version }}"
|
||
- "--label=org.opencontainers.image.revision={{ .Commit }}"
|
||
- "--label=org.opencontainers.image.source=https://github.com/{{ .Env.GITHUB_REPO_OWNER }}/{{ .Env.GITHUB_REPO_NAME }}"
|
||
|
||
- id: ghcr-arm64
|
||
goos: linux
|
||
goarch: arm64
|
||
image_templates:
|
||
- "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}-arm64"
|
||
dockerfile: Dockerfile.goreleaser
|
||
use: buildx
|
||
extra_files:
|
||
- deploy/docker-entrypoint.sh
|
||
build_flag_templates:
|
||
- "--platform=linux/arm64"
|
||
- "--label=org.opencontainers.image.version={{ .Version }}"
|
||
- "--label=org.opencontainers.image.revision={{ .Commit }}"
|
||
- "--label=org.opencontainers.image.source=https://github.com/{{ .Env.GITHUB_REPO_OWNER }}/{{ .Env.GITHUB_REPO_NAME }}"
|
||
|
||
# Docker manifests for multi-arch support
|
||
docker_manifests:
|
||
# DockerHub manifests (skipped if DOCKERHUB_USERNAME is 'skip')
|
||
- name_template: "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}"
|
||
skip_push: '{{ if eq .Env.DOCKERHUB_USERNAME "skip" }}true{{ else }}false{{ end }}'
|
||
image_templates:
|
||
- "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}-amd64"
|
||
- "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}-arm64"
|
||
|
||
- name_template: "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:latest"
|
||
skip_push: '{{ if eq .Env.DOCKERHUB_USERNAME "skip" }}true{{ else }}false{{ end }}'
|
||
image_templates:
|
||
- "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}-amd64"
|
||
- "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}-arm64"
|
||
|
||
- name_template: "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Major }}.{{ .Minor }}"
|
||
skip_push: '{{ if eq .Env.DOCKERHUB_USERNAME "skip" }}true{{ else }}false{{ end }}'
|
||
image_templates:
|
||
- "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}-amd64"
|
||
- "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}-arm64"
|
||
|
||
- name_template: "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Major }}"
|
||
skip_push: '{{ if eq .Env.DOCKERHUB_USERNAME "skip" }}true{{ else }}false{{ end }}'
|
||
image_templates:
|
||
- "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}-amd64"
|
||
- "{{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}-arm64"
|
||
|
||
# GHCR manifests (owner must be lowercase)
|
||
- name_template: "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}"
|
||
image_templates:
|
||
- "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}-amd64"
|
||
- "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}-arm64"
|
||
|
||
- name_template: "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:latest"
|
||
image_templates:
|
||
- "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}-amd64"
|
||
- "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}-arm64"
|
||
|
||
- name_template: "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Major }}.{{ .Minor }}"
|
||
image_templates:
|
||
- "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}-amd64"
|
||
- "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}-arm64"
|
||
|
||
- name_template: "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Major }}"
|
||
image_templates:
|
||
- "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}-amd64"
|
||
- "ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}-arm64"
|
||
|
||
release:
|
||
github:
|
||
owner: "{{ .Env.GITHUB_REPO_OWNER }}"
|
||
name: "{{ .Env.GITHUB_REPO_NAME }}"
|
||
draft: false
|
||
prerelease: auto
|
||
name_template: "Sub2API {{.Version}}"
|
||
# 完全使用 tag 消息作为 release 内容(通过环境变量传入)
|
||
header: |
|
||
> AI API Gateway Platform - 将 AI 订阅配额分发和管理
|
||
|
||
{{ .Env.TAG_MESSAGE }}
|
||
|
||
footer: |
|
||
|
||
---
|
||
|
||
## 📥 Installation
|
||
|
||
**Docker:**
|
||
```bash
|
||
{{ if ne .Env.DOCKERHUB_USERNAME "skip" -}}
|
||
# Docker Hub
|
||
docker pull {{ .Env.DOCKERHUB_USERNAME }}/sub2api:{{ .Version }}
|
||
|
||
{{ end -}}
|
||
# GitHub Container Registry
|
||
docker pull ghcr.io/{{ .Env.GITHUB_REPO_OWNER_LOWER }}/sub2api:{{ .Version }}
|
||
```
|
||
|
||
**One-line install (Linux):**
|
||
```bash
|
||
curl -sSL https://raw.githubusercontent.com/{{ .Env.GITHUB_REPO_OWNER }}/{{ .Env.GITHUB_REPO_NAME }}/main/deploy/install.sh | sudo bash
|
||
```
|
||
|
||
**Manual download:**
|
||
Download the appropriate archive for your platform from the assets below.
|
||
|
||
## 📚 Documentation
|
||
|
||
- [GitHub Repository](https://github.com/{{ .Env.GITHUB_REPO_OWNER }}/{{ .Env.GITHUB_REPO_NAME }})
|
||
- [Installation Guide](https://github.com/{{ .Env.GITHUB_REPO_OWNER }}/{{ .Env.GITHUB_REPO_NAME }}/blob/main/deploy/README.md)
|