feat(api): dockerize backend with compose, migrations-on-start, and run docs

This commit is contained in:
Bas van Rossem
2026-06-17 13:54:48 +02:00
parent 04cfe0f726
commit bcb305b048
5 changed files with 72 additions and 0 deletions

4
apps/api/.dockerignore Normal file
View File

@@ -0,0 +1,4 @@
node_modules
.tmp
data
drizzle/meta

4
apps/api/.env.example Normal file
View File

@@ -0,0 +1,4 @@
DATABASE_URL=file:./data/app.db
BETTER_AUTH_SECRET=change-me-to-a-long-random-string
BETTER_AUTH_URL=http://localhost:3000
PORT=3000

27
apps/api/Dockerfile Normal file
View File

@@ -0,0 +1,27 @@
FROM node:22-alpine AS base
RUN corepack enable
WORKDIR /repo
# Copy workspace manifests for cached install
COPY package.json yarn.lock .yarnrc.yml ./
COPY .yarn/ ./.yarn/
COPY packages/shared/package.json ./packages/shared/package.json
COPY apps/api/package.json ./apps/api/package.json
# Copy the other workspace manifests too, so the workspace graph matches the
# lockfile (otherwise Yarn errors on a mismatch). `focus` still installs ONLY
# the @solelog/api subtree, so mobile/web deps are not pulled.
COPY apps/mobile/package.json ./apps/mobile/package.json
COPY apps/web/package.json ./apps/web/package.json
RUN yarn workspaces focus @solelog/api
# Copy sources
COPY packages/shared/ ./packages/shared/
COPY apps/api/ ./apps/api/
WORKDIR /repo/apps/api
ENV NODE_ENV=production
EXPOSE 3000
# Apply migrations, then start the server
CMD ["sh", "-c", "yarn db:migrate && yarn start"]

17
docker-compose.yml Normal file
View File

@@ -0,0 +1,17 @@
services:
api:
build:
context: .
dockerfile: apps/api/Dockerfile
ports:
- '3000:3000'
environment:
DATABASE_URL: file:/data/app.db
BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET:-change-me-to-a-long-random-string}
BETTER_AUTH_URL: http://localhost:3000
PORT: '3000'
volumes:
- solelog_db:/data
volumes:
solelog_db:

20
docs/README.md Normal file
View File

@@ -0,0 +1,20 @@
# SoleLog docs
- [Roadmap & project overview](./roadmap.md)
- [Plans](./plans/)
## Running the backend (Phase 0)
Local (dev):
```bash
yarn install
cp apps/api/.env.example apps/api/.env # edit BETTER_AUTH_SECRET
yarn workspace @solelog/api db:migrate
yarn workspace @solelog/api dev
```
Docker (whole stack):
```bash
docker compose up --build
# health: curl http://localhost:3000/health
```