Skip to content

Merge pull request #12 from SWM-15th-Dnight/feature/timezone #11

Merge pull request #12 from SWM-15th-Dnight/feature/timezone

Merge pull request #12 from SWM-15th-Dnight/feature/timezone #11

Workflow file for this run

name: Ai server Deploy to Amazon ECR
on:
push:
branches: [ "develop" ]
env:
AWS_REGION: ap-northeast-2 # set this to your preferred AWS region, e.g. us-west-1
ECR_REPOSITORY: ${{ secrets.AI_SERVER_ECR_REPOSITORY}} # set this to your Amazon ECR repository name
EC2_HOST: ${{ secrets.CALINIFY_MONO_EC2_HOST }}
EC2_USER: ${{ secrets.CALINIFY_MONO_EC2_USER }}
EC2_PEM_KEY: ${{ secrets.CALINIFY_MONO_EC2_PEM_KEY }}
ECR_IAM_ACCESS_KEY: ${{ secrets.AWS_ECR_IAM_ACCESS_KEY }}
ECR_IAM_SECRET_KEY: ${{ secrets.AWS_ECR_IAM_SECRET_ACCESS_KEY }}
IMAGE_TAG: AI-server
permissions:
contents: read
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: dev
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ env.ECR_IAM_ACCESS_KEY }}
aws-secret-access-key: ${{ env.ECR_IAM_SECRET_KEY }}
aws-region: ${{ env.AWS_REGION }}
- 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 }}
run: |
docker build -t $ECR_REGISTRY/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} .
docker push $ECR_REGISTRY/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
- name: Create .env file
run: |
echo "CALINIFY_DATABASE_HOST=${{ secrets.CALINIFY_DATABASE_HOST }}" >> .env
echo "CALINIFY_DATABASE_PASSWORD=${{ secrets.CALINIFY_DATABASE_PASSWORD }}" >> .env
echo "CALINIFY_DATABASE_PORT=${{ secrets.CALINIFY_DATABASE_PORT }}" >> .env
echo "CALINIFY_DATABASE_TABLE_NAME=${{ secrets.CALINIFY_DATABASE_TABLE_NAME }}" >> .env
echo "CALINIFY_DATABASE_USERNAME=${{ secrets.CALINIFY_DATABASE_USERNAME }}" >> .env
echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" >> .env
echo "GPT_PLAIN_TEXT_MODEL=${{ secrets.GPT_PLAIN_TEXT_MODEL }}" >> .env
echo "CALINIFY_AI_SERVER_PROFILE=${{ secrets.CALINIFY_AI_SERVER_PROFILE }}" >> .env
- name: Setup SSH
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ env.EC2_PEM_KEY }}
- name: Deploy Docker image to EC2
run: |
# SSH into EC2 and run Docker commands
scp -o StrictHostKeyChecking=no .env ${{ env.EC2_USER }}@${{ env.EC2_HOST }}:/home/${{ env.EC2_USER }}/.env
ssh -o StrictHostKeyChecking=no ${{ env.EC2_USER }}@${{ env.EC2_HOST }} << 'EOF'
# Set timezone to Asia/Seoul
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# Login to ECR
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin ${{ steps.login-ecr.outputs.registry }}
sudo docker login -u AWS -p $(aws ecr get-login-password --region ap-northeast-2) ${{ steps.login-ecr.outputs.registry }}
# Pull the Docker image
sudo docker pull ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
if sudo docker ps -a --format '{{.Names}}' | grep -q '^ai-server-dev$'; then
# Stop and remove the existing container
sudo docker stop ai-server-dev
sudo docker rm ai-server-dev
fi
# Run the new Docker container
sudo docker run -d --name ai-server-dev --env-file /home/${{ env.EC2_USER }}/.env -p 5050:5050 ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
EOF