修复错误

This commit is contained in:
yml2213
2026-07-22 13:06:06 +08:00
parent 37635e0d64
commit 56e9f0cdb4
5 changed files with 77 additions and 41 deletions
+6 -1
View File
@@ -7,4 +7,9 @@ OPEN_API_SECRET=sk_source_dev_secret_change_me
OPEN_SIGN_SKEW=300 OPEN_SIGN_SKEW=300
OPEN_API_DEBUG=false OPEN_API_DEBUG=false
LOG_FILE=logs/app.log LOG_FILE=logs/app.log
# For Caddy production, no need for frontend env since built static # Caddy 镜像配置:make docker-up 会先拉取来源镜像并标记成本地运行镜像
CADDY_RUNTIME_IMAGE=affiliate-caddy:2
CADDY_SOURCE_IMAGE=caddy:2
CADDY_FALLBACK_IMAGES=docker.m.daocloud.io/library/caddy:2 registry.cn-hangzhou.aliyuncs.com/caddy/caddy:2
# Caddy 生产环境无需前端运行时环境变量,前端会构建为静态文件
+12 -6
View File
@@ -1,14 +1,20 @@
{ {
# admin off # disable admin if wanted # 如需关闭管理接口,可取消下一行注释 / Uncomment to disable admin API
# admin off
} }
skin.khhao.com { skin.khhao.com {
# Reverse proxy all /api* requests to the backend service encode gzip zstd
reverse_proxy /api* backend:8080
# Serve static files for the frontend (SPA) # API 请求反向代理到后端服务 / Proxy API requests to backend
file_server / { handle /api* {
reverse_proxy backend:8080
}
# 前端 SPA 静态文件 / Serve frontend SPA
handle {
root * /usr/share/caddy root * /usr/share/caddy
try_files {path} {path}/index.html try_files {path} {path}/ /index.html
file_server
} }
} }
+6 -6
View File
@@ -2,26 +2,26 @@ FROM golang:1.26-alpine AS builder
WORKDIR /app WORKDIR /app
# Copy Go files # 复制 Go 依赖文件 / Copy Go dependency files
COPY backend/go.mod backend/go.sum ./ COPY backend/go.mod backend/go.sum ./
RUN go mod download RUN go mod download
COPY backend ./backend COPY backend ./backend
WORKDIR /app/backend WORKDIR /app/backend
# Build the Go binary # 构建 Go 二进制文件 / Build Go binary
RUN CGO_ENABLED=0 GOOS=linux go build -o /server ./cmd/server RUN CGO_ENABLED=0 GOOS=linux go build -o /server ./cmd/server
# Final stage # 最终运行镜像 / Runtime image
FROM alpine:latest FROM alpine:latest
RUN apk --no-cache add ca-certificates tzdata RUN apk --no-cache add ca-certificates tzdata curl
WORKDIR /app WORKDIR /app
COPY --from=builder /server ./server COPY --from=builder /server ./server
# Expose port # 暴露服务端口 / Expose service port
EXPOSE 8080 EXPOSE 8080
# Run the server # 启动服务 / Run server
CMD ["./server"] CMD ["./server"]
+38 -12
View File
@@ -1,4 +1,13 @@
.PHONY: start dev backend frontend install stop docker-build docker-up docker-down .PHONY: start dev backend frontend install stop frontend-build docker-pull-caddy docker-build docker-up docker-down docker-logs
ifneq (,$(wildcard .env))
include .env
export
endif
CADDY_RUNTIME_IMAGE ?= affiliate-caddy:2
CADDY_SOURCE_IMAGE ?= caddy:2
CADDY_FALLBACK_IMAGES ?= docker.m.daocloud.io/library/caddy:2 registry.cn-hangzhou.aliyuncs.com/caddy/caddy:2
# 一键启动前后端(推荐) # 一键启动前后端(推荐)
start dev: start dev:
@@ -20,21 +29,38 @@ stop:
@-lsof -tiTCP:5173 -sTCP:LISTEN | xargs kill 2>/dev/null || true @-lsof -tiTCP:5173 -sTCP:LISTEN | xargs kill 2>/dev/null || true
@echo "已尝试停止 8080 / 5173 端口服务" @echo "已尝试停止 8080 / 5173 端口服务"
# Docker deployment targets # Docker 部署相关命令
docker-build: frontend-build:
@echo "Building backend Docker image..." @echo "构建前端静态文件..."
docker build -f Dockerfile.backend -t affiliate-backend:latest . cd frontend && npm ci && npm run build
@echo "Frontend must be built separately: cd frontend && npm run build"
@echo "Then run: docker compose up -d --build"
docker-up: docker-pull-caddy:
@echo "Starting services with docker-compose (pulls Caddy image if needed)..." @set -e; \
docker compose up -d echo "准备 Caddy 运行镜像: $(CADDY_RUNTIME_IMAGE)"; \
for image in $(CADDY_SOURCE_IMAGE) $(CADDY_FALLBACK_IMAGES); do \
echo "尝试拉取 Caddy 镜像: $$image"; \
if docker pull "$$image"; then \
docker tag "$$image" "$(CADDY_RUNTIME_IMAGE)"; \
echo "已将 $$image 标记为 $(CADDY_RUNTIME_IMAGE)"; \
exit 0; \
fi; \
done; \
echo "错误: Caddy 镜像拉取失败,可在 .env 中设置 CADDY_SOURCE_IMAGE 或 CADDY_FALLBACK_IMAGES"; \
exit 1
docker-build: frontend-build docker-pull-caddy
@echo "构建后端 Docker 镜像..."
docker build -f Dockerfile.backend -t affiliate-backend:latest .
@echo "构建完成,可执行: docker compose up -d --build"
docker-up: frontend-build docker-pull-caddy
@echo "启动 Docker Compose 服务..."
docker compose up -d --build
docker-down: docker-down:
@echo "Stopping and removing containers..." @echo "停止并移除容器..."
docker compose down docker compose down
docker-logs: docker-logs:
@echo "Showing backend and caddy logs..." @echo "查看 backend caddy 日志..."
docker compose logs -f backend caddy docker compose logs -f backend caddy
+9 -10
View File
@@ -1,10 +1,3 @@
# Docker Compose for affiliate_dash (skin.khhao.com)
# In China, Docker Hub pull often hits rate limits on mirrors (e.g. docker.xuanyuan.me).
# Fix: Run "docker pull caddy:2" first, or use a mirror like registry.cn-hangzhou.aliyuncs.com/caddy/caddy:2
# Recommended: manually pull first, then docker compose up -d (no --build for caddy)
version: '3.8'
services: services:
backend: backend:
build: build:
@@ -26,23 +19,29 @@ services:
- backend-data:/data - backend-data:/data
restart: unless-stopped restart: unless-stopped
healthcheck: healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"] test: ["CMD", "curl", "-fsS", "http://localhost:8080/health"]
interval: 30s interval: 30s
timeout: 10s timeout: 10s
retries: 3 retries: 3
caddy: caddy:
image: caddy:2 image: ${CADDY_RUNTIME_IMAGE:-affiliate-caddy:2}
pull_policy: never
ports: ports:
- "80:80" - "80:80"
- "443:443" - "443:443"
volumes: volumes:
- ./Caddyfile:/etc/caddy/Caddyfile - ./Caddyfile:/etc/caddy/Caddyfile
- ./frontend/dist:/usr/share/caddy - ./frontend/dist:/usr/share/caddy
- caddy-data:/data
- caddy-config:/config
command: caddy run --config /etc/caddy/Caddyfile --adapter caddyfile command: caddy run --config /etc/caddy/Caddyfile --adapter caddyfile
depends_on: depends_on:
- backend backend:
condition: service_healthy
restart: unless-stopped restart: unless-stopped
volumes: volumes:
backend-data: backend-data:
caddy-data:
caddy-config: