Update Ikar server and Android client
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user