Skip to content

Commit 55575fa

Browse files
committed
build dev image
1 parent 4138fb4 commit 55575fa

File tree

4 files changed

+178
-0
lines changed

4 files changed

+178
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
name: '🚀 Deploy: Development (ECR-Dev)'
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
# 只有当以下路径的文件发生变动时,才触发此工作流
8+
paths:
9+
# Next / App
10+
- 'src/**'
11+
- 'public/**'
12+
# Docker / Infra
13+
- 'docker/**'
14+
- 'docker-compose*.yml'
15+
# Build & Tooling
16+
- 'package.json'
17+
- 'pnpm-lock.yaml'
18+
- 'next.config.*'
19+
- 'redirects.js'
20+
- 'tailwind.config.mjs'
21+
- 'postcss.config.js'
22+
- 'tsconfig.json'
23+
- 'components.json'
24+
- 'scripts/**'
25+
# Env template
26+
- '.env.example'
27+
workflow_dispatch:
28+
29+
permissions:
30+
id-token: write
31+
contents: read
32+
33+
env:
34+
DATABASE_URL: postgres://payload:payload@localhost:5432/payload
35+
AWS_SERVICE_REGION: ${{ vars.AWS_SERVICE_REGION }}
36+
AWS_ACCESS_KEY: ${{ vars.AWS_ACCESS_KEY }}
37+
EMAIL_DEFAULT_FROM_NAME: ${{ vars.EMAIL_DEFAULT_FROM_NAME }}
38+
EMAIL_DEFAULT_FROM_NO_REPLY: ${{ vars.EMAIL_DEFAULT_FROM_NO_REPLY }}
39+
EMAIL_DEFAULT_FROM: ${{ vars.EMAIL_DEFAULT_FROM }}
40+
EMAIL_DEFAULT_REPLY: ${{ vars.EMAIL_DEFAULT_REPLY }}
41+
NEXT_PUBLIC_SERVER_URL: ${{ vars.NEXT_PUBLIC_SERVER_URL }}
42+
S3_ENDPOINT: ${{ vars.S3_ENDPOINT }}
43+
S3_BUCKET: ${{ vars.S3_BUCKET }}
44+
S3_ACCESS_KEY_ID: ${{ vars.S3_ACCESS_KEY_ID }}
45+
S3_REGION: ${{ vars.S3_REGION }}
46+
47+
AWS_ACCESS_SECRET: ${{ secrets.AWS_ACCESS_SECRET }}
48+
CRON_SECRET: ${{ secrets.CRON_SECRET }}
49+
PREVIEW_SECRET: ${{ secrets.PREVIEW_SECRET }}
50+
PAYLOAD_SECRET: ${{ secrets.PAYLOAD_SECRET }}
51+
S3_SECRET: ${{ secrets.S3_SECRET }}
52+
53+
jobs:
54+
build:
55+
runs-on: ubuntu-24.04-arm
56+
environment: production
57+
58+
services:
59+
postgres:
60+
image: postgres:16
61+
ports:
62+
- 5432:5432
63+
env:
64+
POSTGRES_DB: payload
65+
POSTGRES_USER: payload
66+
POSTGRES_PASSWORD: payload
67+
options: >-
68+
--health-cmd="pg_isready -U payload"
69+
--health-interval=10s
70+
--health-timeout=5s
71+
--health-retries=5
72+
73+
steps:
74+
- name: Checkout source
75+
uses: actions/checkout@v4
76+
with:
77+
fetch-depth: 0
78+
persist-credentials: true
79+
80+
- name: Install pnpm
81+
uses: pnpm/action-setup@v4
82+
with:
83+
cache: true
84+
85+
- name: Install dependencies
86+
run: pnpm install --frozen-lockfile
87+
88+
- name: Migrate database
89+
run: pnpm payload migrate
90+
91+
- name: Build Next (standalone)
92+
run: pnpm build
93+
94+
- name: Prepare .dockerignore for Dev
95+
run: |
96+
# 把 node_modules 和所有源码打进去
97+
echo ".git" > .dockerignore
98+
echo ".next/cache" >> .dockerignore
99+
echo "node_modules/.cache" >> .dockerignore
100+
echo "==== Current .dockerignore ===="
101+
cat .dockerignore
102+
103+
- name: Configure AWS credentials (OIDC)
104+
uses: aws-actions/configure-aws-credentials@v4
105+
with:
106+
role-to-assume: arn:aws:iam::022948663888:role/github-ci-role
107+
aws-region: us-east-1 # Public ECR 固定这个
108+
109+
- name: Log in to Amazon ECR Public
110+
uses: aws-actions/amazon-ecr-login@v2
111+
with:
112+
registry-type: public
113+
114+
- name: Build and Push Docker image (ARM64 only)
115+
run: |
116+
REGISTRY=public.ecr.aws/umcai/xc2f/payload
117+
docker build -f docker/Dockerfile.dev -t $REGISTRY:dev-latest .
118+
docker push $REGISTRY:dev-latest

docker-compose.dev.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
services:
2+
payload:
3+
restart: always
4+
image: public.ecr.aws/umcai/xc2f/payload:dev-latest
5+
container_name: payload
6+
ports:
7+
- '3000:3000'
8+
depends_on:
9+
- postgres
10+
env_file:
11+
- .env
12+
13+
postgres:
14+
restart: always
15+
image: postgres:latest
16+
container_name: postgres
17+
command: postgres -c config_file=/var/lib/postgresql/postgresql.conf
18+
volumes:
19+
- pgdata:/var/lib/postgresql
20+
- ./postgres/postgresql.conf:/var/lib/postgresql/postgresql.conf:ro
21+
- ./postgres/pg_hba.conf:/var/lib/postgresql/pg_hba.conf:ro
22+
environment:
23+
- POSTGRES_USER=${DATABASE_USER}
24+
- POSTGRES_PASSWORD=${DATABASE_PASSWORD}
25+
- POSTGRES_DB=${DATABASE_NAME}
26+
27+
volumes:
28+
pgdata:
29+
external: true
30+
name: xc2f_pgdata

docker/Dockerfile.dev

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM node:24-alpine
2+
3+
WORKDIR /app
4+
ENV NODE_ENV=production
5+
6+
COPY . .
7+
8+
EXPOSE 3000
9+
CMD ["node", "server.js"]

scripts/deploy-build.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
5+
6+
cd "$PROJECT_DIR"
7+
8+
echo "👉 Pull main"
9+
git pull origin main
10+
11+
echo "👉 Fetch build"
12+
git fetch origin build
13+
14+
echo "👉 Clean build artifacts"
15+
rm -rf .next public
16+
17+
echo "👉 Restore build artifacts"
18+
git restore --source origin/build .next public
19+
20+
echo "👉 Start docker"
21+
docker-compose up -d

0 commit comments

Comments
 (0)