Skip to content

Commit 42de520

Browse files
committed
Update the deploy test
1 parent 03b4e91 commit 42de520

File tree

2 files changed

+98
-25
lines changed

2 files changed

+98
-25
lines changed

.github/workflows/deploy.yaml

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -73,29 +73,15 @@ jobs:
7373
steps:
7474
- name: Checkout code
7575
uses: actions/checkout@v2
76-
77-
- name: Setup SSH
78-
uses: webfactory/[email protected]
79-
with:
80-
ssh-private-key: ${{ secrets.DEPLOY_SSH_KEY }}
81-
82-
- name: Add host
83-
run: |
84-
ssh-keyscan zenful.cloud > ~/.ssh/known_hosts
85-
86-
- name: Set up Docker Compose
76+
- name: create env file
8777
run: |
88-
# Install Docker Compose
89-
curl -L "https://github.com/docker/compose/releases/download/v2.19.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
90-
chmod +x /usr/local/bin/docker-compose
91-
92-
- name: Copy over password
93-
run: |
94-
ssh [email protected] "echo ${{ secrets.DB_PASSWORD }} > /home/deploytest/db-password.txt"
95-
96-
- name: Run Docker Compose
97-
run: |
98-
export GIT_COMMIT_HASH=${{ needs.commit-hash.outputs.commit_hash }}
99-
export DB_PASSWORD_PATH="/home/deploytest/db-password.txt"
100-
export DOCKER_HOST=ssh://[email protected]
101-
docker-compose -f ./compose.prod.yaml up -d
78+
echo "GIT_COMMIT_HASH=${{ github.sha }}" >> env
79+
- name: 'Docker Stack Deploy'
80+
uses: cssnr/stack-deploy-action@v1
81+
with:
82+
name: 'guestbook'
83+
file: 'stack.yaml'
84+
host: zenful.cloud
85+
user: deploy
86+
ssh_key: ${{ secrets.DEPLOY_SSH_KEY }}
87+
env_file: './env'

docker-stack.yaml

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
services:
2+
reverse-proxy:
3+
image: traefik:v3.1
4+
command:
5+
- "--providers.docker"
6+
- "--providers.docker.exposedbydefault=false"
7+
- "--entryPoints.websecure.address=:443"
8+
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
9+
- "--certificatesresolvers.myresolver.acme.email=elliott@zenful.cloud"
10+
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
11+
- "--entrypoints.web.address=:80"
12+
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
13+
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
14+
ports:
15+
- mode: host
16+
protocol: tcp
17+
published: 80
18+
target: 80
19+
- mode: host
20+
protocol: tcp
21+
published: 443
22+
target: 443
23+
volumes:
24+
- letsencrypt:/letsencrypt
25+
- /var/run/docker.sock:/var/run/docker.sock
26+
guestbook:
27+
image: ghcr.io/dreamsofcode-io/guestbook:${GIT_COMMIT_HASH:-prod}
28+
labels:
29+
- "traefik.enable=true"
30+
- "traefik.http.middlewares.guestbook-ratelimit.ratelimit.average=20"
31+
- "traefik.http.routers.guestbook.rule=Host(`zenful.cloud`) && !Method(`POST`)"
32+
- "traefik.http.services.guestbook.loadbalancer.server.port=8080"
33+
- "traefik.http.routers.guestbook.entrypoints=websecure"
34+
- "traefik.http.routers.guestbook.tls.certresolver=myresolver"
35+
- "traefik.http.routers.guestbook.middlewares=guestbook-ratelimit"
36+
# Define separate router for POST methods
37+
- "traefik.http.middlewares.guestbook-ratelimit-post.ratelimit.average=1"
38+
- "traefik.http.middlewares.guestbook-ratelimit-post.ratelimit.period=1m"
39+
- "traefik.http.routers.guestbook-post.rule=Host(`zenful.cloud`) && Method(`POST`)"
40+
- "traefik.http.routers.guestbook-post.middlewares=guestbook-ratelimit-post"
41+
- "traefik.http.routers.guestbook-post.entrypoints=websecure"
42+
- "traefik.http.routers.guestbook-post.tls.certresolver=myresolver"
43+
# Proxy
44+
- "traefik.http.routers.proxy.rule=Host(`proxy.dreamsofcode.io`)"
45+
- "traefik.http.routers.proxy.entrypoints=websecure"
46+
- "traefik.http.routers.proxy.tls.certresolver=myresolver"
47+
# Enable watchtower
48+
- "com.centurylinklabs.watchtower.enable=true"
49+
secrets:
50+
- db-password
51+
environment:
52+
- POSTGRES_HOST=db
53+
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
54+
- POSTGRES_USER=postgres
55+
- POSTGRES_DB=guestbook
56+
- POSTGRES_PORT=5432
57+
- POSTGRES_SSLMODE=disable
58+
deploy:
59+
mode: replicated
60+
replicas: 3
61+
restart: always
62+
depends_on:
63+
- db
64+
db:
65+
image: postgres:16
66+
restart: always
67+
user: postgres
68+
volumes:
69+
- db-data:/var/lib/postgresql/data
70+
secrets:
71+
- db-password
72+
environment:
73+
- POSTGRES_DB=guestbook
74+
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
75+
expose:
76+
- 5432
77+
healthcheck:
78+
test: [ "CMD", "pg_isready" ]
79+
interval: 10s
80+
timeout: 5s
81+
retries: 5
82+
volumes:
83+
db-data:
84+
letsencrypt:
85+
secrets:
86+
db-password:
87+
external: true

0 commit comments

Comments
 (0)