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

Как развернуть Ghost CMS на Rocky Linux 9


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

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите Nginx
  4. Шаг 3. Установите Node.js
  5. Шаг 4. Установите MySQL
  6. Шаг 5. Установите Ghost
    1. Установите Ghost-CLI
    2. Подготовить каталог Ghost
    3. Установить призрак

    Ghost — это платформа для ведения блогов с открытым исходным кодом, которая поможет вам создать профессиональный блог. Он был запущен в 2013 году как альтернатива WordPress, потому что он становился слишком сложным. Он написан на JavaScript и работает на библиотеке Node.js.

    В этом руководстве мы рассмотрим, как установить Ghost CMS с помощью Nginx и MySQL на сервер под управлением Rocky Linux 9. Мы будем использовать сервер Nginx для размещения блога и SSL-сертификат Lets Encrypt для защиты нашей установки.

    Предпосылки

    • A server running Rocky Linux 9.

    • A non-root user with sudo privileges.

    • A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use ghost.example.com as the domain name.

    • Make sure everything is updated.

      $ sudo dnf update
      
    • Install basic utility packages. Some of them may already be installed.

      $ sudo dnf install wget curl nano unzip yum-utils -y
      

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

    Первым шагом является настройка брандмауэра. Rocky Linux использует Firewalld Firewall. Проверьте состояние брандмауэров.

    $ sudo firewall-cmd --state
    running
    

    Брандмауэр работает с разными зонами, и мы будем использовать публичную зону по умолчанию. Перечислите все службы и порты, активные на брандмауэре.

    $ sudo firewall-cmd --permanent --list-services
    

    Он должен показать следующий вывод.

    cockpit dhcpv6-client ssh
    

    Для работы Wiki.js необходимы порты HTTP и HTTPS. Откройте их.

    $ sudo firewall-cmd --add-service=http --permanent
    $ sudo firewall-cmd --add-service=https --permanent
    

    Перезагрузите брандмауэр, чтобы применить изменения.

    $ sudo firewall-cmd --reload
    

    Шаг 2 — Установите Nginx

    Rocky Linux 9 поставляется с более старой версией Nginx. Вам необходимо скачать официальный репозиторий Nginx, чтобы установить последнюю версию.

    Создайте и откройте файл /etc/yum.repos.d/nginx.repo для создания официального репозитория Nginx.

    $ sudo nano /etc/yum.repos.d/nginx.repo
    

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

    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Установите сервер Nginx.

    $ sudo dnf install nginx -y
    

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

    $ nginx -v
    nginx version: nginx/1.22.1
    

    Включите и запустите сервер Nginx.

    $ sudo systemctl enable nginx --now
    

    Проверьте состояние сервера.

    $ sudo systemctl status nginx
    ? nginx.service - nginx - high performance web server
         Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
         Active: active (running) since Tue 2022-10-25 08:27:47 UTC; 2s ago
           Docs: http://nginx.org/en/docs/
        Process: 1650 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
       Main PID: 1651 (nginx)
          Tasks: 2 (limit: 5912)
         Memory: 1.9M
            CPU: 7ms
         CGroup: /system.slice/nginx.service
                 ??1651 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
                 ??1652 "nginx: worker process"
    
    Oct 25 08:27:47 ghost.example.com systemd[1]: Starting nginx - high performance web server...
    

    Шаг 3 — Установите Node.js

    Для работы Ghost Installer требуется Nodejs. Выполните следующие команды, чтобы установить Node 16.

    $ curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
    

    Установить узел.

    $ sudo dnf install -y nodejs
    

    Проверьте установку узла.

    $ node --version
    v16.18.0
    

    На момент написания этого руководства Node 18 отсутствует и является LTS-версией. Ghost еще не добавил его поддержку. Обязательно проверяйте документ Ghost о версиях Node для получения последней поддерживаемой версии Node. Когда Ghost добавит поддержку Node 18, установите Node 18, используя вместо этого следующие команды.

    $ curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
    $ sudo dnf install -y nodejs
    

    Шаг 4 — Установите MySQL

    Rocky Linux 9 поставляется с последней версией MySQL. Вы можете установить его с помощью одной команды.

    $ sudo dnf install mysql-server
    

    Проверьте версию MySQL.

    $ mysql --version
    mysql  Ver 8.0.30 for Linux on x86_64 (Source distribution)
    

    Включите и запустите службу MySQL.

    $ sudo systemctl enable mysqld --now
    

    Проверьте статус услуги.

    $ sudo systemctl status mysqld
    ? mysqld.service - MySQL 8.0 database server
         Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
         Active: active (running) since Tue 2022-10-25 09:00:26 UTC; 3s ago
        Process: 2920 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
        Process: 2942 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS)
       Main PID: 3021 (mysqld)
         Status: "Server is operational"
          Tasks: 39 (limit: 5912)
         Memory: 404.4M
            CPU: 4.686s
         CGroup: /system.slice/mysqld.service
                 ??3021 /usr/libexec/mysqld --basedir=/usr
    
    Oct 25 09:00:18 ghost.example.com systemd[1]: Starting MySQL 8.0 database server...
    Oct 25 09:00:18 ghost.example.com mysql-prepare-db-dir[2942]: Initializing MySQL database
    Oct 25 09:00:26 ghost.example.com systemd[1]: Started MySQL 8.0 database server.
    

    Вы можете войти в оболочку MySQL, используя аутентификацию Unix по умолчанию. Но вы не можете запустить мастер настройки безопасности. Поэтому следующий шаг необходим для версий MySQL 8.0.28 и выше. Войдите в оболочку MySQL.

    $ sudo mysql
    

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

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';
    

    Выйдите из оболочки. Предостережение на этом этапе заключается в том, что вы больше не можете войти в оболочку MySQL, используя аутентификацию Unix.

    mysql> exit
    

    Запустите сценарий безопасной установки MySQL.

    $ sudo mysql_secure_installation
    

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

    Securing the MySQL server deployment.
    
    Connecting to MySQL using a blank password.
    
    VALIDATE PASSWORD COMPONENT can be used to test passwords
    and improve security. It checks the strength of password
    and allows the users to set only those passwords which are
    secure enough. Would you like to setup VALIDATE PASSWORD component?
    
    Press y|Y for Yes, any other key for No: Y
    

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

    There are three levels of password validation policy:
    
    LOW    Length >= 8
    MEDIUM Length >= 8, numeric, mixed case, and special characters
    STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
    
    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
    Please set the password for root here.
    
    New password: 
    
    Re-enter new password: 
    
    Estimated strength of the password: 100 
    Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
    

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

    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them. This is intended only for
    testing, and to make the installation go a bit smoother.
    You should remove them before moving into a production
    environment.
    
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
    Success.
    
    
    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network.
    
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
    Success.
    
    By default, MySQL comes with a database named 'test' that
    anyone can access. This is also intended only for testing,
    and should be removed before moving into a production
    environment.
    
    
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
     - Dropping test database...
    Success.
    
     - Removing privileges on test database...
    Success.
    
    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
    Success.
    
    All done!
    

    На этом процесс установки и защиты MySQL завершен.

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

    Установка Ghost будет состоять из трех компонентов: инструмент командной строки Ghost-CLI, который устанавливает и управляет обновлениями блога Ghost, и сам пакет блога.

    Установите Ghost-CLI

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

    $ sudo npm install  -g
    

    Подготовить каталог призраков

    Создайте корневой каталог Ghost.

    $ sudo mkdir -p /var/www/html/ghost
    

    Установите владельца каталога для текущего пользователя.

    $ sudo chown $USER:$USER /var/www/html/ghost
    

    Установите правильные права доступа к каталогу.

    $ sudo chmod 755 /var/www/html/ghost
    

    Перейдите в каталог Ghost.

    $ cd /var/www/html/ghost
    

    Установить призрак

    Установка Ghost выполняется одной командой.

    $ ghost install
    

    Во время установки инструмент CLI задаст ряд вопросов для настройки блога.

    • На момент написания этого руководства Ghost-CLI не поддерживал никакие другие ОС, кроме Ubuntu. Программа спросит, хотите ли вы продолжить установку. Нажмите Y, чтобы продолжить.
    • URL-адрес блога. Введите полный URL-адрес своего блога вместе с протоколом https. (https://ghost.example.com)
    • Имя хоста MySQL: нажмите Enter, чтобы использовать значение по умолчанию localhost, поскольку наша установка Ghost и MySQL находятся на одном сервере.
    • Имя пользователя MySQL: введите root в качестве имени пользователя MySQL.
    • Пароль MySQL: введите пароль root, созданный ранее.
    • Имя базы данных Ghost: укажите имя базы данных Ghost. (ghostdb)
    • Пароль Sudo: введите системный пароль sudo для выполнения команд с повышенными правами.
    • Настроить пользователя-призрака MySQL? Программа установки спросит, хотите ли вы создать отдельного пользователя MySQL для Ghost. Нажмите Y, чтобы продолжить.
    • Настроить Nginx? Обычно Ghost-CLI определяет вашу установку Nginx и автоматически настраивает ее для вашего блога. Но на данный момент он не может обнаружить нашу установку Nginx. Следовательно, установщик автоматически пропустит этот шаг. Мы настроим Nginx вручную.
    • Настроить SSL?: Поскольку он пропустил настройку Nginx, инструмент CLI также пропустит настройку SSL.
    • Настроить systemd?: Ghost спросит, хотите ли вы настроить системную службу для Ghost. Нажмите Y, чтобы продолжить.
    • Запустить Ghost?: нажмите Y, чтобы начать установку Ghost. Служба запустится, но нам нужно будет настроить Nginx и SSL, чтобы она работала.

    Шаг 6 — Установите SSL

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

    Для установки Certbot мы будем использовать установщик пакетов Snapd. Snapd всегда содержит последнюю стабильную версию Certbot, которую вы должны использовать.

    Для работы инструмента Snapd требуется репозиторий Epel.

    $ sudo dnf install epel-release -y
    

    Мы будем использовать Snapd для установки Certbot. Установите Снапд.

    $ sudo dnf install snapd -y
    

    Включите и запустите службу Snap.

    $ sudo systemctl enable snapd.socket --now
    

    Создайте необходимые ссылки для работы Snapd.

    $ sudo ln -s /var/lib/snapd/snap /snap
    $ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
    

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

    $ sudo snap install core 
    $ sudo snap refresh core
    

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

    $ sudo snap install --classic certbot
    

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

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

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

    $ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d ghost.example.com
    

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

    Создайте групповой сертификат Диффи-Хеллмана.

    $ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
    

    Выполните пробный запуск процесса, чтобы проверить, нормально ли работает обновление SSL.

    $ sudo certbot renew --dry-run
    

    Если вы не видите ошибок, все готово. Ваш сертификат будет продлен автоматически.

    Шаг 7 — Настройте Nginx

    Создайте и откройте файл /etc/nginx/conf.d/ghost.conf для редактирования.

    $ sudo nano /etc/nginx/conf.d/ghost.conf
    

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

    ## enforce HTTPS
    server {
      listen 80;
      listen [::]:80;
      server_name ghost.example.com;
      return 301 https://$server_name$request_uri;
    }
    
    server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
      server_name ghost.example.com;
    
      access_log /var/log/nginx/ghost.access.log;
      error_log /var/log/nginx/ghost.error.log;
      client_max_body_size 20m;
    
      http2_push_preload on; # Enable HTTP/2 Server Push
    
      ssl_certificate     /etc/letsencrypt/live/ghost.example.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/ghost.example.com/privkey.pem;
      ssl_trusted_certificate /etc/letsencrypt/live/ghost.example.com/chain.pem;
      ssl_session_timeout 1d;
    
      # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
      ssl_protocols TLSv1.2 TLSv1.3;
    
      # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
      # prevent replay attacks.
      #
      # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
      ssl_early_data on;
    
      ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
      ssl_prefer_server_ciphers on;
      ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
      ssl_session_cache shared:SSL:50m;
      ssl_session_tickets off;
    
      # OCSP Stapling ---
      # fetch OCSP records from URL in ssl_certificate and cache them
      ssl_stapling on;
      ssl_stapling_verify on;
      ssl_dhparam /etc/ssl/certs/dhparam.pem;
    
      add_header X-Early-Data $tls1_3_early_data;
    
      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://localhost:2368;
      }
    }
    
    # This block is useful for debugging TLS v1.3. Please feel free to remove this
    # and use the `$ssl_early_data` variable exposed by NGINX directly should you
    # wish to do so.
    map $ssl_early_data $tls1_3_early_data {
      "~." $ssl_early_data;
      default "";
    }
    

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

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Откройте файл /etc/nginx/nginx.conf для редактирования.

    $ sudo nano /etc/nginx/nginx.conf
    

    Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

    server_names_hash_bucket_size  64;
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Проверьте конфигурацию Nginx.

    $ sudo nginx -t
    

    Если вы не видите ошибок, значит, все в порядке. Перезагрузите сервер Nginx.

    $ sudo systemctl reload nginx
    

    Шаг 8 — Настройте SELinux

    Разрешите Nginx подключаться к сети.

    $ sudo setsebool -P httpd_can_network_connect 1
    

    Шаг 9 — Запустите сайт

    Теперь вы можете проверить свою установку, открыв https://ghost.example.com в своем веб-браузере. Вы получите следующую страницу, указывающую на успешную установку.

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

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

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

    Введите свои данные и нажмите кнопку «Создать учетную запись и начать публикацию», чтобы продолжить.

    Затем вы попадете на следующий экран, где вам будут предоставлены такие параметры, как написание вашего первого сообщения, настройка вашего сайта и импорт участников.

    Мы выберем администратора Explore Ghost для изучения и перехода непосредственно к панели инструментов. В конце установки вас встретит панель администрирования Ghosts.

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

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

    Шаг 11 - Настройте Mailer

    Ghost действует не только как платформа для ведения блогов, но и как менеджер по рассылке новостей. Для повседневных операций вы можете использовать любую транзакционную почтовую службу для работы с Ghost для отправки почты. Но если вы хотите отправлять информационные бюллетени через Ghost, единственная поддерживаемая официальная программа массовой рассылки — Mailgun. Вы также можете использовать другую службу рассылки новостей, но для этого вам нужно будет использовать функцию интеграции Zapier с Ghost.

    Давайте сначала настроим службу SMTP для транзакционной электронной почты. Для этого откройте файл /var/www/html/ghost/config.production.json для редактирования.

    $ nano /var/www/html/ghost/config.production.json
    

    Найдите следующие строки.

     "mail": {
        "transport": "Direct"
      },
    

    Замените их следующим кодом.

    "mail": {
        "from": "'Acme Support' ",
        "transport": "SMTP",
        "options": {
            "host": "YOUR-SES-SERVER-NAME",
            "port": 465,
            "service": "SES",
            "auth": {
                "user": "YOUR-SES-SMTP-ACCESS-KEY-ID",
                "pass": "YOUR-SES-SMTP-SECRET-ACCESS-KEY"
            }
        }
    },
    

    Здесь мы используем сервис Amazon SES Mail, так как он очень дешевый и бесплатен на всю жизнь, если вы используете их сервис EC2.

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

    "mail": {
      "from": "'Acme Support' ",
      "transport": "SMTP",
      "options": {
        "service": "Mailgun",
        "host": "smtp.mailgun.org",
        "port": 587,
        "secure": true,
        "auth": {
          "user": "",
          "pass": "1234567890"
        }
      }
    },
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    После завершения перезапустите приложение Ghost, чтобы изменения вступили в силу.

    $ ghost restart
    

    Чтобы настроить параметры рассылки, перейдите в раздел Настройки >> Электронная рассылка.

    Нажмите на ссылку конфигурации Mailgun, чтобы развернуть.

    Заполните свой регион Mailgun, домен и ключ API.

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

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

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

    Существует два типа обновлений Ghost — незначительные обновления и основные обновления.

    Во-первых, сделайте полную резервную копию, если вы хотите запустить небольшое обновление.

    $ cd /var/www/html/ghost
    $ ghost backup
    

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

    $ ghost update
    

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

    Заключение

    На этом мы завершаем наше руководство по настройке Ghost CMS на вашем сервере Rocky Linux 9 с использованием Nginx. Если у вас есть какие-либо вопросы или отзывы, поделитесь ими в комментариях ниже.