feat(api): dockerize backend with compose, migrations-on-start, and run docs
This commit is contained in:
4
apps/api/.dockerignore
Normal file
4
apps/api/.dockerignore
Normal file
@@ -0,0 +1,4 @@
|
||||
node_modules
|
||||
.tmp
|
||||
data
|
||||
drizzle/meta
|
||||
4
apps/api/.env.example
Normal file
4
apps/api/.env.example
Normal 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
27
apps/api/Dockerfile
Normal 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
17
docker-compose.yml
Normal 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
20
docs/README.md
Normal 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
|
||||
```
|
||||
Reference in New Issue
Block a user