diff --git a/docker-compose.yml b/docker-compose.yml index 91e9dde..acdd632 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ services: - http_proxy=${http_proxy} - https_proxy=${https_proxy} ports: - - 8082:8080 + - 8082:8071 volumes: - ./src:/app/src - ./config:/app/config @@ -30,7 +30,6 @@ services: - "host.docker.internal:host-gateway" environment: - PHP_FPM_MEMORY_LIMIT=128m - - APP_ENV=dev - APP_LOCALES=fr,en - HYDRA_ADMIN_BASE_URL=http://hydra:4445 - TRUSTED_PROXIES=127.0.0.1,REMOTE_ADDR,localhost @@ -42,7 +41,7 @@ services: - DSN_REMOTE_DATABASE=pgsql:host='postgres';port=5432;dbname=lasql; - HASH_ALGO_LEGACY="sha256" - SECURITY_PATTERN=password,salt,pepper - + - CADDY_HTTP_PORT=8071 oidc-test: image: bornholm/oidc-test:v0.0.0-1-g936a77e @@ -82,7 +81,14 @@ services: links: - postgres healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:4444/.well-known/openid-configuration"] + test: + [ + "CMD", + "wget", + "--spider", + "-q", + "http://127.0.0.1:4444/.well-known/openid-configuration", + ] interval: 10s timeout: 10s retries: 10 @@ -107,9 +113,9 @@ services: - 8085:80 restart: always environment: - PGADMIN_DEFAULT_EMAIL: admin@admin.com - PGADMIN_DEFAULT_PASSWORD: admin - PGADMIN_SERVER_JSON_FILE: /pgadminfile/server.json + PGADMIN_DEFAULT_EMAIL: admin@admin.com + PGADMIN_DEFAULT_PASSWORD: admin + PGADMIN_SERVER_JSON_FILE: /pgadminfile/server.json volumes: - ./misc/compose/pgadmin:/pgadminfile/:ro mariadb: diff --git a/misc/images/hydra-sql-base/Dockerfile b/misc/images/hydra-sql-base/Dockerfile index 0468c6e..1d55121 100644 --- a/misc/images/hydra-sql-base/Dockerfile +++ b/misc/images/hydra-sql-base/Dockerfile @@ -12,5 +12,4 @@ ARG ADDITIONAL_PACKAGES="bash=5.2.15-r0 \ php81-pdo_mysql=${PHP_PKG_VERSION} \ php81-bcmath=${PHP_PKG_VERSION}" -FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-standalone-2023.11.16-stable.1541.eec311d - +FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-base-2024.3.28-stable.937.0cac013 \ No newline at end of file diff --git a/misc/images/hydra-sql-standalone/Dockerfile b/misc/images/hydra-sql-standalone/Dockerfile index 0468c6e..69dd8cd 100644 --- a/misc/images/hydra-sql-standalone/Dockerfile +++ b/misc/images/hydra-sql-standalone/Dockerfile @@ -12,5 +12,5 @@ ARG ADDITIONAL_PACKAGES="bash=5.2.15-r0 \ php81-pdo_mysql=${PHP_PKG_VERSION} \ php81-bcmath=${PHP_PKG_VERSION}" -FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-standalone-2023.11.16-stable.1541.eec311d - +FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-standalone-2024.3.28-stable.937.0cac013 +USER www-data \ No newline at end of file diff --git a/readme.md b/readme.md index 3bcd39c..b9a3a35 100644 --- a/readme.md +++ b/readme.md @@ -3,36 +3,61 @@ Une [LoginApp](https://www.ory.sh/docs/hydra/concepts/login) pour le serveur OpenID Connect [Ory/Hydra](https://github.com/ory/hydra). Elle permet de se connecter à une base de donnée et de vérifier un mot de passe donné sur une mire locale puis d'aller chercher des données demandées +## Image + +- L'image standalone est construite en utilisant l'utilisateur `www-data` pour lancer supervisor (qui va lancer le process php-fpm et caddy, avec ce même user) +- C'est pour cela qu'on fini par "USER www-data" à la fin de `misc/images/hydra-oidc-standalone/Dockerfile`, sinon le conteneur `hydra-sql` ne tournera pas + ## Configuration + ### Variables d'environnement -|Variable|Description|Valeur par défaut|Utilisation| -|--------|-----------|-----------------|-----------| -|`APP_ENV`|Environnement symfony|prod|dev:prod| -|`APP_DEBUG`|Console de debug symofny|false|true:false| -|`PHP_FPM_MEMORY_LIMIT`|php-fpm memory limit|128mo|| -|`NGINX_APP_SERVER_LISTEN`|Port d'écoute de l'application|8080|| -|`HYDRA_ADMIN_BASE_URL`|Url d'admin Hydra ou dispatcher|http://hydra:4445|obligatoire| -|`BASE_URL`|Url d'accès|http://localhost:8080|obligatoire| -|`DSN_REMOTE_DATABASE`|DSN de la BDD|postgresql://lasql:lasql@postgres:5432/lasql?serverVersion=15&chartset=utf8|| -|`DB_USER`|User de connection à la BDD|lasql|obligatoire| -|`DB_PASSWORD`|PAssword de l'utilisateur de la BDD|lasql|obligatoire| -|`APP_LOCALES`|Langues disponibles dans l'application|fr,en|obligatoire| -|`HASH_ALGO_LEGACY`|ALgorythme de Hashage par défaut|sha256|| -|`SECURITY_PATTERN`|Séquence à employer pour le hashage du mot de passe|password,salt,pepper|obligatoire| -|`PEPPER`|Pepper utilisé pour le Hashage||| -|`REDIS_DSN`|DSN du serveur Redis|redis://redis:6379|obligatoire| -|`URL_LINK`|Url pouvant être utilisée dans les liens des templates||| +| Variable | Description | Valeur par défaut | Utilisation | +| ----------------------------------- | ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------- | +| `APP_ENV` | Environnement symfony | prod | dev:prod | +| `APP_DEBUG` | Console de debug symofny | false | true:false | +| `HYDRA_ADMIN_BASE_URL` | Url d'admin Hydra ou dispatcher | http://hydra:4445 | obligatoire | +| `BASE_URL` | Url d'accès | http://localhost:8080 | obligatoire | +| `DSN_REMOTE_DATABASE` | DSN de la BDD | postgresql://lasql:lasql@postgres:5432/lasql?serverVersion=15&chartset=utf8 | | +| `DB_USER` | User de connection à la BDD | lasql | obligatoire | +| `DB_PASSWORD` | PAssword de l'utilisateur de la BDD | lasql | obligatoire | +| `APP_LOCALES` | Langues disponibles dans l'application | fr,en | obligatoire | +| `HASH_ALGO_LEGACY` | ALgorythme de Hashage par défaut | sha256 | | +| `SECURITY_PATTERN` | Séquence à employer pour le hashage du mot de passe | password,salt,pepper | obligatoire | +| `PEPPER` | Pepper utilisé pour le Hashage | | | +| `REDIS_DSN` | DSN du serveur Redis | redis://redis:6379 | obligatoire | +| `URL_LINK` | Url pouvant être utilisée dans les liens des templates | | | +| `CADDY_HTTP_PORT` | Port d'écoute de l'application | 8080 | | +| `CADDY_HTTPS_PORT` | Port d'écoute de l'application | 8443 | | +| `CADDY_DATA_FS` | Chemin vers le répertoire utilisé pour le stockage de caddy | /tmp/caddy | | +| `CADDY_APP_ROOT_PUBLIC` | Chemin vers le répertoire utilisé pour servire les fichiers | /app/public | | +| `CADDY_PHP_INDEX` | Nom du fichier a utiliser pour servir l'application | index.php | | +| `CADDY_APP_UPSTREAM_BACKEND_SERVER` | Adresse du serveur backend FastCGI PHP vers lequel doit être diriger les requêtes PHP. | unix//tmp/php-fpm.sock | | +| `CADDY_TRUSTED_PROXIES` | Spécification des adresses IP /plage IP étant sur pour transmettre les requetes HTTP | private_ranges | | +| `CADDY_LOG_FORMAT` | Spécification du format des logs | console | | +| `CADDY_LOG_LEVEL` | Spécification du niveau de verbosité des logs | INFO | | +| `PHP_FPM_MEMORY_LIMIT` | Spécification de la mémoire limite maximale alloué au processus PHP-FPM | 128M | | +| `PHP_FPM_DISPLAY_ERRORS` | Afficahge des erreurs dans la sortie du serveur web. | off | | +| `PHP_FPM_LISTEN` | Spécification du serveur sur lequel PHP FPM écoute les connexion. | /tmp/php-fpm.sock | | +| `PHP_FPM_LOG_LEVEL` | Spécification du niveau de verbosité des logs PHP-FPM | notice | | +| `PHP_FPM_PM` | Définition du mode de gestion des processus PHP-FPM | dynamic | | +| `PHP_FPM_PM_MAX_CHILDREN` | Définition du nombre maximum de processus enfants que PHP-FPM peut générer | 5 | | +| `PHP_FPM_PM_START_SERVERS` | Définition du nombre de processus enfants que PHP-FPM va démarrer au lancement de PHP-FPM | 2 | | +| `PHP_FPM_PM_MIN_SPARE_SERVERS` | Définition du nombre minimum de processus enfants inactifs que PHP-FPM doit conserver en réserve. | 1 | | +| `PHP_FPM_PM_MAX_SPARE_SERVERS` | Définition du nombre maximum de processus enfants inactifs que PHP-FPM peut conserver en réserve. | 3 | | +| `XDG_DATA_HOME` | Définition du répertoire de base pour le stockage des données spécifiques à l'utilisateur. | /tmp/data | | ### Algorithmes de hashage compatibles La login app est compatible par défaut avec toutes les méthodes de hashage de PHP et avec SSHA. Aucune configuration supplémentaire n'est nécessaire. ### Pattern de hashage + Définir dans la variable `SECURITY_PATTERN` le pattern utilisé avec les mots clés: password | salt | pepper séparé par des virgules pour représenter la séquence à employer pour le hashage du mot de passe. Exemple : `SECURITY_PATTERN="salt,password,pepper"` ### Schéma de base de donnée + Permet d'adapter les requetes SQL à la base de donnée utilisée en indiquant les noms de colonnes de celle-ci. ```yaml @@ -51,6 +76,7 @@ sql_login: ## Environnement de développement ### Tester + Se rendre sur [http://localhost:8000/](http://localhost:8000/) et cliquer `Login` pour commencer une nouvelle connexion. 3 utilisateurs d'exemple sont disponible pour les tests: | Login | Mot de passe | Algorithme | @@ -60,8 +86,10 @@ Se rendre sur [http://localhost:8000/](http://localhost:8000/) et cliquer `Login | test3@test.com | 123456 | SSHA | ### Base de donnée + 2 bases de données différentes sont disponible pour les tests. Pour choisir la base de donnée à utiliser, modifier les d'environnement relatives à la base de donnée. + - **URL Postgres**: `postgresql://lasql:lasql@mariadb:3306/lasql?serverVersion=15&chartset=utf8` - **URL Mariadb**: `mysql://lasql:lasql@postgres:5432/lasql` @@ -72,11 +100,11 @@ ex : `'redis:?host[redis1:26379]&host[redis2:26379]&host[redis3:26379]&redis_sen ### Liste des ports -|Nom|Description|Port(s) hôte utilisé(s)| -|---|-----------|------------------| -|`oidc-test`|Application factice permettant de tester l'authentification OpenID Connect|`8080`| -|`hydra`|Serveur Ory/Hydra|`8081`| -|`hydra-sql`|Login/Consent/Logout App (ce projet)|`8082`| -|`postgres`| Base de donnée postgres support du test et pour hydra|`5432` -|`mariadb`| Base de donnée mariadb support du test|`3306` -|`pgadmin`| pour administrer la base de donnée |`8085` +| Nom | Description | Port(s) hôte utilisé(s) | +| ----------- | -------------------------------------------------------------------------- | ----------------------- | +| `oidc-test` | Application factice permettant de tester l'authentification OpenID Connect | `8080` | +| `hydra` | Serveur Ory/Hydra | `8081` | +| `hydra-sql` | Login/Consent/Logout App (ce projet) | `8082` | +| `postgres` | Base de donnée postgres support du test et pour hydra | `5432` | +| `mariadb` | Base de donnée mariadb support du test | `3306` | +| `pgadmin` | pour administrer la base de donnée | `8085` |