添加Docker多阶段构建和GitHub Actions自动打包推送
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
node_modules
|
||||
dist
|
||||
.git
|
||||
.github
|
||||
*.exe
|
||||
*.dll
|
||||
*.so
|
||||
*.dylib
|
||||
*.test
|
||||
*.out
|
||||
backend/verification-platform-backend.exe
|
||||
backend/uploads
|
||||
backend/embedded
|
||||
frontend/node_modules
|
||||
frontend/dist
|
||||
frontend/.nuxt
|
||||
frontend/.output
|
||||
database
|
||||
docs
|
||||
README.md
|
||||
.env
|
||||
.env.*
|
||||
@@ -0,0 +1,56 @@
|
||||
name: Build and Push Docker Image
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
tags:
|
||||
- 'v*'
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
REGISTRY: ghcr.io
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
build-and-push:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Log in to Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Extract metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
tags: |
|
||||
type=ref,event=branch
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=sha,prefix=
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
platforms: linux/amd64,linux/arm64
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
FROM node:20-alpine AS frontend-builder
|
||||
|
||||
WORKDIR /app/frontend
|
||||
|
||||
RUN corepack enable && corepack prepare pnpm@latest --activate
|
||||
|
||||
COPY frontend/package.json frontend/pnpm-lock.yaml ./
|
||||
|
||||
RUN pnpm install --frozen-lockfile
|
||||
|
||||
COPY frontend/ ./
|
||||
|
||||
RUN pnpm build
|
||||
|
||||
FROM golang:1.21-alpine AS backend-builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN apk add --no-cache git
|
||||
|
||||
COPY backend/go.mod backend/go.sum ./
|
||||
|
||||
RUN go mod download
|
||||
|
||||
COPY backend/ ./
|
||||
|
||||
RUN mkdir -p embedded/dist
|
||||
|
||||
COPY --from=frontend-builder /app/frontend/dist ./embedded/dist/
|
||||
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main ./cmd/main.go
|
||||
|
||||
FROM alpine:latest
|
||||
|
||||
RUN apk --no-cache add ca-certificates tzdata
|
||||
|
||||
RUN addgroup -g 1001 -S appgroup && \
|
||||
adduser -u 1001 -S appuser -G appgroup
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=backend-builder /app/main .
|
||||
COPY --from=backend-builder /app/config.yaml .
|
||||
|
||||
RUN mkdir -p /app/uploads && \
|
||||
chown -R appuser:appgroup /app
|
||||
|
||||
USER appuser
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
VOLUME ["/app/uploads"]
|
||||
|
||||
CMD ["./main"]
|
||||
@@ -1,47 +0,0 @@
|
||||
# 后端Dockerfile
|
||||
FROM golang:1.21-alpine AS builder
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 安装必要的包
|
||||
RUN apk add --no-cache git
|
||||
|
||||
# 复制go mod文件
|
||||
COPY go.mod go.sum ./
|
||||
|
||||
# 下载依赖
|
||||
RUN go mod download
|
||||
|
||||
# 复制源代码
|
||||
COPY . .
|
||||
|
||||
# 构建应用
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main ./cmd/main.go
|
||||
|
||||
# 最终镜像
|
||||
FROM alpine:latest
|
||||
|
||||
# 安装ca证书
|
||||
RUN apk --no-cache add ca-certificates
|
||||
|
||||
# 创建非root用户
|
||||
RUN addgroup -g 1001 -S appgroup && \
|
||||
adduser -u 1001 -S appuser -G appgroup
|
||||
|
||||
WORKDIR /root/
|
||||
|
||||
# 从builder阶段复制二进制文件
|
||||
COPY --from=builder /app/main .
|
||||
|
||||
# 更改文件所有者
|
||||
RUN chown appuser:appgroup main
|
||||
|
||||
# 切换到非root用户
|
||||
USER appuser
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 8080
|
||||
|
||||
# 启动应用
|
||||
CMD ["./main"]
|
||||
+10
-25
@@ -1,5 +1,3 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
@@ -7,15 +5,12 @@ services:
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: root123456
|
||||
MYSQL_DATABASE: developer_platform
|
||||
MYSQL_USER: developer
|
||||
MYSQL_PASSWORD: developer123
|
||||
MYSQL_DATABASE: verification_platform
|
||||
ports:
|
||||
- "3306:3306"
|
||||
volumes:
|
||||
- mysql_data:/var/lib/mysql
|
||||
- ./database/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql
|
||||
- ./database/seeds.sql:/docker-entrypoint-initdb.d/02-seeds.sql
|
||||
networks:
|
||||
- developer-network
|
||||
|
||||
@@ -30,45 +25,35 @@ services:
|
||||
networks:
|
||||
- developer-network
|
||||
|
||||
backend:
|
||||
app:
|
||||
build:
|
||||
context: ./backend
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: developer-backend
|
||||
container_name: developer-app
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- APP_ENV=production
|
||||
- DATABASE_HOST=mysql
|
||||
- DATABASE_PORT=3306
|
||||
- DATABASE_NAME=developer_platform
|
||||
- DATABASE_USERNAME=developer
|
||||
- DATABASE_PASSWORD=developer123
|
||||
- DATABASE_NAME=verification_platform
|
||||
- DATABASE_USERNAME=root
|
||||
- DATABASE_PASSWORD=root123456
|
||||
- REDIS_HOST=redis
|
||||
- REDIS_PORT=6379
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
- uploads:/app/uploads
|
||||
depends_on:
|
||||
- mysql
|
||||
- redis
|
||||
networks:
|
||||
- developer-network
|
||||
|
||||
frontend:
|
||||
build:
|
||||
context: ./frontend
|
||||
dockerfile: Dockerfile
|
||||
container_name: developer-frontend
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
depends_on:
|
||||
- backend
|
||||
networks:
|
||||
- developer-network
|
||||
|
||||
volumes:
|
||||
mysql_data:
|
||||
redis_data:
|
||||
uploads:
|
||||
|
||||
networks:
|
||||
developer-network:
|
||||
|
||||
Reference in New Issue
Block a user