88
99env :
1010 REGISTRY : ghcr.io
11- # Project prefix – change this to rename everything
1211 PROJECT_PREFIX : " taimako"
1312
14- # Container and network names (derived from prefix)
15- POSTGRES_CONTAINER : ${{ env.PROJECT_PREFIX }}_postgres
16- BACKEND_CONTAINER : ${{ env.PROJECT_PREFIX }}_backend
17- FRONTEND_CONTAINER : ${{ env.PROJECT_PREFIX }}_frontend
18- DOCKER_NETWORK : ${{ env.PROJECT_PREFIX }}_network
19-
20- # Volume and backup paths
21- DATA_DIR : ~/${{ env.PROJECT_PREFIX }}
22- POSTGRES_DATA_DIR : ~/${{ env.PROJECT_PREFIX }}/postgres_data
23- BACKUPS_DIR : ~/${{ env.PROJECT_PREFIX }}/backups
24-
13+ # Static environment variables
2514 BACKEND_ENV : >-
2615 -e ENVIRONMENT="production"
2716 -e DATABASE_URL="postgresql://${{ secrets.POSTGRES_USER }}:${{ secrets.POSTGRES_PASSWORD }}@${{ secrets.POSTGRES_HOST }}:5432/${{ secrets.POSTGRES_DB }}"
@@ -109,6 +98,18 @@ jobs:
10998 runs-on : ld-vps-runner
11099
111100 steps :
101+ - name : Set dynamic variables
102+ id : vars
103+ run : |
104+ PREFIX="${{ env.PROJECT_PREFIX }}"
105+ echo "postgres_container=${PREFIX}_postgres" >> $GITHUB_OUTPUT
106+ echo "backend_container=${PREFIX}_backend" >> $GITHUB_OUTPUT
107+ echo "frontend_container=${PREFIX}_frontend" >> $GITHUB_OUTPUT
108+ echo "docker_network=${PREFIX}_network" >> $GITHUB_OUTPUT
109+ echo "data_dir=~/${PREFIX}" >> $GITHUB_OUTPUT
110+ echo "postgres_data_dir=~/${PREFIX}/postgres_data" >> $GITHUB_OUTPUT
111+ echo "backups_dir=~/${PREFIX}/backups" >> $GITHUB_OUTPUT
112+
112113 - name : Set lowercase image names
113114 id : image-names
114115 run : |
@@ -127,26 +128,26 @@ jobs:
127128 docker pull ${{ env.REGISTRY }}/${{ steps.image-names.outputs.frontend_image }}:latest
128129
129130 - name : Create Docker network
130- run : docker network create ${{ env.DOCKER_NETWORK }} || true
131+ run : docker network create ${{ steps.vars.outputs.docker_network }} || true
131132
132133 - name : Deploy PostgreSQL container
133134 run : |
134- mkdir -p ${{ env.POSTGRES_DATA_DIR }}
135- mkdir -p ${{ env.BACKUPS_DIR }}
135+ mkdir -p ${{ steps.vars.outputs.postgres_data_dir }}
136+ mkdir -p ${{ steps.vars.outputs.backups_dir }}
136137
137- if docker ps -a --format '{{.Names}}' | grep -q "^${{ env.POSTGRES_CONTAINER }}$"; then
138+ if docker ps -a --format '{{.Names}}' | grep -q "^${{ steps.vars.outputs.postgres_container }}$"; then
138139 echo "PostgreSQL container exists."
139- if ! docker ps --format '{{.Names}}' | grep -q "^${{ env.POSTGRES_CONTAINER }}$"; then
140+ if ! docker ps --format '{{.Names}}' | grep -q "^${{ steps.vars.outputs.postgres_container }}$"; then
140141 echo "Starting stopped PostgreSQL container..."
141- docker start ${{ env.POSTGRES_CONTAINER }}
142+ docker start ${{ steps.vars.outputs.postgres_container }}
142143 fi
143144 else
144145 echo "Creating new PostgreSQL container..."
145146 docker run -d \
146- --name ${{ env.POSTGRES_CONTAINER }} \
147- --network ${{ env.DOCKER_NETWORK }} \
147+ --name ${{ steps.vars.outputs.postgres_container }} \
148+ --network ${{ steps.vars.outputs.docker_network }} \
148149 --restart unless-stopped \
149- -v ${{ env.POSTGRES_DATA_DIR }}:/var/lib/postgresql/data \
150+ -v ${{ steps.vars.outputs.postgres_data_dir }}:/var/lib/postgresql/data \
150151 -e POSTGRES_USER="${{ secrets.POSTGRES_USER }}" \
151152 -e POSTGRES_PASSWORD="${{ secrets.POSTGRES_PASSWORD }}" \
152153 -e POSTGRES_DB="${{ secrets.POSTGRES_DB }}" \
@@ -155,7 +156,7 @@ jobs:
155156
156157 echo "Waiting for PostgreSQL to be ready..."
157158 for i in {1..30}; do
158- if docker exec ${{ env.POSTGRES_CONTAINER }} pg_isready -U "${{ secrets.POSTGRES_USER }}" > /dev/null 2>&1; then
159+ if docker exec ${{ steps.vars.outputs.postgres_container }} pg_isready -U "${{ secrets.POSTGRES_USER }}" > /dev/null 2>&1; then
159160 echo "PostgreSQL is ready!"
160161 break
161162 fi
@@ -165,33 +166,33 @@ jobs:
165166
166167 - name : Deploy Backend container
167168 run : |
168- docker stop ${{ env.BACKEND_CONTAINER }} || true
169- docker rm ${{ env.BACKEND_CONTAINER }} || true
169+ docker stop ${{ steps.vars.outputs.backend_container }} || true
170+ docker rm ${{ steps.vars.outputs.backend_container }} || true
170171
171172 # Run migrations
172173 docker run --rm \
173- --network ${{ env.DOCKER_NETWORK }} \
174+ --network ${{ steps.vars.outputs.docker_network }} \
174175 ${{ env.BACKEND_ENV }} \
175176 ${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:latest \
176177 alembic upgrade head
177178
178179 # Run backend
179180 docker run -d \
180- --name ${{ env.BACKEND_CONTAINER }} \
181- --network ${{ env.DOCKER_NETWORK }} \
181+ --name ${{ steps.vars.outputs.backend_container }} \
182+ --network ${{ steps.vars.outputs.docker_network }} \
182183 --restart unless-stopped \
183184 -p 127.0.0.1:8000:8000 \
184185 ${{ env.BACKEND_ENV }} \
185186 ${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:latest
186187
187188 - name : Deploy Frontend container
188189 run : |
189- docker stop ${{ env.FRONTEND_CONTAINER }} || true
190- docker rm ${{ env.FRONTEND_CONTAINER }} || true
190+ docker stop ${{ steps.vars.outputs.frontend_container }} || true
191+ docker rm ${{ steps.vars.outputs.frontend_container }} || true
191192
192193 docker run -d \
193- --name ${{ env.FRONTEND_CONTAINER }} \
194- --network ${{ env.DOCKER_NETWORK }} \
194+ --name ${{ steps.vars.outputs.frontend_container }} \
195+ --network ${{ steps.vars.outputs.docker_network }} \
195196 --restart unless-stopped \
196197 -p 127.0.0.1:3000:3000 \
197198 ${{ env.FRONTEND_ENV }} \
@@ -204,7 +205,7 @@ jobs:
204205 run : |
205206 docker ps -a --filter "name=${{ env.PROJECT_PREFIX }}"
206207
207- for container in "${{ env.POSTGRES_CONTAINER }}" "${{ env.BACKEND_CONTAINER }}" "${{ env.FRONTEND_CONTAINER }}"; do
208+ for container in "${{ steps.vars.outputs.postgres_container }}" "${{ steps.vars.outputs.backend_container }}" "${{ steps.vars.outputs.frontend_container }}"; do
208209 if ! docker ps --format '{{.Names}}' | grep -q "^$container$"; then
209210 echo "$container container failed to start!"
210211 docker logs $container
@@ -216,12 +217,12 @@ jobs:
216217
217218 - name : Backup database
218219 run : |
219- docker exec ${{ env.POSTGRES_CONTAINER }} pg_dump -U "${{ secrets.POSTGRES_USER }}" "${{ secrets.POSTGRES_DB }}" > ${{ env.BACKUPS_DIR }}/backup_$(date +%Y%m%d_%H%M%S).sql
220- ls -t ${{ env.BACKUPS_DIR }}/*.sql | tail -n +8 | xargs -r rm
220+ docker exec ${{ steps.vars.outputs.postgres_container }} pg_dump -U "${{ secrets.POSTGRES_USER }}" "${{ secrets.POSTGRES_DB }}" > ${{ steps.vars.outputs.backups_dir }}/backup_$(date +%Y%m%d_%H%M%S).sql
221+ ls -t ${{ steps.vars.outputs.backups_dir }}/*.sql | tail -n +8 | xargs -r rm
221222
222223 - name : Final cleanup
223224 if : always()
224225 run : |
225226 docker system prune -af --filter "until=24h"
226227 echo "=== Final disk space ==="
227- df -h
228+ df -h
0 commit comments