Поиск по сайту:
Чем шире раскрываешь объятия, тем легче тебя распять.

Самостоятельно вести блог-Ghost с помощью Traefik

28.06.2022
Самостоятельно вести блог-Ghost с помощью Traefik

Ghost — очень популярная система управления контентом с открытым исходным кодом. Начавшись как альтернатива WordPress, он стал альтернативой Substack, сосредоточившись на членстве и новостной рассылке.

Кроме того, вы можете самостоятельно разместить его на своих собственных облачных серверах.

Вместо обратного прокси-сервера Ngnix вы также можете использовать другое программное обеспечение под названием Traefik с Docker. Это популярный прокси-сервер облачных приложений с открытым исходным кодом, шлюз API, Edge-маршрутизатор и многое другое.

Мы используем Traefik для защиты своих веб-сайтов с помощью SSL-сертификата, полученного от Let’s Encrypt. После развертывания Traefik может автоматически управлять вашими сертификатами и их продлением.

В этой статье мы расскажем о необходимых шагах для развертывания блога Ghost с помощью Docker и Traefik.

Вот что вам нужно для этого урока:

  • Домен и доступ к его настройкам DNS
  • Облачный сервер
  • Хорошее знание командной строки Linux
  • Уверенное знание Doker

Помимо этого, давайте посмотрим, как это сделать.

 

Шаг 1. Получите домен (если у вас его нет)

Мы всегда рекомендуем развертывать инструменты на реальных доменах, даже если они предназначены для тестирования.

Для тестирования вы можете получить любой доступный домен по самой низкой цене. Обычно домены с малоизвестными TLD, такими как .club, стоят очень дешево. Вместо того, чтобы продлевать на следующий год, вы можете купить еще один по дешевой цене.

Если это настоящий общедоступный веб-сайт, выберите домен, подходящий для вашего бренда. Мы всегда предпочитаем домены .com любым другим TLD.

 

2. Настройка вашего облачного экземпляра

Если вы сомневаетесь, обратитесь к бесплатному облачных серверов. Вы можете получить несколько бесплатных кредитов за опробование новой услуги.

Вы можете создать новый сервер в предпочитаемом вами облачном сервисе.

 

3. Настройка Docker и Docker Swarm

Мы считаем, что вы знаете, как использовать SSH для подключения к удаленным серверам.

ssh root@<IP address of the Droplet>

 

Читать  Основы YAML, которые должен знать каждый инженер DevOps

После того, как вы вошли на свой сервер, вам необходимо настроить Docker. Поскольку установка Docker отличается для разных дистрибутивов, мы не будем ее освещать.

Мы будем запускать наши сервисы в среде Docker Swarm. Чтобы запустить среду Docker Swarm,

docker swarm init

 

Это создает новую среду Swarm, и она становится вашим управляющим узлом. Вы можете добавить новую каплю в качестве рабочего узла, чтобы расширить свои услуги, но это выходит за рамки этого руководства.

 

4. Создание необходимых файлов конфигурации и каталогов

Создайте папку с именем website или что угодно и измените каталог на только что созданный каталог.

mkdir website

cd website

 

Вам нужно создать пару файлов и каталогов для хранения файлов конфигурации Traefik и ваших ключей SSL:

Создайте новый каталог с именем «data» и измените каталог на него.

mkdir data

cd data

 

Внутри этого каталога создайте два новых файла с именами traefik.yml и acme.json, измените разрешение acme.json на 600.

touch traefik.yml acme.json

chmod 600 acme.json

 

Откройте файл с помощью любого редактора.

nano traefik.yml

 

Вставьте следующий код в файл 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"

 

Вам нужно изменить несколько переменных:

Читать  Переосмысление DevOps: что это такое?

Измените yourdomain.com на свой домен.

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

 

Создайте новый каталог с именем configurations и перейдите в него. Внутри этого каталога создайте новый файл с именем «dynamic.yml» и скопируйте и вставьте следующие строки.

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
Имя пользователя по умолчанию — «admin», а пароль — «qwer».

5. Настройка Traefik и Ghost

Теперь вернитесь в наш основной каталог, т. е . в нашем случае в каталог «website», который вы создали вначале.

cd ~/website

 

Теперь создайте файл с именем docker-compose.yml для редактирования.

nano docker-compose.yml 

 

Вставьте следующее:

# 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

 

Читать  Топ-7 тенденций DevOps для оптимизации производства

Не забудьте установить переменные среды. Если вы не знаете, как получить адрес электронной почты API вашей учетной записи Cloudflare и токен API DNS, прочитайте эту статью от Cloudflare.

    environment:
	  - CF_API_EMAIL=
	  - CF_DNS_API_TOKEN=

 

Пока не закрывайте файл. Вы должны изменить несколько параметров здесь .

Замените traefik.yourdomain.com; с поддоменом.

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

 

Замените «secretpassword» новым паролем.

database__connection__password: secretpassword

 

Замените « https://yourdomain.com » на ваш URL.

url: https://yourdomain.com

 

Замените yourdomain.com субдоменом или используйте полный домен.

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

 

Наконец, замените «secretpassword» паролем, который вы установили выше во втором пункте.

MYSQL_ROOT_PASSWORD: secretpassword

 

6. Создание и запуск служб

Теперь все на месте! Проверьте свои файлы, все ли на месте и переменные изменены в соответствии с вашими требованиями.

Ваша файловая структура должна быть такой:

Создание и запуск служб

 

Теперь из этого каталога запустите команду. Вы можете изменить «site» на что угодно.

docker stack deploy -c docker-compose.yml site

 

Загрузка образов docker и получение ключей SSL занимает некоторое время.

Чтобы вывести список запущенных служб, запустите:

docker service ls

 

Здесь перечислены запущенные службы. Если REPLICAS равно 0/1, подождите несколько минут, возможно, он готовится.

Чтобы проверить состояние отдельных служб, запустите:

docker service ps <service name>

 

Замените <service name> на site, site_ghost, site_traefik или site_mysql.

Чтобы просмотреть журналы отдельных служб, выполните:

docker service logs -f <service name>

 

Ура!! Теперь ваш сайт должен работать. Посетите указанные выше URL-адреса для Traefik и Ghost.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Недавно появившийся в сети мод для Steam Deck, позволяющий пользователям…

Спасибо!

Теперь редакторы в курсе.