diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 07fca3f..4f61602 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -10,17 +10,13 @@ jobs: PORT: ${{ secrets.PORT }} MONGODB_URI_DEV: ${{ secrets.MONGODB_URI_DEV }} MONGODB_URI_PROD: ${{ secrets.MONGODB_URI_PROD }} - AWS_ACCESS_KEY_ID_DEV: ${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} - AWS_SECRET_ACCESS_KEY_DEV: ${{ secrets.AWS_SECRET_ACCESS_DEV }} - AWS_ACCESS_KEY_ID_PROD: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} - AWS_SECRET_ACCESS_KEY_PROD: ${{ secrets.AWS_SECRET_ACCESS_PROD }} REGION: ${{ secrets.REGION }} runs-on: ubuntu-latest strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v2 @@ -36,11 +32,7 @@ jobs: echo MONGODB_URI_DEV=${{ secrets.MONGODB_URI_DEV }} >> .env echo MONGODB_URI_PROD=${{ secrets.MONGODB_URI_PROD }} >> .env echo PORT=${{ secrets.PORT }} >> .env - echo AWS_ACCESS_KEY_ID_DEV=${{ secrets.AWS_ACCESS_KEY_ID_DEV }} >> .env - echo AWS_SECRET_ACCESS_KEY_DEV=${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} >> .env - echo AWS_ACCESS_KEY_ID_PROD=${{ secrets.AWS_ACCESS_KEY_ID_PROD }} >> .env - echo AWS_SECRET_ACCESS_KEY_PROD=${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} >> .env - echo REGION=${{ secrets.REGION }} >> .env + echo DEV_PORT=${{ secrets.DEV_PORT }} >> .env echo DOCKERFILE=Dockerfile.dev >> .env cat .env @@ -57,38 +49,36 @@ jobs: - name: Run build run: yarn build - - name: Build the Docker image - run: docker build -t havit/havit-server-dev -f Dockerfile.dev . - - - name: Generate Deployment Package - run: zip -r deploy.zip * - - - name: Add .env to deploy.zip - run: zip deploy.zip .env - - - name: Get timestamp - uses: gerred/actions/current-time@master - id: current-time - - - name: Run string replace - uses: frabert/replace-string-action@master - id: format-time + - name: Login to Docker Hub + uses: docker/login-action@v1 with: - pattern: '[:\.]+' - string: '${{ steps.current-time.outputs.time }}' - replace-with: '-' - flags: 'g' + username: ${{secrets.DOCKER_HUB_USERNAME}} + password: ${{secrets.DOCKER_HUB_TOKEN}} - - name: Deploy to EB - uses: einaregilsson/beanstalk-deploy@v14 + - name: build and tagging release to DockerHub + env: + NAME: ${{secrets.DOCKER_HUB_USERNAME}} + REPO: havit-push + run: | + shortHash=$(git rev-parse --short ${{ github.sha }}) + docker build -t $REPO -f Dockerfile.dev . + docker tag $REPO:latest $NAME/$REPO:latest + docker tag $REPO:latest $NAME/$REPO:dev + docker tag $REPO:latest $NAME/$REPO:dev-$shortHash + docker push $NAME/$REPO:latest + docker push $NAME/$REPO:dev + docker push $NAME/$REPO:dev-$shortHash + + - name: Run Deploy Script + uses: appleboy/ssh-action@master with: - aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID_DEV }} - aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} - application_name: havit-server-dev - environment_name: Havitserverdev-env - version_label: 'havit-server-dev${{ steps.format-time.outputs.replaced }}' - region: ${{ secrets.REGION }} - deployment_package: deploy.zip + host: ${{ secrets.REMOTE_IP }} + username: ${{ secrets.REMOTE_SSH_ID }} + key: ${{ secrets.REMOTE_SSH_KEY }} + port: ${{ secrets.REMOTE_SSH_PORT }} + script: | + cd /opt/havit/docker + sudo /opt/havit/docker/dev-deploy.sh - name: action-slack uses: 8398a7/action-slack@v3 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 786dcf5..bdc2398 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,17 +10,13 @@ jobs: PORT: ${{ secrets.PORT }} MONGODB_URI_DEV: ${{ secrets.MONGODB_URI_DEV }} MONGODB_URI_PROD: ${{ secrets.MONGODB_URI_PROD }} - AWS_ACCESS_KEY_ID_DEV: ${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} - AWS_SECRET_ACCESS_KEY_DEV: ${{ secrets.AWS_SECRET_ACCESS_DEV }} - AWS_ACCESS_KEY_ID_PROD: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} - AWS_SECRET_ACCESS_KEY_PROD: ${{ secrets.AWS_SECRET_ACCESS_PROD }} REGION: ${{ secrets.REGION }} runs-on: ubuntu-latest strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v2 @@ -36,11 +32,7 @@ jobs: echo MONGODB_URI_DEV=${{ secrets.MONGODB_URI_DEV }} >> .env echo MONGODB_URI_PROD=${{ secrets.MONGODB_URI_PROD }} >> .env echo PORT=${{ secrets.PORT }} >> .env - echo AWS_ACCESS_KEY_ID_DEV=${{ secrets.AWS_ACCESS_KEY_ID_DEV }} >> .env - echo AWS_SECRET_ACCESS_KEY_DEV=${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} >> .env - echo AWS_ACCESS_KEY_ID_PROD=${{ secrets.AWS_ACCESS_KEY_ID_PROD }} >> .env - echo AWS_SECRET_ACCESS_KEY_PROD=${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} >> .env - echo REGION=${{ secrets.REGION }} >> .env + echo DEV_PORT=${{ secrets.DEV_PORT }} >> .env echo DOCKERFILE=Dockerfile >> .env cat .env @@ -57,38 +49,36 @@ jobs: - name: Run build run: yarn build - - name: Build the Docker image - run: docker build -t havit/havit-server-prod -f Dockerfile . - - - name: Generate Deployment Package - run: zip -r deploy.zip * - - - name: Add .env to deploy.zip - run: zip deploy.zip .env - - - name: Get timestamp - uses: gerred/actions/current-time@master - id: current-time - - - name: Run string replace - uses: frabert/replace-string-action@master - id: format-time + - name: Login to Docker Hub + uses: docker/login-action@v1 with: - pattern: '[:\.]+' - string: '${{ steps.current-time.outputs.time }}' - replace-with: '-' - flags: 'g' + username: ${{secrets.DOCKER_HUB_USERNAME}} + password: ${{secrets.DOCKER_HUB_TOKEN}} - - name: Deploy to EB - uses: einaregilsson/beanstalk-deploy@v14 + - name: build and tagging release to DockerHub + env: + NAME: ${{secrets.DOCKER_HUB_USERNAME}} + REPO: havit-push + run: | + shortHash=$(git rev-parse --short ${{ github.sha }}) + docker build -t $REPO -f Dockerfile . + docker tag $REPO:latest $NAME/$REPO:latest + docker tag $REPO:latest $NAME/$REPO:prod + docker tag $REPO:latest $NAME/$REPO:prod-$shortHash + docker push $NAME/$REPO:latest + docker push $NAME/$REPO:prod + docker push $NAME/$REPO:prod-$shortHash + + - name: Run Deploy Script + uses: appleboy/ssh-action@master with: - aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID_PROD }} - aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} - application_name: havit-server-prod - environment_name: Havitserverprod-env - version_label: 'havit-server-prod${{ steps.format-time.outputs.replaced }}' - region: ${{ secrets.REGION }} - deployment_package: deploy.zip + host: ${{ secrets.REMOTE_IP }} + username: ${{ secrets.REMOTE_SSH_ID }} + key: ${{ secrets.REMOTE_SSH_KEY }} + port: ${{ secrets.REMOTE_SSH_PORT }} + script: | + cd /opt/havit/docker + sudo /opt/havit/docker/deploy.sh - name: action-slack uses: 8398a7/action-slack@v3 diff --git a/Dockerfile b/Dockerfile index c235b64..ab15ed6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16-alpine +FROM node:18-alpine WORKDIR /usr/app diff --git a/Dockerfile.dev b/Dockerfile.dev index e27adc0..0109ae0 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM node:16-alpine +FROM node:18-alpine WORKDIR /usr/app @@ -12,6 +12,6 @@ RUN yarn ADD . . -EXPOSE 8081 +EXPOSE 8080 ENTRYPOINT ["cross-env", "NODE_ENV=development", "node", "dist"] diff --git a/src/index.ts b/src/index.ts index 9a48cea..83817ce 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,8 +20,13 @@ app.use(function (err, req, res, next) { res.render('error'); }); +const port = + process.env.NODE_ENV === 'development' + ? process.env.DEV_PORT + : process.env.PORT; + app - .listen(process.env.PORT, () => { + .listen(port, () => { console.log(` ################################################ 🛡️ Server listening on port 🛡️