Skip to content

Commit

Permalink
Merge pull request #89 from TIHLDE/devops(dockerfile)/dev
Browse files Browse the repository at this point in the history
Dockerized and added deployment workflow
  • Loading branch information
borgaar authored Jan 9, 2025
2 parents 2841c5c + 106f293 commit 5f755dc
Show file tree
Hide file tree
Showing 9 changed files with 125 additions and 14 deletions.
15 changes: 15 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
.github
.next
.vscode
node_modules
.dockerignore
.env
.env.example
.eslintrc.cjs
.gitignore
docker-compose.yml
Dockerfile
Makefile
next-env.d.ts
prettier.config.js
README.md
51 changes: 51 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Deploy

on:
push:
branches:
- main
pull_request:
branches:
- main
types:
- closed


jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
concurrency:
group: deployment_lock
cancel-in-progress: false
steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Set up SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.KEY }}" > ~/.ssh/key
chmod 600 ~/.ssh/key
ssh-keyscan ${{ secrets.HOST }} >> ~/.ssh/known_hosts
- name: Create .env file
run: |
echo 'DATABASE_URL="${{ secrets.DATABASE_URL }}"' >> .env
echo 'NEXTAUTH_URL="${{ secrets.NEXTAUTH_URL }}"' >> .env
echo 'NEXT_PUBLIC_LEPTON_API_URL="${{ secrets.NEXT_PUBLIC_LEPTON_API_URL }}"' >> .env
echo 'ALLOWED_GROUP_SLUGS="${{ secrets.ALLOWED_GROUP_SLUGS }}"' >> .env
echo 'NEXTAUTH_SECRET="${{ secrets.NEXTAUTH_SECRET }}"' >> .env
- name: Copy .env to OpenStack server
run: |
scp -v -i ~/.ssh/key .env ${{ secrets.USER }}@${{ secrets.HOST }}:${{ secrets.PATH }}
- name: Deploy to OpenStack server
run: |
ssh -v -i ~/.ssh/key ${{ secrets.USER }}@${{ secrets.HOST }} << 'ENDSSH'
cd ${{ secrets.PATH }}
chmod 0600 .env
git pull
make prod
ENDSSH
36 changes: 36 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
FROM node:current-alpine AS build

RUN apk add openssl

WORKDIR /build

COPY . .

RUN npm install -g pnpm

RUN pnpm i --frozen-lockfile

ENV SKIP_ENV_VALIDATION=1

RUN pnpm build

FROM node:current-alpine AS runner

WORKDIR /app

RUN apk add openssl
# Prisma is used in prod deployment
RUN npm install -g prisma

COPY --from=build /build/.next/standalone ./
RUN rm -f .env
COPY --from=build /build/.next/static ./.next/static/
COPY --from=build /build/prisma ./prisma/
COPY --from=build /build/public ./public/

EXPOSE 3000
ENV PORT=3000

ENV NEXT_TELEMETRY_DISABLED=1

CMD [ "node", "server.js" ]
8 changes: 8 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
.PHONY: db
db:
docker compose up -d

.PHONY: prod
prod:
docker build -t blitzed:latest .
docker container stop blitzed
docker container rm blitzed
- prisma migrate deploy
docker run --env-file .env -p 4000:3000 --name blitzed -d blitzed:latest
File renamed without changes.
Empty file added dockerignore
Empty file.
4 changes: 3 additions & 1 deletion next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
await import("./src/env.js");

/** @type {import("next").NextConfig} */
const config = {};
const config = {
output: "standalone",
};

export default config;
5 changes: 0 additions & 5 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,6 @@ generator client {
provider = "prisma-client-js"
}

generator erDiagram {
provider = "prisma-erd-generator"
output = "../ER_diagram.pdf"
}

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
Expand Down
20 changes: 12 additions & 8 deletions src/env.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,25 @@ export const env = createEnv({
* isn't built with invalid env vars.
*/
server: {
DATABASE_URL: z.string().url(),
DATABASE_URL: z.string(),
NODE_ENV: z
.enum(["development", "test", "production"])
.default("development"),
NEXTAUTH_SECRET:
process.env.NODE_ENV === "production"
? z.string()
: z.string().optional(),
NEXTAUTH_URL: z.preprocess(
// This makes Vercel deployments not fail if you don't set NEXTAUTH_URL
// Since NextAuth.js automatically uses the VERCEL_URL if present.
(str) => process.env.VERCEL_URL ?? str,
// VERCEL_URL doesn't include `https` so it cant be validated as a URL
process.env.VERCEL ? z.string() : z.string().url(),
),
NEXTAUTH_URL: z.string(),
//
// We are no longer deploying to Vercel, the cash cow. Drift is Vercel v2.0
//
// NEXTAUTH_URL: z.preprocess(
// // This makes Vercel deployments not fail if you don't set NEXTAUTH_URL
// // Since NextAuth.js automatically uses the VERCEL_URL if present.
// (str) => process.env.VERCEL_URL ?? str,
// // VERCEL_URL doesn't include `https` so it cant be validated as a URL
// process.env.VERCEL ? z.string() : z.string().url(),
// ),
ALLOWED_GROUP_SLUGS: z
.string()
.refine((i) => i.split(",").length > 0, {
Expand Down

0 comments on commit 5f755dc

Please sign in to comment.