deploy: documenter le workflow d'installation fraîche

- Ajoute .env.example avec toutes les variables requises (DB_DSN, OIDC_*,
  SMTP_*, SESSION_NAME, ADMIN_EMAIL…) — DB_DSN était absent et cassait
  database/migrate.php au premier déploiement.
- Clarifie migrate-init.php : réservé aux serveurs existants antérieurs au
  système de migrations ; pour une installation fraîche, migrate.php suffit
  (applique tout depuis migration_000).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-14 08:47:29 +02:00
parent 8a85c15372
commit 2c8e31baff
2 changed files with 61 additions and 3 deletions
+41
View File
@@ -0,0 +1,41 @@
# Folio — variables d'environnement requises
# Copier ce fichier en .env dans le répertoire racine du site et remplir les valeurs.
# Ce fichier est versionné. Le .env ne l'est pas.
# Application
APP_URL=https://example.com
APP_ENV=prod
APP_DEBUG=0
# Authentification admin (email de l'administrateur principal)
ADMIN_EMAIL=
# Nom du cookie de session (doit être unique par site)
SESSION_NAME=SID_SITE
# SSO OIDC
OIDC_ISSUER=https://idp.example.com/realms/myrealm
OIDC_CLIENT_ID=
OIDC_CLIENT_SECRET=
# OIDC_REDIRECT_URI= (optionnel, défaut : APP_URL + oidc/callback)
# PostgreSQL — DB_DSN est requis par database/migrate.php
DB_DSN=pgsql:host=127.0.0.1;port=5432;dbname=mydb
DB_HOST=127.0.0.1
DB_PORT=5432
DB_NAME=mydb
DB_USER=myuser
DB_PASS=
# SMTP (commentaires, formulaire de contact)
SMTP_HOST=
SMTP_PORT=587
SMTP_SECURE=tls
SMTP_USER=
SMTP_PASS=
SMTP_FROM=
SMTP_FROM_NAME=
# Formulaire de contact
CONTACT_EMAIL=
CONTACT_FROM_EMAIL=
+20 -3
View File
@@ -1,7 +1,13 @@
<?php <?php
// À exécuter UNE SEULE FOIS pour enregistrer les migrations déjà appliquées. // À exécuter UNE SEULE FOIS sur un serveur existant dont le schéma a été créé
// php database/migrate-init.php // manuellement AVANT la mise en place du système de migrations automatiques.
//
// Pour une installation fraîche, ne PAS utiliser ce script :
// lancer directement `php database/migrate.php` qui applique tout depuis migration_000.
//
// Ne pas relancer sur une base déjà initialisée : ON CONFLICT DO NOTHING protège,
// mais les insertions inutiles pollueraient les logs.
declare(strict_types=1); declare(strict_types=1);
$baseDir = dirname(__DIR__); $baseDir = dirname(__DIR__);
@@ -28,14 +34,25 @@ $pdo->exec('
) )
'); ');
// Migrations déjà appliquées avant la mise en place de ce système // Toutes les migrations appliquées manuellement avant l'automatisation
$alreadyApplied = [ $alreadyApplied = [
'migration_000_initial_schema.sql',
'migration_001_roles_ratings.sql', 'migration_001_roles_ratings.sql',
'migration_002_profile_url.sql', 'migration_002_profile_url.sql',
'migration_003_profile_slug.sql', 'migration_003_profile_slug.sql',
'migration_004_profile_bio.sql', 'migration_004_profile_bio.sql',
'migration_005_rss_feeds.sql', 'migration_005_rss_feeds.sql',
'migration_006_profile_links.sql', 'migration_006_profile_links.sql',
'migration_007_comment_verify_token.sql',
'migration_008_user_profiles.sql',
'migration_009_journal_smtp.sql',
'migration_010_role_capabilities.sql',
'migration_011_user_capabilities.sql',
'migration_012_users.sql',
'migration_013_profiles.sql',
'migration_014_app_config.sql',
'migration_015_mail_queue.sql',
'migration_016_dictionary.sql',
]; ];
$stmt = $pdo->prepare('INSERT INTO schema_migrations (name) VALUES (?) ON CONFLICT DO NOTHING'); $stmt = $pdo->prepare('INSERT INTO schema_migrations (name) VALUES (?) ON CONFLICT DO NOTHING');