diff --git a/.github/workflows/server-deploy.yml b/.github/workflows/server-deploy.yml index f4481aa..0bc0932 100644 --- a/.github/workflows/server-deploy.yml +++ b/.github/workflows/server-deploy.yml @@ -1,4 +1,4 @@ -name: If push to the main, deploy it +name: If push to the main, deploy it - server on: workflow_dispatch: @@ -13,10 +13,8 @@ jobs: runs-on: ubuntu-latest env: - ACR_NAME: ${{ secrets.ACR_NAME }} #woowasiblings - APP_NAME: canbus-server - APP_ENV: canbus-server-env - RG_NAME: ${{ secrets.RG_NAME }} #rg-2024-Woowa-Siblings + APP_NAME: ${{ secrets.SERVICE_NAME }}-server + APP_ENV: ${{ secrets.SERVICE_NAME }}-server-env steps: @@ -37,14 +35,14 @@ jobs: uses: azure/container-apps-deploy-action@v0 with: appSourcePath: ${{ github.workspace }}/${{ env.APP_NAME }} - acrName: ${{ env.ACR_NAME }} + acrName: ${{ secrets.ACR_NAME }} acrUsername: ${{ secrets.ACR_USERNAME }} acrPassword: ${{ secrets.ACR_PASSWORD }} containerAppName: ${{ env.APP_NAME }} containerAppEnvironment: ${{ env.APP_ENV }} - resourceGroup: ${{ env.RG_NAME }} - imageToBuild: ${{ env.ACR_NAME }}.azurecr.io/${{ env.APP_NAME }}:${{ github.sha }} + resourceGroup: ${{ secrets.RG_NAME }} + imageToBuild: ${{ secrets.ACR_NAME }}.azurecr.io/${{ env.APP_NAME }}:${{ github.sha }} dockerfilePath: Dockerfile - name: Azure Container Apps Ingress Setting - run: az containerapp ingress update --name ${{ env.APP_NAME }} --resource-group ${{ env.RG_NAME }} --target-port 8080 --allow-insecure + run: az containerapp ingress update --name ${{ env.APP_NAME }} --resource-group ${{ secrets.RG_NAME }} --target-port 8080 --allow-insecure diff --git a/.github/workflows/web-deploy.yml b/.github/workflows/web-deploy.yml index fce1e06..49c9805 100644 --- a/.github/workflows/web-deploy.yml +++ b/.github/workflows/web-deploy.yml @@ -1,4 +1,4 @@ -name: If push to the main, deploy it +name: If push to the main, deploy it - web on: workflow_dispatch: @@ -13,10 +13,8 @@ jobs: runs-on: ubuntu-latest env: - ACR_NAME: ${{ secrets.ACR_NAME }} #woowasiblings - APP_NAME: canbus-web - APP_ENV: canbus-web-env - RG_NAME: ${{ secrets.RG_NAME }} #rg-2024-Woowa-Siblings + APP_NAME: ${{ secrets.SERVICE_NAME }}-web + APP_ENV: ${{ secrets.SERVICE_NAME }}-web-env steps: @@ -32,14 +30,14 @@ jobs: uses: azure/container-apps-deploy-action@v0 with: appSourcePath: ${{ github.workspace }}/${{ env.APP_NAME }} - acrName: ${{ env.ACR_NAME }} + acrName: ${{ secrets.ACR_NAME }} acrUsername: ${{ secrets.ACR_USERNAME }} acrPassword: ${{ secrets.ACR_PASSWORD }} containerAppName: ${{ env.APP_NAME }} containerAppEnvironment: ${{ env.APP_ENV }} - resourceGroup: ${{ env.RG_NAME }} - imageToBuild: ${{ env.ACR_NAME }}.azurecr.io/${{ env.APP_NAME }}:${{ github.sha }} + resourceGroup: ${{ secrets.RG_NAME }} + imageToBuild: ${{ secrets.ACR_NAME }}.azurecr.io/${{ env.APP_NAME }}:${{ github.sha }} dockerfilePath: Dockerfile - name: Azure Container Apps Ingress Setting - run: az containerapp ingress update --name ${{ env.APP_NAME }} --resource-group ${{ env.RG_NAME }} --target-port 3000 --allow-insecure + run: az containerapp ingress update --name ${{ env.APP_NAME }} --resource-group ${{ secrets.RG_NAME }} --target-port 3000 --allow-insecure diff --git a/INFRA_DEPLOY.md b/INFRA_DEPLOY.md deleted file mode 100644 index 18d3fc1..0000000 --- a/INFRA_DEPLOY.md +++ /dev/null @@ -1,70 +0,0 @@ -# INFRA_DEPLOY - -**아래의 “리소스”라는 용어는 진행하고 있는 그 챕터의 리소스를 말합니다 (제목)** - -이 문서에서 Github Actions 관련 작업은 https://github.com/rlawhddbs/hg-2024-Woowa-Siblings 레포지토리를 우측 상단에 있는 Fork 버튼을 눌러 본인 소유의 레포지토리로 Fork를 한 후 작업합니다 - -### Azure Database for MySQL 서버 - ---- - -1. Azure Database for MySQL 서버를 검색해서 들어갑니다. -2. 리소스 만들기 버튼을 클릭하고, 유연한 서버 탭의 만들기를 클릭한다. -3. 본인 팀의 리소스 그룹을 선택한다. -4. 서버 이름을 기입한다 -5. 관리자 사용자 이름, 암호, 암호 확인을 기입한다. -6. 네트워킹 탭에서 가서 `+ 0.0.0.0 - 255.255.255.255 추가`를 선택한다. -7. 검토 + 만들기를 선택한다. -8. 만들기를 누르고 리소스가 생성될 때까지 대기한다. -9. https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem 링크에서 pem 파일을 다운받는다. -10. 리소스의 설정 - 연결 탭에 들어가 적혀있는 연결 방법을 따라 DB에 연결한다. (이 밑은 MySQL Workbench를 기준으로 설명한다) - 1. **MySQL 연결** 탭에서 **+** 기호를 클릭하여 새 연결을 추가합니다. - 2. **연결 이름** 필드에 연결 이름을 입력합니다. - 3. 연결 형식으로 **표준(TCP/IP)**을(를) 선택합니다. - 4. 호스트 이름 필드에 **서버 이름**을(를) 입력하세요. - 5. **사용자 이름**을 입력한 후 **암호**을(를) 입력합니다. - 6. **SSL 탭**(으)로 이동하여 SSL 사용 필드를 필수로 업데이트합니다. - 7. **SL CA 파일** 필드에 아까 다운로드 받은 **DigiCertGlobalRootCA.crt.pem** 파일의 파일 위치를 입력합니다. - 8. **연결 테스트**을(를) 클릭하여 연결을 테스트합니다. - 9. 연결에 성공하면 **확인**을(를) 클릭하여 연결을 저장합니다. -11. 만든 연결을 통해 DB에 연결합니다. -12. Schema 탭을 우클릭하고, Create Schema 버튼을 클릭합니다. -13. Schema Name 칸에 canbus_db를 기입하고 Add 버튼을 클릭합니다. - -### 컨테이너 레지스트리 - ---- - -1. Azure Database for MySQL 서버를 검색해서 들어갑니다. -2. 리소스 만들기 버튼을 클릭한다. -3. 본인 팀의 리소스 그룹을 선택한다. -4. 레지스트리 이름을 기입한다. -5. 검토 + 만들기를 선택한다. -6. 만들기를 누르고 리소스가 생성될 때까지 대기한다. -7. 설정 - 액세스 키에 가서 관리 사용자 박스에 체크를 한다. -8. 사용자 이름과 password를 각각 복사 해놓는다 - -![아래의 New repository secret을 찾아가는 방법](images/github_actions_secret.png) - -8. Github 팀 Repository - Setting - Secrets and Variables - Actions 탭에서 New repository secret 버튼을 누른다. -9. Name 란에 AZURE_USERNAME을 기입하고, Secret 란에 복사 해둔 사용자 이름을 넣고 Add secret 버튼을 누른다. -10. Name 란에 AZURE_PASSWORD을 기입하고, Secret 란에 복사 해둔 password를 넣고 Add secret 버튼을 누른다. - -### Azure Credentials - ---- - -(bash, powershell, ternimal 등 CLI 환경에서 진행한다) - -1. Azure CLI 기준으로 다음의 명령어를 입력하면 로그인 화면으로 이동하게 되는데, Azure 구독이 있는 계정으로 로그인을 하면 json이 반환된다. - - ```bash - az login - az ad sp create-for-rbac --name --role contributor --scopes /subscriptions//resourceGroups/ --json-auth --output json - ``` - -![아래의 New repository secret을 찾아가는 방법](images/github_actions_secret.png) - -2. Github 팀 Repository - Setting - Secrets and Variables - Actions 탭에서 New repository secret 버튼을 누른다. -3. Name 란에 AZURE_CREDENTIALS를 기입하고, Secret 란에 위에 명령어를 치고 나온 json을 붙여넣고 - Add secret 버튼을 누른다. diff --git a/README.md b/README.md index 9d44b48..5952df8 100644 --- a/README.md +++ b/README.md @@ -47,10 +47,109 @@ > 여러분의 제품/서비스를 Microsoft 애저 클라우드에 배포하기 위한 절차를 구체적으로 나열해 주세요. > -**INFRA -> SERVER -> WEB 순으로 진행하셔야 합니다** - -[인프라 배포하기](INFRA_DEPLOY.md) - -[서버 배포하기](SERVER_DEPLOY.md) - -[웹 배포하기](WEB_DEPLOY.md) +이 문서에서 Github Actions 관련 작업은 https://github.com/hackersground-kr/hg-2024-Woowa-Siblings 레포지토리를 우측 상단에 있는 Fork 버튼을 눌러 본인 소유의 레포지토리로 Fork를 한 후 작업합니다 + +0. Fork 받은 Repository를 클론해옵니다 + +```bash +git clone https://github.com/<자신의 GitHub ID>/hg-2024-Woowa-Siblings +``` + +1. 레포지토리를 클론 받아온 위치에서 Windows는 CMD, Mac은 터미널을 실행합니다. +2. 작업을 진행하기 위해 변수에 필요한 정보를 저장하고 시작합니다. + +```bash +TEAM_NAME= +SERVICE_NAME= # canbus로 하는 것을 추천합니다 +RG_NAME= +REPO= +DB_USERNAME= +DB_PASSWORD= # 영어, 숫자, 특수문자 포함해야 합니다 (비밀번호에 !를 사용할 경우 ! 앞에 백틱을 꼭 붙여줘야 합니다! ex) \! ) +``` + +3. canbus-server/ 경로에 .env 파일이 존재하지 않으면 템플릿을 만듭니다 + +```bash +if [ ! -f canbus-server/.env ]; then + echo 'DB_URL=' > canbus-server/.env + echo 'DB_SCHEMA=' >> canbus-server/.env + echo 'DB_USERNAME=' >> canbus-server/.env + echo 'DB_PASSWORD=' >> canbus-server/.env + echo '' >> canbus-server/.env + echo 'JWT_ACCESS_KEY=' >> canbus-server/.env + echo 'JWT_REFRESH_KEY=' >> canbus-server/.env + echo 'JWT_ACCESS_EXPIRED=' >> canbus-server/.env + echo 'JWT_REFRESH_EXPIRED=' >> canbus-server/.env +fi +``` + +4. 2에서 기입했던 내용에 맞게 .env 파일을 수정하고 ENV_FILE 변수에 파일 내용을 저장합니다 + +```bash +sed -i '' "s/^DB_URL=.*/DB_URL=$TEAM_NAME-db.mysql.database.azure.com/" canbus-server/.env +sed -i '' "s/^DB_SCHEMA=.*/DB_SCHEMA=$SERVICE_NAME-db/" canbus-server/.env +sed -i '' "s/^DB_USERNAME=.*/DB_USERNAME=$DB_USERNAME/" canbus-server/.env +sed -i '' "s/^DB_PASSWORD=.*/DB_PASSWORD=$DB_PASSWORD/" canbus-server/.env +sed -i '' "s/^JWT_ACCESS_KEY=.*/JWT_ACCESS_KEY=asdadsdas-access-token-sign-key/" canbus-server/.env +sed -i '' "s/^JWT_REFRESH_KEY=.*/JWT_REFRESH_KEY=asdadasasda-refresh-token-sign-key/" canbus-server/.env +sed -i '' "s/^JWT_ACCESS_EXPIRED=.*/JWT_ACCESS_EXPIRED=1/" canbus-server/.env +sed -i '' "s/^JWT_REFRESH_EXPIRED=.*/JWT_REFRESH_EXPIRED=7/" canbus-server/.env + +ENV_FILE=$(cat canbus-server/.env) +``` + +5. Azure와 Github에 로그인을 하고 AZURE_CREDENTIALS 변수에 값을 저장합니다 + +```bash +az login +gh auth login + +AZURE_CREDENTIALS=$(az ad sp create-for-rbac \ + --name $TEAM_NAME-credentials \ + --role contributor \ + --scopes /subscriptions/bfa39d86-1058-4824-8074-e9d283d6c321/resourceGroups/$RG_NAME \ + --json-auth \ + --output json) +``` + +6. github에 secret을 설정합니다 + +```bash +gh secret set TEAM_NAME --body "$TEAM_NAME" --repo $REPO +gh secret set SERVICE_NAME --body "$SERVICE_NAME" --repo $REPO +gh secret set RG_NAME --body "$RG_NAME" --repo $REPO +gh secret set ENV_FILE --body "$ENV_FILE" --repo $REPO +gh secret set AZURE_CREDENTIALS --body "$AZURE_CREDENTIALS" --repo $REPO +``` + +7. 2에서 기입한 내용과 infra.bicep 파일을 기반으로 DB와 Container Registry를 배포합니다 + +```bash +az deployment group create \ + --resource-group $RG_NAME \ + --template-file canbus-infra/infra.bicep \ + --parameters teamName=$TEAM_NAME \ + --parameters username=$DB_USERNAME \ + --parameters password=$DB_PASSWORD +``` + +8. 만들어진 컨테이너 레지스트리 리소스에 들어가 1번과 2번을 눌러 액세스 키 탭에 들어와주시고 + 사용자 이름과 password를 메모장에 복사해놓습니다 + +![](images/Frame_770.png) + +9. 자동화 배포를 사용하기 위해서 앞서 받은 ACR 정보를 기입하고, secret에 추가합니다 + +```bash +gh secret set ACR_NAME --body <레지스트리 이름> --repo $REPO +gh secret set ACR_USERNAME --body <복사해둔 사용자 이름> --repo $REPO +gh secret set ACR_PASSWORD --body <복사해둔 password> --repo $REPO +``` + +10. 1번, 2번, 3번 순서대로 클릭하여 서버 배포를 시작합니다 + +![](images/Frame_771.png) + +11. 1번, 2번, 3번 순서대로 클릭하여 웹 배포를 시작합니다 + +![](images/Frame_772.png) \ No newline at end of file diff --git a/SERVER_DEPLOY.md b/SERVER_DEPLOY.md deleted file mode 100644 index ee16eb5..0000000 --- a/SERVER_DEPLOY.md +++ /dev/null @@ -1,15 +0,0 @@ -# SERVER_DEPLOY - -### 서버 배포 - -![아래의 New repository secret을 찾아가는 방법](images/github_actions_secret.png) - -1. Github 팀 Repository - Setting - Secrets and Variables - Actions 탭에서 New repository secret 버튼을 누른다. -2. Name 란에 ACR_NAME을 기입하고, Secret 란에 Container Registry의 이름을 기입하고 Add secret 버튼을 누른다. -3. Name 란에 RG_NAME을 기입하고, Secret 란에 본인의 리소스 그룹을 기입하고 Add secret 버튼을 누른다. -4. Name 란에 ENV_FILE을 기입하고, Secret 란에 넘겨받은 .env 파일의 내용을 붙여넣고 Add secret 버튼을 누른다. - -[hg-2024-Woowa-Siblings](https://github.com/hackersground-kr/hg-2024-Woowa-Siblings) 레포지토리에는 canbus-server, canbus-web 두가지 모듈이 존재하는데, - -canbus-server 모듈 안에 있는 파일이 변경된 commit을 main에 push 하게 되면 Github Actions workflow가 작동해서 서버 배포가 자동으로 진행된다. -(.gitignore 주석만 살짝 수정하는 식으로 테스트하시면 됩니다) \ No newline at end of file diff --git a/WEB_DEPLOY.md b/WEB_DEPLOY.md deleted file mode 100644 index 4228f29..0000000 --- a/WEB_DEPLOY.md +++ /dev/null @@ -1,8 +0,0 @@ -# WEB_DEPLOY - -### 웹 배포 - -[hg-2024-Woowa-Siblings](https://github.com/hackersground-kr/hg-2024-Woowa-Siblings) 레포지토리에는 canbus-server, canbus-web 두가지 모듈이 존재하는데, - -canbus-server 모듈 안에 있는 파일이 변경된 commit을 main에 push 하게 되면 Github Actions workflow가 작동해서 서버 배포가 자동으로 진행된다. -(.gitignore 주석만 살짝 수정하는 식으로 테스트하시면 됩니다) \ No newline at end of file diff --git a/canbus-infra/infra.bicep b/canbus-infra/infra.bicep new file mode 100644 index 0000000..d452c0d --- /dev/null +++ b/canbus-infra/infra.bicep @@ -0,0 +1,39 @@ +param location string = resourceGroup().location + +param teamName string + +@secure() +param username string + +@secure() +param password string + +resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-07-01' = { + name: teamName + location: location + sku: { + name: 'Basic' + } + properties: { + adminUserEnabled: true + } +} + +resource mySQLdb 'Microsoft.DBforMySQL/flexibleServers@2023-12-30' = { + name: '${teamName}-db' + location: location + properties: { + administratorLogin: username + administratorLoginPassword: password + createMode: 'Default' + } +} + +resource firewall 'Microsoft.DBforMySQL/flexibleServers/firewallRules@2023-12-30' = { + name: 'firewallrules' + parent: mySQLdb + properties: { + endIpAddress: '255.255.255.255' + startIpAddress: '0.0.0.0' + } +} diff --git a/canbus-web/busRoute/busRoute.html b/canbus-web/busRoute/busRoute.html index 5ac7ba2..97670b0 100644 --- a/canbus-web/busRoute/busRoute.html +++ b/canbus-web/busRoute/busRoute.html @@ -10,6 +10,7 @@ crossorigin href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css" /> +