docs(lxc103): autopass - env vars noi obligatorii + fix DB readonly (uid non-root)
Documentate doua probleme intalnite la deploy: variabile env noi (AUTOPASS_RAR_ENV, AUTOPASS_SESSION_SECRET, AUTOPASS_WORKER_SEND_ENABLED) devenite obligatorii in docker-compose.yml fara actualizare in Dokploy, si crash-loop api/worker cu "readonly database" dupa ce imaginea a trecut la user non-root (uid 10001) fara chown pe volumul SQLite existent. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -48,12 +48,29 @@ expirat în Dokploy). Folosește tab-ul **`</> Git`**:
|
|||||||
|-----------|---------|
|
|-----------|---------|
|
||||||
| `AUTOPASS_CREDS_KEY` | cheie Fernet, **partajată api↔worker** (vezi mai jos) |
|
| `AUTOPASS_CREDS_KEY` | cheie Fernet, **partajată api↔worker** (vezi mai jos) |
|
||||||
| `AUTOPASS_REQUIRE_API_KEY` | `true` pentru prod |
|
| `AUTOPASS_REQUIRE_API_KEY` | `true` pentru prod |
|
||||||
|
| `AUTOPASS_RAR_ENV` | `prod` |
|
||||||
|
| `AUTOPASS_SESSION_SECRET` | secret random (vezi generare mai jos), doar pt `api` |
|
||||||
|
| `AUTOPASS_WORKER_SEND_ENABLED` | `true` pentru prod (worker-ul trimite efectiv la RAR) |
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Generare AUTOPASS_CREDS_KEY:
|
# Generare AUTOPASS_CREDS_KEY:
|
||||||
python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
|
python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
|
||||||
|
|
||||||
|
# Generare AUTOPASS_SESSION_SECRET:
|
||||||
|
openssl rand -hex 32
|
||||||
```
|
```
|
||||||
Fără cheie, compose pică explicit (`:?seteaza AUTOPASS_CREDS_KEY`).
|
Fără cheie, compose pică explicit (`:?seteaza AUTOPASS_CREDS_KEY` / `:?seteaza
|
||||||
|
AUTOPASS_RAR_ENV` / `:?seteaza AUTOPASS_SESSION_SECRET` / `:?seteaza
|
||||||
|
AUTOPASS_WORKER_SEND_ENABLED`) — compose-ul din repo a adăugat ulterior aceste variabile
|
||||||
|
ca obligatorii pentru `api`/`worker`; dacă lipsesc din Environment-ul Dokploy, deploy-ul
|
||||||
|
pică la interpolare **înainte** de build, câte una pe rând (docker compose se oprește la
|
||||||
|
prima variabilă lipsă, deci fixul se poate face în mai multe runde), cu eroare de tipul:
|
||||||
|
```
|
||||||
|
error while interpolating services.api.environment.AUTOPASS_RAR_ENV: required variable
|
||||||
|
AUTOPASS_RAR_ENV is missing a value: seteaza AUTOPASS_RAR_ENV (test|prod) in .env
|
||||||
|
```
|
||||||
|
containerele deja rulante nu sunt afectate — doar noul deploy eșuează, prod rămâne pe
|
||||||
|
imaginea veche până se adaugă variabilele lipsă și se redeploy-ează.
|
||||||
|
|
||||||
### 4. Domain
|
### 4. Domain
|
||||||
**Domains** → service **`api`**, port **`8010`**, domain `autopass.roa.romfast.ro`.
|
**Domains** → service **`api`**, port **`8010`**, domain `autopass.roa.romfast.ro`.
|
||||||
@@ -111,7 +128,39 @@ reconstruit imaginea (commit `412102b`).
|
|||||||
> 404 vs 502: 404 = niciun backend sănătos / niciun router care să răspundă; 502 = portul
|
> 404 vs 502: 404 = niciun backend sănătos / niciun router care să răspundă; 502 = portul
|
||||||
> din Traefik ≠ portul containerului. Aici api nu pornea deloc → 404.
|
> din Traefik ≠ portul containerului. Aici api nu pornea deloc → 404.
|
||||||
|
|
||||||
### 3. (Nu era o problemă) `/` → 303
|
### 3. Deploy eșuat la interpolare — variabile noi obligatorii lipsă din Dokploy
|
||||||
|
**Simptom:** deploy-ul pică **înainte** de build, cu `error while interpolating
|
||||||
|
services.<serviciu>.environment.<VAR>: required variable <VAR> is missing a value`.
|
||||||
|
**Cauză:** un commit ulterior în `docker-compose.yml` a adăugat `AUTOPASS_RAR_ENV`,
|
||||||
|
`AUTOPASS_SESSION_SECRET` (api) și `AUTOPASS_WORKER_SEND_ENABLED` (worker) ca variabile
|
||||||
|
`${VAR:?...}` obligatorii, dar Environment-ul din Dokploy pentru serviciul `autopass` nu
|
||||||
|
fusese actualizat. Docker compose se oprește la **prima** variabilă lipsă, deci fixul
|
||||||
|
poate ieși în mai multe runde (adaugi una, redeploy, apare următoarea).
|
||||||
|
**Fix:** adaugă în Dokploy → service `autopass` → Environment toate cele 3 (vezi tabelul
|
||||||
|
de mai sus), apoi redeploy.
|
||||||
|
|
||||||
|
### 4. 404 la `https://autopass.romfast.ro/` — api + worker crash-loop, DB readonly
|
||||||
|
**Simptom:** după fixul de la #3, deploy-ul trece de build, dar `api` și `worker` intră în
|
||||||
|
crash-loop (`docker ps` → `Restarting`), site-ul răspunde **404**. Loguri:
|
||||||
|
`sqlite3.OperationalError: attempt to write a readonly database`.
|
||||||
|
**Cauză:** imaginea nouă rulează containerele ca user non-root `app` (uid **10001**,
|
||||||
|
`docker inspect --format '{{.Config.User}}'` → `app`), dar volumul Docker
|
||||||
|
`autopass-data` (cu `autopass.db`) era deținut de `root:root` din deploy-urile vechi
|
||||||
|
(când containerul rula ca root) → userul `app` nu poate scrie nici fișierul, nici WAL-ul
|
||||||
|
din directorul volumului.
|
||||||
|
**Fix:**
|
||||||
|
```bash
|
||||||
|
ssh root@10.0.20.201 "pct exec 103 -- docker volume inspect autopass-roaautopass-jqqw1l_autopass-data --format '{{.Mountpoint}}'"
|
||||||
|
# chown pe mountpoint-ul returnat, la uid/gid-ul userului din imagine:
|
||||||
|
ssh root@10.0.20.201 "pct exec 103 -- chown -R 10001:10001 /var/lib/docker/volumes/autopass-roaautopass-jqqw1l_autopass-data/_data"
|
||||||
|
# apoi restart:
|
||||||
|
ssh root@10.0.20.201 "pct exec 103 -- sh -lc 'cd /etc/dokploy/compose/autopass-roaautopass-jqqw1l/code && docker compose -p autopass-roaautopass-jqqw1l -f ./docker-compose.yml restart api worker'"
|
||||||
|
```
|
||||||
|
Fără pierdere de date — doar schimbă proprietarul fișierului SQLite existent. Dacă
|
||||||
|
imaginea schimbă din nou uid-ul userului non-root, verifică din nou cu `docker run --rm
|
||||||
|
<image-api> id app` înainte de chown.
|
||||||
|
|
||||||
|
### 5. (Nu era o problemă) `/` → 303
|
||||||
După fix, root-ul redirectează `303 → /login` (auth pe sesiune). E comportament normal,
|
După fix, root-ul redirectează `303 → /login` (auth pe sesiune). E comportament normal,
|
||||||
nu eroare.
|
nu eroare.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user