Skip to content

Commit

Permalink
Merge pull request #19 from andrewlod/devops
Browse files Browse the repository at this point in the history
Change database engine to PostgresQL + AWS EKS action
  • Loading branch information
andrewlod authored Mar 28, 2024
2 parents c43337a + 68c30da commit bfcfaf6
Show file tree
Hide file tree
Showing 14 changed files with 147 additions and 73 deletions.
76 changes: 76 additions & 0 deletions .github/workflows/deploy-eks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Deploy to EKS

on:
workflow_dispatch:

env:
ECR_REPOSITORY: authentication-api
EKS_CLUSTER_NAME: default-cluster
AWS_REGION: us-east-1
IMAGE_NAME: authentication-api
NODE_ENV: development
LOG_STRATEGY: CONSOLE
SECRETS_LIST: ""

PASSWORD_SALT: "10"
JWT_SECRET: ""
JWT_EXPIRE_MINUTES: "60"
JWT_COOKIE_KEY: "JWT_COOKIE"
DATABASE_URL: ""

jobs:

build:

name: Deployment
runs-on: ubuntu-latest

steps:

- name: Set short git commit SHA
id: commit
uses: prompt/actions-commit-hash@v2

- name: Check out code
uses: actions/checkout@v2

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{env.AWS_REGION}}

- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
with:
registry-type: public

- name: Login to Docker Hub (to pull images)
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build, tag, and push image to Amazon ECR
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ steps.commit.outputs.short }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG \
-t $ECR_REGISTRY/$ECR_REPOSITORY:latest .
docker push -a $ECR_REGISTRY/$ECR_REPOSITORY
- name: Update kube config
run: aws eks update-kubeconfig --name $EKS_CLUSTER_NAME --region $AWS_REGION

- name: Deploy to EKS
env:
IMAGE_NAME: "${{ steps.login-ecr.outputs.registry }}/$IMAGE_NAME:${IMAGE_TAG}"
run: |
cat kubernetes/aws/deployment.yml | envsubst | kubectl apply -f - && \
kubectl apply -f kubernetes/aws/service.yml
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ web_modules/
.env.test.local
.env.production.local
.env.local
.secrets

# parcel-bundler cache (https://parceljs.org/)
.cache
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ This step describes the prerequisites and install steps for the libraries needed
### Prerequisites
- [Node.js 20+](https://nodejs.org/en)
- [Node Package Manager (NPM)](https://www.npmjs.com)
- [MySQL](https://dev.mysql.com/downloads/installer/)
- [PostgreSQL](https://www.postgresql.org)

### Installing
First of all, you must clone this repository:
Expand Down
13 changes: 12 additions & 1 deletion kubernetes/aws/deployment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,25 @@ spec:
- name: SV_PORT
value: "80"
- name: NODE_ENV
value: "development"
value: $NODE_ENV
- name: LOG_STRATEGY
value: $LOG_STRATEGY
- name: SECRETS_CONNECTOR
value: "AWS"
- name: SECRETS_LIST
value: $SECRETS_LIST

- name: PASSWORD_SALT
value: $PASSWORD_SALT
- name: JWT_SECRET
value: $JWT_SECRET
- name: JWT_EXPIRE_MINUTES
value: $JWT_EXPIRE_MINUTES
- name: JWT_COOKIE_KEY
value: $JWT_COOKIE_KEY
- name: DATABASE_URL
value: $DATABASE_URL

resources:
requests:
memory: "64Mi"
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "authentication-api",
"version": "1.0.1",
"version": "1.1.0",
"description": "Authentication REST API created with TypeScript",
"main": "src/server.ts",
"scripts": {
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

25 changes: 25 additions & 0 deletions src/database/schemas/migrations/20240328233304_init/migration.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
-- CreateTable
CREATE TABLE "User" (
"id" SERIAL NOT NULL,
"email" VARCHAR(255) NOT NULL,
"password" VARCHAR(128) NOT NULL,
"is_admin" BOOLEAN NOT NULL,

CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "user_token" (
"id" SERIAL NOT NULL,
"user_id" INTEGER NOT NULL,
"token" VARCHAR(255) NOT NULL,
"expires_at" TIMESTAMP(3) NOT NULL,

CONSTRAINT "user_token_pkey" PRIMARY KEY ("id")
);

-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");

-- AddForeignKey
ALTER TABLE "user_token" ADD CONSTRAINT "user_token_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
Warnings:
- You are about to drop the `User` table. If the table is not empty, all the data it contains will be lost.
*/
-- DropForeignKey
ALTER TABLE "user_token" DROP CONSTRAINT "user_token_user_id_fkey";

-- DropTable
DROP TABLE "User";

-- CreateTable
CREATE TABLE "user" (
"id" SERIAL NOT NULL,
"email" VARCHAR(255) NOT NULL,
"password" VARCHAR(128) NOT NULL,
"is_admin" BOOLEAN NOT NULL,

CONSTRAINT "user_pkey" PRIMARY KEY ("id")
);

-- CreateIndex
CREATE UNIQUE INDEX "user_email_key" ON "user"("email");

-- AddForeignKey
ALTER TABLE "user_token" ADD CONSTRAINT "user_token_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
2 changes: 1 addition & 1 deletion src/database/schemas/migrations/migration_lock.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "mysql"
provider = "postgresql"
4 changes: 3 additions & 1 deletion src/database/schemas/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ model User {
password String @user_db.VarChar(128)
is_admin Boolean
tokens UserToken[]
@@map("user")
}

model UserToken {
Expand All @@ -17,7 +19,7 @@ model UserToken {
}

datasource user_db {
provider = "mysql"
provider = "postgresql"
url = env("DATABASE_URL")
}

Expand Down

0 comments on commit bfcfaf6

Please sign in to comment.