2.7 KiB
Raspberry Pi 5 Docker Run
This repository now contains a Dockerized server path for Raspberry Pi 5.
Files used for this deployment:
Dockerfile.serverdocker-compose.rpi5.yml.env.example.env.server
What This Runs
- ASP.NET Core server from
src/Ikar.Server - SQLite database, attachments, update APKs, and secrets persisted under
/app/Data - host-side data path controlled by
IKAR_DATA_PATH - host-side backend port bound only to
127.0.0.1:5099; external access should go through the reverse proxy and HTTPS domain
Prerequisites On Raspberry Pi 5
- Install Docker Engine using the official Docker docs:
https://docs.docker.com/engine/install/debian/ - Install Docker Compose plugin using the official Docker docs:
https://docs.docker.com/compose/install/ - Clone this repository onto the Raspberry Pi 5.
- Create
.envfrom.env.exampleand setIKAR_DATA_PATHto the desired host path. - Edit
.env.serverand replaceJwt__SigningKeybefore exposing the server outside your LAN.
Start
Run from the repository root:
cp .env.example .env
docker compose -f docker-compose.rpi5.yml up -d --build
Stop
docker compose -f docker-compose.rpi5.yml down
Logs
docker compose -f docker-compose.rpi5.yml logs -f ikar-server
Update After Pulling New Code
docker compose -f docker-compose.rpi5.yml up -d --build
Verify
Health endpoint:
curl http://127.0.0.1:5099/health
Expected response:
{"status":"ok"}
Data Location
Docker bind mount:
- host:
${IKAR_DATA_PATH} - container:
/app/Data
On the current Raspberry Pi 5 deployment, IKAR_DATA_PATH is set to /media/myDrive/ikar-data, which places the SQLite database, attachments, uploaded APK updates, and secrets on the external 1 TB disk instead of the SD card.
The following data stays persistent there:
ikar.dbikar.db-walikar.db-shmAttachments/AppUpdates/Android/secrets/firebase-admin.json
Client Access
For the current production deployment, clients should use the reverse-proxied HTTPS endpoint instead of direct access to port 5099:
- Android / browser / admin:
https://ikar.kusoft.xyz
Direct host access to http://<pi-ip>:5099 is intentionally not exposed outside the Raspberry Pi loopback interface.
Optional Firebase Push
If you want real Android FCM delivery:
- Put the Firebase service account JSON onto the Raspberry Pi 5.
- Set either
Push__ServiceAccountJsonPathorPush__ServiceAccountJsonin.env.server. - Set
Push__FirebaseProjectIdin.env.server.
If those values stay empty, device registration still works but actual FCM delivery is skipped by the server.