Skip to content

Commit

Permalink
Merge pull request #7 from Team-Shaka/ci/4
Browse files Browse the repository at this point in the history
[CI] 👷 ci/cd 파이프라인 구축
  • Loading branch information
CYY1007 authored Apr 21, 2024
2 parents 24f5097 + 248444e commit 037e6b3
Show file tree
Hide file tree
Showing 5 changed files with 353 additions and 1 deletion.
88 changes: 88 additions & 0 deletions .github/workflows/dev_deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
name: docker ci/cd

on:
push:
branches:
- develop
pull_request:
branches:
- develop
types: [closed]
workflow_dispatch: # (2).수동 실행도 가능하도록

jobs:
build:
runs-on: ubuntu-latest # (3).OS환경
if: github.ref == 'refs/heads/main' || (github.event_name == 'pull_request' && github.event.pull_request.merged == true)


steps:
- name: Checkout current repository
uses: actions/checkout@v2

- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 17

- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
shell: bash

- name: Build with Gradle
run: ./gradlew clean build
shell: bash

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2

- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1

- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: tree-dev
IMAGE_TAG: latest
run: |
# Docker 이미지 빌드
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
# 빌드한 이미지를 Amazon ECR로 푸시
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
# 빌드된 이미지의 정보 출력
echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"
- name: Get current time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYYMMDD_HH-mm-ss
utcOffset: "+09:00"

- name: Generate deployment package
run: |
mkdir -p deploy
cp -r .ebextensions deploy/.ebextensions
cp Dockerrun.aws.json deploy/Dockerrun.aws.json
cp -r .platform deploy/.platform
cd deploy && zip -r deploy.zip .
- name: Beanstalk Deploy
uses: einaregilsson/beanstalk-deploy@v14
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: tree-dev
environment_name: Tree-dev-env
version_label: github-action-${{ steps.current-time.outputs.formattedTime }}
region: ap-northeast-2
deployment_package: deploy/deploy.zip
wait_for_deployment: false
63 changes: 63 additions & 0 deletions .platform/nginx.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
user nginx;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 33282;

events {
use epoll;
worker_connections 1024;
multi_accept on;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;


log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

include conf.d/*.conf;

map $http_upgrade $connection_upgrade {
default "upgrade";
}

upstream springboot {
server 127.0.0.1:8080;
keepalive 1024;
}

server {
listen 80 default_server;
listen [::]:80 default_server;

location / {
proxy_pass http://springboot;
# CORS 관련 헤더 추가
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

access_log /var/log/nginx/access.log main;

client_header_timeout 60;
client_body_timeout 60;
keepalive_timeout 60;
gzip off;
gzip_comp_level 4;

# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/healthd.conf;
}
}
13 changes: 13 additions & 0 deletions src/main/java/treehouse/server/api/root/presentation/RootApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package treehouse.server.api.root.presentation;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RootApi {

@GetMapping("/health")
public String healthCheck(){
return "I'm healthy!";
}
}
1 change: 0 additions & 1 deletion src/main/resources/application.properties

This file was deleted.

189 changes: 189 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
# default profile
spring:
application:
name: tree-server
profiles:
group:
dev: common, dev
---
spring:
profiles:
active: dev
servlet:
multipart:
maxFileSize: 10MB
maxRequestSize: 20MB
enabled: true
---
spring:
config:
activate:
on-profile: "common"
springdoc:
swagger-ui:
tags-sorter: alpha # alpha: 알파벳 순 태그 정렬, method: HTTP Method 순 정렬
operations-sorter: alpha # alpha: 알파벳 순 태그 정렬, method: HTTP Method 순 정렬
cache:
disabled: true
use-fqn: true
---
logging:
level:
org.springframework.security.web.FilterChainProxy: DEBUG
spring:
application:
name: tree-server-dev
config:
activate:
on-profile: "dev"
datasource:
username: ${aws.db.username}
password: ${aws.db.password}
url: jdbc:mysql://${aws.db.url}/${aws.db.name}?autoReconnect=true&setTimezone=Asia/Seoul
driver-class-name: com.mysql.cj.jdbc.Driver
sql:
init:
mode: never
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
show_sql: true
format_sql: true
use_sql_comments: true
hbm2ddl:
auto: update
default_batch_fetch_size: 1000
data:
redis:
host: ${REDIS_URL}
port: 6379
jwt:
header: Authorization
# dev server
secret:
key: ${JWT_SECRET}
# secret : ${JWT_SECRET}
authorities-key: authoritiesKey
access-token-validity-in-seconds: 30000 # 30 s
refresh-token-validity-in-seconds: 60000 # 1 min



cloud:
aws:
s3:
bucket: elasticbeanstalk-ap-northeast-2-851725177732
#s3 bucket
region:
static: ap-northeast-2
auto: false
stack:
auto: false
credentials:
access-key: ${ACCESS_KEY}
secret-key: ${SECRET_KEY}
#aws access key, secret key

naver-sms:
accessKey: ${NAVER_SMS_ACCESSKEY}
secretKey: ${NAVER_SMS_SECRET}
serviceId: ${NAVER_SMS_SERVICEID}
senderPhone: ${NAVER_SMS_PHONE}
---
spring:
application:
name: tree-server-local
config:
activate:
on-profile: "local"
datasource:
username: ${aws.db.username}
password: ${aws.db.password}
url: jdbc:mysql://${aws.db.url}/${aws.db.name}?autoReconnect=true&setTimezone=Asia/Seoul
driver-class-name: com.mysql.cj.jdbc.Driver
sql:
init:
mode: never
data:
redis:
host: localhost
port : 6379
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
show_sql: true
format_sql: true
use_sql_comments: true
hbm2ddl:
auto: update
default_batch_fetch_size: 1000
jwt:
header: Authorization
# dev server
secret:
key: ${JWT_SECRET}
# secret : ${JWT_SECRET}
authorities-key: authoritiesKey
access-token-validity-in-seconds: 20000 # 30 m
refresh-token-validity-in-seconds: 30000 # 14 d

cloud:
aws:
s3:
bucket: elasticbeanstalk-ap-northeast-2-851725177732
#s3 bucket
region:
static: ap-northeast-2
auto: false
stack:
auto: false
credentials:
access-key: ${ACCESS_KEY}
secret-key: ${SECRET_KEY}

naver-sms:
accessKey: ${NAVER_SMS_ACCESSKEY}
secretKey: ${NAVER_SMS_SECRET}
serviceId: ${NAVER_SMS_SERVICEID}
senderPhone: ${NAVER_SMS_PHONE}
#spring:
# config:
# activate:
# on-profile: release
# datasource:
# username: ${aws.db.username}
# password: ${aws.db.password}
# url: ${aws.db.url}
# driver-class-name: com.mysql.cj.jdbc.Driver
# sql:
# init:
# mode: never
# jpa:
# properties:
# hibernate:
# dialect: org.hibernate.dialect.MySQLDialect
# # show_sql: true
# # format_sql: true
# use_sql_comments: true
# hbm2ddl:
# auto: update
# default_batch_fetch_size: 1000
# data:
# redis:
# host: ${release.redis.host}
# port: 6379
#jwt:
# header: Authorization
# # dev server
# secret: ${JWT_SECRET}
# # secret : ${JWT_SECRET}
# authorities-key: authoritiesKey
# access-token-validity-in-seconds: 1210000000 # 30 m
# refresh-token-validity-in-seconds: 1210000000 # 14 d
#
#openai:
# token: ${OPEN_API_TOKEN}
# url:
# chat: https://api.openai.com/v1/chat/completions

0 comments on commit 037e6b3

Please sign in to comment.