Comment auto-héberger un blog fantôme avec Traefik

Ghost est un système de gestion de contenu open source très populaire. A commencé comme une alternative à WordPress et est devenu une alternative à Substack en se concentrant sur l’adhésion et la newsletter.

Les créateurs de Ghost proposent un hébergement Pro géré, mais cela peut ne pas correspondre au budget de tout le monde.

Alternativement, vous pouvez l’auto-héberger sur vos propres serveurs cloud . Sur le manuel Linux, nous avons déjà un guide sur le déploiement de Ghost avec Docker dans une configuration de proxy inverse .

Au lieu du proxy inverse Ngnix , vous pouvez également utiliser un autre logiciel appelé Traefik avec Docker. Il s’agit d’un proxy d’application cloud native open source populaire, d’une passerelle API, d’un routeur Edge, etc.

J’utilise Traefik pour sécuriser mes sites Web à l’aide d’un certificat SSL obtenu auprès de Let’s Encrypt . Une fois déployé, Traefik peut gérer automatiquement vos certificats et leurs renouvellements.

Dans ce tutoriel, je vais partager les étapes nécessaires pour déployer un blog Ghost avec Docker et Traefik.

Voici ce dont vous avez besoin pour ce tutoriel :

  • Un domaine et l’accès à ses paramètres DNS
  • Un serveur cloud comme ceux de DigitalOcean ou Linode
  • Bonne connaissance de la ligne de commande Linux
  • Bonne connaissance de Docker

Cela mis à part, voyons comment s’y prendre.

Étape 1. Obtenez un domaine (si vous n’en avez pas)

Je recommande toujours de déployer des outils sur des domaines réels, même si c’est à des fins de test.

Les domaines ne sont pas chers de nos jours. Vous pouvez trouver de bons domaines peu coûteux sur NameCheap .

À des fins de test, vous pouvez obtenir n’importe quel domaine disponible au prix le moins cher. Habituellement, les domaines avec des TLD obscurs comme .club sont très bon marché. Au lieu de renouveler l’année suivante, vous pouvez en acheter un autre à bas prix.

S’il s’agit d’un véritable site Web destiné au public, optez pour un domaine adapté à votre image de marque. Je préfère toujours les domaines .com à tout autre TLD.

READ  Comment compresser des fichiers et des dossiers sous Linux 2022

Pour le site Web de production, je recommande d’utiliser Cloudflare pour un site Web plus rapide. Vous pouvez l’utiliser gratuitement. Voici comment configurer votre DNS avec Cloudflare .

2. Configurer votre instance cloud

J’utilise DigitalOcean pour héberger mon site Web – Narasimman Tech . Il est facile et peu coûteux à mettre en place. Si vous êtes un nouvel utilisateur, DigitalOcean vous offre un crédit de 100 $ , valable pendant 60 jours d’utilisation du serveur.

En cas de doute, référez-vous à notre liste de serveurs cloud gratuits. Vous pouvez obtenir des crédits gratuits pour essayer un nouveau service.

Je vous laisse créer un nouveau serveur sur votre service cloud préféré.

3. Configuration de Docker et Docker Swarm

Je pense que vous pouvez comprendre comment utiliser SSH pour vous connecter aux serveurs distants.

ssh root@<IP address of the Droplet>

Une fois que vous êtes connecté à votre serveur, vous devez configurer Docker. Étant donné que l’installation de Docker est différente pour différentes distributions, je ne vais pas le couvrir. Si vous avez besoin d’aide, voici un tutoriel pour Ubuntu.

Nous exécuterons nos services dans un environnement Docker Swarm . Pour démarrer une exécution de l’environnement Docker Swarm,

docker swarm init

Cela crée un nouvel environnement Swarm et cela devient votre nœud de gestionnaire. Vous pouvez ajouter un nouveau Droplet en tant que nœud de travail pour faire évoluer vos services, mais cela dépasse le cadre de ce didacticiel.

4. Création des fichiers et répertoires de configuration requis

Créez un dossier appelé mon site Web ou tout ce que vous voulez et remplacez le répertoire par le répertoire nouvellement créé.

mkdir website

cd website

Vous devez créer quelques fichiers et répertoires pour stocker les fichiers de configuration Traefik et vos clés SSL :

Créez un nouveau répertoire appelé ‘data’ et changez-le de répertoire.

mkdir data

cd data

Dans ce répertoire, créez deux nouveaux fichiers appelés traefik.yml et acme.json changez l’autorisation de acme.json à 600.

touch traefik.yml acme.json

chmod 600 acme.json

Ouvrez le fichier à l’aide de n’importe quel éditeur.

nano traefik.yml

Collez le code suivant dans le fichier traefik.yml .

api:
  dashboard: true
  debug: true
serversTransport:
  insecureSkipVerify: true
entryPoints:
  web:
    address: :80
    http:
      redirections:
        entryPoint:
          to: websecure

  websecure:
    address: :443
    http:
      middlewares:
        - secureHeaders@file
        - nofloc@file
      tls:
        certResolver: letsencrypt
        domains:
          - main: yourdomain.com
            sans:
              - "*.yourdomain.com"

pilot:
  dashboard: false

providers:
  docker:
    swarmMode: true
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
  file:
    filename: /configurations/dynamic.yml

certificatesResolvers:
  letsencrypt:
    acme:
            #caServer: https://acme-staging-v02.api.letsencrypt.org/directory
      email: youemail@email.com
      storage: acme.json
      keyType: EC384
      dnsChallenge:
        provider: cloudflare
        resolvers:
          - "1.1.1.1:53"
          - "1.0.0.1:53"

Vous devez modifier quelques variables :

READ  Comment renommer un répertoire en ligne de commande Linux

Remplacez votredomaine.com par le domaine que vous possédez.

          - main: yourdomain.com
            sans:
              - "*.yourdomain.com"

Créez un nouveau répertoire appelé configurations et changez-le de répertoire. Dans ce répertoire, créez un nouveau fichier appelé ‘dynamic.yml’ et copiez-collez les lignes suivantes.

mkdir configurations

cd configurations

touch dynamic.yml

nano dynamic.yml
# Dynamic configuration
http:
  middlewares:
    nofloc:
      headers:
        customResponseHeaders:
          Permissions-Policy: "interest-cohort=()"
    secureHeaders:
      headers:
        sslRedirect: true
        forceSTSHeader: true
        stsIncludeSubdomains: true
        stsPreload: true
        stsSeconds: 31536000

    # UserName : admin
	# Password : qwer
    user-auth:
      basicAuth:
        users:
          - "admin:$apr1$tm53ra6x$FntXd6jcvxYM/YH0P2hcc1"

tls:
  options:
    default:
      cipherSuites:
        - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
        - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
        - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
        - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
      minVersion: VersionTLS12

📃Le nom d’utilisateur par défaut est 

‘admin’ et le mot de passe est 

‘qwer’

5. Configuration de Traefik et Ghost

Revenez maintenant à notre répertoire principal, c’est-à-dire le répertoire ‘website’ dans mon cas, que vous avez créé au début.

cd ~/website

Créez maintenant un fichier appelé docker-compose.yml pour le modifier.

nano docker-compose.yml 

Collez ce qui suit :

# Traefik, Ghost, and MySQL
version: '3.3'

services:
  traefik:
    image: traefik:latest
    networks:
      - traefik
    ports:
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/traefik.yml:/traefik.yml:ro
      - ./data/configurations:/configurations
    environment:
	  - CF_API_EMAIL=
	  - CF_DNS_API_TOKEN=
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]
      labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik"
      - "traefik.http.routers.traefik-secure.entrypoints=websecure"
      - "traefik.http.routers.traefik-secure.rule=Host(`traefik.yourdomain.com`)"
      - "traefik.http.routers.traefik-secure.service=api@internal"
      - "traefik.http.services.traefik-secure.loadbalancer.server.port=8080"

  ghost:
    image: ghost:4-alpine
    depends_on:
      - mysql
      - traefik
    networks:
      - traefik
      - backend
    volumes:
      - ghost_data:/var/lib/ghost
    environment:
      # see https://ghost.org/docs/config/#configuration-options
      database__client: mysql
      database__connection__host: mysql
      database__connection__user: root
      database__connection__password: secretpassword
      database__connection__database: ghost
      # this url value is just an example, and is likely wrong for your environment!
      url: https://yourdomain.com
      # contrary to the default mentioned in the linked documentation, this image defaults to NODE_ENV=production (so development mode needs to be explicitly specified if desired)
      #NODE_ENV: development
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]
      labels:
        - "traefik.enable=true"
        - "traefik.docker.network=traefik"
        - "traefik.http.routers.ghost-secure.entrypoints=websecure"
        - "traefik.http.routers.ghost-secure.rule=Host(`yourdomain.com`)"
        - "traefik.http.routers.ghost-secure.service=ghost"
        - "traefik.http.services.ghost.loadbalancer.server.port=2368"

  mysql:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: secretpassword
    networks:
      - backend
    volumes:
      - sql_data:/var/lib/mysql
    deploy:
      placement:
        constraints: [node.role == manager]

networks:
  traefik:
    external: true
  backend:
    external: true

volumes:
  ghost_data:
    external: true
  sql_data:
    external: true

N’oubliez pas de définir les variables d’environnement. Si vous ne savez pas comment obtenir l’API Email et le DNS API Token de votre compte Cloudflare, lisez cet article de Cloudflare .

    environment:
	  - CF_API_EMAIL=
	  - CF_DNS_API_TOKEN=

Ne fermez pas encore le fichier. Vous devez changer quelques paramètres ici .

READ  Comment vérifier si un fichier ou un répertoire existe dans Bash Shell

Remplacez ‘traefik.votredomaine.com ; avec un sous-domaine.

- "traefik.http.routers.traefik-secure.rule=Host(`traefik.yourdomain.com`)"

Remplacez ‘secretpassword’ par un nouveau mot de passe.

database__connection__password: secretpassword

Remplacez ‘ https://votredomaine.com ‘ par votre URL.

url: https://yourdomain.com

Remplacez “votredomaine.com” par un sous-domaine ou utilisez le domaine complet.

- "traefik.http.routers.ghost-secure.rule=Host(`yourdomain.com`)"

Enfin, remplacez ‘secretpassword’ par le mot de passe que vous avez défini ci-dessus au point deux.

MYSQL_ROOT_PASSWORD: secretpassword

6. Création et démarrage des services

Maintenant tout est en place ! Vérifiez vos fichiers si tout est en place et si les variables sont modifiées selon vos besoins.

Votre structure de fichier devrait ressembler à ceci :

Structure de répertoire pour la configuration de Ghost avec Traefik

Maintenant, à partir de ce répertoire, exécutez la commande. Vous pouvez changer ‘site’ en tout ce que vous voulez.

docker stack deploy -c docker-compose.yml site

Cela prend quelques instants pour télécharger les images Docker et obtenir les clés SSL.

Pour répertorier les services en cours d’exécution, exécutez :

docker service ls

Ceci répertorie les services en cours d’exécution. Si les RÉPLIQUES sont 0/1 attendez quelques minutes, il se peut qu’elles se préparent.

Pour vérifier l’état des services individuels, exécutez :

docker service ps <service name>

Remplacez <nom du service> par site, site_ghost ou site_traefik ou site_mysql.

Pour afficher les journaux des services individuels, exécutez :

docker service logs -f <service name>

Hourra!! Maintenant, votre site doit être opérationnel. 

5/5 - (1 vote)
SAKHRI Mohamed
SAKHRI Mohamed

Le blog d'un passionné d'informatique qui partage des actualités, des tutoriels, des astuces, des outils en ligne et des logiciels pour Windows, macOS, Linux, Web designer et jeux vidéo.

Publications: 3732

Laisser un commentaire

Your email address will not be published.