diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c55cfbe --- /dev/null +++ b/.dockerignore @@ -0,0 +1,14 @@ +.github +.next +node_modules +.dockerignore +.env +.env.example +.gitignore +.gitlab-ci.yml +.npmrc +components.json +dev-db.yml +docker-compose.yml +Dockerfile +dprint.json diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..b07048e --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,14 @@ +build: + image: docker:cli + stage: build + services: + - docker:dind + variables: + DOCKER_IMAGE_NAME: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG + before_script: + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + script: + - | + docker build -t "$DOCKER_IMAGE_NAME" . + docker tag "$DOCKER_IMAGE_NAME" "$CI_REGISTRY_IMAGE:main" + docker push "$CI_REGISTRY_IMAGE:main" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..06850dc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +FROM node:18-alpine AS base + +WORKDIR /app +RUN apk add --no-cache libc6-compat +COPY package.json pnpm-lock.yaml ./ +RUN npm install --global corepack@latest && corepack enable pnpm && pnpm i --frozen-lockfile +COPY . . +ENV NEXT_TELEMETRY_DISABLED=1 +# RUN pnpm run build +ENV NODE_ENV=production + +RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs && chown -R nextjs:nodejs . + +USER nextjs +EXPOSE 3000 +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" + +CMD ["pnpm", "container:build"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e64c9a7 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,33 @@ +--- +services: + linker: + build: + context: . + dockerfile: Dockerfile + container_name: linker + restart: unless-stopped + ports: + - 3000:3000 + environment: + - NEXT_PUBLIC_BASE_URL=${NEXT_PUBLIC_BASE_URL} + - PG_USER=${PG_USER} + - PG_PASSWORD=${PG_PASSWORD} + - PG_HOST=${PG_HOST} + - PG_PORT=${PG_PORT} + - PG_DATABASE=${PG_DATABASE} + - BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET} + - BETTER_AUTH_URL=${BETTER_AUTH_URL} + - AUTHENTIK_CLIENT_ID=${AUTHENTIK_CLIENT_ID} + - AUTHENTIK_CLIENT_SECRET=${AUTHENTIK_CLIENT_SECRET} + - AUTHENTIK_DISCOVERY_URL=${AUTHENTIK_DISCOVERY_URL} + - GRAVATAR_API_KEY=${GRAVATAR_API_KEY} + depends_on: + - db + db: + image: postgres:16.4 + container_name: linker-postgres + restart: unless-stopped + environment: + - POSTGRES_USER=${PG_USER} + - POSTGRES_PASSWORD=${PG_PASSWORD} + - POSTGRES_DB=${PG_DATABASE} diff --git a/package.json b/package.json index d1c85f4..607cfe0 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "version": "0.1.0", "private": true, "scripts": { - "docker": "pnpm db:migrate && pnpm start", + "container": "pnpm db:migrate && pnpm start", + "container:build": "pnpm db:migrate && pnpm start", "dev": "next dev --turbopack", "build": "next build", "start": "next start",