-
Notifications
You must be signed in to change notification settings - Fork 1
108 lines (91 loc) · 3.43 KB
/
Copy pathdeploy.yml
File metadata and controls
108 lines (91 loc) · 3.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
name: Deploy
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@main
- name: Setup mise
run: |
curl https://mise.run | sh
echo "$HOME/.local/share/mise/bin" >> $GITHUB_PATH
echo "$HOME/.local/share/mise/shims" >> $GITHUB_PATH
mise install
- name: Create frontend .env
run: |
cd frontend
cat > .env << EOF
NEXT_PUBLIC_FULL_URL=${{ secrets.NEXT_PUBLIC_FULL_URL }}
NEXT_PUBLIC_BACKEND_URL=${{ secrets.NEXT_PUBLIC_BACKEND_URL }}
MAPTILER_KEY=${{ secrets.MAPTILER_KEY }}
REDIS_URL=${{ secrets.REDIS_URL }}
EOF
- name: Install frontend dependencies
run: |
cd frontend
pnpm install --frozen-lockfile
- name: Build frontend
run: |
cd frontend
pnpm build
- name: Create deployment package
run: |
mkdir -p deploy_package/frontend
# Frontend build artifacts
cp -r frontend/.next/standalone deploy_package/frontend/
cp frontend/package.json deploy_package/frontend/
cp frontend/pnpm-lock.yaml deploy_package/frontend/
cp frontend/pnpm-workspace.yaml deploy_package/frontend/
cp frontend/pm2.config.cjs deploy_package/frontend/
# Backend files
mkdir -p deploy_package/backend
cp -r backend/bear deploy_package/backend/
cp -r backend/collectmap deploy_package/backend/
cp -r backend/commons deploy_package/backend/
cp -r backend/mountains deploy_package/backend/
cp -r backend/paths deploy_package/backend/
cp backend/docker-compose.yml deploy_package/backend/
cp backend/Dockerfile deploy_package/backend/
cp backend/manage.py deploy_package/backend/
cp backend/pyproject.toml deploy_package/backend/
cp backend/uv.lock deploy_package/backend/
# Create tarball
cp mise.toml deploy_package/
tar -czf deploy.tar.gz -C deploy_package .
- name: Deploy to VPS via SCP
uses: appleboy/scp-action@master
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_KEY }}
port: ${{ secrets.DEPLOY_PORT }}
source: "deploy.tar.gz"
target: ${{ secrets.DEPLOY_TARGET }}
- name: Extract and restart services on VPS
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_KEY }}
port: ${{ secrets.DEPLOY_PORT }}
script: |
set -e
# Extract deployment package
cd ${{ secrets.DEPLOY_TARGET }}
tar -xzf deploy.tar.gz
rm deploy.tar.gz
~/.local/bin/mise install
# Restart backend (Docker)
~/.local/bin/mise backend-uv || true
~/.local/bin/mise start-backend
# Restart frontend (PM2)
cd ./frontend
~/.volta/bin/pm2 restart pm2.config.cjs --update-env || ~/.volta/bin/pm2 start pm2.config.cjs
# Cleanup
echo "Deployment completed successfully"