website-astro/src/content/articles/fr/configuration-serveur.mdx
nico 0838ea9a47
feat(article): conf serveur +
feat(config): noopener norefer on links +
fix(style): larger wrapper for editorial content +
fix(structure): add assets folder in src
2025-01-29 15:23:19 +01:00

277 lines
7.5 KiB
Text

---
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 «&nbsp;pense-bête&nbsp;» que j'utilise depuis toujours quand je crée un nouveau serveur. Généralement un <abbr lang="en" title="Virtual Private Server">VPS</abbr>, 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&nbsp;: **redémarrer&nbsp;!**
### 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 "<span lang="en">bouncer</span>".
- 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))
<details class="flow">
<summary>Procédure détaillée</summary>
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&nbsp;:
```bash
service crowdsec reload
```
</details>
##### 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`
<Picture
src={coolifySettings}
formats={['avif', 'webp']}
alt="Instance's domain field inside settings"
/>
##### Ajouter une ressource
Dans coolify, les «&nbsp;ressources&nbsp;» correspondent à un site ou service web&nbsp;:
- site statique
- webapp
- base de données
- image docker
- etc.
Afin d'héberger un site ou une webapp «&nbsp;maison&nbsp;», 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.
<Picture src={coolifyNewRessource} formats={['avif', 'webp']} alt='' />
##### 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&nbsp;:
- url du projet
- commande d'installation des paquets
- commande de construction du projet
- commande de démarrage
- variables d'environnement
- <span lang='en'>webhooks</span>
- etc.
<Picture src={coolifyConfRessource} formats={['avif', 'webp']} alt='' />
#### OpenLiteSpeed
Plus vraiment utilisé pour de nouveaux projets et moins évident à prendre en main. Mais puissant malgré tout&nbsp;!
[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&nbsp;:
- 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/))