Homeceti est un service regroupant tous les accès d'un utilisateur sur son Dashboard Personnel.
2.2K
The self-hosted access portal for your services — built for homelabbers and small teams alike.
Homeceti is a self-hosted personal dashboard (in the spirit of Homarr or Homepage) that brings together all your access points — internal services, self-hosted apps, web shortcuts — in one place, for one or many users with their own permissions.
Each user gets their own customizable grid of services and folders, while an administrator keeps control over who sees what.
.env, .git...)docker-compose up -d
Exemple de configuration docker-compose.yml :
services:
postgres:
image: postgres:15
container_name: postgres-home
ports:
- 5432:5432
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PWD}
POSTGRES_DB: ${DB_NAME}
networks:
nethome:
aliases:
- postgres
homeceti:
image: gpatruno/homeceti:latest
container_name: homeceti
ports:
- 3000:3000
environment:
DB_NAME: ${DB_NAME}
DB_USER: ${DB_USER}
DB_PWD: ${DB_PWD}
DB_HOST: postgres
PUBLIC_URL: https://homeceti.domain.name
SESSION_SECRET: secret-for-session
volumes:
- ./path/to/logs:/app/logs:rw
- ./path/to/uploads:/app/resources/uploads:rw
depends_on:
- postgres
networks:
nethome:
aliases:
- homeceti
# Optionnel — active le scan antivirus des uploads (voir section "Antivirus" ci-dessous)
# Nécessite d'ajouter CLAMAV_HOST: clamav dans les variables du service homeceti
# clamav:
# image: clamav/clamav:stable
# container_name: clamav
# volumes:
# - clamav_definitions:/var/lib/clamav
# networks:
# nethome:
# aliases:
# - clamav
# healthcheck:
# test: ["CMD", "clamdscan", "--ping", "1"]
# interval: 30s
# start_period: 120s
networks:
nethome:
volumes:
homeceti:
postgres:
# clamav_definitions:
| Variable | Défaut | Description |
|---|---|---|
DB_HOST | 127.0.0.1 | Hôte PostgreSQL |
DB_PORT | 5432 | Port PostgreSQL |
DB_NAME | homeceti | Nom de la base |
DB_USER | homeceti | Utilisateur DB |
DB_PWD | — | Obligatoire — mot de passe DB |
DB_SCHEMA | schema_homeceti | Schéma PostgreSQL |
SESSION_SECRET | — | Obligatoire — secret de session Express |
PORT | 3000 | Port du serveur Express |
ENV | PROD | Environnement |
PUBLIC_URL | http://localhost:4200 | URL publique d'accès (patchée dans les assets Angular au démarrage). Son protocole http/https détermine le mode de sécurité — voir HTTP vs HTTPS |
SSO_ISSUER | — | URL de l'issuer OIDC — si défini, active le mode OIDC à la place du mode JWT local |
SSO_CLIENT_ID | — | Client ID déclaré chez le fournisseur OIDC |
SSO_CLIENT_SECRET | — | Obligatoire si OIDC |
SSO_REDIRECT_URI | — | URI de redirection OIDC (ex : https://homeceti.domain.name/api/oauth/callback) |
SSO_SCOPES | — | Scopes à demander au fournisseur OIDC (ex : openid profile email groups) |
CLAMAV_HOST | — | Hostname du daemon ClamAV (clamd) — active le scan antivirus des uploads si défini |
CLAMAV_PORT | 3310 | Port du daemon ClamAV |
PUBLIC_URLLe protocole de la variable PUBLIC_URL pilote automatiquement deux mécanismes de sécurité côté serveur. Il n'y a pas d'autre variable à régler : il suffit de renseigner l'URL réelle par laquelle les utilisateurs accèdent au dashboard.
PUBLIC_URL | Cookie de session secure | CSP upgrade-insecure-requests | Cas d'usage |
|---|---|---|---|
https://… | activé (cookie transmis en HTTPS uniquement) | activé (le navigateur force les ressources en HTTPS) | Production avec nom de domaine et/ou reverse proxy TLS |
http://… | désactivé | désactivé | Accès en clair sur le LAN, sans nom de domaine ni TLS |
Pourquoi c'est nécessaire. Si l'on sert l'application en HTTP nu (ex. http://192.168.1.25:3000) alors que ces deux mécanismes restent actifs :
upgrade-insecure-requests force le navigateur à recharger les ressources (JS, CSS) en https://, ce qui échoue sur un serveur sans TLS → page blanche + ERR_SSL_PROTOCOL_ERROR ;secure n'est jamais transmis sur HTTP → impossible de rester connecté.En déduisant le mode du protocole de PUBLIC_URL, ces deux écueils sont évités automatiquement.
Recommandation. Privilégiez le HTTPS (
PUBLIC_URL=https://…) via un reverse proxy (Nginx Proxy Manager, Traefik, Caddy…) dès que possible. Le mode HTTP en clair est destiné aux déploiements maison sur réseau local de confiance, sans nom de domaine.Accès LAN. En HTTP sur le LAN,
PUBLIC_URLdoit pointer vers l'IP réelle du serveur (ex.http://192.168.1.25:3000), et nonlocalhost: cette valeur sert aussi d'origine CORS autorisée et d'URL d'API injectée dans le front. Après modification, reconstruire/relancer le conteneur et vider le cache du navigateur (Chrome peut conserver l'upgrade HTTPS d'une session précédente).
| Volume | Description |
|---|---|
/app/logs | Logs du serveur (rotation quotidienne, rétention 14 jours) |
/app/resources/uploads | Images uploadées (logos, avatars, fonds d'écran) |
Au premier démarrage, rendez-vous sur http://<PUBLIC_URL>/init pour créer le compte administrateur.
Distributed under the MIT license.
Content type
Image
Digest
sha256:54beb0db7…
Size
77.3 MB
Last updated
3 months ago
docker pull gpatruno/homeceti