Как развернуть Ghost CMS на Rocky Linux 9
На этой странице
- Предпосылки
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите Nginx
- Шаг 3. Установите Node.js
- Шаг 4. Установите MySQL
- Шаг 5. Установите Ghost
- Установите Ghost-CLI
- Подготовить каталог Ghost
- Установить призрак
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. Если у вас есть какие-либо вопросы или отзывы, поделитесь ими в комментариях ниже.