Docker
Az ElyOS teljes mértékben támogatja a Docker-alapú fejlesztést és üzemeltetést. Ez a dokumentum részletesen bemutatja, hogyan használható a Docker az ElyOS-szel.
Miért Docker?
Szekció neve “Miért Docker?”A Docker használata számos előnnyel jár:
- Konzisztens környezet — minden fejlesztő és szerver ugyanazt a környezetet használja
- Egyszerű telepítés — nincs szükség Node.js, Bun vagy PostgreSQL helyi telepítésére
- Izolált szolgáltatások — az adatbázis és az alkalmazás külön konténerekben fut
- Gyors indítás — egyetlen paranccsal elindítható a teljes rendszer
- Reprodukálható build — a Docker image mindig ugyanúgy épül fel
Előfeltételek
Szekció neve “Előfeltételek”Docker telepítése
Szekció neve “Docker telepítése”Telepítsd a Docker-t a rendszeredre:
- macOS: OrbStack (ajánlott) vagy Docker Desktop
- Linux: Docker Engine
- Windows: Docker Desktop
Bun telepítése (opcionális)
Szekció neve “Bun telepítése (opcionális)”A Bun telepítése nem kötelező, de megkönnyíti a Docker parancsok futtatását:
curl -fsSL https://bun.sh/install | bashBun nélkül is használható a Docker, csak a nyers docker compose parancsokat kell futtatni.
Gyors indítás Docker-rel
Szekció neve “Gyors indítás Docker-rel”1. Repository klónozása
Szekció neve “1. Repository klónozása”git clone https://github.com/ElyOS-webOS/elyos-corecd elyos-core2. Környezeti változók konfigurálása
Szekció neve “2. Környezeti változók konfigurálása”Másold le a példafájlt és töltsd ki az értékeket:
cp .env.example .envVarlock + Infisical használatával (ajánlott):
INFISICAL_CLIENT_ID=your-machine-identity-client-idINFISICAL_CLIENT_SECRET=your-machine-identity-client-secretInfisical nélkül (lokális fallback mód):
VARLOCK_FALLBACK=local# ... töltsd ki az összes változót a .env.example alapján3. Rendszer indítása
Szekció neve “3. Rendszer indítása”Bun segítségével:
bun docker:upBun nélkül:
docker compose -f docker/docker-compose.yml up -d4. Alkalmazás megnyitása
Szekció neve “4. Alkalmazás megnyitása”Nyisd meg a böngészőben: http://localhost:3000
Docker Compose szolgáltatások
Szekció neve “Docker Compose szolgáltatások”A docker/docker-compose.yml fájl három szolgáltatást definiál, amelyek sorban indulnak:
1. postgres
Szekció neve “1. postgres”PostgreSQL 18 adatbázis egyedi image-dzsel, amely tartalmazza a postgres-json-schema extensiont.
postgres: build: context: postgres dockerfile: Dockerfile ports: - '${POSTGRES_PORT:-5432}:5432' volumes: - elyos-data:/var/lib/postgresql healthcheck: test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER:-elyos} -d ${POSTGRES_DB:-elyos}'] interval: 10s timeout: 5s retries: 5Jellemzők:
- Port:
5432(konfigurálható:POSTGRES_PORT) - Perzisztens adattárolás:
elyos-datavolume - Health check: 10 másodpercenként ellenőrzi az adatbázis elérhetőségét
- Automatikus újraindítás:
unless-stopped
2. db-init
Szekció neve “2. db-init”Egyszeri inicializálás: Drizzle migrációk futtatása és seed adatok betöltése.
db-init: command: > sh -c 'bun --filter @elyos/database db:init ${RESET:+-- --reset}' depends_on: postgres: condition: service_healthy restart: 'no'Jellemzők:
- Csak akkor indul, ha a
postgresszolgáltatás egészséges - Futtatja a
bun db:initparancsot - Egyszeri futás:
restart: no - Támogatja a
RESET=1környezeti változót az adatbázis teljes visszaállításához
3. elyos
Szekció neve “3. elyos”Az ElyOS webalkalmazás (SvelteKit + Express + Socket.IO).
elyos: ports: - '${ELYOS_PORT:-3000}:3000' depends_on: db-init: condition: service_completed_successfully volumes: - ../apps/web/uploads:/app/uploads restart: unless-stoppedJellemzők:
- Port:
3000(konfigurálható:ELYOS_PORT) - Csak akkor indul, ha a
db-initsikeresen lefutott - Perzisztens fájltárolás:
uploadsmappa - Automatikus újraindítás:
unless-stopped - Health check: 30 másodpercenként ellenőrzi az
/api/healthvégpontot
Indítási sorrend
Szekció neve “Indítási sorrend”A szolgáltatások sorban indulnak, biztosítva a megfelelő függőségeket:
1. postgres (indul) ↓2. postgres (healthy) ↓3. db-init (indul és lefut) ↓4. db-init (completed successfully) ↓5. elyos (indul)Adatbázis inicializálás és reset
Szekció neve “Adatbázis inicializálás és reset”Normál inicializálás
Szekció neve “Normál inicializálás”A db-init konténer idempotens — biztonságosan futtatható többször is, nem duplikál adatokat (upsert logika).
bun docker:upTeljes adatbázis reset
Szekció neve “Teljes adatbázis reset”Ha teljes adatbázis-visszaállításra van szükség (minden adat törlése és újraseedelés):
RESET=1 bun docker:upEz ugyanazt a db-init konténert futtatja, de truncate-eli az összes táblát a seed előtt.
Bun nélkül:
RESET=1 docker compose -f docker/docker-compose.yml up -dFejlesztés Docker-rel
Szekció neve “Fejlesztés Docker-rel”Hot reload támogatás
Szekció neve “Hot reload támogatás”A Docker-alapú fejlesztés támogatja a hot reload-ot volume mount segítségével. Ehhez módosítsd a docker-compose.yml fájlt:
elyos: volumes: - ../apps/web:/app/apps/web - ../packages:/app/packages command: bun run app:devCsak adatbázis indítása
Szekció neve “Csak adatbázis indítása”Ha csak az adatbázist szeretnéd Docker-ben futtatni, és az alkalmazást lokálisan:
bun docker:dbEz csak a postgres szolgáltatást indítja el.
Bun nélkül:
docker compose -f docker/docker-compose.yml up -d postgresDocker parancsok
Szekció neve “Docker parancsok”Alapvető parancsok
Szekció neve “Alapvető parancsok”# Konténerek indítása (háttérben)bun docker:up# vagydocker compose -f docker/docker-compose.yml up -d
# Konténerek leállításabun docker:down# vagydocker compose -f docker/docker-compose.yml down
# Konténer naplók követésebun docker:logs# vagydocker compose -f docker/docker-compose.yml logs -f
# Csak PostgreSQL indításabun docker:db# vagydocker compose -f docker/docker-compose.yml up -d postgresKonténer állapot ellenőrzése
Szekció neve “Konténer állapot ellenőrzése”# Futó konténerek listázásadocker ps
# Összes konténer listázása (leállítottak is)docker ps -a
# Konténer naplók megtekintésedocker logs elyos-appdocker logs elyos-postgresdocker logs elyos-db-initKonténerbe belépés
Szekció neve “Konténerbe belépés”# ElyOS konténerbe belépésdocker exec -it elyos-app sh
# PostgreSQL konténerbe belépésdocker exec -it elyos-postgres psql -U elyos -d elyosAdatok törlése
Szekció neve “Adatok törlése”# Konténerek és hálózat törlésedocker compose -f docker/docker-compose.yml down
# Konténerek, hálózat és volume-ok törlése (adatbázis adatok is)docker compose -f docker/docker-compose.yml down -v
# Image-ek törlésedocker rmi elyos-elyos elyos-postgresMulti-stage build
Szekció neve “Multi-stage build”A docker/Dockerfile egy optimalizált multi-stage build-et használ három fázissal:
1. deps — Függőségek telepítése
Szekció neve “1. deps — Függőségek telepítése”FROM oven/bun:1 AS depsWORKDIR /appCOPY package.json bun.lock ./COPY apps/web/package.json ./apps/web/# ... workspace package.json fájlokRUN bun install --frozen-lockfileJellemzők:
- Csak a
package.jsonésbun.lockfájlokat másolja - Cache-elhető réteg — ha a függőségek nem változnak, ez a réteg cache-ből jön
- Frozen lockfile — reprodukálható build
2. builder — Alkalmazás build
Szekció neve “2. builder — Alkalmazás build”FROM oven/bun:1 AS builderWORKDIR /appCOPY --from=deps /app/node_modules ./node_modulesCOPY apps/web ./apps/webCOPY packages/database ./packages/database# ... forráskód másolásaENV NODE_ENV=productionRUN bun run app:buildJellemzők:
- Függőségek másolása a
depsfázisból - Forráskód másolása
- SvelteKit build futtatása (
adapter-nodekimenet)
3. runner — Production image
Szekció neve “3. runner — Production image”FROM oven/bun:1-alpine AS runnerWORKDIR /appRUN addgroup -g 1001 -S nodejs && \ adduser -S elyos -u 1001 -G nodejsCOPY --from=builder --chown=elyos:nodejs /app/apps/web/build ./apps/web/buildRUN bun install --production --frozen-lockfileRUN bun add -g varlockUSER elyosCMD ["varlock", "run", "--", "bun", "run", "apps/web/server.js"]Jellemzők:
- Alpine Linux alapú image — minimális méret
- Nem-root felhasználó — biztonság
- Csak production függőségek
- Varlock globális telepítése — secrets management
- Health check —
/api/healthvégpont ellenőrzése
Image build
Szekció neve “Image build”Helyi build
Szekció neve “Helyi build”docker build -f docker/Dockerfile -t elyos/core:latest .Build argumentumok
Szekció neve “Build argumentumok”docker build \ -f docker/Dockerfile \ -t elyos/core:latest \ --build-arg NODE_ENV=production \ .Multi-platform build
Szekció neve “Multi-platform build”docker buildx build \ -f docker/Dockerfile \ -t elyos/core:latest \ --platform linux/amd64,linux/arm64 \ .Környezeti változók
Szekció neve “Környezeti változók”A Docker Compose automatikusan betölti a gyökér .env fájlt. Az alábbi változók konfigurálhatók:
| Változó | Alapértelmezett | Leírás |
|---|---|---|
ELYOS_PORT | 3000 | ElyOS alkalmazás portja |
POSTGRES_PORT | 5432 | PostgreSQL portja |
POSTGRES_USER | elyos | PostgreSQL felhasználónév |
POSTGRES_PASSWORD | elyos123 | PostgreSQL jelszó |
POSTGRES_DB | elyos | PostgreSQL adatbázis neve |
INFISICAL_CLIENT_ID | - | Infisical Machine Identity Client ID |
INFISICAL_CLIENT_SECRET | - | Infisical Machine Identity Client Secret |
VARLOCK_FALLBACK | - | Varlock fallback mód (local) |
RESET | - | Adatbázis reset (1 = teljes reset) |
Hibaelhárítás
Szekció neve “Hibaelhárítás”Konténer nem indul el
Szekció neve “Konténer nem indul el”Probléma: A konténer azonnal leáll indítás után.
Megoldás:
-
Ellenőrizd a naplókat:
Terminál docker logs elyos-app -
Ellenőrizd a környezeti változókat:
Terminál docker exec elyos-app env -
Ellenőrizd a health check-et:
Terminál docker inspect elyos-app | grep -A 10 Health
Adatbázis kapcsolat hiba
Szekció neve “Adatbázis kapcsolat hiba”Probléma: ECONNREFUSED vagy Connection refused hiba.
Megoldás:
-
Ellenőrizd, hogy a
postgreskonténer fut-e:Terminál docker ps | grep postgres -
Ellenőrizd a
DATABASE_URLkörnyezeti változót:Terminál # Helyes formátum:postgresql://elyos:elyos123@postgres:5432/elyos -
Várj, amíg a
postgreskonténer egészséges lesz:Terminál docker compose -f docker/docker-compose.yml ps
Port már használatban
Szekció neve “Port már használatban”Probléma: Bind for 0.0.0.0:3000 failed: port is already allocated.
Megoldás:
-
Változtasd meg a portot a
.envfájlban:Terminál ELYOS_PORT=3001 -
Vagy állítsd le a másik szolgáltatást:
Terminál lsof -ti:3000 | xargs kill -9
Volume permission hiba
Szekció neve “Volume permission hiba”Probléma: Permission denied hiba a uploads mappában.
Megoldás:
-
Ellenőrizd a mappa jogosultságait:
Terminál ls -la apps/web/uploads -
Állítsd be a megfelelő jogosultságokat:
Terminál chmod -R 755 apps/web/uploads
Image build hiba
Szekció neve “Image build hiba”Probléma: failed to solve: failed to compute cache key hiba.
Megoldás:
-
Töröld a Docker cache-t:
Terminál docker builder prune -a -
Build újra:
Terminál docker build -f docker/Dockerfile -t elyos/core:latest .
Varlock hiba
Szekció neve “Varlock hiba”Probléma: Varlock failed to fetch secrets hiba.
Megoldás:
-
Ellenőrizd az Infisical credentials-t:
Terminál echo $INFISICAL_CLIENT_IDecho $INFISICAL_CLIENT_SECRET -
Vagy használd a lokális fallback módot:
Terminál VARLOCK_FALLBACK=local bun docker:up
További információk
Szekció neve “További információk”- Első lépések — lokális fejlesztési környezet beállítása
- Környezeti változók — környezeti változók részletes leírása
- Scripts referencia — összes elérhető script parancs
- Docker dokumentáció — hivatalos Docker dokumentáció
- OrbStack dokumentáció — OrbStack használati útmutató