Установка и настройка Strapi CMS

Strapi — это headless система управления контентом (Content Management System) с открытым исходным кодом, основанная на JavaScript. Как и другие headless CMS, Strapi не поставляется с фронтендом из коробки. Он основывается на API, который позволяет создавать структуру контента. Также в Strapi есть разные способы создания сайтов и он интегрируется с популярными фреймворками, например React и Next.js. К тому же, в нем есть возможность выбирать метод API — REST API или GraphQL.

В этом мануале мы установим Strapi и настроим  производственную среду для создания контента. В режиме разработки Strapi работает с SQLite, но мы настроим его на PostgreSQL, так как стандартная БД не справится с нагрузками производства. Также мы настроим обслуживание приложения Strapi на обратном прокси-сервере Nginx и с помощью менеджера процессов PM2 обеспечим стабильность работы. А затем с помощью Let’s Encrypt защитим соединение Nginx.

Требования

  • Сервер (у нас Ubuntu, настроенный в соответствии с этим мануалом). Strapi рекомендует сервер как минимум с 2-х ядерным процессором и 4 ГБ ОЗУ. В этом мануале предполагается, что сервер соответствует рекомендуемым аппаратным характеристикам.
  • Установленный на сервере Node.js версии 16.xx. Следуйте разделу 2 данного мануала.
    • С помощью опции PPA обязательно замените версию 18.xx на 16.xx. На момент написания мануала Strapi может работать некорректно с версиями Node выше 16. В этом туториале используется Node v16.18.1.
  • Установленный PostgreSQL (инструкции по установке вы найдете здесь).
  • Nginx, установленный и настроенный как обратный прокси. При настройке адреса сервера приложений на прокси используйте http://localhost:1337 в качестве app_server_address.
  • Домен, указывающий на внешний IP сервера. Этот домен будет настроен в Nginx для проксирования сервера приложений.

1: Настройка базы данных Postgres

База данных нужна для любого проекта Strapi. В настоящее время он поддерживает MySQL, MariaDB, SQlite и PostgreSQL. Минимальные требования к версиям можно посмотреть в официальных материалах. Для работы Strapi требуется свежая БД, то есть вы не можете использовать существующую базу данных для ссылки на экземпляр Strapi.

Сначала создайте базу данных:

sudo -i -u postgres createdb strapi-db

Затем создайте пользователя для этой БД:

sudo -i -u postgres createuser --interactive

Получим следующий вывод:

Enter name of role to add: 8host
Shall the new role be a superuser? (y/n) y

Аутентификация пользователей БД в PostgreSQL происходит по умолчанию с помощью метода аутентификации Identification Protocol, или ident. При этом PostgreSQL берет имя пользователя Ubuntu в качестве имени пользователя БД. Это повышает безопасность, но может вызвать проблемы при подключении внешней программы (в том числе Strapi) к базе данных. Задайте пароль для PostgreSQL, чтобы разрешить Strapi подключаться к БД.

В терминале откройте командную строку PostgreSQL:

sudo -u postgres psql

В PostgreSQL обновите профиль пользователя и укажите надежный пароль:

ALTER USER 8host PASSWORD 'postgres_password';

Для выхода из пользователя PostgreSQL в терминале введите:

\q

Теперь все готово для установки Strapi.

2: Установка Strapi на сервер

Чтобы установить Strapi на сервер, введите следующую команду:

npx create-strapi-app@latest my-project

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

После подтверждения вы получите доступ к интерактивной установке. Убедитесь, что Database name, Username и Password изменены соответствующим образом, и выберите следующие параметры:

? Choose your installation type Custom (manual settings)
? Choose your preferred language JavaScript
? Choose your default database client postgres
? Database name: strapi-db
? Host: 127.0.0.1
? Port: 5432
? Username: 8host
? Password: postgres_password
? Enable SSL connection: No

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

После завершения установки можно создать проект Strapi.

Убедитесь, что вы находитесь в директории my-project:

cd my-project

Затем выполните следующую команду:

NODE_ENV=production npm run build

> my-project@0.1.0 build
> strapi build

Building your admin UI with production configuration...

✔ Webpack
  Compiled successfully in 35.44s

Admin UI built successfully

Эта команда создаст проект Strapi, включая пользовательский интерфейс администратора.

Итак, теперь можно протестировать сервер Strapi. Чтобы напрямую запустить этот сервер, выполните следующую команду:

node /home/8host/my-project/node_modules/.bin/strapi start

Вы увидите:

[2022-11-21 13:54:24.671] info: The Users & Permissions plugin automatically generated a jwt secret and stored it in .env under the name JWT_SECRET.

 Project information

┌────────────────────┬──────────────────────────────────────────────────┐
│ Time               │ Mon Nov 21 2022 13:54:24 GMT+0000 (Coordinated … │
│ Launched in        │ 1603 ms                                          
│ Environment        │ development                                      
│ Process PID        │ 4743                                             
│ Version            │ 4.5.4 (node v16.18.1)                            
│ Edition            │ Community                                        
└────────────────────┴──────────────────────────────────────────────────┘

 Actions available

One more thing...
Create your first administrator  by going to the administration panel at:

┌─────────────────────────────┐
│ http://localhost:1337/admin │
└─────────────────────────────┘

Если предварительные требования выполнены верно, то на вашем сервере уже есть Nginx, настроенный в качестве обратного прокси-сервера на адрес Strapi по умолчанию http://localhost:1337. В браузере перейдите по адресу http://your_domain, чтобы просмотреть стандартную посадочную страницу Strapi:

Сейчас эта команда со стандартной конфигурацией использует режим разработки Strapi. Она не подходит для производства, так как зависит от процесса привязанного к команде в терминале. Далее мы добавим рабочие параметры в диспетчер процессов PM2.

Нажмите CTRL+c для выхода из сервера.

После установки Strapi можно настроить PM2 для запуска сервера в фоновом режиме в качестве службы.

3: Установка и настройка PM2

С помощью PM2 можно управлять процессом запуска автоматически (вместо запуска сервера вручную). PM2 обеспечивает бесперебойную работу сервера и помогает поддерживать его без человеческого вмешательства.

Читайте также: Подготовка приложения Node.js к производству

Убедитесь, что находитесь в корневом каталоге:

cd ~

Установите PM2 с помощью следующей команды:

sudo npm install pm2@latest -g

С помощью nano или любого другого текстового редактора создайте конфигурационный файл для PM2:

sudo nano ecosystem.config.js

Добавьте в файл следующее содержимое, но не забудьте изменить название каталога проекта и путь, а также database name, username и password:

module.exports = {
  apps: [
    {
      name: 'strapi',
      cwd: '/home/8host/my-project',
      script: 'npm',
      args: 'start',
      env: {
        NODE_ENV: 'production',
        DATABASE_HOST: 'localhost',
        DATABASE_PORT: '5432',
        DATABASE_NAME: 'strapi-db',
        DATABASE_USERNAME: 8host,
        DATABASE_PASSWORD: 'postgres_password',
      },
    },
  ],
};

Выйдите из файла после редактирования конфигурации PM2. В nano нажмите CTRL+x, y и ENTER.

Запустите экземпляр Strapi в фоновом режиме с помощью следующей команды:

pm2 start ecosystem.config.js

[PM2][WARN] Applications strapi not running, starting...
[PM2] App [strapi] launched (1 instances)
┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name      │ namespace   │ version │ mode    │ pid      │ uptime │ ↺   │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼───────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ strapi    │ default     │ N/A     │ fork    │ 22608    │ 0s     │ 0    │ online    │ 0%       │ 30.3mb   │ 8host    │ disabled │
└─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

Работающие под управлением PM2 приложения автоматически перезапустятся в случае сбоя или остановки приложения. С помощью следующей субкоманды можно запустить экземпляр Strapi при запуске сервера:

pm2 startup

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u 8host--hp /home/8host

Субкоманда создаст и настроит скрипт запуска PM2 и его управляемых процессов при загрузке сервера.

Далее скопируйте и выполните команду из вывода, но укажите свое имя пользователя вместо 8host:

sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u 8host--hp /home/8host

Затем сохраните список процессов PM2:

pm2 save

Теперь на сервере запущена служба PM2. Если вернуться на страницу http://your_domain, то можно заметить, что Strapi теперь работает в режиме production:

PM2 запускает сервер в фоновом режиме, значит, можно перейти к последнему этапу — защите экземпляра Strapi.

4: Защита Strapi с помощью Let’s Encrypt

При переходе на домен для просмотра посадочной страницы Strapi вы могли заметить, что URL является незащищенным соединением (http:// вместо https://).

Для защиты экземпляра Strapi с помощью Let’s Encrypt введите:

sudo snap install --classic certbot

Привяжите команду certbot из каталога установки snap к пути, чтобы можно было запускать ее с помощью certbot:

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

Разрешите HTTPS-трафик и включите профиль Nginx Full:

sudo ufw allow 'Nginx Full'

Удалите лишнее разрешение профиля HTTP Nginx:

sudo ufw delete allow 'Nginx HTTP'

Затем вставьте адрес домена и с помощью плагина Nginx получите сертификат:

sudo certbot --nginx -d your_domain -d www.your_domain

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

. . .
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2023-02-05.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain
Successfully deployed certificate for www.your_domain /etc/nginx/sites-enabled/your_domain
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain
. . .

Перейдите по адресу http://your_domain. Вы будете автоматически перенаправлены на HTTPS-версию сайта. Заметьте, что Strapi работает в production режиме:

Чтобы создать учетную запись администратора Strapi, перейдите по адресу https://your_domain/admin:

После ввода новых учетных данных можете открыть панель администратора:

В этом дашборде вы можете начать создавать контент на Strapi.

Подводим итоги

В этом мануале мы настроили рабочую среду для системы управления контентом Strapi на базе данных PostgreSQL. Приложение Strapi обслуживается обратным прокси-сервером Nginx, а работа сервера поддерживается с помощью менеджера процессов PM2.

Узнать больше о настройке приложения Strapi можно в официальной документации проекта.

Tags: , , , , ,

Добавить комментарий