Skip to content

Commit 68ea121

Browse files
authored
Merge pull request #258 from DevKor-github/codex/ec2-hosting
[codex] Prepare EC2 Docker Compose deployment
2 parents 4c0b6e7 + cfc0fdf commit 68ea121

3 files changed

Lines changed: 47 additions & 14 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@ jobs:
2828
- name: Prepare deploy files
2929
env:
3030
SPRING_APPLICATION_NAME: ${{ secrets.SPRING_APPLICATION_NAME }}
31-
SPRING_DATASOURCE_URL: ${{ secrets.SPRING_DATASOURCE_URL }}
3231
SPRING_DATASOURCE_USERNAME: ${{ secrets.SPRING_DATASOURCE_USERNAME }}
3332
SPRING_DATASOURCE_PASSWORD: ${{ secrets.SPRING_DATASOURCE_PASSWORD }}
3433
SPRING_DATASOURCE_DRIVER_CLASS_NAME: ${{ secrets.SPRING_DATASOURCE_DRIVER_CLASS_NAME }}
34+
MYSQL_DATABASE: ${{ secrets.MYSQL_DATABASE }}
35+
MYSQL_ROOT_PASSWORD: ${{ secrets.MYSQL_ROOT_PASSWORD }}
3536
SPRING_JPA_DATABASE_PLATFORM: ${{ secrets.SPRING_JPA_DATABASE_PLATFORM }}
3637
SPRING_JPA_HIBERNATE_DDL_AUTO: ${{ secrets.SPRING_JPA_HIBERNATE_DDL_AUTO }}
3738
JWT_SECRETKEY: ${{ secrets.JWT_SECRETKEY }}
@@ -64,20 +65,21 @@ jobs:
6465
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
6566
FEATURE_APPLE_LOGIN_ENABLED: ${{ secrets.FEATURE_APPLE_LOGIN_ENABLED }}
6667
AUTHKEY_743M7R5W3W: ${{ secrets.AUTHKEY_743M7R5W3W }}
67-
SPRING_FLYWAY_URL: ${{ secrets.SPRING_FLYWAY_URL }}
68-
SPRING_FLYWAY_USER: ${{ secrets.SPRING_FLYWAY_USER }}
69-
SPRING_FLYWAY_PASSWORD: ${{ secrets.SPRING_FLYWAY_PASSWORD }}
7068
ONTIME_PUSH_FIREBASE_ADMINSDK: ${{ secrets.ONTIME_PUSH_FIREBASE_ADMINSDK }}
7169
run: |
7270
mkdir -p config secrets
7371
72+
mysql_database="${MYSQL_DATABASE:-ontime}"
73+
mysql_root_password="${MYSQL_ROOT_PASSWORD:-$SPRING_DATASOURCE_PASSWORD}"
74+
mysql_url="jdbc:mysql://mysql:3306/${mysql_database}?serverTimezone=Asia/Seoul&useSSL=false&allowPublicKeyRetrieval=true"
75+
7476
add_property() {
7577
printf '%s=%s\n' "$1" "$2" >> config/application.properties
7678
}
7779
7880
: > config/application.properties
7981
add_property "spring.application.name" "$SPRING_APPLICATION_NAME"
80-
add_property "spring.datasource.url" "$SPRING_DATASOURCE_URL"
82+
add_property "spring.datasource.url" "$mysql_url"
8183
add_property "spring.datasource.username" "$SPRING_DATASOURCE_USERNAME"
8284
add_property "spring.datasource.password" "$SPRING_DATASOURCE_PASSWORD"
8385
add_property "spring.datasource.driver-class-name" "$SPRING_DATASOURCE_DRIVER_CLASS_NAME"
@@ -115,15 +117,22 @@ jobs:
115117
add_property "apple.team.id" "$APPLE_TEAM_ID"
116118
add_property "feature.apple-login.enabled" "${FEATURE_APPLE_LOGIN_ENABLED:-true}"
117119
add_property "spring.flyway.enabled" "true"
118-
add_property "spring.flyway.url" "$SPRING_FLYWAY_URL"
119-
add_property "spring.flyway.user" "$SPRING_FLYWAY_USER"
120-
add_property "spring.flyway.password" "$SPRING_FLYWAY_PASSWORD"
120+
add_property "spring.flyway.url" "$mysql_url"
121+
add_property "spring.flyway.user" "$SPRING_DATASOURCE_USERNAME"
122+
add_property "spring.flyway.password" "$SPRING_DATASOURCE_PASSWORD"
121123
add_property "spring.flyway.baseline-on-migrate" "true"
122124
add_property "management.endpoints.web.exposure.include" "health"
123125
add_property "management.endpoint.health.show-details" "always"
124126
add_property "server.forward-headers-strategy" "framework"
125127
add_property "firebase.service-account.path" "/app/secrets/firebase-adminsdk.json"
126128
129+
{
130+
printf 'MYSQL_DATABASE=%s\n' "$mysql_database"
131+
printf 'MYSQL_USER=%s\n' "$SPRING_DATASOURCE_USERNAME"
132+
printf 'MYSQL_PASSWORD=%s\n' "$SPRING_DATASOURCE_PASSWORD"
133+
printf 'MYSQL_ROOT_PASSWORD=%s\n' "$mysql_root_password"
134+
} > config/mysql.env
135+
127136
printf '%s' "$ONTIME_PUSH_FIREBASE_ADMINSDK" > secrets/firebase-adminsdk.json
128137
printf '%s' "$AUTHKEY_743M7R5W3W" > secrets/AuthKey_743M7R5W3W.p8
129138
cp ontime-back/build/libs/ontime-back-0.0.1-SNAPSHOT.jar project.jar
@@ -136,7 +145,7 @@ jobs:
136145
host: ${{ secrets.EC2_HOST }}
137146
username: ${{ secrets.EC2_USER }}
138147
key: ${{ secrets.EC2_SSH_KEY }}
139-
source: "project.jar,Dockerfile,docker-compose.yml,config/application.properties,secrets/firebase-adminsdk.json,secrets/AuthKey_743M7R5W3W.p8"
148+
source: "project.jar,Dockerfile,docker-compose.yml,config/application.properties,config/mysql.env,secrets/firebase-adminsdk.json,secrets/AuthKey_743M7R5W3W.p8"
140149
target: "/home/ubuntu/OnTime-back"
141150

142151
- name: Restart service on EC2

ontime-back/docker-compose.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,37 @@
11
services:
2+
mysql:
3+
image: mysql:8.0
4+
container_name: ontime-mysql
5+
restart: unless-stopped
6+
env_file:
7+
- ./config/mysql.env
8+
command:
9+
- --character-set-server=utf8mb4
10+
- --collation-server=utf8mb4_unicode_ci
11+
volumes:
12+
- mysql-data:/var/lib/mysql
13+
healthcheck:
14+
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -p$$MYSQL_ROOT_PASSWORD"]
15+
interval: 10s
16+
timeout: 5s
17+
retries: 10
18+
219
backend:
320
build:
421
context: .
522
dockerfile: Dockerfile
623
image: ontime-backend
724
container_name: ontime-backend
825
restart: unless-stopped
26+
depends_on:
27+
mysql:
28+
condition: service_healthy
929
ports:
1030
- "8080:8080"
1131
volumes:
1232
- ./config/application.properties:/app/config/application.properties:ro
1333
- ./secrets/firebase-adminsdk.json:/app/secrets/firebase-adminsdk.json:ro
1434
- ./secrets/AuthKey_743M7R5W3W.p8:/app/secrets/AuthKey_743M7R5W3W.p8:ro
35+
36+
volumes:
37+
mysql-data:
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ This service deploys to Amazon EC2 through `.github/workflows/deploy.yml`.
88
2. Add the required GitHub Actions secrets listed below.
99
3. Run the `Deploy` workflow manually from GitHub Actions, or push to the `deploy` branch.
1010

11-
The workflow builds the Spring Boot jar, creates deploy-only config files from GitHub Secrets, uploads them to `/home/ubuntu/OnTime-back`, and restarts Docker Compose on the EC2 instance.
11+
The workflow builds the Spring Boot jar, creates deploy-only config files from GitHub Secrets, uploads them to `/home/ubuntu/OnTime-back`, and restarts Docker Compose on the EC2 instance. Docker Compose runs both the backend and a private MySQL 8 container on the same Docker network.
1212

1313
## Required EC2 Secrets
1414

@@ -19,11 +19,11 @@ The workflow builds the Spring Boot jar, creates deploy-only config files from G
1919
## Required Application Secrets
2020

2121
- `SPRING_APPLICATION_NAME`
22-
- `SPRING_DATASOURCE_URL`
2322
- `SPRING_DATASOURCE_USERNAME`
2423
- `SPRING_DATASOURCE_PASSWORD`
2524
- `SPRING_DATASOURCE_DRIVER_CLASS_NAME`
2625
- `SPRING_JPA_HIBERNATE_DDL_AUTO`
26+
- `MYSQL_ROOT_PASSWORD`
2727
- `JWT_SECRETKEY`
2828
- `JWT_ACCESS_EXPIRATION`
2929
- `JWT_REFRESH_EXPIRATION`
@@ -35,14 +35,12 @@ The workflow builds the Spring Boot jar, creates deploy-only config files from G
3535
- `APPLE_LOGIN_KEY`
3636
- `APPLE_TEAM_ID`
3737
- `AUTHKEY_743M7R5W3W`
38-
- `SPRING_FLYWAY_URL`
39-
- `SPRING_FLYWAY_USER`
40-
- `SPRING_FLYWAY_PASSWORD`
4138
- `ONTIME_PUSH_FIREBASE_ADMINSDK`
4239

4340
## Optional Secrets
4441

4542
- `SPRING_JPA_DATABASE_PLATFORM` defaults to `org.hibernate.dialect.MySQL8Dialect`.
43+
- `MYSQL_DATABASE` defaults to `ontime`.
4644
- `FEATURE_APPLE_LOGIN_ENABLED` defaults to `true`.
4745
- Google and Kakao OAuth provider/registration secrets are included by the workflow when configured.
4846

@@ -54,7 +52,10 @@ The deploy workflow writes these files under `/home/ubuntu/OnTime-back`:
5452
- `Dockerfile`
5553
- `docker-compose.yml`
5654
- `config/application.properties`
55+
- `config/mysql.env`
5756
- `secrets/firebase-adminsdk.json`
5857
- `secrets/AuthKey_743M7R5W3W.p8`
5958

59+
MySQL data is stored in the Docker volume `mysql-data`. Removing that volume deletes the deployed database.
60+
6061
Do not commit local `application.properties`, Firebase service account JSON, Apple `.p8` keys, or `.env` files.

0 commit comments

Comments
 (0)