diff --git a/.env.example b/.env.example index a5605fb..e6c16d7 100644 --- a/.env.example +++ b/.env.example @@ -3,14 +3,18 @@ # Admin credentials ADMIN_USERNAME=admin -ADMIN_PASSWORD_HASH= # Generate with: npx ts-node scripts/hashPassword.ts yourpassword +ADMIN_PASSWORD= # Plain-text password # JWT JWT_SECRET= # Min 32 random chars — generate with: openssl rand -hex 32 JWT_EXPIRY=8h -# Database (relative path inside container; bind-mounted to ./data/) -DATABASE_URL=file:./data/rackmapper.db +# Cookie security — set to true only if behind an HTTPS reverse proxy +COOKIE_SECURE=false + +# Database — absolute path avoids Prisma CLI vs runtime resolution mismatch +# In Docker this maps to the bind-mounted /app/data volume +DATABASE_URL=file:/app/data/rackmapper.db # Server PORT=3001 diff --git a/Dockerfile b/Dockerfile index 164b68d..45d29a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,7 +25,10 @@ RUN npm run build # Ensure data directory exists for SQLite bind mount RUN mkdir -p /app/data +# Copy and make entrypoint executable +COPY docker-entrypoint.sh /app/docker-entrypoint.sh +RUN chmod +x /app/docker-entrypoint.sh + EXPOSE 3001 -# Apply pending migrations then start -CMD ["sh", "-c", "npx prisma migrate deploy && node dist/server/index.js"] +ENTRYPOINT ["/app/docker-entrypoint.sh"] diff --git a/UNRAID.md b/UNRAID.md index 267d107..35192b4 100644 --- a/UNRAID.md +++ b/UNRAID.md @@ -109,7 +109,7 @@ Click **Add another Path, Port, Variable, Label or Device** → select **Variabl |---|---|---| | Node Environment | `NODE_ENV` | `production` | | Port | `PORT` | `3001` | -| Database URL | `DATABASE_URL` | `file:./data/rackmapper.db` | +| Database URL | `DATABASE_URL` | `file:/app/data/rackmapper.db` | | Admin Username | `ADMIN_USERNAME` | `admin` *(or your preferred username)* | | Admin Password | `ADMIN_PASSWORD` | `yourpassword` | | JWT Secret | `JWT_SECRET` | `a-long-random-string-min-32-chars` | @@ -151,7 +151,7 @@ docker run -d \ -v /mnt/user/appdata/rackmapper/data:/app/data \ -e NODE_ENV=production \ -e PORT=3001 \ - -e DATABASE_URL="file:./data/rackmapper.db" \ + -e DATABASE_URL="file:/app/data/rackmapper.db" \ -e ADMIN_USERNAME=admin \ -e ADMIN_PASSWORD=yourpassword \ -e JWT_SECRET=a-long-random-string-min-32-chars \ diff --git a/docker-compose.yml b/docker-compose.yml index cb980f6..942bc7a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,7 @@ services: environment: - NODE_ENV=production - PORT=3001 - - DATABASE_URL=file:./data/rackmapper.db + - DATABASE_URL=file:/app/data/rackmapper.db - ADMIN_USERNAME=${ADMIN_USERNAME:-admin} - ADMIN_PASSWORD=${ADMIN_PASSWORD} - JWT_SECRET=${JWT_SECRET} diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100644 index 0000000..5b3d604 --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,17 @@ +#!/bin/sh +set -e + +echo "[entrypoint] RackMapper starting..." + +# Ensure the data directory exists and is writable +mkdir -p /app/data +echo "[entrypoint] Data directory: $(ls -la /app/data)" + +# Run migrations (creates the SQLite file if it doesn't exist) +echo "[entrypoint] Running database migrations..." +npx prisma migrate deploy +echo "[entrypoint] Migrations complete." + +# Start the server +echo "[entrypoint] Starting server..." +exec node dist/server/index.js