Skip to content

Commit 23bb3c1

Browse files
authored
Merge pull request #131 from ChooseTale/dev
Dev
2 parents 6108d16 + cd5d21d commit 23bb3c1

File tree

211 files changed

+23433
-1997
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

211 files changed

+23433
-1997
lines changed

.dockerignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
node_modules
2+
dist
3+
.vscode
4+
.github
5+
nestia
6+
.env
7+
.env.local

.github/workflows/auto-cd(dev).yaml

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ on:
99
description: 'dev command'
1010
options:
1111
- yarn dev
12-
- yarn dev:test
1312

1413
env:
1514
SERVER_HOST: ${{ secrets.DEV_SERVER_HOST }}
@@ -30,6 +29,30 @@ jobs:
3029
echo ${{ env.DEPLOY_PATH }}
3130
echo ${{ env.BRANCH }}
3231
32+
- name: create env
33+
run: |
34+
echo "${{ secrets.DEV_CONFIG }}" > src/config/production.ts
35+
36+
- name: aws login
37+
uses: aws-actions/configure-aws-credentials@v2
38+
with:
39+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
40+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
41+
aws-region: ${{ secrets.AWS_REGION }}
42+
43+
- name: aws ecr get-login-password
44+
id: login-password
45+
run: |
46+
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ECR_URI }}
47+
48+
- name: aws ecr build
49+
run: |
50+
docker build -f dev.dockerfile -t ${{ secrets.AWS_ECR_URI }}/choosetale:backend .
51+
52+
- name: aws ecr push
53+
run: |
54+
docker push ${{ secrets.AWS_ECR_URI }}/choosetale:backend
55+
3356
- name: Set up SSH key with passphrase
3457
uses: webfactory/ssh-agent@v0.5.3
3558
with:
@@ -39,39 +62,19 @@ jobs:
3962
- name: 원격 서버에 배포
4063
run: |
4164
ssh -o StrictHostKeyChecking=no ${{ env.SERVER_USER }}@${{ env.SERVER_HOST }} << 'EOF'
42-
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
43-
export NVM_DIR="$HOME/.nvm"
44-
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # nvm을 현재 세션에서 사용하기 위해 로드
45-
46-
nvm install 18
47-
nvm use 18
48-
cd ${{ env.DEPLOY_PATH }}
49-
git fetch --all
50-
git pull origin ${{ env.BRANCH }}
51-
yarn install --frozen-lockfile
52-
65+
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ECR_URI }}
66+
docker ps -q --filter "name=choosetale-backend" | grep -q . && docker rm -f choosetale-backend || echo "컨테이너가 없습니다."
67+
docker images ${{ secrets.AWS_ECR_URI }}/choosetale:backend && docker rmi ${{ secrets.AWS_ECR_URI }}/choosetale:backend || echo "이미지가 없습니다."
68+
docker pull ${{ secrets.AWS_ECR_URI }}/choosetale:backend
69+
docker run -d -p 5001:5001 -p 5002:5002 -e NODE_ENV=production --net choosetale-network --name choosetale-backend ${{ secrets.AWS_ECR_URI }}/choosetale:backend
5370
54-
if [ "${{ inputs.dev_command }}" = "yarn dev:test" ]; then
55-
lsof -ti:6001 | xargs kill -9 || true
56-
elif [ "${{ inputs.dev_command }}" = "yarn dev" ]; then
57-
lsof -ti:5001 | xargs kill -9 || true
58-
fi
59-
nohup ${{ inputs.dev_command }} > output.log 2>&1 &
60-
sleep 5
6171
EOF
6272
6373
- name: 슬랙 메시지 전송
6474
env:
6575
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_CHANNEL_WEBHOOK }}
6676
run: |
67-
if [ "${{ inputs.dev_command }}" = "yarn dev:test" ]; then
68-
PORT=6001
69-
elif [ "${{ inputs.dev_command }}" = "yarn dev" ]; then
70-
PORT=5001
71-
else
72-
PORT="알 수 없음"
73-
fi
74-
curl -X POST -H 'Content-type: application/json' --data '{"text":"배포가 완료되었습니다. port: ${{ env.PORT }} , branch: ${{ env.BRANCH }}"}' $SLACK_WEBHOOK_URL
77+
curl -X POST -H 'Content-type: application/json' --data '{"text":"백엔드 배포가 완료되었습니다. port: 5001 , branch: ${{ env.BRANCH }}"}' $SLACK_WEBHOOK_URL
7578
7679
- name: SSH 키 정리
7780
run: rm -rf ~/.ssh
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
name: auto-cd(v2)
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
command:
7+
type: choice
8+
required: true
9+
description: '테스트 서버 배포 또는 운영 서버 배포'
10+
options:
11+
- dev
12+
- prod
13+
14+
env:
15+
SERVER_HOST: ${{ secrets.DEV_SERVER_HOST }}
16+
SERVER_USER: ${{ secrets.DEV_SERVER_USER }}
17+
SERVER_SSH_KEY: ${{ secrets.DEV_SERVER_SSH_KEY }}
18+
SERVER_SSH_PASSPHRASE: ${{ secrets.DEV_SERVER_SSH_PASSPHRASE }}
19+
SERVER_PORT: ${{ inputs.command == 'prod' && '-p 4001:4001 -p 4002:4002' || '-p 5001:5001 -p 5002:5002' }}
20+
SERVER_NAME: ${{ inputs.command == 'prod' && 'choosetale-backend' || 'choosetale-backend-dev' }}
21+
SERVER_NETWORK: ${{ inputs.command == 'prod' && 'choosetale-network' || 'choosetale-network' }}
22+
SERVER_DATABASE_URL: ${{ inputs.command == 'prod' && secrets.PROD_DATABASE_URL || secrets.DEV_DATABASE_URL }}
23+
SERVER_CONFIG: ${{ inputs.command == 'prod' && secrets.PROD_CONFIG || secrets.DEV_CONFIG }}
24+
AWS_ECR_URI: ${{ secrets.AWS_ECR_URI }}
25+
DOCKER_IMAGE_TAG: ${{ inputs.command == 'prod' && '' || '-dev' }}
26+
DEPLOY_PATH: choose-tale/Backend
27+
BRANCH: ${{github.ref_name}}
28+
29+
jobs:
30+
deploy:
31+
runs-on: ubuntu-latest
32+
steps:
33+
- uses: actions/checkout@v3
34+
35+
- name: echo env
36+
run: |
37+
echo ${{ env.DEPLOY_PATH }}
38+
echo ${{ env.BRANCH }}
39+
40+
- name: create env
41+
run: |
42+
echo "${{ env.SERVER_CONFIG }}" > src/config/production.ts
43+
44+
- name: aws login
45+
uses: aws-actions/configure-aws-credentials@v2
46+
with:
47+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
48+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
49+
aws-region: ${{ secrets.AWS_REGION }}
50+
51+
- name: aws ecr get-login-password
52+
id: login-password
53+
run: |
54+
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ECR_URI }}
55+
56+
- name: aws ecr build
57+
run: |
58+
docker build -f dev.dockerfile -t ${{ secrets.AWS_ECR_URI }}/choosetale${{ env.DOCKER_IMAGE_TAG }}:backend .
59+
60+
- name: aws ecr push
61+
run: |
62+
docker push ${{ secrets.AWS_ECR_URI }}/choosetale${{ env.DOCKER_IMAGE_TAG }}:backend
63+
64+
- name: Set up SSH key with passphrase
65+
uses: webfactory/ssh-agent@v0.5.3
66+
with:
67+
ssh-private-key: ${{ env.SERVER_SSH_KEY }}
68+
ssh-passphrase: ${{ env.SERVER_SSH_PASSPHRASE }}
69+
70+
- name: 원격 서버에 배포
71+
run: |
72+
ssh -o StrictHostKeyChecking=no ${{ env.SERVER_USER }}@${{ env.SERVER_HOST }} << 'EOF'
73+
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ env.AWS_ECR_URI }}
74+
docker ps -q --filter "name=${{ env.SERVER_NAME }}" | grep -q . && docker rm -f ${{ env.SERVER_NAME }} || echo "컨테이너가 없습니다."
75+
docker images ${{ env.AWS_ECR_URI }}/choosetale${{ env.DOCKER_IMAGE_TAG }}:backend && docker rmi ${{ env.AWS_ECR_URI }}/choosetale${{ env.DOCKER_IMAGE_TAG }}:backend || echo "이미지가 없습니다."
76+
docker pull ${{ env.AWS_ECR_URI }}/choosetale${{ env.DOCKER_IMAGE_TAG }}:backend
77+
docker run -d ${{ env.SERVER_PORT }} -e NODE_ENV=production -e DATABASE_URL=${{ env.SERVER_DATABASE_URL }} --net ${{ env.SERVER_NETWORK }} --name ${{ env.SERVER_NAME }} ${{ env.AWS_ECR_URI }}/choosetale:backend
78+
79+
EOF
80+
81+
- name: 슬랙 메시지 전송
82+
env:
83+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_CHANNEL_WEBHOOK }}
84+
run: |
85+
curl -X POST -H 'Content-type: application/json' --data '{"text":"백엔드 배포가 완료되었습니다. port: 5001 , branch: ${{ env.BRANCH }}"}' $SLACK_WEBHOOK_URL
86+
87+
- name: SSH 키 정리
88+
run: rm -rf ~/.ssh

.github/workflows/update_swagger.yaml

Lines changed: 0 additions & 63 deletions
This file was deleted.

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,13 @@ lerna-debug.log*
4545
/src/config/test-server.ts
4646
/src/config/development.ts
4747
/src/config/development-test.ts
48+
/src/config/testServer.ts
49+
/src/config/docker.development.ts
50+
/src/config/production.ts
4851

4952
# nestia
5053
/nestia
5154

5255
libs
53-
uploads
56+
uploads
57+
test-uploads

dev.docker-compose.yml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# version: '3.8'
2+
3+
services:
4+
db:
5+
image: postgres:15
6+
container_name: database
7+
environment:
8+
POSTGRES_USER: user
9+
POSTGRES_PASSWORD: password
10+
POSTGRES_DB: postgres
11+
ports:
12+
- '25432:5432'
13+
networks:
14+
- choosetale-network
15+
kafka:
16+
image: confluentinc/cp-kafka:latest
17+
container_name: kafka
18+
depends_on:
19+
- zookeeper
20+
ports:
21+
- '9092:9092'
22+
environment:
23+
KAFKA_BROKER_ID: 1
24+
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
25+
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://kafka:9092
26+
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
27+
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
28+
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
29+
networks:
30+
- choosetale-network
31+
zookeeper:
32+
image: confluentinc/cp-zookeeper:latest
33+
container_name: zookeeper
34+
ports:
35+
- '2181:2181'
36+
environment:
37+
ZOOKEEPER_CLIENT_PORT: 2181
38+
ZOOKEEPER_TICK_TIME: 2000
39+
networks:
40+
- choosetale-network
41+
42+
networks:
43+
choosetale-network:
44+
driver: choosetale-network
45+
46+
# server:
47+
# build:
48+
# context: .
49+
# dockerfile: dev.dockerfile
50+
# ports:
51+
# - '5001:5001'
52+
# - '5002:5002'
53+
# depends_on:
54+
# - db
55+
# - kafka
56+
# - zookeeper
57+
# command: ['sh', '-c', 'yarn prisma migrate dev && yarn dev:docker']

dev.dockerfile

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# 빌드 스테이지
2+
FROM node:20.15.1-alpine AS builder
3+
4+
WORKDIR /app
5+
6+
COPY package.json ./
7+
8+
RUN yarn install --frozen-lockfile
9+
10+
COPY . .
11+
12+
ENV DATABASE_URL=postgresql://user:password@database:5432/postgres?schema=public
13+
14+
RUN yarn prisma generate
15+
RUN yarn build
16+
17+
# 실행 스테이지
18+
FROM node:20.15.1-alpine
19+
20+
WORKDIR /app
21+
22+
COPY --from=builder /app/dist ./dist
23+
COPY --from=builder /app/node_modules ./node_modules
24+
COPY --from=builder /app/package.json ./
25+
COPY --from=builder /app/prisma ./prisma
26+
COPY --from=builder /app/src/config ./src/config
27+
28+
29+
ENV DATABASE_URL=postgresql://user:password@database:5432/postgres?schema=public
30+
ENV NODE_ENV=production
31+
32+
CMD ["node", "dist/src/main.js"]
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ version: '3.8'
33
services:
44
db:
55
image: postgres:15
6-
container_name: development
6+
container_name: database
77
environment:
88
POSTGRES_USER: user
99
POSTGRES_PASSWORD: password
10-
POSTGRES_DB: development
10+
POSTGRES_DB: postgres
1111
ports:
1212
- '25432:5432'
1313

@@ -21,7 +21,7 @@ services:
2121
environment:
2222
KAFKA_BROKER_ID: 1
2323
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
24-
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://192.168.200.106:9092
24+
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
2525
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
2626
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
2727
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

0 commit comments

Comments
 (0)