Skip to content

Commit 69c5536

Browse files
committed
Use kubernetes for production
1 parent 7f99517 commit 69c5536

File tree

16 files changed

+327
-60
lines changed

16 files changed

+327
-60
lines changed

.dockerignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,4 +183,4 @@ Dockerfile
183183
Dockerfile.dev
184184
LICENSE
185185
README.md
186-
logs
186+
kubernetes

.github/workflows/deploy.yml

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
name: Deploy
22

3+
concurrency: Vostro
4+
35
run-name: Deploy ${{github.sha}}
46

57
on:
@@ -20,44 +22,27 @@ jobs:
2022
env:
2123
DOCKER_TOKEN: ${{secrets.DOCKER_TOKEN}}
2224
- name: Build container
23-
run: docker build -t coder80/usmile:latest .
24-
- name: Push to Docker Hub
25+
run: docker build -t coder80/usmile:latest -t coder80/usmile:$SHA .
26+
env:
27+
SHA: ${{ github.sha }}
28+
- name: Push latest tag to Docker Hub
2529
run: docker push coder80/usmile:latest
30+
- name: Push commit sha tag to Docker Hub
31+
run: docker push coder80/usmile:$SHA
32+
env:
33+
SHA: ${{ github.sha }}
2634

2735
deploy:
2836
needs: build
2937
runs-on: ubuntu-latest
38+
environment: Vostro
3039
steps:
31-
- name: Create SSH key
32-
run: |
33-
mkdir -p ~/.ssh
34-
echo "$SSH_PRIVATE_KEY" > ~/.ssh/key
35-
sudo chmod 600 ~/.ssh/key
36-
ssh-keyscan -p $SSH_PORT -H $SSH_HOST > ~/.ssh/known_hosts
37-
env:
38-
SSH_PRIVATE_KEY: ${{secrets.SSH_PRIVATE_KEY}}
39-
SSH_HOST: ${{secrets.SSH_HOST}}
40-
SSH_PORT: ${{secrets.SSH_PORT}}
41-
4240
- name: Check out repository code
4341
uses: actions/checkout@v4
4442

45-
- name: Upload compose file
46-
run: |
47-
rsync -e "ssh -p $SSH_PORT -i ~/.ssh/key" compose.yml $SSH_USER@$SSH_HOST:/home/$SSH_USER/projects/usmile/compose.yml
48-
env:
49-
SSH_HOST: ${{secrets.SSH_HOST}}
50-
SSH_USER: ${{secrets.SSH_USER}}
51-
SSH_PORT: ${{secrets.SSH_PORT}}
52-
53-
- name: Connnect and deploy
54-
run: |
55-
ssh -i ~/.ssh/key -p $SSH_PORT $SSH_USER@$SSH_HOST "
56-
cd /home/$SSH_USER/projects/usmile
57-
docker compose --profile prod pull
58-
docker compose --profile prod up -d
59-
docker system prune -f"
43+
- name: Deploy
44+
uses: actions-hub/kubectl@master
6045
env:
61-
SSH_HOST: ${{secrets.SSH_HOST}}
62-
SSH_USER: ${{secrets.SSH_USER}}
63-
SSH_PORT: ${{secrets.SSH_PORT}}
46+
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
47+
with:
48+
args: --namespace=usmile set image deployments/main main=coder80/usmile:${{ github.SHA }}

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,5 @@ redis_data
180180
certs/*
181181
!certs/.gitkeep
182182
logs/*
183-
!logs/.gitkeep
183+
!logs/.gitkeep
184+
kubernetes/secret.yaml

kubernetes/main.yaml

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
apiVersion: v1
2+
kind: PersistentVolumeClaim
3+
metadata:
4+
name: certs-claim
5+
labels:
6+
app: usmile
7+
component: main
8+
spec:
9+
resources:
10+
requests:
11+
storage: 1Gi
12+
accessModes:
13+
- ReadWriteOnce
14+
storageClassName: usmile-certs
15+
---
16+
apiVersion: v1
17+
kind: Service
18+
metadata:
19+
name: main-podname
20+
labels:
21+
app: usmile
22+
component: main
23+
spec:
24+
ports:
25+
- port: 80
26+
targetPort: podname
27+
selector:
28+
app: usmile
29+
component: main
30+
---
31+
apiVersion: apps/v1
32+
kind: Deployment
33+
metadata:
34+
name: main
35+
labels:
36+
app: usmile
37+
component: main
38+
spec:
39+
selector:
40+
matchLabels:
41+
app: usmile
42+
component: main
43+
template:
44+
metadata:
45+
labels:
46+
app: usmile
47+
component: main
48+
spec:
49+
volumes:
50+
- name: certs-volume
51+
persistentVolumeClaim:
52+
claimName: certs-claim
53+
containers:
54+
- name: main
55+
image: coder80/usmile:latest
56+
ports:
57+
- containerPort: 3000
58+
name: podname
59+
envFrom:
60+
- secretRef:
61+
name: secret
62+
env:
63+
- name: POSTGRES_HOST
64+
value: postgres-service
65+
- name: POSTGRES_PORT
66+
value: !!str 5432
67+
- name: POD_NAME
68+
valueFrom:
69+
fieldRef:
70+
fieldPath: metadata.name
71+
- name: REDIS_HOST
72+
value: redis-service
73+
volumeMounts:
74+
- name: certs-volume
75+
mountPath: /usr/src/app/certs

kubernetes/postgres.yaml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
apiVersion: v1
2+
kind: PersistentVolumeClaim
3+
metadata:
4+
name: postgres-claim
5+
labels:
6+
app: usmile
7+
component: postgres
8+
spec:
9+
resources:
10+
requests:
11+
storage: 1Gi
12+
storageClassName: usmile-postgres
13+
accessModes:
14+
- ReadWriteOnce
15+
---
16+
apiVersion: v1
17+
kind: Service
18+
metadata:
19+
name: postgres-service
20+
labels:
21+
app: usmile
22+
component: postgres
23+
spec:
24+
selector:
25+
app: usmile
26+
component: postgres
27+
ports:
28+
- port: 5432
29+
targetPort: postgres
30+
---
31+
apiVersion: apps/v1
32+
kind: Deployment
33+
metadata:
34+
name: postgres
35+
labels:
36+
app: usmile
37+
component: postgres
38+
spec:
39+
selector:
40+
matchLabels:
41+
app: usmile
42+
component: postgres
43+
template:
44+
metadata:
45+
labels:
46+
app: usmile
47+
component: postgres
48+
spec:
49+
volumes:
50+
- name: postgres-volume
51+
persistentVolumeClaim:
52+
claimName: postgres-claim
53+
containers:
54+
- name: postgres
55+
image: postgres:17.4-alpine
56+
volumeMounts:
57+
- name: postgres-volume
58+
mountPath: /var/lib/postgresql/data
59+
env:
60+
- name: POSTGRES_USER
61+
valueFrom:
62+
secretKeyRef:
63+
name: secret
64+
key: POSTGRES_USER
65+
- name: POSTGRES_PASSWORD
66+
valueFrom:
67+
secretKeyRef:
68+
name: secret
69+
key: POSTGRES_PASSWORD
70+
- name: POSTGRES_DB
71+
value: usmile
72+
ports:
73+
- containerPort: 5432
74+
name: postgres

kubernetes/redis.yaml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
apiVersion: v1
2+
kind: PersistentVolumeClaim
3+
metadata:
4+
name: redis-claim
5+
labels:
6+
app: usmile
7+
component: redis
8+
spec:
9+
resources:
10+
requests:
11+
storage: 1Gi
12+
storageClassName: usmile-redis
13+
accessModes:
14+
- ReadWriteOnce
15+
---
16+
apiVersion: v1
17+
kind: Service
18+
metadata:
19+
name: redis-service
20+
labels:
21+
app: usmile
22+
component: redis
23+
spec:
24+
selector:
25+
app: usmile
26+
component: redis
27+
ports:
28+
- port: 6379
29+
targetPort: redis
30+
---
31+
apiVersion: apps/v1
32+
kind: Deployment
33+
metadata:
34+
name: redis
35+
labels:
36+
app: usmile
37+
component: redis
38+
spec:
39+
selector:
40+
matchLabels:
41+
app: usmile
42+
component: redis
43+
template:
44+
metadata:
45+
labels:
46+
app: usmile
47+
component: redis
48+
spec:
49+
volumes:
50+
- name: redis-volume
51+
persistentVolumeClaim:
52+
claimName: redis-claim
53+
containers:
54+
- name: redis
55+
image: redis:7.4.2-alpine
56+
volumeMounts:
57+
- name: redis-volume
58+
mountPath: /data
59+
ports:
60+
- containerPort: 6379
61+
name: redis

kubernetes/secret.yaml.example

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: secret
5+
labels:
6+
app: usmile
7+
component: secret
8+
data: # use ` echo -n "data" | base64` to encode (space in front means do not save to history)
9+
TOKEN:
10+
POSTGRES_USER:
11+
POSTGRES_PASSWORD:
12+
BOT_NAME:
13+
stringData:
14+
ADMINS:

logs/.gitkeep

Whitespace-only changes.

pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@ line-length = 80
55
quote-style = "double"
66
indent-style = "space"
77

8-
98
[tool.ruff.lint]
109
fixable = ["ALL"]

src/entities/__init__.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
from .constants import ADMINS, POSTGRES_PASSWORD, POSTGRES_USER, TEXT, TOKEN
1+
from .constants import (
2+
ADMINS,
3+
POSTGRES_HOST,
4+
POSTGRES_PASSWORD,
5+
POSTGRES_PORT,
6+
POSTGRES_USER,
7+
TEXT,
8+
TOKEN,
9+
)
210
from .create_bot import bot
311
from .fsm import States, storage
412
from .logs import logger
@@ -8,6 +16,8 @@
816
"TOKEN",
917
"POSTGRES_USER",
1018
"POSTGRES_PASSWORD",
19+
"POSTGRES_HOST",
20+
"POSTGRES_PORT",
1121
"ADMINS",
1222
"TEXT",
1323
"States",

0 commit comments

Comments
 (0)