diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..e9d985c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +.git +node_modules +Dockerfile +README.md +*.log +homebrewery/config/* +homebrewery/.dockerignore +homebrewery/Dockerfile +homebrewery/.git +homebrewery/node_modules diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml new file mode 100644 index 0000000..e1fdcc6 --- /dev/null +++ b/.gitea/workflows/build.yaml @@ -0,0 +1,45 @@ +name: Building and publishing Homebrewery as Docker Image + +on: + release: + types: [published] + +jobs: + build: + runs-on: ubuntu-24.04 + env: + TAG_NAME: ${{ github.event.release.tag_name }} + + steps: + + - uses: actions/checkout@v4 + + - uses: actions/checkout@v4 + with: + github-server-url: https://github.com + repository: naturalcrit/homebrewery.git + ref: ${{ github.event.release.tag_name }} + token: "" + path: homebrewery + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: git.morlana.online + username: ${{ github.repository_owner }} + password: ${{ secrets.DOCKER_TOKEN }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push + uses: docker/build-push-action@v6 + with: + platforms: linux/amd64,linux/arm64 + push: true + tags: | + git.morlana.online/${{ github.repository_owner }}/homebrewery:latest + git.morlana.online/${{ github.repository_owner }}/homebrewery:${{ github.event.release.tag_name }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1c2c1cf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,42 @@ +# Base Stage for NodeJS +FROM node:22-alpine as base + +ENV NODE_ENV=docker +WORKDIR /usr/src/app + +# Installing dependencies with use of package-lock.json +FROM base as deps + +RUN apk --no-cache add git +COPY homebrewery/package.json homebrewery/package-lock.json ./ +RUN npm ci --ignore-scripts + +# Build Stage +FROM base as builder + +COPY --from=deps /usr/src/app/node_modules ./node_modules +COPY homebrewery/ ./ +RUN npm run build + +FROM base as runner + +# Defining env variables for homebrewery +ENV HB_HOST=homebrewery.local.naturalcrit.com:8000 HB_NATURALCRIT_URL=local.naturalcrit.com:8010 HB_SECRET=secret PORT=8000 HB_ENABLE_V3=true HB_ENABLE_THEMES=true HB_LOCAL_ENVIRONMENTS=docker,local HB_PUBLIC_URL=https://homebrewery.naturalcrit.com +ENV HB_IMAGES=null HB_FONTS=null + +# Adding tini for clean signal handling +ENV TINI_VERSION v0.19.0 +ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini +RUN chmod +x /tini + +# Adding Entrypoint +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +# Adding executables +COPY --from=deps /usr/src/app/node_modules ./node_modules +COPY --from=deps /usr/src/app/build ./build +COPY homebrewery/ ./ + +EXPOSE 8000 +ENTRYPOINT ["/entrypoint.sh"] diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..329a7e7 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +set -e + +CONFIG_FILE="/usr/src/app/config/docker.json" + +# Falls Verzeichnis noch nicht existiert +mkdir -p /usr/src/app/config + +# Falls docker.json noch nicht existiert +if [ ! -f "$CONFIG_FILE" ]; then + echo "Creating docker.json from environment..." + + cat > "$CONFIG_FILE" <