Installation¶
This guide covers two ways to install the FreezerMan server, plus how to get the client app.
Path 1: Docker Compose (Recommended)¶
Docker Compose bundles PostgreSQL and the FreezerMan server into a single stack. This is the easiest way to self-host.
Prerequisites¶
- Docker Engine 20.10+
- Docker Compose v2.0+
1. Clone the Repository¶
2. Configure Environment Variables¶
Create the server environment file from the template:
Edit apps/server/.env with your values:
# Database (matches the postgres service in docker-compose.yml)
DATABASE_URL=postgresql://postgres:password@db:5432/freezer_tracker
# JWT authentication — generate strong random secrets for both
JWT_SECRET=your-access-token-secret-here
JWT_REFRESH_SECRET=your-refresh-token-secret-here
# Token expiration
JWT_ACCESS_EXPIRES_IN=15m
JWT_REFRESH_EXPIRES_IN=30d
# CORS — comma-separated list of allowed client origins
ALLOWED_ORIGINS=tauri://localhost,http://localhost:1420
# Server
APP_BASE_URL=http://localhost:3000
PORT=3000
NODE_ENV=production
Warning
Change the default secrets. The JWT_SECRET and JWT_REFRESH_SECRET values must be long, random strings. You can generate them with:
3. Start the Stack¶
This pulls postgres:17-alpine, builds the server image, runs database migrations, and starts both services.
4. Verify¶
You should get a 200 OK response indicating the server is healthy.
5. Install the Client¶
Download the latest client app for your platform from GitHub Releases:
- macOS: Download the
.dmg, open it, and drag FreezerMan to your Applications folder. - iOS: Follow the TestFlight link in the release notes.
Path 2: Manual Setup¶
Run the server directly with Bun if you prefer not to use Docker, or if you want a development environment.
Prerequisites¶
- Bun 1.3+
- PostgreSQL 17+
1. Clone the Repository¶
2. Install Dependencies¶
From the repository root (Bun workspaces will install everything):
3. Configure Environment Variables¶
Edit apps/server/.env — note the DATABASE_URL points to localhost instead of the Docker service name:
# Database — adjust user, password, host, and database name as needed
DATABASE_URL=postgresql://postgres:password@localhost:5432/freezer_tracker
# JWT authentication
JWT_SECRET=your-access-token-secret-here
JWT_REFRESH_SECRET=your-refresh-token-secret-here
# Token expiration
JWT_ACCESS_EXPIRES_IN=15m
JWT_REFRESH_EXPIRES_IN=30d
# CORS
ALLOWED_ORIGINS=tauri://localhost,http://localhost:1420
# Server
APP_BASE_URL=http://localhost:3000
PORT=3000
NODE_ENV=development
Tip
Make sure the PostgreSQL database exists before running migrations. Create it manually if needed:
4. Run Database Migrations¶
This applies all Prisma migrations and sets up the schema.
5. Start the Server¶
From the repository root:
The server starts on http://localhost:3000. Verify with:
6. Start the Client (Optional — Development)¶
If you want to run the client from source instead of using a pre-built binary:
Note
Building the Tauri client from source requires additional prerequisites:
- Rust toolchain — install via rustup
- Xcode (macOS) — install from the Mac App Store, then run xcode-select --install
- See the Tauri prerequisites guide for full details.
What's Next¶
Head to the Quick Start guide to create your first household and start tracking freezer items.