--- title: 'Paramétrer un serveur pour héberger des trucs' subtitle: 'Guide personnel.' lang: fr slug: 'configuration-serveur' excerpt: Envie de mettre un site en ligne ? D'héberger vos propres outils plutôt que de payer des abonnements ? Bah lezgongue tags: ['Dev', 'Backend'] type: articles createdAt: '2025-01-28T22:20:00.000Z' --- import { Picture } from 'astro:assets' import coolifySettings from '@assets/images/articles/configuration-serveur/coolify-admin-settings.jpg' import coolifyNewRessource from '@assets/images/articles/configuration-serveur/coolify-new-ressource.jpg' import coolifyConfRessource from '@assets/images/articles/configuration-serveur/coolify-conf-ressource.jpg' ## Mon mémo perso. Cet article est l'extension d'un fichier « pense-bête » que j'utilise depuis toujours quand je crée un nouveau serveur. Généralement un VPS, généralement sous debian ou fedora. Si vous voulez tester des trucs, voici [un lien de parrainage](https://hetzner.cloud/?ref=Jl7yPFuoBGDM) chez l'hébergeur allemand [Hetzner](https://hetzner.cloud) pour récupérer 20€ de crédit (et 10€ pour moi si vous y restez). [Conditions de l'offre.](https://www.hetzner.com/legal/referrals) > Notez bien que je ne suis ni administrateur système ni expert en sécurité. ## Conf serveur ### Actions immédiates Se connecter en root via ssh puis… #### Paramétrer les locales Parfois il manque la configuration des [locales](https://www.tecmint.com/set-system-locales-in-linux/) et ça cause des erreurs. ```bash {"Debian":4} {"Fedora":6} # affiche la conf actuelle locale + nano /etc/default/locale + nano /etc/locale.conf # compléter ces lignes si besoin LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 ``` #### Mettre à jour le système ```bash {"Debian":1} {"Fedora":4} + apt update apt dist-upgrade + dnf check-update dnf upgrade ``` #### Nouvel utilisateur - Ajouter et renseigner un nouvel utilisateur. - Ajouter l'utilisateur aux "sudoers". - Ajouter sa clé ssh locale à l'utilisateur distant. ```bash {"Debian":3} {"Fedora":5} {"En local":8} {"Sur le serveur":13} adduser USERNAME + usermod -aG sudo USERNAME + usermod -aG wheel USERNAME + ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "mail@domain.tld" # afficher puis copier la clé publique cat ~/.ssh/id_ed25519.pub + su USERNAME mkdir ~/.ssh # coller la clé publique dans ce fichier nano authorized_keys ``` #### bash alias Ajoute un alias `ll` pour un `ls` plus explicite. ```bash title="~/.bashrc" alias ll='ls -lah' ``` ### SSH configure [sshd_config](https://infosec.mozilla.org/guidelines/openssh) ```ssh-config title="/etc/ssh/sshd_config" # Changer le port est recommandé mais pas obligatoire Port 10485 # Désactive la connexion par mot de passe AuthenticationMethods publickey # Désactive la connexion via root PermitRootLogin No # modifier/adapter ces options si besoin LoginGraceTime 120 StrictModes yes PubkeyAuthentication yes AuthorizedKeysFile /home/%u/.ssh/authorized_keys PermitEmptyPasswords no ChallengeResponseAuthentication no X11Forwarding no UseDNS no MaxStartups 10:30:60 PermitTunnel no ``` Tester maintenant dans un autre terminal si la connexion ssh avec le nouvel utilisateur fonctionne. Si oui : **redémarrer !** ### Pare-feu - Installer - Paramétrer - Activer #### Debian [ufw](https://www.codeflow.site/fr/article/how-to-set-up-a-firewall-with-ufw-on-debian-10) ```bash ufw default deny incoming ufw default allow outgoing ufw allow ssh # ou ufw allow PORT ufw allow http # ufw allow 80 ufw allow https # ufw allow 443 ufw enable ``` #### Fedora [Firewalld](https://docs.fedoraproject.org/en-US/quick-docs/firewalld/#_viewing_the_current_status_of_firewalld) ```bash dnf install firewalld systemctl unmask firewalld systemctl start firewalld systemctl enable firewalld firewall-cmd --zone=public --add-service=ssh firewall-cmd --zone=public --add-service=http firewall-cmd --zone=public --add-service=https firewall-cmd --runtime-to-permanent firewall-cmd --reload ``` ### Crowdsec [Crowdsec](https://doc.crowdsec.net/docs/getting_started/install_crowdsec/) est un système de sécurité qui détecte et bloque les connexions malveillantes. - Installer crowdsec. - Installer un "bouncer". - Activer des [scenarios](https://doc.crowdsec.net/docs/next/cscli/cscli_scenarios_install) (facultatif). ```bash {"Debian":3} {"Fedora":6} curl -s https://install.crowdsec.net | sudo sh + apt install crowdsec apt install crowdsec-firewall-bouncer-iptables + dnf install crowdsec dnf install crowdsec-firewall-bouncer-nftables ``` ## Conf web ### Serveur web J'utilisais généralement [OpenLiteSpeed](https://openlitespeed.org/) pour avoir une interface graphique, mais j'ai changé pour [Coolify](https://coolify.io) depuis quelques années. #### Coolify [Documentation.](https://coolify.io/docs/installation) ```bash curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash ``` > Crowdsec et Coolify utilisent tous les deux le port 8080 par défaut. Il faut le changer pour un des deux (plus facile à [faire pour Crowdsec.](https://support.crowdsec.net/hc/en-gb/articles/10831013001234--Security-Engine-How-to-change-the-default-port))
Procédure détaillée Il faut éditer deux fichiers: ```yaml title="/etc/crowdsec/config.yaml" "8080" api: server: listen_uri: 127.0.0.1:8080 ``` ```yaml title="/etc/crowdsec/local_api_credentials.yaml" "8080" url: http://127.0.0.1:8080 ``` Puis charger la nouvelle configuration : ```bash service crowdsec reload ```
##### Configuration Une fois installé (suivre les instructions du script), on peut paramétrer Coolify avec un nom de domaine, généralement un sous-domaine du style `coolify.domaine.tld` ##### Ajouter une ressource Dans coolify, les « ressources » correspondent à un site ou service web : - site statique - webapp - base de données - image docker - etc. Afin d'héberger un site ou une webapp « maison », il faudra avant tout que le code soit disponible sur une forge git. Soit en public soit en ayant paramétré une clé de déploiement au préalable. ##### Configurer la ressource Coolify va essayer de déterminer des [options par défaut](https://github.com/coollabsio/coolify-examples/) selon le dépôt git. Il ne restera plus qu'à ajuster les paramètres de la ressource : - url du projet - commande d'installation des paquets - commande de construction du projet - commande de démarrage - variables d'environnement - webhooks - etc. #### OpenLiteSpeed Plus vraiment utilisé pour de nouveaux projets et moins évident à prendre en main. Mais puissant malgré tout ! [Documentation.](https://docs.openlitespeed.org/installation/repo/) ```bash wget -O - https://repo.litespeed.sh | sudo bash apt-get install openlitespeed ``` Récupérer le mot de passe admin `cat /usr/local/lsws/adminpasswd` ### Outils Selon les besoins du projet : - git - [nvm](https://github.com/nvm-sh/nvm#install--update-script) - [yarn](https://classic.yarnpkg.com/en/docs/getting-started)/[pnpm](https://pnpm.io/installation)/[bun](https://bun.sh/) - [acme.sh](https://github.com/acmesh-official/acme.sh) ([tuto complet](/fragments/acme-sh-tls-cert/))