Make image Coolify-ready: fix native module build, add healthcheck
- .dockerignore fehlte, wodurch node_modules vom Host (macOS-Binaries) das im Container frisch installierte better-sqlite3 überschrieben hat (invalid ELF header). node_modules jetzt rekursiv ausgeschlossen. - Finales Image von node:20-alpine auf node:20-slim gewechselt, da better-sqlite3-Prebuilds gegen glibc gelinkt sind und auf musl/Alpine nicht laden. - HEALTHCHECK gegen /health ergänzt. - README um Coolify-Deployment-Anleitung erweitert.
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
**/node_modules
|
||||||
|
server/data
|
||||||
|
client/dist
|
||||||
|
.git
|
||||||
+3
-1
@@ -5,7 +5,7 @@ RUN npm install
|
|||||||
COPY client/ ./
|
COPY client/ ./
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
FROM node:20-alpine
|
FROM node:20-slim
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY server/package.json ./server/
|
COPY server/package.json ./server/
|
||||||
RUN cd server && npm install --omit=dev
|
RUN cd server && npm install --omit=dev
|
||||||
@@ -15,4 +15,6 @@ COPY --from=client-build /app/client/dist ./client/dist
|
|||||||
WORKDIR /app/server
|
WORKDIR /app/server
|
||||||
ENV PORT=8080
|
ENV PORT=8080
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s \
|
||||||
|
CMD node -e "require('http').get('http://localhost:8080/health', r => process.exit(r.statusCode===200?0:1)).on('error', () => process.exit(1))"
|
||||||
CMD ["node", "index.js"]
|
CMD ["node", "index.js"]
|
||||||
|
|||||||
@@ -57,3 +57,26 @@ docker compose up --build
|
|||||||
|
|
||||||
Danach ist die App unter http://localhost:8080 erreichbar. Die SQLite-Datenbank
|
Danach ist die App unter http://localhost:8080 erreichbar. Die SQLite-Datenbank
|
||||||
liegt im Docker-Volume `data`.
|
liegt im Docker-Volume `data`.
|
||||||
|
|
||||||
|
## Deployment in Coolify
|
||||||
|
|
||||||
|
1. **Repository verbinden**: Dieses Repo (`admin/ressourcenplanung` auf Gitea)
|
||||||
|
in Coolify als neue Ressource hinzufügen (New Resource → Application →
|
||||||
|
Gitea-Repo auswählen).
|
||||||
|
2. **Build-Pack**: **Docker Compose** wählen. Das mitgelieferte
|
||||||
|
`docker-compose.yml` baut das `Dockerfile` (Multi-Stage: Vue-Build +
|
||||||
|
Node-Server) und startet einen einzelnen Container.
|
||||||
|
3. **Port**: Der Container lauscht auf Port `8080`. In Coolify unter
|
||||||
|
"Domains"/der Port-Konfiguration der Ressource **muss dieser Port (8080)
|
||||||
|
explizit eingetragen werden** — das passiert nicht automatisch. Falls
|
||||||
|
Port 8080 auf dem Host bereits von einer anderen Coolify-Ressource belegt
|
||||||
|
ist, in `docker-compose.yml` den Host-Port anpassen (z. B. `"8081:8080"`)
|
||||||
|
und die Coolify-Konfiguration entsprechend nachziehen.
|
||||||
|
4. **Persistenz**: Das Docker-Volume `data` sichert `server/data/data.db`
|
||||||
|
(SQLite). Bei Redeploys bleiben die Daten erhalten, solange das Volume
|
||||||
|
nicht gelöscht wird. Coolifys eingebaute Volume-Backup-Funktion kann
|
||||||
|
dafür verwendet werden.
|
||||||
|
5. **Healthcheck**: Das Image bringt einen `HEALTHCHECK` gegen `/health`
|
||||||
|
mit; Coolify nutzt ihn automatisch, um den Container-Status anzuzeigen.
|
||||||
|
6. **Deploy** klicken. Beim allerersten Start legt der Server automatisch
|
||||||
|
`data.db` an und befüllt sie mit Beispieldaten.
|
||||||
|
|||||||
Reference in New Issue
Block a user