From 8285e118fd73885ce6b936b0df2b69dec43971dc Mon Sep 17 00:00:00 2001 From: luisdralves Date: Fri, 5 Jun 2026 15:48:21 +0100 Subject: [PATCH] Add build and deploy workflow --- .dockerignore | 4 +++ .gitea/workflows/deploy.yaml | 47 ++++++++++++++++++++++++++++++++++++ Dockerfile | 25 +++++++++++++++++++ docker-compose.yml | 15 ++++++++++++ next.config.ts | 1 + 5 files changed, 92 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitea/workflows/deploy.yaml create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3b2a049 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +.env +.env.* +!.env.example +.git diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml new file mode 100644 index 0000000..e5b40e3 --- /dev/null +++ b/.gitea/workflows/deploy.yaml @@ -0,0 +1,47 @@ +name: Build and Deploy + +on: + push: + branches: [master] + +concurrency: + group: deploy-website + cancel-in-progress: false + +jobs: + build-deploy: + runs-on: ubuntu-latest + container: + image: docker:latest + volumes: + - /opt/website:/deploy + steps: + - name: Install dependencies + run: apk add --no-cache git nodejs + + - uses: actions/checkout@v4 + + - name: Copy source to deploy directory + run: | + rm -rf /deploy/build + cp -r . /deploy/build + + - name: Create .env file + working-directory: /deploy/build + run: | + cat > .env << 'EOF' + HOST_PORT=${{ vars.HOST_PORT }} + IMMICH_API_URL=${{ vars.IMMICH_API_URL }} + IMMICH_API_KEY=${{ secrets.IMMICH_API_KEY }} + IMMICH_ALBUM_ID=${{ vars.IMMICH_ALBUM_ID }} + DATA_DIR=/opt/website/data + EOF + + - name: Build and deploy + working-directory: /deploy/build + run: | + docker compose build + docker compose up -d + + - name: Cleanup + run: rm -rf /deploy/build diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..10645a0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM oven/bun:1 AS deps +WORKDIR /app +COPY package.json bun.lock ./ +RUN bun install --frozen-lockfile + +FROM oven/bun:1 AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +ENV NEXT_TELEMETRY_DISABLED=1 +RUN bun run build + +FROM node:24-slim AS runner +WORKDIR /app +RUN apt-get update \ + && apt-get install -y --no-install-recommends libimage-exiftool-perl \ + && rm -rf /var/lib/apt/lists/* +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 +ENV PORT=3000 +ENV HOSTNAME=0.0.0.0 +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static +EXPOSE 3000 +CMD ["node", "server.js"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..34bb08c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +name: website + +services: + app: + build: . + restart: unless-stopped + ports: + - "${HOST_PORT}:3000" + environment: + IMMICH_API_URL: ${IMMICH_API_URL} + IMMICH_API_KEY: ${IMMICH_API_KEY} + IMMICH_ALBUM_ID: ${IMMICH_ALBUM_ID} + DATA_DIR: /app/data + volumes: + - "${DATA_DIR:-./data}:/app/data" diff --git a/next.config.ts b/next.config.ts index 6c6a37b..3af94dc 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,6 +1,7 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { + output: "standalone", reactCompiler: true, poweredByHeader: false, };