First Deployment¶
You've tried Kamerplanter in the Quick Start and now want to run it permanently? This guide shows you how to set up Kamerplanter on your own server — for example on a Raspberry Pi, NAS, or home server.
Difference from Quick Start¶
In the Quick Start, you built Kamerplanter from source code (docker compose up). For permanent operation, you use pre-built images instead — this is faster, uses less storage, and you don't need the source code on the server.
| Quick Start | Permanent deployment | |
|---|---|---|
| Docker Compose file | docker-compose.yml | docker-compose.release.yml |
| Images | Built locally | Pre-built from registry |
| Source code needed? | Yes | No |
| Restart on crash | Manual | Automatic |
| Suitable for | Trying out, development | Permanent operation |
Prerequisites¶
- A server with Docker and Docker Compose (see Installation)
- At least 2 GB RAM (4 GB recommended)
- Stable network connection for downloading images
1. Download project files¶
You only need two files from the repository — not the entire source code:
# Create directory
mkdir -p ~/kamerplanter && cd ~/kamerplanter
# Download the two required files
curl -O https://raw.githubusercontent.com/nolte/kamerplanter/main/docker-compose.release.yml
curl -O https://raw.githubusercontent.com/nolte/kamerplanter/main/.env.example
2. Create configuration¶
Open the .env file and set secure passwords:
# Generate secure passwords: openssl rand -base64 24
ARANGO_ROOT_PASSWORD=insert-secure-password-here
ARANGODB_PASSWORD=insert-secure-password-here
# Defaults — change only if needed
ARANGODB_DATABASE=kamerplanter
ARANGODB_USERNAME=root
REDIS_URL=redis://valkey:6379/0
DEBUG=false
REQUIRE_EMAIL_VERIFICATION=false
CORS_ORIGINS=["http://localhost:8080"]
Passwords
Do not use the example passwords from .env.example. Generate secure passwords, e.g. with openssl rand -base64 24. Both password fields (ARANGO_ROOT_PASSWORD and ARANGODB_PASSWORD) must be identical.
3. Set the version¶
The file docker-compose.release.yml contains __VERSION__ as a placeholder. Replace it with the desired version:
Which version should I use?
Use the latest stable version. You can find available versions on the project's Releases page.
4. Start¶
Check the status:
All services should show as running or healthy after 30–60 seconds.
5. Test access¶
Open in your browser:
- Kamerplanter: http://your-server:8080
- API documentation: http://your-server:8000/api/v1/docs
Replace your-server with the IP address or hostname of your server. If you're working on the server itself, localhost works.
Automatic restart¶
The release configuration already includes restart: unless-stopped for all services. This means:
- After a server crash or reboot, Docker restarts the services automatically
- Services you deliberately stop with
docker compose stopstay stopped
To ensure Docker itself starts after a reboot:
Performing updates¶
To update Kamerplanter to a new version:
cd ~/kamerplanter
# 1. Update version in the Compose file
sed -i 's/old-version/new-version/g' docker-compose.release.yml
# 2. Pull new images and restart services
docker compose -f docker-compose.release.yml pull
docker compose -f docker-compose.release.yml up -d
# 3. Clean up old, unused images (optional)
docker image prune -f
Data is preserved
Your plants, locations, and all other data are stored in Docker volumes and survive updates without issues.
Backups¶
Kamerplanter's data lives in two Docker volumes:
arangodb_data— All plants, locations, tasks, and configurationsvalkey_data— Cache and task queue (not critical, rebuilt automatically)
Create a backup¶
# Back up ArangoDB data
docker compose -f docker-compose.release.yml exec arangodb \
arangodump --server.password "$ARANGO_ROOT_PASSWORD" \
--output-directory /tmp/backup --overwrite true
# Copy backup from the container
docker compose -f docker-compose.release.yml cp \
arangodb:/tmp/backup ./backup-$(date +%Y%m%d)
Restore a backup¶
# Copy backup into the container
docker compose -f docker-compose.release.yml cp \
./backup-20260317 arangodb:/tmp/backup
# Restore data
docker compose -f docker-compose.release.yml exec arangodb \
arangorestore --server.password "$ARANGO_ROOT_PASSWORD" \
--input-directory /tmp/backup --overwrite true
Regular backups
Set up a cron job to run backups automatically — for example daily at 3:00 AM. That way you'll lose at most one day of data in the worst case.
Accessing from other devices¶
By default, Kamerplanter is only accessible from the server itself. To access it from your smartphone, tablet, or other computers on your home network:
-
Find your server's IP address:
-
On the other device, open a browser and go to
http://<IP-address>:8080 -
Update the CORS setting in
.envso the API accepts requests from the new address: -
Restart the services after the change:
Next steps¶
- Onboarding Wizard — Set up your first plants
- User Guide — All features in detail
- Kubernetes Deployment — For professional environments with high availability
Troubleshooting¶
Page won't load (connection refused)
Check if all services are running: docker compose -f docker-compose.release.yml ps. If the frontend service isn't running, check the logs: docker compose -f docker-compose.release.yml logs frontend.
Backend reports 'Connection refused' to the database
ArangoDB takes a bit longer on first start. Wait 30 seconds and check again. If the error persists: Do the passwords in .env match? ARANGO_ROOT_PASSWORD and ARANGODB_PASSWORD must be identical.
Can't access from another device
Check: (1) Are both devices on the same network? (2) Is the IP address correct? (3) Is the CORS setting in .env updated? (4) Is a firewall blocking port 8080?
How much disk space does Kamerplanter need long-term?
The Docker images take about 2 GB. The database grows depending on usage — for a typical home user with up to 100 plants, data stays under 100 MB. Sensor data can grow faster when recording is enabled.