From 2a6adf067b1b8bbf1081f4cb68c910dce1644ec4 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Mon, 24 Feb 2025 13:27:28 -0500 Subject: [PATCH 01/15] Test workflow to SSH into EC2 --- .github/workflows/deploy-dev.yaml | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/deploy-dev.yaml diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml new file mode 100644 index 0000000..804ab22 --- /dev/null +++ b/.github/workflows/deploy-dev.yaml @@ -0,0 +1,35 @@ +name: Test deploy on EC2 + +on: + push: + branches: + - dev + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up SSH + run: | + mkdir -p ~/.ssh + echo "${{ secrets.EC2_SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts + + - name: Deploy to EC2 + run: | + ssh ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF' + set -e + cd /data/FEActionsTest/ + + echo "Pulling latest changes..." + git pull origin dev + + echo "Creating test dir" + mkdir test/ + + EOF From 6daf3c9534601a67cdacf785ddda89c5a34e1951 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Mon, 24 Feb 2025 13:38:34 -0500 Subject: [PATCH 02/15] Dockerfile to containerize frontend --- Dockerfile | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3ddd2ad --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +FROM node:18 AS builder + +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm install + +COPY . . + +RUN npm run build + +FROM node:18-alpine + +WORKDIR /app + +COPY --from=builder /app/package.json /app/package-lock.json ./ +RUN npm install --omit=dev + +COPY --from=builder /app/.next /app/.next +COPY --from=builder /app/public /app/public +COPY --from=builder /app/node_modules /app/node_modules + +ENV NODE_ENV=dev + +EXPOSE 3000 + +CMD npm run start From 00a2e0f6e1ecf814e6c5b49e5d9e2f19e38b3963 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Mon, 24 Feb 2025 14:00:04 -0500 Subject: [PATCH 03/15] Update workflow to build docker image and run container --- .github/workflows/deploy-dev.yaml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index 804ab22..a35c9f1 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -29,7 +29,13 @@ jobs: echo "Pulling latest changes..." git pull origin dev - echo "Creating test dir" - mkdir test/ + echo "Building Docker image..." + docker build -t fe-test:dev . + echo "Stopping and removing old container" + docker stop fe-test-dev || true + docker rm fe-test-dev || true + + echo "Starting new container..." + docker run -d --name fe-test-dev -p 3006:3000 fe-test:dev EOF From 15a8d952131a75e9a6aedce2759ba2c016ee5153 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Mon, 24 Feb 2025 16:25:16 -0500 Subject: [PATCH 04/15] Deploy to different locations based on branch --- .github/workflows/deploy-dev.yaml | 32 +++++++++++++++++++++++-------- Dockerfile | 27 -------------------------- Dockerfile.dev | 14 ++++++++++++++ Dockerfile.prod | 16 ++++++++++++++++ 4 files changed, 54 insertions(+), 35 deletions(-) delete mode 100644 Dockerfile create mode 100644 Dockerfile.dev create mode 100644 Dockerfile.prod diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index a35c9f1..92e5258 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -13,6 +13,20 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 + - name: Set environment variables + run: | + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + echo "DEPLOY_DIR=/data/MusicCPRFEProd" >> $GITHUB_ENV + echo "IMAGE_NAME=frontend:prod" >> $GITHUB_ENV + echo "CONTAINER_NAME=frontend-prod" >> $GITHUB_ENV + echo "DOCKERFILE=Dockerfile.prod" >> $GITHUB_ENV + else + echo "DEPLOY_DIR=/data/FEActionsTest" >> $GITHUB_ENV + echo "IMAGE_NAME=frontend:dev" >> $GITHUB_ENV + echo "CONTAINER_NAME=frontend-dev" >> $GITHUB_ENV + echo "DOCKERFILE=Dockerfile.dev" >> $GITHUB_ENV + fi + - name: Set up SSH run: | mkdir -p ~/.ssh @@ -24,18 +38,20 @@ jobs: run: | ssh ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF' set -e - cd /data/FEActionsTest/ + echo "Deploying to $DEPLOY_DIR..." + cd $DEPLOY_DIR + echo "Pulling latest changes..." - git pull origin dev - - echo "Building Docker image..." - docker build -t fe-test:dev . + git pull origin ${{ github.ref_name }} echo "Stopping and removing old container" - docker stop fe-test-dev || true - docker rm fe-test-dev || true + docker stop $CONTAINER_NAME || true + docker rm $CONTAINER_NAME || true + + echo "Building new image..." + docker build -t $IMAGE_NAME $DOCKERFILE echo "Starting new container..." - docker run -d --name fe-test-dev -p 3006:3000 fe-test:dev + docker run -d --name $CONTAINER_NAME -p 3006:3000 $IMAGE_NAME EOF diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 3ddd2ad..0000000 --- a/Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -FROM node:18 AS builder - -WORKDIR /app - -COPY package.json package-lock.json ./ -RUN npm install - -COPY . . - -RUN npm run build - -FROM node:18-alpine - -WORKDIR /app - -COPY --from=builder /app/package.json /app/package-lock.json ./ -RUN npm install --omit=dev - -COPY --from=builder /app/.next /app/.next -COPY --from=builder /app/public /app/public -COPY --from=builder /app/node_modules /app/node_modules - -ENV NODE_ENV=dev - -EXPOSE 3000 - -CMD npm run start diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..565bd84 --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,14 @@ +FROM node:18 + +ARG NOVE_ENV=production +ENV NODE_ENV=$NODE_ENV + +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm install + +COPY . . + +CMD ["npm", "run", "dev"] + diff --git a/Dockerfile.prod b/Dockerfile.prod new file mode 100644 index 0000000..1e3e696 --- /dev/null +++ b/Dockerfile.prod @@ -0,0 +1,16 @@ +FROM node:18 + +ARG NOVE_ENV=production +ENV NODE_ENV=$NODE_ENV + +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm install + +COPY . . + +RUN npm run build + +CMD ["npm", "run", "start"] + From 5c207dd3e3ae77ceb41880d639e15be917a3f499 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Mon, 24 Feb 2025 16:31:35 -0500 Subject: [PATCH 05/15] Use proper reference to environment variables --- .github/workflows/deploy-dev.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index 92e5258..16549cb 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -38,20 +38,20 @@ jobs: run: | ssh ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF' set -e - echo "Deploying to $DEPLOY_DIR..." + echo "Deploying to ${{ env.DEPLOY_DIR }}..." - cd $DEPLOY_DIR + cd ${{ env.DEPLOY_DIR }} echo "Pulling latest changes..." git pull origin ${{ github.ref_name }} echo "Stopping and removing old container" - docker stop $CONTAINER_NAME || true - docker rm $CONTAINER_NAME || true + docker stop ${{ env.CONTAINER_NAME }}|| true + docker rm ${{ env.CONTAINER_NAME }}|| true echo "Building new image..." - docker build -t $IMAGE_NAME $DOCKERFILE + docker build -t ${{ env.IMAGE_NAME }} -f ${{ env.DOCKERFILE }} . echo "Starting new container..." - docker run -d --name $CONTAINER_NAME -p 3006:3000 $IMAGE_NAME + docker run -d --name ${{ env.CONTAINER_NAME }} -p 3006:3000 ${{ env.IMAGE_NAME }} EOF From 1eeec53ca7ce1ac137a30701fa8b2104d1f0f74a Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Mon, 24 Feb 2025 16:44:27 -0500 Subject: [PATCH 06/15] Revert to singular Dockerfile --- .github/workflows/deploy-dev.yaml | 8 ++++---- Dockerfile.prod => Dockerfile | 0 Dockerfile.dev | 14 -------------- 3 files changed, 4 insertions(+), 18 deletions(-) rename Dockerfile.prod => Dockerfile (100%) delete mode 100644 Dockerfile.dev diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index 16549cb..cce4af6 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -19,12 +19,12 @@ jobs: echo "DEPLOY_DIR=/data/MusicCPRFEProd" >> $GITHUB_ENV echo "IMAGE_NAME=frontend:prod" >> $GITHUB_ENV echo "CONTAINER_NAME=frontend-prod" >> $GITHUB_ENV - echo "DOCKERFILE=Dockerfile.prod" >> $GITHUB_ENV + echo "HOST_PORT=3000" >> $GITHUB_ENV else echo "DEPLOY_DIR=/data/FEActionsTest" >> $GITHUB_ENV echo "IMAGE_NAME=frontend:dev" >> $GITHUB_ENV echo "CONTAINER_NAME=frontend-dev" >> $GITHUB_ENV - echo "DOCKERFILE=Dockerfile.dev" >> $GITHUB_ENV + echo "HOST_PORT=3006" >> $GITHUB_ENV fi - name: Set up SSH @@ -50,8 +50,8 @@ jobs: docker rm ${{ env.CONTAINER_NAME }}|| true echo "Building new image..." - docker build -t ${{ env.IMAGE_NAME }} -f ${{ env.DOCKERFILE }} . + docker build -t ${{ env.IMAGE_NAME }} . echo "Starting new container..." - docker run -d --name ${{ env.CONTAINER_NAME }} -p 3006:3000 ${{ env.IMAGE_NAME }} + docker run -d --name ${{ env.CONTAINER_NAME }} -p ${{ env.HOST_PORT }}:3000 ${{ env.IMAGE_NAME }} EOF diff --git a/Dockerfile.prod b/Dockerfile similarity index 100% rename from Dockerfile.prod rename to Dockerfile diff --git a/Dockerfile.dev b/Dockerfile.dev deleted file mode 100644 index 565bd84..0000000 --- a/Dockerfile.dev +++ /dev/null @@ -1,14 +0,0 @@ -FROM node:18 - -ARG NOVE_ENV=production -ENV NODE_ENV=$NODE_ENV - -WORKDIR /app - -COPY package.json package-lock.json ./ -RUN npm install - -COPY . . - -CMD ["npm", "run", "dev"] - From 44d798d70ee6b36504a6a3a3da22a9536b921d54 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Wed, 26 Feb 2025 12:27:30 -0500 Subject: [PATCH 07/15] Remove unused environment var from dockerfile --- Dockerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1e3e696..694022d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,5 @@ FROM node:18 -ARG NOVE_ENV=production -ENV NODE_ENV=$NODE_ENV - WORKDIR /app COPY package.json package-lock.json ./ From 71f79595b5669a537cdd4347f717f075eee1c548 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Wed, 26 Feb 2025 12:31:17 -0500 Subject: [PATCH 08/15] Remove old docker image before building new one --- .github/workflows/deploy-dev.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index cce4af6..e351a2a 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -49,6 +49,9 @@ jobs: docker stop ${{ env.CONTAINER_NAME }}|| true docker rm ${{ env.CONTAINER_NAME }}|| true + echo "Removing old container" + docker rmi ${{ env.IMAGE_NAME }} || true + echo "Building new image..." docker build -t ${{ env.IMAGE_NAME }} . From 255dfd2361582dc35275495039803a616b09af51 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Wed, 26 Feb 2025 12:42:21 -0500 Subject: [PATCH 09/15] Test with real dev site --- .github/workflows/deploy-dev.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index e351a2a..994cd26 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -21,10 +21,10 @@ jobs: echo "CONTAINER_NAME=frontend-prod" >> $GITHUB_ENV echo "HOST_PORT=3000" >> $GITHUB_ENV else - echo "DEPLOY_DIR=/data/FEActionsTest" >> $GITHUB_ENV + echo "DEPLOY_DIR=/data/MusicCPRFEDev" >> $GITHUB_ENV echo "IMAGE_NAME=frontend:dev" >> $GITHUB_ENV echo "CONTAINER_NAME=frontend-dev" >> $GITHUB_ENV - echo "HOST_PORT=3006" >> $GITHUB_ENV + echo "HOST_PORT=3003" >> $GITHUB_ENV fi - name: Set up SSH From 68062a382ce5af41537cec23b3f5b55f4ed219a9 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Wed, 26 Feb 2025 13:00:48 -0500 Subject: [PATCH 10/15] Swap ports of dev and prod --- .github/workflows/deploy-dev.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index 994cd26..655a7b0 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -19,12 +19,12 @@ jobs: echo "DEPLOY_DIR=/data/MusicCPRFEProd" >> $GITHUB_ENV echo "IMAGE_NAME=frontend:prod" >> $GITHUB_ENV echo "CONTAINER_NAME=frontend-prod" >> $GITHUB_ENV - echo "HOST_PORT=3000" >> $GITHUB_ENV + echo "HOST_PORT=3003" >> $GITHUB_ENV else echo "DEPLOY_DIR=/data/MusicCPRFEDev" >> $GITHUB_ENV echo "IMAGE_NAME=frontend:dev" >> $GITHUB_ENV echo "CONTAINER_NAME=frontend-dev" >> $GITHUB_ENV - echo "HOST_PORT=3003" >> $GITHUB_ENV + echo "HOST_PORT=3000" >> $GITHUB_ENV fi - name: Set up SSH From 494af33cb0957c92f81157d1f8c098bde2ec1475 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Wed, 26 Feb 2025 13:19:46 -0500 Subject: [PATCH 11/15] Add nextauth to env of container --- .github/workflows/deploy-dev.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index 655a7b0..22b4afc 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -53,7 +53,7 @@ jobs: docker rmi ${{ env.IMAGE_NAME }} || true echo "Building new image..." - docker build -t ${{ env.IMAGE_NAME }} . + docker build --build-arg SECRET=${{ secrets.NEXTAUTH_SECRET }} -t ${{ env.IMAGE_NAME }} . echo "Starting new container..." docker run -d --name ${{ env.CONTAINER_NAME }} -p ${{ env.HOST_PORT }}:3000 ${{ env.IMAGE_NAME }} From 481c6d2d5b1af1bc278a917cd0201a93fbd2cfd8 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Wed, 26 Feb 2025 13:26:53 -0500 Subject: [PATCH 12/15] Write secret directly to env file --- .github/workflows/deploy-dev.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index 22b4afc..605fa6a 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -43,7 +43,9 @@ jobs: cd ${{ env.DEPLOY_DIR }} echo "Pulling latest changes..." - git pull origin ${{ github.ref_name }} + git pull origin ${{ github.ref_name }} + + echo "SECRET=${{ secrets.NEXTAUTH_SECRET }}" >> .env.production echo "Stopping and removing old container" docker stop ${{ env.CONTAINER_NAME }}|| true @@ -53,7 +55,7 @@ jobs: docker rmi ${{ env.IMAGE_NAME }} || true echo "Building new image..." - docker build --build-arg SECRET=${{ secrets.NEXTAUTH_SECRET }} -t ${{ env.IMAGE_NAME }} . + docker build -t ${{ env.IMAGE_NAME }} . echo "Starting new container..." docker run -d --name ${{ env.CONTAINER_NAME }} -p ${{ env.HOST_PORT }}:3000 ${{ env.IMAGE_NAME }} From 151a473d7ac337f2e7cca6a8763eb09e54f1a3f3 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Wed, 26 Feb 2025 13:36:57 -0500 Subject: [PATCH 13/15] Echo newline into env file --- .github/workflows/deploy-dev.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index 605fa6a..cb861a1 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -45,7 +45,7 @@ jobs: echo "Pulling latest changes..." git pull origin ${{ github.ref_name }} - echo "SECRET=${{ secrets.NEXTAUTH_SECRET }}" >> .env.production + echo $'\nSECRET=${{ secrets.NEXTAUTH_SECRET }}' >> .env.production echo "Stopping and removing old container" docker stop ${{ env.CONTAINER_NAME }}|| true From 3978b86a8d64add8723b339a49321854a1cf5c4a Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Wed, 26 Feb 2025 13:39:40 -0500 Subject: [PATCH 14/15] Take secret part out - that doesn't need to happen every deploy --- .github/workflows/deploy-dev.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index cb861a1..20ea973 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -45,8 +45,6 @@ jobs: echo "Pulling latest changes..." git pull origin ${{ github.ref_name }} - echo $'\nSECRET=${{ secrets.NEXTAUTH_SECRET }}' >> .env.production - echo "Stopping and removing old container" docker stop ${{ env.CONTAINER_NAME }}|| true docker rm ${{ env.CONTAINER_NAME }}|| true From 07b4c64073a1050caa27d8af45eb0f29ebe4cfb8 Mon Sep 17 00:00:00 2001 From: Adam Vinch Date: Mon, 3 Mar 2025 12:59:23 -0500 Subject: [PATCH 15/15] Add main branch to workflow --- .github/workflows/deploy-dev.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index 20ea973..9f55605 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -3,6 +3,7 @@ name: Test deploy on EC2 on: push: branches: + - main - dev jobs: