mirror of
https://github.com/nfonteyne/octane-website.git
synced 2026-09-03 23:24:48 +02:00
fix: parsing url cassé par le mdp postgres
This commit is contained in:
parent
f9198bcc3e
commit
d159a4ef23
4 changed files with 26 additions and 9 deletions
10
.env.example
10
.env.example
|
|
@ -1,9 +1,15 @@
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
PORT=3000
|
PORT=3000
|
||||||
|
|
||||||
# Postgres
|
# Postgres — the app connects with these discrete fields (not a DATABASE_URL),
|
||||||
DATABASE_URL=postgres://octane:changeme@postgres:5432/octane
|
# so POSTGRES_PASSWORD can safely contain any character without needing
|
||||||
|
# URL-encoding. Only POSTGRES_PASSWORD needs to be set; the rest already
|
||||||
|
# match the "postgres" service in docker-compose.yml.
|
||||||
POSTGRES_PASSWORD=changeme
|
POSTGRES_PASSWORD=changeme
|
||||||
|
# PGHOST=postgres
|
||||||
|
# PGPORT=5432
|
||||||
|
# PGDATABASE=octane
|
||||||
|
# PGUSER=octane
|
||||||
|
|
||||||
# Sessions
|
# Sessions
|
||||||
SESSION_SECRET=change-me-to-a-long-random-string
|
SESSION_SECRET=change-me-to-a-long-random-string
|
||||||
|
|
|
||||||
11
README.md
11
README.md
|
|
@ -17,7 +17,6 @@ cp .env.example .env
|
||||||
Éditer `.env` (au minimum) :
|
Éditer `.env` (au minimum) :
|
||||||
|
|
||||||
```
|
```
|
||||||
DATABASE_URL=postgres://octane:changeme@postgres:5432/octane
|
|
||||||
POSTGRES_PASSWORD=changeme
|
POSTGRES_PASSWORD=changeme
|
||||||
SESSION_SECRET=une-longue-chaine-aleatoire
|
SESSION_SECRET=une-longue-chaine-aleatoire
|
||||||
|
|
||||||
|
|
@ -31,6 +30,8 @@ TRAEFIK_NETWORK_NAME=traefik-proxy
|
||||||
APP_DOMAIN=octane.dandrove.com
|
APP_DOMAIN=octane.dandrove.com
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`POSTGRES_PASSWORD` est la seule variable Postgres à renseigner : l'app se connecte avec des champs séparés (host/port/base/utilisateur déjà pré-remplis avec les valeurs par défaut du service `postgres`), pas une URL unique — donc n'importe quel caractère spécial dans le mot de passe (généré par `openssl rand -base64` par exemple) fonctionne sans encodage particulier.
|
||||||
|
|
||||||
`AUTHENTIK_ISSUER_URL` utilise ici le nom du conteneur Authentik sur le réseau `traefik-proxy` (remplacez `authentik-server` par le vrai nom de service de votre stack Authentik — `docker ps` sur cette stack vous le donnera) plutôt que l'URL publique, pour éviter un aller-retour inutile par Traefik. L'URL publique fonctionne aussi si vous préférez.
|
`AUTHENTIK_ISSUER_URL` utilise ici le nom du conteneur Authentik sur le réseau `traefik-proxy` (remplacez `authentik-server` par le vrai nom de service de votre stack Authentik — `docker ps` sur cette stack vous le donnera) plutôt que l'URL publique, pour éviter un aller-retour inutile par Traefik. L'URL publique fonctionne aussi si vous préférez.
|
||||||
|
|
||||||
Pour générer `POSTGRES_PASSWORD` et `SESSION_SECRET` (valeurs aléatoires, à ne jamais commiter) :
|
Pour générer `POSTGRES_PASSWORD` et `SESSION_SECRET` (valeurs aléatoires, à ne jamais commiter) :
|
||||||
|
|
@ -270,8 +271,8 @@ Le [Démarrage rapide](#démarrage-rapide-serveur-avec-traefik) ci-dessus couvre
|
||||||
|
|
||||||
| Variable | Description |
|
| Variable | Description |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `DATABASE_URL` | Chaîne de connexion Postgres (déjà cohérente avec le service `postgres` du compose) |
|
| `POSTGRES_PASSWORD` | Mot de passe Postgres, utilisé à la fois par le service `postgres` et par l'app (connexion par champs séparés, pas d'URL — aucun caractère à encoder) |
|
||||||
| `POSTGRES_PASSWORD` | Mot de passe du service Postgres |
|
| `PGHOST` / `PGPORT` / `PGDATABASE` / `PGUSER` | Optionnels, déjà cohérents par défaut avec le service `postgres` du compose (`postgres`/`5432`/`octane`/`octane`) |
|
||||||
| `SESSION_SECRET` | Chaîne aléatoire longue pour signer les cookies de session |
|
| `SESSION_SECRET` | Chaîne aléatoire longue pour signer les cookies de session |
|
||||||
| `AUTHENTIK_ISSUER_URL` | URL d'issuer OIDC de l'application Authentik (interne, ex: `http://authentik-server:9000/application/o/octane-website/`, ou publique) |
|
| `AUTHENTIK_ISSUER_URL` | URL d'issuer OIDC de l'application Authentik (interne, ex: `http://authentik-server:9000/application/o/octane-website/`, ou publique) |
|
||||||
| `OIDC_CLIENT_ID` / `OIDC_CLIENT_SECRET` | Identifiants du provider Authentik |
|
| `OIDC_CLIENT_ID` / `OIDC_CLIENT_SECRET` | Identifiants du provider Authentik |
|
||||||
|
|
@ -295,7 +296,6 @@ Dans `.env`, mettre :
|
||||||
|
|
||||||
```
|
```
|
||||||
DEV_BYPASS_AUTH=true
|
DEV_BYPASS_AUTH=true
|
||||||
DATABASE_URL=postgres://octane:changeme@postgres:5432/octane
|
|
||||||
POSTGRES_PASSWORD=changeme
|
POSTGRES_PASSWORD=changeme
|
||||||
SESSION_SECRET=une-longue-chaine-aleatoire
|
SESSION_SECRET=une-longue-chaine-aleatoire
|
||||||
```
|
```
|
||||||
|
|
@ -312,7 +312,8 @@ Ou sans Docker du tout, avec un Postgres local :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install
|
npm install
|
||||||
# démarrer un Postgres local, renseigner DATABASE_URL dans .env
|
# démarrer un Postgres local, puis dans .env : PGHOST=localhost (au lieu du
|
||||||
|
# nom de service Docker "postgres" par défaut) + POSTGRES_PASSWORD assorti
|
||||||
npm run migrate
|
npm run migrate
|
||||||
npm start
|
npm start
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,17 @@ function required(name) {
|
||||||
module.exports = {
|
module.exports = {
|
||||||
nodeEnv: process.env.NODE_ENV || 'development',
|
nodeEnv: process.env.NODE_ENV || 'development',
|
||||||
port: parseInt(process.env.PORT, 10) || 3000,
|
port: parseInt(process.env.PORT, 10) || 3000,
|
||||||
databaseUrl: required('DATABASE_URL'),
|
// Discrete connection fields rather than a single DATABASE_URL: a
|
||||||
|
// password containing "/", "+", "=", "@" etc. (as produced by e.g.
|
||||||
|
// `openssl rand -base64`) would otherwise need manual URL-encoding
|
||||||
|
// to avoid breaking the connection string parser.
|
||||||
|
pg: {
|
||||||
|
host: process.env.PGHOST || 'postgres',
|
||||||
|
port: parseInt(process.env.PGPORT, 10) || 5432,
|
||||||
|
database: process.env.PGDATABASE || 'octane',
|
||||||
|
user: process.env.PGUSER || 'octane',
|
||||||
|
password: required('POSTGRES_PASSWORD'),
|
||||||
|
},
|
||||||
sessionSecret: required('SESSION_SECRET'),
|
sessionSecret: required('SESSION_SECRET'),
|
||||||
// DEV_BYPASS_AUTH lets you run the app locally without a real Authentik
|
// DEV_BYPASS_AUTH lets you run the app locally without a real Authentik
|
||||||
// instance: /auth/login prompts for a name instead of redirecting to OIDC.
|
// instance: /auth/login prompts for a name instead of redirecting to OIDC.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
const { Pool } = require('pg');
|
const { Pool } = require('pg');
|
||||||
const config = require('../config');
|
const config = require('../config');
|
||||||
|
|
||||||
const pool = new Pool({ connectionString: config.databaseUrl });
|
const pool = new Pool(config.pg);
|
||||||
|
|
||||||
module.exports = pool;
|
module.exports = pool;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue