103 lines
2.7 KiB
Markdown
103 lines
2.7 KiB
Markdown
# Raspberry Pi 5 Docker Run
|
|
|
|
This repository now contains a Dockerized server path for Raspberry Pi 5.
|
|
|
|
Files used for this deployment:
|
|
|
|
- `Dockerfile.server`
|
|
- `docker-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
|
|
|
|
1. Install Docker Engine using the official Docker docs: `https://docs.docker.com/engine/install/debian/`
|
|
2. Install Docker Compose plugin using the official Docker docs: `https://docs.docker.com/compose/install/`
|
|
3. Clone this repository onto the Raspberry Pi 5.
|
|
4. Create `.env` from `.env.example` and set `IKAR_DATA_PATH` to the desired host path.
|
|
5. Edit `.env.server` and replace `Jwt__SigningKey` before exposing the server outside your LAN.
|
|
|
|
## Start
|
|
|
|
Run from the repository root:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
docker compose -f docker-compose.rpi5.yml up -d --build
|
|
```
|
|
|
|
## Stop
|
|
|
|
```bash
|
|
docker compose -f docker-compose.rpi5.yml down
|
|
```
|
|
|
|
## Logs
|
|
|
|
```bash
|
|
docker compose -f docker-compose.rpi5.yml logs -f ikar-server
|
|
```
|
|
|
|
## Update After Pulling New Code
|
|
|
|
```bash
|
|
docker compose -f docker-compose.rpi5.yml up -d --build
|
|
```
|
|
|
|
## Verify
|
|
|
|
Health endpoint:
|
|
|
|
```bash
|
|
curl http://127.0.0.1:5099/health
|
|
```
|
|
|
|
Expected response:
|
|
|
|
```json
|
|
{"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.db`
|
|
- `ikar.db-wal`
|
|
- `ikar.db-shm`
|
|
- `Attachments/`
|
|
- `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:
|
|
|
|
1. Put the Firebase service account JSON onto the Raspberry Pi 5.
|
|
2. Set either `Push__ServiceAccountJsonPath` or `Push__ServiceAccountJson` in `.env.server`.
|
|
3. Set `Push__FirebaseProjectId` in `.env.server`.
|
|
|
|
If those values stay empty, device registration still works but actual FCM delivery is skipped by the server.
|