Quick Start
Quickly install a slim version of Journiv to start trying all the features Journiv provides.
You can quickly run a simple version of Journiv with minimal configuration to try out all the features. For production usage please please use official docker-compose files.
Create a docker-compose.yml file:
services:
journiv:
image: swalabtech/journiv-app:latest
container_name: journiv
ports:
- "8000:8000"
environment:
- SECRET_KEY=your-secret-key-here
- DOMAIN_NAME=192.168.1.1
volumes:
- journiv_data:/data
restart: unless-stopped
volumes:
journiv_data:Start the container:
docker compose up -dAlternatively you can also run Journiv with docker run. This is the fastest way to get Journiv running with just one command.
docker run -d \
--name journiv \
-p 8000:8000 \
-e SECRET_KEY=$(openssl rand -base64 32) \
-e DOMAIN_NAME=192.168.1.1 \
-v journiv_data:/data \
--restart unless-stopped \
swalabtech/journiv-app:latestRun Journiv using Podman, a daemonless container engine that's compatible with Docker.
Important: When using rootless Podman, use Podman volumes instead of bind mounts to avoid permission issues. The container runs as a non-root user (UID 1000), and rootless Podman remaps UIDs/GIDs, which can cause permission errors with bind-mounted directories.
First, create a Podman volume:
podman volume create journiv_dataThen run the container:
podman run -d \
--name journiv \
-v journiv_data:/data \
-p 8000:8000 \
-e SECRET_KEY=$(openssl rand -base64 32) \
-e DOMAIN_NAME=192.168.1.1 \
docker.io/swalabtech/journiv-app:latestNote: If you're using an environment file, you can use --env-file instead:
podman run -d \
--name journiv \
-v journiv_data:/data \
-p 8000:8000 \
--env-file $(pwd)/journiv.env \
docker.io/swalabtech/journiv-app:latestUsing Podman volumes ensures proper permissions and works reliably across different platforms, including macOS with Podman running in a Linux VM.
After the container starts, visit http://192.168.1.1:8000 to access your Journiv instance.
Important: Use a different SECRET_KEY for each instance. Never share your secret key or commit it to version control.
Generate a Secure SECRET_KEY
Before starting, generate a strong secret key:
# Using OpenSSL (recommended)
openssl rand -base64 32
# Using Python
python -c "import secrets; print(secrets.token_urlsafe(32))"Replace your-secret-key-here in the docker-compose.yml file with the generated key.```
Important: Add .env to .gitignore to prevent committing secrets to version control.
Volume Mounts
The container uses /data as the data directory. Mount this to persist data:
# Named volume (recommended for Docker)
-v journiv_data:/data
# Bind mount (for easy access to files)
# When using bind mounts please ensure permissions are set correctly
-v /path/to/local/data:/dataData stored in /data:
- Database file (
journiv.dbfor SQLite) - Media files (
media/) - Logs (
logs/) - Exports (
exports/) - Imports (
imports/)
Database Configuration
SQLite (Default)
No additional configuration needed. Data is stored in the mounted volume at /data/journiv.db.
Port Configuration
Change the host port if 8000 is already in use:
# Use port 8080 on host, 8000 in container
-p 8080:8000Access Journiv at http://192.168.1.1:8080 instead.
See Configuration for detailed production setup.