Commencer
Installation de Cipi
Cipi installe une pile de production complète prête pour Laravel sur Ubuntu 24.04 ou 26.04 avec un seul
commande. Le programme d'installation prend environ 10 minutes et configure Nginx, MariaDB, PHP, Valkey.
(facultatif PostgreSQL via cipi db install pgsql après l'installation),
Supervisor, Fail2ban, UFW, Certbot, Deployer et le cipi CLI lui-même.
Lors de l'installation, l'assistant demande votre clé publique SSH (formats acceptés :
ssh-rsa, ssh-ed25519, ecdsa) avant qu'un colis ne soit
installé. Cipi crée un compte dédié cipi Utilisateur Linux pour administrateur SSH
accès
et applique le renforcement SSH : la connexion root est désactivée, cipi utilise uniquement la clé publique (groupe
cipi-ssh), les utilisateurs de l'application (groupe cipi-apps) peut se connecter avec un mot de passe. Connexion
les tentatives sont limitées à 3 avec un délai de grâce de 20 secondes et le transfert X11 est désactivé.
Le programme d'installation génère également un mot de passe root aléatoire de 40 caractères, le stocke dans
/etc/cipi/server.json, et l'affiche dans le résumé de l'installation. Les clés SSH collées sont
automatiquement nettoyé - les commentaires, les retours chariot et les espaces en excès sont supprimés avant
validation.
Installation standard
$ wget -O - https://cipi.sh/setup.sh | bash
Installation non interactive
Pour les configurations automatisées, transmettez votre clé publique SSH via le SSH_PUBKEY variable d'environnement
pour ignorer l'invite interactive :
$ SSH_PUBKEY="ssh-ed25519 AAAA..." wget -O - https://cipi.sh/setup.sh | bash
ssh-keygen -t rsa -b 4096
AWS (connexion root désactivée par défaut)
$ ssh ubuntu@your-server-ip $ sudo -s $ wget -O - https://cipi.sh/setup.sh | bash
A la fin de l'installation, vous verrez un écran récapitulatif avec les détails d'accès SSH, le
le mot de passe root généré automatiquement et le mot de passe root MariaDB.
Enregistrez-les immédiatement — ils ne sont affichés qu'une seule fois. Les informations d'identification sont stockées dans
/etc/cipi/server.json, qui — comme tous les fichiers de configuration Cipi — est
chiffré au repos en utilisant AES-256-CBC via le module intégré Coffre-fort
système. Identifiants, clés SSH, .env les fichiers et les sauvegardes de base de données sont protégés à la fois sur
disque
et pendant le transfert (via Synchroniser archives cryptées). Cipi applique également
Conservation des journaux conforme au RGPD avec des politiques de rotation automatique pour les candidatures,
sécurité et journaux HTTP - voir Conservation des journaux pour plus de détails.
/etc/cipi/server.json.Accès post-installation
Après l'installation, accès administrateur utilise l'authentification par clé publique comme
cipi utilisateur (la connexion root est désactivée). Utilisateurs de l'application peut SSH directement avec
ssh myapp@server-ip et le mot de passe généré lors de la création de l'application. Pour courir
cipi commandes ou effectuer toute tâche administrative, connectez-vous en tant que cipi et
puis escalader :
# 1. connect to the server (key-based auth only) $ ssh cipi@your-server-ip # 2. escalate to root to run cipi commands cipi@server:~$ sudo -s # 3. now you can use all cipi commands root@server:~# cipi status root@server:~# cipi app list # 4. to work as an app user, switch with su root@server:~# su - myapp
Exigences
- Ubuntu 24.04 ou 26.04 LTS (nouvelles installations uniquement ; les versions intermédiaires ne sont pas prises en charge)
- Accès root (ou
sudo -ssur AWS) - Ports 22, 80 et 443 ouverts
- Un serveur propre – n'installez pas Cipi sur un serveur avec une pile Web existante
- A serveur public accessible sur Internet avec un routable IPv4 publique adresse — VPS NAT uniquement, réseaux domestiques derrière un routeur et hôtes inaccessibles depuis Internet n'est pas pris en charge
- Virtualisation KVM complète ou bare metal — pas Conteneurs OpenVZ, LXC ou noyau partagé environnements (y compris locaux Docker, Docker Desktop, OrbStack, Colima, WSL et similaires environnements d'exécution de conteneurs de bureau)
Cipi est testé et fonctionne sur : DigitalOcean, AWS EC2, Vultr, Linode/Akamai, Hetzner, Google Cloud, OVH, Scaleway et tout hôte KVM ou bare metal exécutant Ubuntu avec une IP publique.
Démarrage rapide
1. Créez votre première application
L'assistant interactif demande un nom d'utilisateur, un domaine principal, l'URL du référentiel Git (format SSH) et
branche
le cas échéant, et la version PHP. Les applications Laravel nécessitent toujours un référentiel ; pour
personnalisé
applications, vous pouvez laisser le référentiel vide pour héberger le site via SFTP uniquement - voir
applications personnalisées. Depuis v5.0, Laravel applications peuvent utiliser
classique PHP-FPM ou Laravel Octane (FrankenPHP) avec
--octane — voir Laravel Octane.
$ cipi app create $ cipi app create --octane # Laravel Octane (FrankenPHP)
Ou passez tous les indicateurs directement pour ignorer le mode interactif :
$ cipi app create \
--user=myapp \
--domain=myapp.com \
--repository=git@github.com:you/myapp.git \
--branch=main \
--php=8.5
À la fin, Cipi imprime un résumé des informations d'identification – enregistrez-le, affiché une seule fois — y compris
l'adresse IP publique du serveur (pour la configuration DNS), la clé de déploiement SSH, les identifiants de la base de données,
un prêt à l'emploi mariadb+ssh:// URL de connexion pour les clients GUI (TablePlus, DBeaver,
Sequel Pro), l'URL webhook et le jeton webhook.
2. Ajoutez la clé de déploiement à votre fournisseur Git
Si vous avez configuré un jeton GitHub ou GitLab via cipi git, cette étape est
automatique — Cipi ajoute la clé de déploiement et crée le webhook pour vous. Voir
Configuration automatique de Git pour plus de détails.
Sinon, copiez le ssh-ed25519 ... clé affichée après la création de l'application et ajoutez-la en tant que
Déployez Key dans votre référentiel :
- GitHub : Référentiel → Paramètres → Clés de déploiement → Ajouter une clé de déploiement
- GitLab : Référentiel → Paramètres → Référentiel → Clés de déploiement
3. Préparez votre projet Laravel
Cipi utilise le pilote de base de données pour le cache, les sessions et les files d'attente. Exécutez-les une fois dans votre Laravel projetez, validez et poussez les migrations générées :
$ php artisan cache:table $ php artisan session:table $ php artisan queue:table $ php artisan migrate
artisan migrate --force à chaque déploiement. La cache,
session et les tables de file d'attente seront créées lors du premier déploiement si vous validez les migrations.4. Déployer
$ cipi deploy myapp
Le déployeur clone votre dépôt dans un nouveau releases/N/ répertoire, s'exécute
composer install --no-dev, liens .env et storage/, court
migrations, exécutions artisan optimize, crée storage:link, échange le
current lien symbolique de manière atomique et redémarre les travailleurs de file d'attente. Zéro temps d'arrêt.
5. Installez SSL
$ cipi ssl install myapp
Certbot fournit un certificat Let's Encrypt, configure Nginx pour HTTPS et met à jour
APP_URL dans .env. Votre application Laravel est désormais disponible
https://myapp.com.
Pile technologique
Cipi apporte une pile complète et prête pour la production à votre serveur Ubuntu. Voici tout ce qui obtient installé et configuré :
| Composant | Rôle |
|---|---|
| Ubuntu | Système d'exploitation de base (24.04 ou 26.04 LTS) |
| Nginx | Serveur Web, proxy inverse, terminaison SSL. Depuis v4.5.9, ligne principale
SSL de nginx.org
(1.29.8+) avec max_headers 1000 pour le durcissement HTTP/2 — pas le Ubuntu
paquet d'archives |
| PHP-FPM | Runtime PHP par défaut par application (8.3–8.5 ; ondrej/php, packages.sury.org ou Ubuntu main par libération) |
| Laravel Octane | Serveur FrankenPHP HTTP en option par application Laravel (depuis v5.0) —
cipi app create --octane; Les applications FPM et Octane coexistent sur le même serveur
|
| MariaDB | Base de données relationnelle par défaut (remplacement MySQL, port 3306). Facultatif
Laravel via cipi db install pgsql (port 5432) depuis la v4.8.0 |
| Valkey | Stockage en mémoire pour le cache, les sessions, les files d'attente et la diffusion (fork Redis sous licence BSD) |
| Supervisor | Gestionnaire de processus pour les agents de file d'attente Laravel, Octane, Horizon et Reverb |
| Déployeur | Outil de déploiement sans temps d'arrêt |
| Bot certifié | Let's Encrypt SSL certificats |
| UFW | Pare-feu (ports 22, 80, 443) |
| Échec2ban | Protection progressive contre la force brute avec prison récidivante |
| mises à niveau sans surveillance | Correctifs de sécurité automatiques |
| Composer | PHP gestionnaire de dépendances |
| cipi CLI | Gestion et orchestration des serveurs |
Structure de l'application
Quand tu cours cipi app create, Cipi crée un environnement entièrement isolé pour l'application.
Voici tout ce qui est mis en place :
/home/myapp/ ← utilisateur Linux isolé (chmod 750) ├── .ssh/ │ ├── id_ed25519 ← clé de déploiement (privée) │ └── id_ed25519.pub ← clé de déploiement (publique — ajouter à Git) ├── .deployer/ │ └── deploy.php ← Configuration du déployeur (générée automatiquement) ├── courant -> releases/3/ ← lien symbolique vers la version active ├── releases/ │ ├── 1/ │ ├── 2/ │ └── 3/ ← dernière version (les 5 dernières conservées) ├── shared/ │ ├── .env ← compilé automatiquement par Cipi │ └── storage/ ← stockage persistant └── logs/ ├── nginx-access.log ├── nginx-error.log ├── php-fpm-error.log ├── worker-default.log └── deploy.log
En plus du répertoire personnel, Cipi crée ces fichiers système :
PHP-FPM pool: /etc/php/8.5/fpm/pool.d/monapplication.conf (user=myapp ; omis pour Octane applications) Octane (v5+): Supervisor monapplication-octane + Nginx proxy_pass → 127.0.0.1:81xx Nginx vhost: /etc/nginx/sites-available/monapplication Supervisor: /etc/supervisor/conf.d/monapplication.conf Crontab: * * * * * php artisan schedule:run MariaDB: database 'monapplication', user 'monapplication'@'localhost'
Le .env est automatiquement compilé avec toutes les informations d'identification : nom de la base de données, mot de passe, jeton webhook,
et APP_KEY. Vous n'avez jamais besoin de le toucher manuellement, mais vous pouvez toujours le modifier avec
cipi app env myapp.