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

Как установить Strapi CMS на Ubuntu 22.04


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

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установка и настройка PostgreSQL
  4. Шаг 3. Установите Node.js
  5. Шаг 4. Установите Strapi
  6. Шаг 5. Установите и настройте PM2
  7. Шаг 6. Установите Nginx
  8. Шаг 7. Установите SSL
  9. Шаг 8. Настройка Nginx
  10. Шаг 9. Обновите Strapi
  11. Заключение

Strapi — это безголовая система управления контентом (CMS) с открытым исходным кодом, созданная с использованием JavaScript. Как и другие безголовые CMS, Strapi не поставляется с интерфейсом из коробки. Он использует API для своего внешнего интерфейса, что позволяет вам создавать веб-сайт с использованием популярных фреймворков, таких как React и Next.js. Основанная на системе плагинов, Strapi представляет собой гибкую CMS, чья панель администратора и API расширяемы, и каждая часть которой настраивается в соответствии с любым вариантом использования. Strapi также имеет встроенную пользовательскую систему для подробного управления тем, к чему имеют доступ администраторы и конечные пользователи.

В этом руководстве вы узнаете, как установить общедоступную версию Strapi CMS на сервер Ubuntu 22.04 вместе с Nginx в качестве обратного прокси-сервера.

Предпосылки

  • A server running Ubuntu 22.04.

  • A non-root user with sudo privileges.

  • A fully qualified domain name (FQDN) like strapi.example.com.

  • Make sure everything is updated.

    $ sudo apt update
    $ sudo apt upgrade
    
  • Few packages that your system needs.

    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

    Some of these packages may already be installed on your system.

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

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

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

$ sudo ufw status

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

Status: inactive

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

$ sudo ufw allow OpenSSH

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

$ sudo ufw allow http
$ sudo ufw allow https

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

$ 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/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Шаг 2. Установите и настройте PostgreSQL.

Strapi работает с PostgreSQL 11 и выше. Ubuntu 22.04 поставляется с PostgreSQL 14 по умолчанию. Мы будем использовать PostgreSQL 15 для нашего руководства.

Выполните следующую команду, чтобы добавить ключ PostgreSQL GPG.

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null

Добавьте репозиторий APT в список источников.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

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

$ sudo apt update

Теперь вы можете установить PostgreSQL, используя приведенную ниже команду.

$ sudo apt install postgresql postgresql-contrib

Пакет postgresql-contrib содержит несколько дополнительных утилит.

Проверьте состояние службы PostgreSQL.

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Wed 2022-12-28 18:03:03 UTC; 17s ago
   Main PID: 4119 (code=exited, status=0/SUCCESS)
        CPU: 2ms

Dec 28 18:03:03 strapi systemd[1]: Starting PostgreSQL RDBMS...
Dec 28 18:03:03 strapi systemd[1]: Finished PostgreSQL RDBMS.

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

Запустите оболочку PostgreSQL.

$ sudo -i -u postgres psql

Создайте базу данных Strapi.

postgres=# CREATE DATABASE strapidb;

Создайте пользователя Strapi и выберите надежный пароль.

postgres-# CREATE USER strapiuser WITH PASSWORD 'Your_Password';

Измените владельца базы данных на пользователя Strapi.

postgres-# ALTER DATABASE strapidb OWNER TO strapiuser;

Выйдите из оболочки.

postgres-# \q

Убедитесь, что ваши учетные данные работают.

$ psql --username strapiuser --password --host localhost strapidb
Password:
psql (15.1 (Ubuntu 15.1-1.pgdg22.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

strapidb=>

Выйдите из оболочки, набрав \q.

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

Ubuntu 22.04 поставляется с Node v12, который устарел. Мы установим последнюю LTS-версию Node, которая на момент написания этого руководства была v18.

Загрузите установщик Node v18 из Nodesource.

$ curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh

Запустите скрипт установки.

$ sudo bash nodesource_setup.sh

Установите Node.js.

$ sudo apt install nodejs

Проверьте версию Node.js.

$ node -v
v18.12.1

Удалите установочный файл.

$ rm nodesource_setup.sh

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

Выполните следующую команду, чтобы установить Strapi.

$ npx  howtoforge-project
Need to install the following packages:
  
Ok to proceed? (y) y

Введите y, чтобы продолжить установку. Далее вам будет предложено выбрать тип установки. Выберите «Пользовательский», чтобы продолжить, и ответьте на вопросы следующим образом.

? Choose your installation type Custom (manual settings)
? Choose your preferred language JavaScript
? Choose your default database client postgres
? Database name: strapidb
? Host: 127.0.0.1
? Port: 5432
? Username: strapiuser
? Password: Your_Password
? Enable SSL connection: No

В зависимости от ваших требований вы можете выбрать Typescript или JavaScript в качестве языка для Strapi.

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

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

$ cd howtoforge-project

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

$ NODE_ENV=production npm run build

Запустите сервер Strapi с помощью следующей команды.

$ node ~/howtoforge-project/node_modules/.bin/strapi start

Ваше приложение должно быть видно по URL-адресу http://:1337. Но сначала откройте порт в брандмауэре.

$ sudo ufw allow 1337

После того, как вы откроете URL-адрес, вы должны увидеть следующий экран.

Нажмите Ctrl + C в терминале, чтобы остановить сервер. Вы должны удалить правило брандмауэра, потому что оно нам не понадобится.

$ sudo ufw delete allow 1337

Шаг 5 — Установите и настройте PM2

Вместо того, чтобы запускать сервер вручную, мы можем использовать PM2 (Process Manager 2) для управления процессом и создания для него службы systemd.

Перейдите в домашний каталог.

$ cd ~

Установите ПМ2.

$ sudo npm install  -g

Создайте и откройте файл конфигурации PM2 для редактирования.

$ sudo nano ecosystem.config.js

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

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

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

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

$ pm2 start ecosystem.config.js

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

                        -------------

__/""""\____/"\____________/"\____/"""_____
 _\/"/////////"_\/""________/""__/"///////"___
  _\/"_______\/"_\/"//"____/"//"_\///______\//"__
   _\/""""\/__\/"\///"/"/_\/"___________/"/___
    _\/"/////////____\/"__\///"/___\/"________/"//_____
     _\/"_____________\/"____\///_____\/"_____/"//________
      _\/"_____________\/"_____________\/"___/"/___________
       _\/"_____________\/"_____________\/"__/"""""_
        _\///______________\///______________\///__\///////////////__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Spawning PM2 daemon with pm2_home=/home/navjot/.pm2
[PM2] PM2 Successfully daemonized
[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    ? 4824     ? 0s     ? 0    ? online    ? 0%       ? 31.9mb   ? navjot   ? disabled ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Приложения, работающие под управлением PM2, автоматически перезапускаются в случае сбоя или уничтожения.

Создайте сценарий запуска systemd, используя следующую команду.

$ 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 navjot --hp /home/navjot

Скопируйте команду из приведенного выше вывода и запустите ее.

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

Сохраните список процессов PM2.

$ pm2 save

Теперь ваш сервис Strapi работает в фоновом режиме в рабочем режиме.

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

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

Импортировать ключ подписи Nginxs.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
	| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Добавьте репозиторий для стабильной версии Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

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

$ sudo apt update

Установите Нгинкс.

$ sudo apt install nginx

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

$ nginx -v
nginx version: nginx/1.22.1

Запустите сервер Nginx.

$ sudo systemctl start nginx

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

Нам нужно установить Certbot для создания SSL-сертификата. Вы можете либо установить Certbot, используя репозиторий Ubuntu, либо получить последнюю версию с помощью инструмента Snapd. Мы будем использовать версию Snapd.

Ubuntu 22.04 поставляется с установленным по умолчанию Snapd. Выполните следующие команды, чтобы убедиться, что ваша версия Snapd обновлена. Убедитесь, что ваша версия 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 strapi.example.com

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

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

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

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

$ sudo certbot renew --dry-run

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

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

Откройте файл /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 при появлении запроса.

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

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

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

server {
  # Redirect any http requests to https
  listen         80;
  listen         [::]:80;
  server_name    strapi.example.com;
  return 301     https://$host$request_uri;
}

server {
  listen                    443 ssl http2;
  listen                    [::]:443 ssl http2;
  server_name               strapi.example.com;

  access_log                /var/log/nginx/strapi.access.log;
  error_log                 /var/log/nginx/strapi.error.log;

  # TLS configuration
  ssl_certificate           /etc/letsencrypt/live/strapi.example.com/fullchain.pem;
  ssl_certificate_key       /etc/letsencrypt/live/strapi.example.com/privkey.pem;
  ssl_trusted_certificate   /etc/letsencrypt/live/strapi.example.com/chain.pem;
  ssl_protocols             TLSv1.2 TLSv1.3;

  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_session_cache         shared:SSL:50m;
  ssl_session_timeout       1d;

  # 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;

  location / {
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_set_header	    X-Forwarded-Host $http_host;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass              http://127.0.0.1:1337;
  }
}

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

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

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите службу Nginx.

$ sudo systemctl restart nginx

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

Посетите URL-адрес https://strapi.example.com/admin, чтобы создать пользователя-администратора.

Заполните данные администратора и нажмите кнопку «Начать», чтобы перейти к экрану панели администратора.

С этого момента вы можете начать создавать контент на Strapi.

Шаг 9 — Обновите Strapi

Первым шагом в обновлении Strapi является остановка сервера.

$ cd ~
$ pm2 stop ecosystem.config.js

Перейдите в каталог проекта и откройте файл package.json для редактирования.

$ cd howtoforge-project
$ nano package.json

Обновите все номера версий пакетов Strapi до последней стабильной версии Strapi. Вы можете получить последнюю доступную версию на странице выпусков Strapis GitHub.

"devDependencies": {},
  "dependencies": {
    "@strapi/strapi": "4.5.5",
    "@strapi/plugin-users-permissions": "4.5.5",
    "@strapi/plugin-i18n": "4.5.5",
    "pg": "8.6.0"
  },

Здесь вам нужно изменить 4.5.5 на последнюю стабильную версию. Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса после завершения.

Установите обновленную версию.

$ npm install

Перестройте панель администратора.

$ NODE_ENV=production npm run build

Запустите сервер снова.

$ cd ~
$ pm2 start ecosystem.config.js

Теперь ваша установка Strapi обновлена и работает.

Заключение

На этом мы завершаем наше руководство по установке Strapi CMS на сервер Ubuntu 22.04 и Nginx в качестве обратного прокси-сервера. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.