Поиск по сайту:

Как установить Ghost CMS с Docker на Ubuntu 20.04


На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра UFW
  3. Шаг 2. Установите Certbot и получите сертификат SSL
  4. Шаг 3. Установите Docker и Docker Compose
  5. Шаг 4. Установите Ghost
    1. Создать файл Docker Compose
    2. Создание образа Nginx Docker

    Ghost — это платформа для ведения блогов с открытым исходным кодом, которая поможет вам создать профессиональный блог. Он был запущен в 2013 году как альтернатива WordPress, потому что он становился слишком сложным. Ghost написан на JavaScript и работает на Node.js. gpt-ad-howtoforge_com-box-3-0;var ffid=1;var alS=1002%1000;var container=document.getElementById(slotId);container.style.width=100%;var ins=document.createElement( ins);ins.id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ins.dataset.fullWidthResponsive=true; }

    В этом руководстве мы рассмотрим, как установить Ghost CMS с помощью Docker на сервер под управлением Ubuntu 20.04. Мы также будем использовать Nginx в качестве прокси-сервера и SSL-сертификат Lets Encrypt для защиты нашей установки.

    Предпосылки

    • A server running Ubuntu 20.04.

    • A non-root sudo user.

    • Make sure everything is updated.

      $ sudo apt update 
      $ sudo apt upgrade
      

    Шаг 1. Настройте брандмауэр UFW.

    Первым шагом является настройка брандмауэра. Ubuntu по умолчанию поставляется с ufw (простой брандмауэр).

    Проверьте, работает ли брандмауэр.

    $ sudo ufw status
    

    Вы должны получить следующий вывод.

    Status: inactive
    

    Разрешить порт SSH, чтобы брандмауэр не прерывал текущее соединение при его включении.

    $ sudo ufw allow OpenSSH
    

    Разрешить также порты HTTP и HTTPS.

    $ sudo ufw allow 80
    $ sudo ufw allow 443
    

    Включить брандмауэр

    $ sudo ufw enable
    Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
    Firewall is active and enabled on system startup
    

    Еще раз проверьте состояние брандмауэра.

    $ sudo ufw status
    

    Вы должны увидеть аналогичный вывод.

    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere
    80                         ALLOW       Anywhere
    443                        ALLOW       Anywhere
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    80 (v6)                    ALLOW       Anywhere (v6)
    443 (v6)                   ALLOW       Anywhere (v6)
    

    Шаг 2. Установите Certbot и получите сертификат SSL.

    Прежде чем продолжить, нам нужно установить инструмент Certbot и установить SSL-сертификат для нашего домена.

    Для установки Certbot мы будем использовать установщик пакетов Snapd. Официальный репозиторий Certbots устарел, а пакету Ubuntu Certbot больше года. Snapd всегда содержит последнюю стабильную версию Certbot, и вы должны использовать ее. К счастью, Ubuntu 20.04 поставляется с предустановленным Snapd.

    Убедитесь, что ваша версия Snapd обновлена.

    $ sudo snap install core 
    $ sudo snap refresh core
    

    Удалите все старые версии Certbot.

    $ sudo apt remove certbot
    

    Установите Сертбот.

    $ sudo snap install --classic certbot
    

    Используйте следующую команду, чтобы убедиться, что команду Certbot можно запустить, создав символическую ссылку на каталог /usr/bin.

    $ sudo ln -s /snap/bin/certbot /usr/bin/certbot
    

    Создайте SSL-сертификат.

    $ sudo certbot certonly --standalone -d example.com
    

    Приведенная выше команда загрузит сертификат в каталог /etc/letsencrypt/live/example.com на вашем сервере.

    Шаг 3 — Установите Docker и Docker Compose

    Первый шаг — установить Docker Engine и Docker Compose. Сначала удалите все старые версии Docker.

    $ sudo apt remove docker docker-engine docker.io containerd runc
    

    Установите несколько пакетов, необходимых для запуска Docker.

    $ sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
    

    Добавьте официальный GPG-ключ Dockers.

    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    

    Добавьте официальный репозиторий Dockers.

    $ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    

    Обновите системные репозитории.

    $ sudo apt update
    

    Установите последнюю версию Docker Engine.

    $ sudo apt install docker-ce docker-ce-cli containerd.io
    

    Убедитесь, что Docker Engine работает и правильно установлен.

    $ sudo docker run hello-world
    

    По умолчанию для запуска Docker требуется sudo. Чтобы обойти это, мы можем добавить текущую учетную запись пользователя в группу пользователей docker.

    $ sudo usermod -aG docker ${USER}
    

    Чтобы применить новое членство в группе, выйдите из системы и войдите снова или используйте следующую команду.

    $ su - ${USER}
    

    Теперь вы можете запускать команды docker без использования sudo.

    Затем загрузите текущую стабильную версию Docker compose.

    sudo curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    

    На момент написания этого руководства последней версией Docker compose была 1.28.6. Вы всегда можете изменить или выбрать другую версию в команде, проверив ее на странице выпусков Github в Docker compose.

    Примените разрешение на выполнение к установленной версии Docker compose.

    $ sudo chmod +x /usr/local/bin/docker-compose
    

    Протестируйте установку.

    $ docker-compose --version
    docker-compose version 1.28.6, build 5db8d86f
    

    Шаг 4 - Установите Призрака

    Установка Ghost будет состоять из трех компонентов: пакета Ghost, сервера базы данных, такого как MySQL, и веб-сервера (Nginx). Все эти сервисы можно установить с помощью одного компоновочного файла Docker.

    Создать файл Docker Compose

    Сначала создайте каталог для хранения и запуска файла компоновки Docker.

    $ mkdir ghost && cd ghost
    

    Создайте файл с именем docker-compose.yml и откройте его в редакторе Nano.

    $ nano docker-compose.yml
    

    Вставьте следующий код в файл. Замените example.com своим доменом и вставьте пароль базы данных вместо значения your_password. Оставьте одинаковыми значения для database__connection__password и MYSQL_ROOT_PASSWORD. Замените <username> на имя пользователя вашего сервера.

    version: '3.3'
    services:
    
      ghost:
        image: ghost:latest
        restart: always
        depends_on:
          - db
        environment:
          url: https://example.com
          database__client: mysql
          database__connection__host: db
          database__connection__user: ghost
          database__connection__password: ghostdbpass
          database__connection__database: ghostdb
          mail__transport: SMTP
          mail__options__host: {Your Mail Service host}
          mail__options__port: {Your Mail Service port}
          mail__options__secureConnection: {true/false}
          mail__options__service: {Your Mail Service}
          mail__options__auth__user: {Your User Name}
          mail__options__auth__pass: {Your Password}
        volumes:
          - /home/<username>/ghost/content:/var/lib/ghost/content
    
      db:
        image: mariadb:latest
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: your_mysql_root_password
    	  MYSQL_USER: ghost
          MYSQL_PASSWORD: ghostdbpass
          MYSQL_DATABASE: ghostdb
        volumes:
          - /home/<username>/ghost/mysql:/var/lib/mysql
    
      nginx:
        build:
          context: ./nginx
          dockerfile: Dockerfile
        restart: always
        depends_on:
          - ghost
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - /etc/letsencrypt/:/etc/letsencrypt/
          - /usr/share/nginx/html:/usr/share/nginx/html
    

    Файл компоновки Docker создает несколько точек монтирования, то есть сопоставляет определенные каталоги на сервере с каталогами внутри контейнера.

    • Каталоги /var/lib/ghost/content и /var/lib/mysql внутри ваших контейнеров сопоставляются с /home// ghost/content и /home//ghost/mysql на сервере.
    • Nginx использует привязку /etc/letsencrypt/ для доступа к сертификатам Lets Encrypt с сервера.
    • Nginx также требуется доступ к пользовательскому каталогу /usr/share/nginx/html, чтобы получить доступ к файлам Lets Encrypt Challenge для получения сертификата.

    В приведенном выше файле мы также включили параметры для настройки почты. Если вы используете популярную почтовую службу SMTP, такую как Mailgun, Mailjet, Mandrill, Postmark, Sendgrid, SendCloud, SES, Zoho или Gmail, вы можете просто добавить имя службы, имя пользователя и пароль SMTP и избавиться от остальных поля. В противном случае заполните все остальные параметры и удалите имя службы, и она все равно должна работать. Вы можете проверить дополнительные параметры почты в документации Ghosts о параметрах почты.

    Создайте каталоги для всех монтирований привязки, описанных выше (кроме /etc/letsencrypt, который уже был создан, когда мы создавали сертификат ранее)

    $ cd ~/ghost
    $ mkdir content
    $ mkdir mysql
    $ sudo mkdir -p /usr/share/nginx/html
    

    Создайте образ Nginx Docker

    Созданный нами файл компоновки Docker основан на образе Nginx Docker. Чтобы заставить его работать, нам нужно включить настроенный файл конфигурации для Nginx, который будет работать с Ghost.

    Создайте каталог для этого изображения в текущем каталоге.

    $ mkdir nginx
    

    Создайте файл с именем Dockerfile в этом каталоге.

    $ touch nginx/Dockerfile
    

    Вставьте следующий код в Dockerfile.

    FROM nginx:latest
    RUN rm /etc/nginx/conf.d/default.conf
    COPY ghost.conf /etc/nginx/conf.d
    

    Приведенный выше код указывает Docker использовать последний образ Nginx. Он также удаляет файл конфигурации Nginx по умолчанию и копирует пользовательский файл конфигурации, который мы создали для нашей Ghost CMS.

    Создайте файл с именем ghost.conf в каталоге nginx.

    $ touch nginx/ghost.conf
    

    Вставьте следующий код в файл ghost.conf. Замените все экземпляры example.com своим доменом.

    server {
      listen 80;
      listen [::]:80;
      server_name example.com;
      # Useful for Let's Encrypt
      location /.well-known/acme-challenge/ { root /usr/share/nginx/html; allow all; }
      location / { return 301 https://$server_name$request_uri; }
    }
    
    server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
      server_name example.com;
        
      access_log /var/log/nginx/ghost.access.log;
      error_log /var/log/nginx/ghost.error.log;
      client_max_body_size 20m;
    
      ssl_protocols TLSv1.2 TLSv1.3;
      ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
      ssl_prefer_server_ciphers on;
      ssl_session_timeout 1d;
      ssl_session_cache shared:SSL:10m;
    
      ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
      location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://ghost:2368;
      }
    }
    

    Приведенная выше конфигурация перенаправит все HTTP-запросы на HTTPS и будет служить прокси-сервером для сервиса Ghost, который будет обслуживать его через ваш домен.

    Шаг 5 - Запустите сайт

    Выполните следующую команду из каталога ghost, чтобы запустить службу Ghost.

    $ docker-compose up -d
    

    Теперь вы можете проверить свою установку, открыв https://example.com в веб-браузере. Докеру может потребоваться несколько минут, чтобы включить все службы, поэтому вам может потребоваться обновить страницу, если вы сразу не видите свой блог.

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

    $ cd ghost
    $ docker-compose down
    

    Запустите Docker compose в подключенном состоянии, чтобы просмотреть журналы, созданные каждым контейнером.

    $ docker-compose up
    

    Чтобы закрыть контейнер и вернуться к командной строке bash, нажмите CTRL+C. После устранения неполадок вы можете снова запустить контейнер, и на этот раз ваш блог должен быть виден.

    Шаг 6 - Завершите настройку

    Чтобы завершить настройку блога Ghost, перейдите на страницу https://example.com/ghost в браузере. Дополнительный /ghost в конце вашего домена блогов перенаправляет вас на панель администратора Ghosts или, в данном случае, на настройку, поскольку вы обращаетесь к ней впервые.

    Здесь вам потребуется создать учетную запись администратора и выбрать название блога.

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

    В конце установки вас встретит панель администрирования Ghosts.

    Если вы хотите переключиться в темный режим, вы можете сделать это, щелкнув тумблер рядом с кнопкой настроек в нижней части страницы настроек.

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

    Шаг 7 - Обновите Призрака

    В нашем файле компоновки Docker мы загружаем последнюю версию Ghost, доступную на момент установки, что упрощает обновление вашего блога Ghost.

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

    $ docker-compose down
    $ docker-compose pull && docker-compose up -d
    

    Шаг 8. Обновите SSL-сертификат Lets Encrypt

    Сертификаты Lets Encrypt действительны только в течение 90 дней. Поэтому нам нужно настроить cronjob, который будет автоматически обновлять сертификат.

    Откройте Crontab в вашем редакторе.

    $ sudo crontab -e
    

    Вставьте следующую строку в конце, которая будет запускать Certbot в 23:00 каждый день. Замените example.com своим доменом.

    0 23 * * *   certbot certonly -n --webroot -w /usr/share/nginx/html -d example.com --deploy-hook='docker exec ghost_nginx_1 nginx -s reload'
    

    Запуск в 23:00 каждый день не означает, что ваш сертификат будет обновляться каждый день, поскольку Certbot продлит ваш сертификат, только если срок его действия истекает в течение 30 дней. Запуск этого каждую ночь дает скрипту несколько шансов попробовать до истечения срока действия.

    Приведенная выше команда также перезапустит сервер Nginx внутри контейнера Docker после успешного обновления.

    Вы можете протестировать задание cron, используя параметр --dry-run Certbot.

    $ sudo bash -c "certbot certonly -n --webroot --dry-run -w /usr/share/nginx/html -d example.com --deploy-hook='docker exec ghost_nginx_1 nginx -s reload'"
    

    Заключение

    На этом мы завершаем наше руководство по настройке Ghost CMS на вашем сервере под управлением Ubuntu 20.04 с помощью Docker. Если у вас есть какие-либо вопросы или отзывы, поделитесь ими в комментариях ниже.