Script Bash d’installation automatisée d’un environnement F#/ASP.NET Core + Giraffe + PostgreSQL sur Ubuntu 24.04 et Debian 13 (Trixie).
Ce script tente d'imposer des invariants (idempotence, nettoyage, sécurité) sur un système d'exploitation par nature instable et global (les paquets .deb, les chemins apt). C'est une bataille contre la mutation d'état.
Nix est l'étape logique après ce type de script, pas Docker.
Le problème de l'impératif : Si le script échoue à la ligne 150, le système est dans un état intermédiaire incertain. Il n'y a pas de garantie transactionnelle.
La solution fonctionnelle (Nix) : Nix est déclaratif et pur. Il n'installe rien globalement. Il lit un graphe de dépendances (votre flake.nix), calcule un hash cryptographique pour l'ensemble du graphe, et place le résultat dans /nix/store/. Il n'y a pas de mutation d'état du système hôte, donc l'idempotence n'a pas à être codée, elle est garantie mathématiquement par le modèle.
ADR : Nix sera désormais notre choix par défaut.
- Installation du SDK .NET (dernière version LTS)
- Templates et outils F# (FSAutoComplete, Fantomas, FSharp.Analyzers)
- Framework web Giraffe (version LTS)
- PostgreSQL 17 avec configuration sécurisée (mots de passe forts, pg_hba.conf restrictif)
- Configuration nginx pour reverse proxy
- Optimisations système pour ASP.NET Core (sysctl, limites)
- Script idempotent et sécurisé
- Nettoyage automatique et gestion d’erreurs robuste
-
Rendez le script exécutable :
chmod +x dotnet-fsharp-pg.sh
-
Lancez le script :
./dotnet-fsharp-pg.sh
- Mode production :
./dotnet-fsharp-pg.sh --production
- Utiliser les dépôts Microsoft pour .NET (méthode recommandée : mise à jour via apt, intégration système, désinstallation propre) :
./dotnet-fsharp-pg.sh --repo-method
- Afficher l’aide :
./dotnet-fsharp-pg.sh --help
- Mode production :
-
Après installation :
Pour appliquer les variables d’environnement immédiatement :source ~/.bashrc
- Les mots de passe PostgreSQL sont générés et stockés dans :
~/.fsharp-aspnet-credentials - Fichier
.pgpasscréé pour la connexion automatique avecpsql.
- Lancer le projet de test :
cd ~/fsharp-aspnet-test/GiraffeTestApp dotnet run
- Créer un nouveau projet Giraffe :
dotnet new giraffe -n MonProjetGiraffe cd MonProjetGiraffe dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
- Ubuntu 24.04 ou Debian 13 (Trixie)
- Accès sudo
- Ne pas lancer le script en tant que root.
- Les accès PostgreSQL sont restreints et les mots de passe forts.
Auteur : Olivier Chavarin