Compare commits

4 Commits

Author SHA1 Message Date
00da4d2abc feat: add example usage of docker-compose.yml to README
All checks were successful
Build and publish Docker image / build-and-push (release) Successful in 9s
2025-11-13 04:06:04 +01:00
1bc4b0fb50 feat: forgot to define some runtime environment variables in Dockerfile 2025-11-13 04:01:26 +01:00
768359ad62 feat: add Gitea Actions workflow for building and publishing Docker image to registry
All checks were successful
Build and publish Docker image / build-and-push (release) Successful in 1m5s
2025-11-13 03:42:19 +01:00
cbb10361df refactor: switch to alpine base image 2025-11-13 03:38:32 +01:00
3 changed files with 68 additions and 15 deletions

View File

@@ -0,0 +1,48 @@
name: Build and publish Docker image
on:
release:
types: [published]
env:
REGISTRY: gitea.kanawave.net
REGISTRY_USERNAME: sebastas
IMAGE_NAME: ${{ gitea.repository }}
jobs:
build-and-push:
runs-on: ubuntu-latest
# Permissions are not yet supported in Gitea Actions -> https://github.com/go-gitea/gitea/issues/23642#issuecomment-2119876692
# permissions:
# contents: read
# packages: write
# attestations: write
# id-token: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login to registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Extract metadata (tags, labels)
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push
id: push
uses: docker/build-push-action@v5
with:
context: .
# file: ./Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

View File

@@ -1,39 +1,28 @@
# Build frontend in a dedicated stage # Build frontend in a dedicated stage
FROM node:24-slim AS frontend-build FROM node:24-alpine AS frontend-build
WORKDIR /app/frontend WORKDIR /app/frontend
COPY frontend/package*.json frontend/package-lock*.json ./ COPY frontend/package*.json frontend/package-lock*.json ./
RUN npm ci --silent RUN npm ci --silent
COPY frontend/ . COPY frontend/ .
RUN npm run build RUN npm run build
# Final image: build backend, generate Prisma client, prune dev deps, and include frontend dist # Final runtime image
FROM node:24-slim AS final FROM node:24-alpine
WORKDIR /app WORKDIR /app
# install minimal OS deps
RUN apt-get update -y \
&& apt-get install -y openssl
# copy package manifests and install deps (leverage Docker cache) # copy package manifests and install deps (leverage Docker cache)
COPY backend/package*.json backend/package-lock*.json ./backend/ COPY backend/package*.json backend/package-lock*.json ./backend/
RUN cd backend && npm ci --silent RUN cd backend && npm ci --silent
# copy backend source (schema, migrations, source) # copy backend source (schema, migrations, source)
COPY backend ./backend COPY backend ./backend
# generate Prisma client against a harmless temp DB path (does not apply migrations) # generate Prisma client against a harmless temp DB path (does not apply migrations)
RUN cd backend && DATABASE_URL="file:./data/sqlite.db" npx prisma generate --schema=./prisma/schema.prisma || true RUN cd backend && DATABASE_URL="file:./data/sqlite.db" npx prisma generate --schema=./prisma/schema.prisma || true
# remove devDependencies to slim image # remove devDependencies to slim image
RUN cd backend && npm prune --production --silent RUN cd backend && npm prune --production --silent
# install prisma CLI into final image so entrypoint can run migrate deploy at runtime # install prisma CLI into final image so entrypoint can run migrate deploy at runtime
RUN cd backend && npm i --no-audit --no-fund prisma --silent || true RUN cd backend && npm i --no-audit --no-fund prisma --silent || true
# copy entrypoint and make executable
# copy entrypoint (added below) and make executable
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/entrypoint.sh
# Copy built frontend into the expected location: /app/frontend/dist # Copy built frontend into the expected location: /app/frontend/dist
COPY --from=frontend-build /app/frontend/dist ./frontend/dist COPY --from=frontend-build /app/frontend/dist ./frontend/dist

16
README.md Normal file
View File

@@ -0,0 +1,16 @@
Here is example usage of `docker-compose.yml`:
```yaml
service
tally-counter:
image: gitea.kanawave.net/sebastas/tally-counter:latest #this image
container_name: tally-counter
user: 2000:2000 #uid:gid
restart: unless-stopped
networks:
- proxy # traefik proxy network
volumes:
- ./tally-counter:/data # for persistant storage (db + uploads)
```
Quick and dirty setup!