ci: Docker 打包 + Gitea Actions 自动部署到 132
- Dockerfile 四阶段:web/admin 前端构建 → go 静态编译(embed 双前端) → alpine 运行镜像(53MB, 非 root, Asia/Shanghai) - docker-compose.yml:132 部署用,暴露 8090,env_file 读本机 .env,带 healthcheck - .gitea/workflows/deploy.yml:push dev → runner 构建 → docker save|gzip → sshpass scp → 132 load+up → 健康检查 - deploy/nginx-site.sundynix.cn.conf:公网 nginx 反代(穿透回源 site.sundynix.cn) - .env.production.example + deploy/README.md:部署手册(secrets、127:3307 数据库、证书) - 已本地验证:镜像构建通过 + 容器冒烟(健康/用户端/管理端/logo/RSS/登录)全绿 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+36
@@ -0,0 +1,36 @@
|
||||
# ── 1. 构建前端(web 用户端 + admin 管理端)──
|
||||
FROM node:20-alpine AS web
|
||||
WORKDIR /app/web
|
||||
COPY web/package*.json ./
|
||||
RUN npm ci
|
||||
COPY web/ ./
|
||||
RUN npm run build
|
||||
|
||||
FROM node:20-alpine AS admin
|
||||
WORKDIR /app/admin
|
||||
COPY admin/package*.json ./
|
||||
RUN npm ci
|
||||
COPY admin/ ./
|
||||
RUN npm run build
|
||||
|
||||
# ── 2. 编译 Go(embed 两份前端产物)──
|
||||
FROM golang:1.26-alpine AS server
|
||||
WORKDIR /app/server
|
||||
COPY server/go.mod server/go.sum ./
|
||||
RUN go mod download
|
||||
COPY server/ ./
|
||||
# 用真实构建产物替换 embed 占位目录
|
||||
COPY --from=web /app/web/dist ./internal/webfs/dist
|
||||
COPY --from=admin /app/admin/dist ./internal/webfs/admin_dist
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" \
|
||||
-o /sundynix-site ./cmd
|
||||
|
||||
# ── 3. 运行镜像 ──
|
||||
FROM alpine:3.20
|
||||
RUN apk add --no-cache ca-certificates tzdata && \
|
||||
adduser -D -u 10001 app
|
||||
ENV TZ=Asia/Shanghai
|
||||
COPY --from=server /sundynix-site /usr/local/bin/sundynix-site
|
||||
USER app
|
||||
EXPOSE 8090
|
||||
ENTRYPOINT ["/usr/local/bin/sundynix-site"]
|
||||
Reference in New Issue
Block a user