-
Notifications
You must be signed in to change notification settings - Fork 0
143 lines (122 loc) · 5.08 KB
/
deploy.yml
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
name: Deploy Knowledge Manager
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
# 1) Create the environment file for Angular (similar to chatbot approach)
- name: Create Environment File
run: |
echo "export const environment = {
production: true,
backendUrl: '/api',
angelosAppApiKey: '${{secrets.ANGELOS_APP_API_KEY}}'
};" > src/environments/environment.prod.ts
- name: Verify Environment File Creation
run: |
if [ -f src/environments/environment.prod.ts ]; then
echo "Environment file created successfully."
else
echo "Environment file creation failed." && exit 1
fi
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and Push Knowledge Manager Image
uses: docker/build-push-action@v6
with:
platforms: linux/amd64, linux/arm64
file: ./Dockerfile
context: .
tags: ghcr.io/ls1intum/knowledge-manager:latest
push: true
no-cache: true
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
# -------------------------------------------------
# COPY KNOWLEDGE MANAGER DOCKER COMPOSE
# -------------------------------------------------
- name: Copy Knowledge Manager Compose to VM
uses: appleboy/[email protected]
with:
host: ${{ vars.VM_HOST }}
username: ${{ vars.VM_USERNAME }}
key: ${{ secrets.VM_SSH_PRIVATE_KEY }}
proxy_host: ${{ vars.DEPLOYMENT_GATEWAY_HOST }}
proxy_username: ${{ vars.DEPLOYMENT_GATEWAY_USER }}
proxy_key: ${{ secrets.DEPLOYMENT_GATEWAY_SSH_KEY }}
proxy_port: ${{ vars.DEPLOYMENT_GATEWAY_PORT }}
source: "./docker-compose.yml"
target: "/home/${{ vars.VM_USERNAME }}/${{ github.repository }}"
# -------------------------------------------------
# COPY REVERSE-PROXY DOCKER COMPOSE + nginx.conf
# -------------------------------------------------
- name: Copy Reverse Proxy Compose to VM
uses: appleboy/[email protected]
with:
host: ${{ vars.VM_HOST }}
username: ${{ vars.VM_USERNAME }}
key: ${{ secrets.VM_SSH_PRIVATE_KEY }}
proxy_host: ${{ vars.DEPLOYMENT_GATEWAY_HOST }}
proxy_username: ${{ vars.DEPLOYMENT_GATEWAY_USER }}
proxy_key: ${{ secrets.DEPLOYMENT_GATEWAY_SSH_KEY }}
proxy_port: ${{ vars.DEPLOYMENT_GATEWAY_PORT }}
source: "./reverse-proxy/docker-compose.yml"
target: "/home/${{ vars.VM_USERNAME }}/${{ github.repository }}"
- name: Copy Reverse Proxy nginx.conf to VM
uses: appleboy/[email protected]
with:
host: ${{ vars.VM_HOST }}
username: ${{ vars.VM_USERNAME }}
key: ${{ secrets.VM_SSH_PRIVATE_KEY }}
proxy_host: ${{ vars.DEPLOYMENT_GATEWAY_HOST }}
proxy_username: ${{ vars.DEPLOYMENT_GATEWAY_USER }}
proxy_key: ${{ secrets.DEPLOYMENT_GATEWAY_SSH_KEY }}
proxy_port: ${{ vars.DEPLOYMENT_GATEWAY_PORT }}
source: "./reverse-proxy/nginx.conf"
target: "/home/${{ vars.VM_USERNAME }}/${{ github.repository }}"
# -------------------------------------------------
# SSH INTO VM, RUN BOTH KNOWLEDGE MANAGER AND REVERSE PROXY
# -------------------------------------------------
- name: SSH to VM and Start Services
uses: appleboy/[email protected]
with:
host: ${{ vars.VM_HOST }}
username: ${{ vars.VM_USERNAME }}
key: ${{ secrets.VM_SSH_PRIVATE_KEY }}
proxy_host: ${{ vars.DEPLOYMENT_GATEWAY_HOST }}
proxy_username: ${{ vars.DEPLOYMENT_GATEWAY_USER }}
proxy_key: ${{ secrets.DEPLOYMENT_GATEWAY_SSH_KEY }}
proxy_port: ${{ vars.DEPLOYMENT_GATEWAY_PORT }}
script: |
# 1) Ensure the shared Docker network exists
if ! docker network inspect angelos-network >/dev/null 2>&1; then
echo "Network 'angelos-network' does not exist, creating it..."
docker network create angelos-network
fi
# 2) Spin up Knowledge Manager
cd /home/${{ vars.VM_USERNAME }}/${{ github.repository }}
docker compose pull knowledge-manager
docker compose up -d --force-recreate --remove-orphans
# 3) Spin up Reverse Proxy
cd reverse-proxy
docker compose pull nginx-proxy || true
docker compose up -d --force-recreate --remove-orphans
# 4) Optional: Verify running containers
docker ps