diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 5f1f6e8..6793cf3 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -6,101 +6,75 @@ on: jobs: CD: +name: Deploy to cloudtype +on: + push: + branches: + - main +jobs: + deploy: runs-on: ubuntu-latest steps: - ## jdk setting - - uses: actions/checkout@v3 - - name: Set up JDK 11 - uses: actions/setup-java@v3 - with: - java-version: '11' - distribution: 'temurin' # https://github.com/actions/setup-java - - ## gradle caching - - name: Gradle Caching - uses: actions/cache@v3 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - ## gradle build - - name: Build with Gradle - run: ./gradlew build -x test - - ## text application build - - name: Test with Gradle - run: ./gradlew test - - ## docker build & push to production - - name: Docker build & push to prod - run: | - docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} - docker build -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }} . - docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }} - - ## deploy to production - - name: Deploy to prod - uses: appleboy/ssh-action@master - id: deploy-prod + - name: Checkout + uses: actions/checkout@v2 + - name: Connect deploy key + uses: cloudtype-github-actions/connect@v1 with: - host: ${{ secrets.HOST_PROD }} - username: ubuntu - key: ${{ secrets.PRIVATE_KEY }} - envs: GITHUB_SHA - script: | - sudo docker rm -f $(docker ps -qa) - sudo docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }} - - cd simblue-server - git pull origin main - - rm -rf .env - touch .env - echo DB_PORT=${{ secrets.DB_PORT }} >> .env - echo DB_NAME=${{ secrets.DB_NAME }} >> .env - echo DB_USERNAME=${{ secrets.DB_USERNAME }} >> .env - echo DB_PASSWORD=${{ secrets.DB_PASSWORD }} >> .env - echo DB_ROOT_PASSWORD=${{ secrets.DB_ROOT_PASSWORD }} >> .env - echo DB_HOST=${{ secrets.DB_HOST }} >> .env - - echo JWT_SECRET=${{ secrets.JWT_SECRET }} >> .env - - echo DOCKER_USERNAME=${{ secrets.DOCKER_USERNAME }} >> .env - echo DOCKER_REPO=${{ secrets.DOCKER_REPO }} >> .env - - echo GOOGLE_BASE_URL=${{ secrets.GOOGLE_BASE_URL }} >> .env - echo GOOGLE_CLIENT=${{ secrets.GOOGLE_CLIENT }} >> .env - echo SIMBLUE_GOOGLE_REDIRECT=${{ secrets.SIMBLUE_GOOGLE_REDIRECT }} >> .env - echo SSAMBLUE_GOOGLE_REDIRECT=${{ secrets.SSAMBLUE_GOOGLE_REDIRECT }} >> .env - echo GOOGLE_SECRET=${{ secrets.GOOGLE_SECRET }} >> .env - echo BUCKET_NAME=${{ secrets.BUCKET_NAME }} >> .env - echo S3_REGION=${{ secrets.S3_REGION }} >> .env - echo S3_ACCESS_KEY=${{ secrets.S3_ACCESS_KEY }} >> .env - echo S3_SECRET_KEY=${{ secrets.S3_SECRET_KEY }} >> .env - - echo REDIS_HOST=${{ secrets.REDIS_HOST }} >> .env - echo REDIS_PORT=${{ secrets.REDIS_PORT }} >> .env - echo REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }} >> .env - - docker-compose up -d - docker image prune -f - - ## time - current-time: - needs: CD - runs-on: ubuntu-latest - steps: - - name: Get Current Time - uses: 1466587594/get-current-time@v2 - id: current-time + token: ${{ secrets.CLOUDTYPE_TOKEN }} + ghtoken: ${{ secrets.GHP_TOKEN }} + - name: Deploy + uses: cloudtype-github-actions/deploy@v1 with: - format: YYYY-MM-DDTHH:mm:ss - utcOffset: "+09:00" # 기준이 UTC이기 때문에 한국시간인 KST를 맞추기 위해 +9시간 추가 - - - name: Print Current Time - run: echo "Current Time=${{steps.current-time.outputs.formattedTime}}" # current-time 에서 지정한 포맷대로 현재 시간 출력 - shell: bash + token: ${{ secrets.CLOUDTYPE_TOKEN }} + project: app.soolung/simblue-application + stage: main + yaml: | + name: simblue-server + app: java@11 + options: + ports: 8080 + env: + - name: DB_NAME + value: ${{ secrets.DB_NAME }} + - name: DB_USERNAME + value: ${{ secrets.DB_USERNAME }} + - name: DB_PASSWORD + value: ${{ secrets.DB_PASSWORD }} + - name: DB_HOST + value: ${{ secrets.DB_HOST }} + - name: DB_PORT + value: ${{ secrets.DB_PORT }} + - name: JWT_SECRET + value: ${{ secrets.JWT_SECRET }} + - name: GOOGLE_BASE_URL + value: ${{ secrets.GOOGLE_BASE_URL }} + - name: GOOGLE_CLIENT + value: ${{ secrets.GOOGLE_CLIENT }} + - name: GOOGLE_SECRET + value: ${{ secrets.GOOGLE_SECRET }} + - name: SIMBLUE_GOOGLE_REDIRECT + value: ${{ secrets.SIMBLUE_GOOGLE_REDIRECT }} + - name: SSAMBLUE_GOOGLE_REDIRECT + value: ${{ secrets.SSAMBLUE_GOOGLE_REDIRECT }} + - name: BUCKET_NAME + value: ${{ secrets.BUCKET_NAME }} + - name: S3_REGION + value: ${{ secrets.S3_REGION }} + - name: S3_ACCESS_KEY + value: ${{ secrets.S3_ACCESS_KEY }} + - name: S3_SECRET_KEY + value: ${{ secrets.S3_SECRET_KEY }} + - name: REDIS_HOST + value: ${{ secrets.REDIS_HOST }} + - name: REDIS_PORT + value: ${{ secrets.REDIS_PORT }} + - name: REDIS_PASSWORD + value: ${{ secrets.REDIS_PASSWORD }} + - name: SPRING_PROFILES_ACTIVE + value: prod + - name: TZ + value: Asia/Seoul + context: + git: + url: git@github.com:${{ github.repository }}.git + ref: ${{ github.ref }} diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 4f8e869..0000000 --- a/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM openjdk:11-jdk -ARG JAR_FILE=build/libs/*.jar -COPY ${JAR_FILE} app.jar -ENV TZ=Asia/Seoul -ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod","/app.jar"] \ No newline at end of file diff --git a/Dockerfile.dev b/Dockerfile.dev deleted file mode 100644 index 123e37f..0000000 --- a/Dockerfile.dev +++ /dev/null @@ -1,5 +0,0 @@ -FROM openjdk:11-jdk -ARG JAR_FILE=build/libs/*.jar -COPY ${JAR_FILE} app.jar -ENV TZ=Asia/Seoul -ENTRYPOINT ["java","-jar","-Dspring.profiles.active=dev","/app.jar"] \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml deleted file mode 100644 index a4d76cf..0000000 --- a/docker-compose.dev.yml +++ /dev/null @@ -1,50 +0,0 @@ -version: '3' - -services: - mysql: - container_name: simblue.dev.db - image: mysql:8.0 - environment: - MYSQL_ROOT_HOST: "%" - MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} - MYSQL_USER: ${DB_USERNAME} - MYSQL_PASSWORD: ${DB_PASSWORD} - MYSQL_DATABASE: ${DB_NAME} - TZ: Asia/Seoul - volumes: - - simblue-volume:/var/lib/mysql - ports: - - "3306:3306" - command: - - "mysqld" - - "--character-set-server=utf8mb4" - - "--collation-server=utf8mb4_unicode_ci" - - redis: - image: redis:7.0-alpine - container_name: simblue.dev.redis - hostname: soolung - command: /bin/sh -c "redis-server --requirepass $$REDIS_PASSWORD" - env_file: - - .env - ports: - - ${REDIS_PORT}:6379 - - application: - container_name: simblue.dev.app - image: ${DOCKER_USERNAME}/${DOCKER_REPO} - expose: - - 8080 - ports: - - "8080:8080" - env_file: - - .env - depends_on: - - mysql - - redis - restart: on-failure - environment: - - TZ="Asia/Seoul" - -volumes: - simblue-volume: { } diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 1c82402..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,67 +0,0 @@ -version: "3" - -services: - nginx: - image: nginx - volumes: - - ./nginx/conf.d:/etc/nginx/conf.d - - ./data/certbot/conf:/etc/letsencrypt - - ./data/certbot/www:/var/www/certbot - depends_on: - - simblue-application - environment: - - TZ="Asia/Seoul" - ports: - - 80:80 - - 443:443 - command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'" - - simblue-database: - image: mysql:8.0 - environment: - MYSQL_DATABASE: ${DB_NAME} - MYSQL_USER: ${DB_USERNAME} - MYSQL_PASSWORD: ${DB_PASSWORD} - MYSQL_ROOT_PASSWORD: root - MYSQL_ROOT_HOST: '%' - TZ: Asia/Seoul - volumes: - - simblue-volume:/var/lib/mysql - ports: - - 3306:3306 - command: - - "mysqld" - - "--character-set-server=utf8mb4" - - "--collation-server=utf8mb4_unicode_ci" - - simblue-redis: - image: redis:7.0-alpine - container_name: soolung_simblue_redis - hostname: soolung - command: /bin/sh -c "redis-server --requirepass $$REDIS_PASSWORD" - env_file: - - .env - ports: - - ${REDIS_PORT}:6379 - - simblue-application: - image: ${DOCKER_USERNAME}/${DOCKER_REPO} - expose: - - 8080 - env_file: - - .env - depends_on: - - simblue-database - environment: - - TZ="Asia/Seoul" - - certbot: - image: certbot/certbot - container_name: certbot_service - volumes: - - ./data/certbot/conf:/etc/letsencrypt - - ./data/certbot/www:/var/www/certbot - entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'" - -volumes: - simblue-volume: { }