Julien Chomarat
Dans cet article, je vais vous présenter l'installation d'un serveur de logs Seq
sous Centos.
Le setup sera le suivant :
Scaleway
CentOS 7
Traefik
Let's Encrypt
Seq
et tournera dans Docker
Création de la VM
Pour nos VM, nous allons la prendre chez Scaleway. Scaleway offre des VMs de qualité avec un prix très compétitif. Je vous laisse le soin de faire un tour sur leur site et découvrir leurs offres.
La documentation de Seq nous informe qu'il faut une machine avec les caractéristiques suivantes:
Avec ces informations, nous pouvons donc démarrer avec une VM Start-1M
Au moment de la création, choisissez l'image CentOS pour le système d'exploitation.
Dès que la machine est prête, allez dans l'interface de détails et notez dans la valeur du Public DNS qui doit ressembler à ça :
6e4afa92-b46f-4cfd-9298-c655302c6cbd.pub.cloud.scaleway.com
Mise à jour des DNS
Pour pouvoir utiliser un certificat Let's Encrypt
, vous devez créer une entrée CNAME
qui pointe vers la valeur du Public DNS que vous avez notée juste avant.
Pour les besoin de cet article, le nom de domaine que nous utiliserons sera :
seq.mydomain.tld
Mise à jour de CentOS
Pendant que les DNS se mettent à jour, connectez-vous en SSH sur votre machine et tapez la commande suivante :
yum update -y
reboot
Installation de Docker
La machine est prête et à jour, nous pouvons maintenant installer Docker CE. Je vous conseille de lire la documentation, mais pour aller plus vite voici les commandes importantes :
On installe les paquets nécessaires pour faire tourner Docker :
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
On ajoute le repository stable de Docker :
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
On installe la dernière version de Docker :
yum install docker-ce docker-ce-cli containerd.io
On démarre Docker :
systemctl start docker
On vérifie que Docker fonctionne bien :
docker run hello-world
Si vous voyez un message d'information alors tout va bien.
Vous pouvez enregistrer Docker pour qu'il démarre automatiquement :
systemctl enable docker
Installation de Docker Compose
Nous allons maintenant installer Docker Compose avec les commandes suivantes :
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Installation de Traefik
Nous allons maintenant avoir besoin d'un reverse proxy pour pouvoir faire tourner plusieurs instances de Seq
sur notre VM.
Nous allons donc utiliser Traefik qui fait très bien le job et qui offre une très bonne intégration avec Let's Encrypt
Avant de commencer à installer Traefik, nous devons d'abord créer un réseau virtuel avec Docker. Traefik fera le transfert des requêtes depuis internet vers les instances Seq qui seront connectées au réseau Docker.
Pour créer les réseau Docker voici la commande:
docker network create seqnet
Maintenant nous allons préparer le terrain pour Traefik, vous allez taper les commandes suivantes qui serviront à configurer Traefik, l'image Docker-Compose et Let's Encrypt :
mkdir -p /opt/traefik
touch /opt/traefik/docker-compose.yml
touch /opt/traefik/acme.json && chmod 600 /opt/traefik/acme.json
touch /opt/traefik/traefik.toml
cd /opt/traefik
Vous pouvez maintenant éditer le fichier /opt/traefik/traefik.toml :
# Par défaut, le frontend d'une image Seq n'écoutera que sur le port https
defaultEntryPoints = ["https"]
# On définit ici les points d'entrée activés
[entryPoints]
# On active le port http
[entryPoints.http]
address = ":80"
# On demande une redirection automatique sur https
[entryPoints.http.redirect]
entryPoint = "https"
# On active le port https
[entryPoints.https]
address = ":443"
# On s'assure que la version de TLS est au minimum 1.2
[entryPoints.https.tls]
minVersion = "VersionTLS12"
cipherSuites = [
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
]
# On active le support de Docker
[docker]
# On active la gestion automatique des certificats Let's Encrypt
[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint="https"
onHostRule = true
# On configure le challenge HTTP-01
[acme.httpChallenge]
entryPoint = "http"
# On ajoute ici les domaines pour lesquels nous voulons un certificat
[[acme.domains]]
main = "seq.mydomain.tld"
Maintenant vous pouvez éditer le fichier /opt/traefik/docker-compose.yml :
version: '3'
services:
reverse-proxy:
# L'image docker de Traefik qui nous intéresse
image: traefik:1.7.9-alpine
restart: unless-stopped
# On active le dashboard avec --api
# Vous pouvez désactiver le dashboard en supprimant la ligne ci-dessous
command: --api
# On connecte l'image à notre réseau docker créé plus haut
networks:
- seqnet
# On écoute les ports http et https sur internet
ports:
- "80:80"
- "443:443"
# On map vers nos fichiers créés plus haut
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /opt/traefik/traefik.toml:/traefik.toml
- /opt/traefik/acme.json:/acme.json
# La section labels sert à configurer le dashboard
# Si vous désactivez le --api plus haut, vous pouvez supprimer toute la section labels
labels:
- "traefik.enable=true"
- "traefik.docker.network=seq"
- "traefik.port=8080"
- "traefik.backend=traefik"
- "traefik.frontend.rule=PathPrefixStrip:/traefik;PathPrefix:/traefik"
# Nous protégeons le dashboard avec un mot de :
# login: admin
# password: 1234
# Le mot de passe peut être généré dans plusieurs formats
# https://docs.traefik.io/configuration/entrypoints/#basic-authentication
# Ici le mot de passe est en BCrypt
- "traefik.frontend.auth.basic=admin:$$2y$$12$$WpLCLJFqnamjm3cDuamW9eSoUbJMZ/q8oYdmhxt0RLEObRlb3Xvru"
networks:
seqnet:
external: true
Le fichier acme.json sert pour le stockage des informations Let's Encrypt.
Vous avez terminé de configurer Traefik, lancer l'image avec la commande suivante :
docker-compose up -d
Vous pouvez maintenant vous connecter au dashboard avec les identifiants du fichier docker-compose sur l'adresse de votre VM :
https://seq.mydomain.tld/traefik
Je vous conseille de laisser le dashboard ouvert dans un onglet pour tout à l'heure.
Installation d'une instance nommé Seq
Pour les logs, nous allons donc installer Seq.
Pour chaque instance de Seq, nous écouterons sur les urls suivantes :
# Notre première instance de Seq pour l'application 1
https://seq.mydomain.tld/app1
# Notre deuxième instance de Seq pour l'application 2
https://seq.mydomain.tld/app2
Nous allons créer la première instance de Seq. Cette instance se nommera app1
.
On prépare le terrain pour notre instance :
# On crée le répertoire pour le stockage des logs de notre instance
mkdir -p /var/log/seq/app1
# On prépare le répertoire pour configurer l'instance Seq
mkdir -p /opt/app1
touch /opt/app1/docker-compose.yml
cd /opt/app1
On édite maintenant le fichier /opt/app1/docker-compose.yml :
version: '3'
services:
app1:
# On utilise la dernière image de Seq
image: datalust/seq:latest
restart: unless-stopped
# On lui donne le nom de notre instance
container_name: app1
# On la connecte sur notre réseau Docker
networks:
- seqnet
environment:
- ACCEPT_EULA=Y
# On donne l'adresse externe de notre instance Seq
- BASE_URI=https://seq.mydomain.tld/app1
# On map notre répertoire pour les logs sur /data
volumes:
- /var/log/seq/app1:/data
# On configure ici notre instance avec Traefik
labels:
# On active notre image
- "traefik.enable=true"
# On la connecte sur le réseau seqnet
- "traefik.docker.network=seqnet"
# On écoute sur le port 80
- "traefik.port=80"
# Les trois lignes ci dessous servent à rediriger le traffic si on utilise les urls suivantes :
# https://seq.mydomain.tld/app1 ou https://seq.mydomain.tld/app1/
- "traefik.frontend.redirect.regex=^(.*)/app1$$"
- "traefik.frontend.redirect.replacement=$$1/app1/"
- "traefik.frontend.rule=PathPrefix:/app1;ReplacePathRegex: ^/app1/(.*) /$$1"
networks:
seqnet:
external: true
Vous pouvez démarrer votre image avec la commande suivante et retourner sur le dashboard :
docker-compose up -d
Attendez quelques secondes, si tout s'est bien passé, vous devez voir deux nouveaux blocs bleus dans le dashboard de Traefik.
Vous pouvez naviguer vers https://seq.mydomain.tld/app1 et normalement vous arrivez sur l'interface de Seq.
Si vous souhaitez faire la deuxième instance, il suffit de refaire la procédure en remplaçant app1 par app2 dans les commandes shell et le fichier de configuration docker-compose.yml.