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

coup
$ 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 :

coup
$ SSH_PUBKEY="ssh-ed25519 AAAA..." wget -O - https://cipi.sh/setup.sh | bash
Si vous n'avez pas encore de clé SSH, générez-en une avec : ssh-keygen -t rsa -b 4096

AWS (connexion root désactivée par défaut)

coup
$ 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.

Enregistrez les détails d'accès SSH, le mot de passe root et le mot de passe root MariaDB. Montré une seule fois pendant mise en place. Les informations d'identification sont stockées cryptées sur /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 :

coup
# 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 -s sur 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 ne s'exécute pas localement. Il n'est pas compatible avec les dockerisés locaux environnements. Le programme d'installation peut sembler réussir sur une VM ou un conteneur d'ordinateur portable, mais SSL les workflows de provisionnement, de routage de domaine et de production ne fonctionneront pas sans un véritable public serveur. Voir Pourquoi pas local ? pour l'explication complète.

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.

coup
$ cipi app create
$ cipi app create --octane   # Laravel Octane (FrankenPHP)

Ou passez tous les indicateurs directement pour ignorer le mode interactif :

coup
$ 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 :

coup
$ php artisan cache:table
$ php artisan session:table
$ php artisan queue:table
$ php artisan migrate
Cipi s'exécute automatiquement 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

coup
$ 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

coup
$ 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.