Hosting accountsComptes d'hébergement
A hosting account is a system user with its own home, a website served on its domain, and PHP that runs under the account's own identity, confined to its home. Customers do almost everything from self-service web pages; the operator only validates sign-ups. Everything else is done with compteadm (root only).
Un compte d'hébergement est un utilisateur système doté de son propre répertoire, d'un site servi sur son domaine, et d'un PHP qui tourne sous l'identité du compte, confiné à son répertoire. Le client fait presque tout depuis des pages web de libre-service ; l'opérateur ne fait que valider les inscriptions. Tout le reste passe par compteadm (root uniquement).
1. What an account is made ofDe quoi est fait un compte
| ElementÉlément | WhereOù |
|---|---|
| Home — the account's FTPS root; it owns itRépertoire — la racine FTPS du compte, qui en est propriétaire | c:/user/<compte>/ |
| Website (docroot) — only what is placed here is servedSite (docroot) — seul ce qui est déposé ici est servi | c:/user/<compte>/www/ |
| PHP sessions and temporary filesSessions PHP et fichiers temporaires | c:/user/<compte>/tmp/ |
| Backup area, with its own quotaZone de sauvegarde, avec son propre quota | @sv:/<compte>/ |
| Virtual host: domain → docroot, owning accountHôte virtuel : domaine → docroot, compte propriétaire | table @:/vhosts/ |
| Disk quotaQuota disque | 50 MB by default; WordPress raises it to at least 150 MB50 Mo par défaut ; WordPress le porte à 150 Mo au moins |
| LifetimeDurée | 28-day trial at creation; compteadm echeance <compte> 0 removes the limitessai de 28 jours à la création ; compteadm echeance <compte> 0 lève la limite |
The account sees only its own space, over FTPS as over SSH, and its PHP cannot read the system disk or another account's files. Le compte ne voit que son propre espace, en FTPS comme en SSH, et son PHP ne peut lire ni le disque système ni les fichiers d'un autre compte.
2. Self-service pagesPages de libre-service
They live in the comptes/ folder of root's HTTPS docroot, and the links sent by e-mail point there. Do not rename that folder.
Elles sont dans le dossier comptes/ du docroot HTTPS de root, et les liens envoyés par courriel y pointent. Ne renommez pas ce dossier.
| Page | PurposeRôle |
|---|---|
/comptes/inscription.php | Account request: name, e-mail address, wanted domain.Demande de compte : nom, adresse e-mail, domaine souhaité. |
/comptes/motdepasse.php | Choose the password through the received link; without a link, it is the “forgotten password” form.Choix du mot de passe par le lien reçu ; sans lien, c'est le formulaire « mot de passe oublié ». |
/comptes/depot.php | Help for uploading a site: FTPS and SSH settings.Aide au dépôt d'un site : paramètres FTPS et SSH. |
/comptes/domaine.php | Attach a domain; certificate and WordPress installation as options.Rattacher un domaine ; certificat et installation de WordPress en option. |
/comptes/certificat.php | Ask for a certificate for the domain already attached.Demander un certificat pour le domaine déjà rattaché. |
/comptes/suppression.php | Delete the account, in three steps (section 6).Supprimer le compte, en trois temps (section 6). |
/comptes/admin_demande.php | Operator's decision on a sign-up, from the link in the notification e-mail.Décision de l'opérateur sur une inscription, depuis le lien du courriel d'avis. |
- No password ever travels by e-mail: each one is chosen through a one-time link, valid 48 hours.Aucun mot de passe ne circule par courriel : chacun est choisi par un lien à usage unique, valable 48 heures.
- The pages run as
guestand only drop a request in@+:/spool/;cerberenotices it within 5 seconds and hands it tocompteadm, which does the work as root. A request that cannot be carried out (expired link, address that does not match the account, missing field…) is discarded with its reason written on the server console.Les pages tournent enguestet ne font que déposer une demande dans@+:/spool/;cerberela voit en moins de 5 secondes et la confie àcompteadm, qui agit en root. Une demande qui ne peut pas aboutir (lien expiré, adresse qui ne correspond pas au compte, champ manquant…) est écartée avec son motif écrit sur la console du serveur. - The pages answer the same way whether an account or an address exists or not: they cannot be used to list customers.Les pages répondent la même chose qu'un compte ou une adresse existe ou non : elles ne permettent pas de dresser la liste des clients.
Without a working SMTP relay, no customer receives a password, domain or deletion link. Configure it (see Mail) and test it after every installation: mail you@example.com test test. Also set the public name of the service — it appears in every link: sql "UPDATE @:/Elysee/config/ SET valeur='example.com' WHERE clef='domaine'".
Sans relais SMTP en état de marche, aucun client ne reçoit de lien de mot de passe, de domaine ou de suppression. Configurez-le (voir Mail) et testez-le après chaque installation : mail vous@exemple.fr essai essai. Renseignez aussi le nom public du service — il figure dans chaque lien : sql "UPDATE @:/Elysee/config/ SET valeur='exemple.fr' WHERE clef='domaine'".
3. Sign-up — the only step that needs the operatorInscription — la seule étape qui demande l'opérateur
compteadm demandes # pending requests# demandes en attente
compteadm valide <jeton> [quota_ko] # create the account (default quota 50000 KB)# créer le compte (quota par défaut 50000 Ko)
compteadm refuse <jeton> # discard the request# jeter la demande
valide creates the user, home, docroot and virtual host, records the e-mail address and sends the password link. The operator can also decide from the link received by e-mail, without opening a console.
valide crée l'utilisateur, le répertoire, le docroot et l'hôte virtuel, enregistre l'adresse e-mail et envoie le lien de mot de passe. L'opérateur peut aussi décider depuis le lien reçu par courriel, sans ouvrir de console.
4. Day-to-day managementGestion courante
compteadm list # list the hosting accounts# lister les comptes d'hébergement
compteadm add <compte> <domaine> <mdp> [quota_ko] # create directly, without a request# créer directement, sans demande
compteadm suspend <compte> # the site answers “account suspended”# le site répond « compte suspendu »
compteadm reactive <compte> # serve it again# le servir de nouveau
compteadm echeance <compte> <jours|0> # extend the trial; 0 = no limit# prolonger l'essai ; 0 = sans limite
compteadm del <compte> # remove it, home kept# le retirer, répertoire gardé
useradm quota <compte> <ko> # change the disk quota# changer le quota disque
These commands make the web servers reload their virtual-host table: the change is live at once and the other sites are not interrupted. A suspended account destroys nothing — home, data and certificate stay in place. When the trial ends, the daily task suspends the account; extend it with echeance beforehand.
Ces commandes font relire leur table d'hôtes virtuels aux serveurs web : le changement est effectif aussitôt et les autres sites ne sont pas interrompus. Un compte suspendu ne détruit rien — répertoire, données et certificat restent en place. À la fin de l'essai, la tâche quotidienne suspend le compte ; prolongez-le avec echeance avant.
5. Domains, certificates, WordPressDomaines, certificats, WordPress
From /comptes/domaine.php the customer receives the IP address to put in the domain's A record, then a confirmation link. On confirmation the DNS is checked and the virtual host switches to the new name. Two boxes on that screen:
Depuis /comptes/domaine.php, le client reçoit l'adresse IP à mettre dans l'enregistrement A du domaine, puis un lien de confirmation. À la confirmation, le DNS est vérifié et l'hôte virtuel bascule sur le nouveau nom. Deux cases sur cet écran :
- Certificate (unchecked by default): ask Let's Encrypt at once. Otherwise the site is served with the server's default certificate — browsers warn — until a request is made from
/comptes/certificat.php.Certificat (décochée par défaut) : demander tout de suite à Let's Encrypt. Sinon le site est servi avec le certificat par défaut du serveur — les navigateurs avertissent — jusqu'à une demande depuis/comptes/certificat.php. - Install WordPress (checked by default): if
www/is still empty, WordPress is installed and the customer receives the login and a link to set the administrator password. A site already uploaded is never overwritten.Installer WordPress (cochée par défaut) : siwww/est encore vide, WordPress est installé et le client reçoit l'identifiant et un lien pour choisir le mot de passe administrateur. Un site déjà déposé n'est jamais écrasé.
compteadm domaine <compte> <domaine> [cert] # attach (and request the certificate)# rattacher (et demander le certificat)
compteadm cert <compte> # certificate for the current domain# certificat du domaine courant
compteadm wordpress <compte> [quota_ko] [--copie] [--version V] # WordPress site (shared core)# site WordPress (cœur partagé)
compteadm drupal <compte> [--copie] [--version V] # Drupal site (shared core)# site Drupal (cœur partagé)
Failed validations count against the ACME account, which all sites share: burning that quota also blocks the renewals of every other customer. All these commands check the DNS first and change nothing while it does not point to the server — DNS propagation takes hours, that is not a failure. Never point a domain's port 80 elsewhere through a virtual host: the HTTP-01 challenge is served from a reserved path on port 80. Les validations échouées sont décomptées sur le compte ACME, que tous les sites partagent : brûler ce quota bloque aussi les renouvellements de tous les autres clients. Toutes ces commandes vérifient d'abord le DNS et ne changent rien tant qu'il ne pointe pas vers le serveur — la propagation DNS prend des heures, ce n'est pas une panne. Ne faites jamais pointer ailleurs le port 80 d'un domaine par un hôte virtuel : le challenge HTTP-01 est servi depuis un chemin réservé du port 80.
With the shared core, an account receives only index.php, wp-config.php and wp-content/; the core itself (@wp:, @dp:) is read-only and updated once for every site. --copie gives the site its own full copy instead.
Avec le cœur partagé, un compte ne reçoit que index.php, wp-config.php et wp-content/ ; le cœur lui-même (@wp:, @dp:) est en lecture seule et mis à jour une fois pour tous les sites. --copie donne à la place au site sa propre copie complète.
Shared cores and their versionsLes cœurs partagés et leurs versions
Several versions of a core can live side by side — @wp:/wordpress-7.0, @wp:/wordpress-7.1, @dp:/drupal-11.4.8 — and each site uses its own. A new site gets the default version, or the one given with --version. On an existing site, --version switches it to another version: its content and database stay as they are, and WordPress or Drupal upgrades the database at the next administration visit if the new version requires it. Sites created before versions existed keep the core shipped in the image.
Plusieurs versions d'un cœur peuvent cohabiter — @wp:/wordpress-7.0, @wp:/wordpress-7.1, @dp:/drupal-11.4.8 — et chaque site emploie la sienne. Un nouveau site reçoit la version par défaut, ou celle donnée par --version. Sur un site existant, --version le bascule vers une autre version : son contenu et sa base restent tels quels, et WordPress ou Drupal met la base à jour à la prochaine visite d'administration si la nouvelle version l'exige. Les sites créés avant les versions gardent le cœur livré dans l'image.
A core arrives as a package: a zip file and its .sha256 fingerprint, sent together by FTPS into root's home (for instance paquets/). FTPS cannot write on @wp: or @dp:; paquetadm does it:
Un cœur arrive en paquet : un fichier zip et son empreinte .sha256, envoyés ensemble par FTPS chez root (par exemple dans paquets/). FTPS ne peut pas écrire sur @wp: ni @dp: ; paquetadm s'en charge :
paquetadm installe c:/user/root/paquets/wordpress-7.1.zip # check the fingerprint, install# vérifier l'empreinte, installer
paquetadm liste # versions, default, sites using each# versions, défaut, sites de chacune
paquetadm defaut wordpress 7.1 # version given to new sites# version des nouveaux sites
compteadm wordpress <compte> --version 7.1 # switch a site# basculer un site
paquetadm retire wordpress 7.0 # remove a version nobody uses# retirer une version inutilisée
- A package whose fingerprint does not match (incomplete upload, modified file) is refused before anything is written. An installed version is never replaced: a new release is a new version.Un paquet dont l'empreinte ne correspond pas (envoi incomplet, fichier modifié) est refusé avant toute écriture. Une version installée n'est jamais remplacée : une nouvelle publication est une nouvelle version.
- The first package of a framework becomes its default. A version cannot be removed while it is the default or while a site uses it;
paquetadm listenames those sites.Le premier paquet d'un framework devient son défaut. Une version ne peut pas être retirée tant qu'elle est le défaut ou qu'un site l'emploie ;paquetadm listenomme ces sites. - Restart the server after an installation: the PHP daemon prepares the cores when it starts. The default version is prepared first; the others still work, their files being compiled on first use.Redémarrez le serveur après une installation : le démon PHP prépare les cœurs à son démarrage. La version par défaut est préparée en premier ; les autres fonctionnent aussi, leurs fichiers étant compilés au premier usage.
The cores can be left out of the system image (24 MB instead of about 700 MB) and installed afterwards from their packages. Until a WordPress core is installed, compteadm wordpress refuses to create a site and says how to install one.
Les cœurs peuvent être laissés hors de l'image système (24 Mo au lieu d'environ 700 Mo) et installés ensuite depuis leurs paquets. Tant qu'aucun cœur WordPress n'est installé, compteadm wordpress refuse de créer un site et dit comment en installer un.
6. Deleting an accountSuppression d'un compte
Requested by the customer, a deletion is never immediate: Demandée par le client, une suppression n'est jamais immédiate :
- the customer asks from
/comptes/suppression.php(account name and address);le client demande depuis/comptes/suppression.php(nom du compte et adresse) ; - a confirmation link goes to the address recorded for the account — as long as it is not followed, nothing is scheduled;un lien de confirmation part vers l'adresse enregistrée du compte — tant qu'il n'est pas suivi, rien n'est programmé ;
- once confirmed, deletion is scheduled in 7 days and a cancellation link is sent at once. The site keeps working during that period.une fois confirmée, la suppression est programmée à 7 jours et un lien d'annulation part aussitôt. Le site continue de fonctionner pendant ce délai.
compteadm annule <compte> # cancel a scheduled deletion# annuler une suppression programmée
The daily task removes the virtual host and the user of due deletions, but keeps the home in c:/user/. Erasing it is a deliberate operator action, once you are sure the customer no longer needs the files.
La tâche quotidienne retire l'hôte virtuel et l'utilisateur des suppressions échues, mais garde le répertoire dans c:/user/. L'effacer est un geste délibéré de l'opérateur, une fois sûr que le client n'a plus besoin de ses fichiers.
7. Scheduled tasksTâches planifiées
cerbere runs them; list them with:
cerbere les exécute ; les lister avec :
sql "SELECT id,min,hour,cmd FROM @:/Elysee/cerbere/cron/"
| TaskTâche | WhenQuand | RoleRôle |
|---|---|---|
rapport_2h | every 2 htoutes les 2 h | machine status report by e-mailrapport d'état de la machine par courriel |
acme_renew | 03:17 | certificate renewalrenouvellement des certificats |
comptes_expire | 04:05 | suspends expired trialssuspend les essais échus |
comptes_purge | 04:20 | carries out due deletionsexécute les suppressions échues |
ntp_sync | hourly, :37chaque heure, :37 | clock synchronisationsynchronisation de l'horloge |
comptes_* queuesfiles comptes_* | every 5 mintoutes les 5 min | safety net: the queues are normally processed within 5 sfilet : les files sont normalement traitées en 5 s |
comptes_expire and comptes_purge do nothing if the clock is wrong, rather than suspend or delete by mistake — and a wrong clock also makes every certificate check fail. Make sure ntp_sync succeeds.
comptes_expire et comptes_purge ne font rien si l'horloge est fausse, plutôt que de suspendre ou supprimer à tort — et une horloge fausse fait aussi échouer toute vérification de certificat. Vérifiez que ntp_sync passe.
File expiry: only files created by guest (temporary files of web scripts) expire, 90 days after creation. Files of root and of hosting accounts are permanent.
Expiration des fichiers : seuls les fichiers créés par guest (temporaires des scripts web) expirent, 90 jours après leur création. Ceux de root et des comptes d'hébergement sont permanents.
NextSuite
Back up accounts and the whole server: Maintenance. Sauvegarder les comptes et tout le serveur : Maintenance.