This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
.git
|
||||
@@ -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
|
||||
+25
@@ -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"]
|
||||
@@ -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"
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { NextConfig } from "next";
|
||||
|
||||
const nextConfig: NextConfig = {
|
||||
output: "standalone",
|
||||
reactCompiler: true,
|
||||
poweredByHeader: false,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user