Strapi 5 on a VPS: Secure Production Setup in Under an Hour

Веб-разработка

Развёртывание Strapi 5: пошаговое руководство для частного сервера

Введение: преимущества самостоятельного хостинга Strapi

В мире современной веб-разработки головные CMS (Content Management Systems) стали стандартом для компаний, стремящихся к гибкости в управлении контентом. Strapi 5, одна из лидирующих open-source headless CMS, предлагает разработчикам мощные инструменты для создания масштабируемых веб-приложений при сохранении полного контроля над инфраструктурой.

Хотя облачные решения кажутся привлекательными своей простотой, развертывание Strapi на собственном виртуальном приватном сервере (VPS) дает существенные преимущества для растущего бизнеса в Казахстане:

  1. Полный контроль над данными – особенно важно для компаний, работающих с конфиденциальной информацией
  2. Значительная экономия средств – до 60-70% по сравнению с облачными решениями при долгосрочном использовании
  3. Гибкая настройка производительности – оптимизация под конкретные нужды вашего проекта
  4. Независимость от внешних сервисов – работа без привязки к стабильности зарубежных платформ

В этом руководстве мы подробно рассмотрим процесс установки и настройки Strapi 5 на VPS, чтобы вы могли запустить надежное и безопасное решение менее чем за час.

Ключевая выгода: При правильной настройке собственного VPS с Strapi вы получаете превосходную производительность и безопасность при снижении ежемесячных затрат на хостинг до 50-70% по сравнению с управляемыми облачными решениями.

Подготовка: необходимые компоненты и предварительные требования

Перед началом установки убедитесь, что у вас есть:

  1. VPS с минимальными характеристиками:

    • 2 ГБ оперативной памяти (рекомендуется 4 ГБ для комфортной работы)
    • 1 виртуальный процессор (vCPU)
    • 20 ГБ SSD-хранилища
    • Ubuntu 22.04 LTS или более новая версия
  2. Доменное имя с доступом к управлению DNS-записями

  3. SSH-доступ к вашему серверу (терминал для Mac/Linux или PuTTY для Windows)

  4. Базовые знания командной строки и опыт работы с Node.js

  5. Существующий проект Strapi или план по созданию нового

Профессиональный совет: Если вы планируете работать с большим количеством типов контента или API-интеграций, настоятельно рекомендуем выбрать VPS с 4 ГБ оперативной памяти для обеспечения оптимальной производительности при сборке проекта.

Шаг 1: Начальная настройка и защита сервера

Безопасность вашего сервера — основа успешного проекта. Начнем с базовой конфигурации и защиты VPS.

1.1 Подключение к серверу через SSH

Подключитесь к вашему VPS с помощью команды:

bash
ssh имя_пользователя@IP_ВАШЕГО_СЕРВЕРА

Если возникают проблемы с подключением из-за ошибок known_hosts, примените следующие права доступа:

bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/known_hosts

1.2 Настройка имени хоста и конфигурация DNS

Установите корректное имя хоста для системной идентификации:

bash
sudo hostnamectl set-hostname content.вашдомен.kz

Обновите файл hosts, чтобы отразить эту конфигурацию:

bash
sudo nano /etc/hosts

Добавьте следующую строку:

txt
1IP_ВАШЕГО_СЕРВЕРА content.вашдомен.kz

В настройках DNS вашего регистратора доменов создайте A-запись, которая указывает content.вашдомен.kz на IP-адрес вашего сервера. Обычно эти изменения распространяются в течение 30 минут – 24 часов, в зависимости от вашего DNS-провайдера.

1.3 Обновление системы и установка базовых пакетов

Обновите системные пакеты для устранения потенциальных уязвимостей:

bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git unzip ufw

Шаг 2: Настройка базы данных PostgreSQL

Strapi 5 поддерживает несколько систем управления базами данных, но PostgreSQL обеспечивает лучшее сочетание производительности, надежности и функциональности для рабочей среды.

2.1 Установка PostgreSQL

Установите сервер PostgreSQL и клиентские инструменты:

bash
sudo apt install -y postgresql postgresql-contrib

2.2 Создание базы данных и пользователя

Создайте специальную базу данных и пользователя для вашего приложения Strapi:

bash
sudo -i -u postgres
psql

В консоли PostgreSQL выполните:

sql
1CREATE DATABASE strapidb;
2CREATE USER strapiuser WITH ENCRYPTED PASSWORD 'ВАШ_НАДЕЖНЫЙ_ПАРОЛЬ';
3GRANT ALL PRIVILEGES ON DATABASE strapidb TO strapiuser;
4\q
5exit

Примечание по безопасности: Используйте сложный уникальный пароль для пользователя базы данных. Рекомендуем использовать команду openssl rand -hex 16 для создания криптографически стойкой случайной строки.

Шаг 3: Настройка окружения Node.js

Strapi 5 требует Node.js версии 18 или выше. Установим LTS-версию для оптимальной стабильности.

bash
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

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

bash
node -v  # Должно показывать v18.x.x или выше
npm -v   # Должно показывать 8.x.x или выше

Шаг 4: Развертывание приложения Strapi 5

Теперь, когда окружение подготовлено, можно развернуть само приложение Strapi.

4.1 Клонирование репозитория

Если ваш проект Strapi размещен в Git-репозитории (рекомендуется для командной работы):

bash
cd ~
git clone https://github.com/ВАШ_ПОЛЬЗОВАТЕЛЬ/ВАШ_РЕПОЗИТОРИЙ.git strapi-production
cd strapi-production

Альтернативно, вы можете передать локальный проект через SCP или SFTP.

4.2 Установка зависимостей

Установите необходимые пакеты и зависимости для производственной среды:

bash
npm install
npm install pg dotenv --save

4.3 Конфигурация окружения для рабочей среды

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

bash
mkdir -p config/env/production
touch config/env/production/.env

Отредактируйте этот файл в любом текстовом редакторе и добавьте:

txt
1HOST=0.0.0.0
2PORT=1337
3APP_KEYS=ключ1,ключ2,ключ3,ключ4
4API_TOKEN_SALT=ВАШ_TOKEN_SALT
5ADMIN_JWT_SECRET=ВАШ_ADMIN_JWT
6JWT_SECRET=ВАШ_JWT_SECRET
7TRANSFER_TOKEN_SALT=ВАШ_TRANSFER_SALT
8
9# База данных
10DATABASE_CLIENT=postgres
11DATABASE_HOST=localhost
12DATABASE_PORT=5432
13DATABASE_NAME=strapidb
14DATABASE_USERNAME=strapiuser
15DATABASE_PASSWORD=ВАШ_НАДЕЖНЫЙ_ПАРОЛЬ
16DATABASE_SSL=false

Для генерации различных секретных ключей используйте:

bash
openssl rand -hex 32  # Запустите эту команду несколько раз для каждого ключа

4.4 Конфигурация подключения к базе данных

Создайте файл конфигурации базы данных специально для рабочей среды:

bash
nano config/env/production/database.ts

Добавьте следующую конфигурацию:

typescript
1export default ({ env }) => ({
2  connection: {
3    client: env('DATABASE_CLIENT', 'postgres'),
4    connection: {
5      host: env('DATABASE_HOST', 'localhost'),
6      port: env.int('DATABASE_PORT', 5432),
7      database: env('DATABASE_NAME', 'strapidb'),
8      user: env('DATABASE_USERNAME', 'strapiuser'),
9      password: env('DATABASE_PASSWORD'),
10      ssl: env.bool('DATABASE_SSL', false),
11    },
12    debug: false,
13  },
14});

4.5 Сборка для рабочей среды

Соберите ваше приложение Strapi для рабочей среды:

bash
NODE_OPTIONS="--max_old_space_size=4096" NODE_ENV=production npm run build

Этот процесс может занять несколько минут, особенно на VPS с ограниченными ресурсами.

Шаг 5: Управление процессами с PM2

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

5.1 Установка PM2

bash
npm install -g pm2

5.2 Запуск Strapi с PM2

bash
pm2 start npm --name "strapi-production" -- run start

5.3 Настройка автозапуска PM2

bash
pm2 save
pm2 startup systemd

Следуйте инструкциям, предоставленным командой pm2 startup, чтобы включить автоматический запуск.

Шаг 6: Настройка обратного прокси с Nginx и SSL

Для безопасного доступа к вашему экземпляру Strapi из интернета используем Nginx в качестве обратного прокси с SSL-шифрованием.

6.1 Установка Nginx

bash
sudo apt install -y nginx

6.2 Конфигурация Nginx

Создайте новый конфигурационный файл Nginx:

bash
sudo nano /etc/nginx/sites-available/strapi

Добавьте следующую конфигурацию:

nginx
1server {
2    server_name content.вашдомен.kz;
3
4    location / {
5        proxy_pass http://localhost:1337;
6        proxy_http_version 1.1;
7        proxy_set_header X-Forwarded-Host $host;
8        proxy_set_header X-Forwarded-Server $host;
9        proxy_set_header X-Real-IP $remote_addr;
10        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
11        proxy_set_header X-Forwarded-Proto $scheme;
12        proxy_set_header Host $http_host;
13        proxy_set_header Upgrade $http_upgrade;
14        proxy_set_header Connection "Upgrade";
15        proxy_pass_request_headers on;
16    }
17}

Активируйте эту конфигурацию:

bash
sudo ln -s /etc/nginx/sites-available/strapi /etc/nginx/sites-enabled/
sudo nginx -t  # Проверка конфигурации
sudo systemctl restart nginx

6.3 SSL-сертификат с Let's Encrypt

Защитите ваше приложение бесплатным SSL-сертификатом:

bash
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d content.вашдомен.kz

Следуйте инструкциям для завершения настройки SSL.

Шаг 7: Настройка файрвола

Настройте базовый файрвол для защиты вашего сервера:

bash
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Проверьте статус файрвола:

bash
sudo ufw status

Шаг 8: Миграция данных (для существующих проектов)

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

8.1 Использование инструмента переноса Strapi

Для автоматической миграции с другого экземпляра Strapi:

bash
npx strapi transfer --from=remote --url=https://ВАШ_СУЩЕСТВУЮЩИЙ_STRAPI/admin --token=ВАШ_TRANSFER_TOKEN

8.2 Ручная миграция базы данных

Если автоматический перенос недоступен:

  1. Экспорт из источника:

    bash
    pg_dump -h ИСХОДНЫЙ_ХОСТ -U ИСХОДНЫЙ_ПОЛЬЗОВАТЕЛЬ -d ИСХОДНАЯ_БД -F c -f backup.dump
  2. Передача на ваш VPS:

    bash
    scp backup.dump имя_пользователя@IP_ВАШЕГО_СЕРВЕРА:/home/имя_пользователя/
  3. Восстановление на вашем VPS:

    bash
    pg_restore -U strapiuser -d strapidb -F c backup.dump

8.3 Перенос медиафайлов

Для переноса загрузок и медиафайлов:

bash
rsync -avz -e ssh /путь/к/локальным/uploads/ имя_пользователя@IP_ВАШЕГО_СЕРВЕРА:/home/имя_пользователя/strapi-production/public/uploads/

Шаг 9: Оптимизация производительности

Настройте ваше развертывание Strapi для оптимальной производительности:

9.1 Распределение памяти Node.js

Отредактируйте конфигурацию PM2:

bash
pm2 stop strapi-production
pm2 start npm --name "strapi-production" --node-args="--max_old_space_size=2048" -- run start
pm2 save

9.2 Кэширование статических ресурсов в Nginx

Улучшите конфигурацию Nginx для кэширования статических ресурсов:

bash
sudo nano /etc/nginx/sites-available/strapi

Добавьте внутри блока server:

nginx
1location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
2    proxy_pass http://localhost:1337;
3    expires 30d;
4    add_header Cache-Control "public, no-transform";
5}

Перезапустите Nginx:

bash
sudo systemctl restart nginx

Шаг 10: Регулярное обслуживание и стратегия обновлений

Для долгосрочной стабильности важно установить процедуры регулярного обслуживания вашего сервера и приложения.

10.1 Автоматическое резервное копирование

Настройте ежедневное автоматическое резервное копирование базы данных:

bash
mkdir -p ~/backups
crontab -e

Добавьте следующую строку:

txt
10 0 * * * pg_dump -U strapiuser -d strapidb -F c -f ~/backups/strapi-backup-$(date +\%Y\%m\%d).dump

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

Важно: Периодически проверяйте работоспособность ваших резервных копий, пытаясь восстановить тестовую базу данных. Резервная копия, которую нельзя восстановить, бесполезна!

10.2 Процедура обновления Strapi

Для безопасного обновления вашего приложения Strapi следуйте этому алгоритму:

  1. Создайте резервную копию перед обновлением:

    bash
    pg_dump -U strapiuser -d strapidb -F c -f ~/backups/strapi-pre-update.dump
  2. Получите последние изменения из репозитория:

    bash
    cd ~/strapi-production
    git pull origin main
  3. Установите зависимости:

    bash
    npm install
  4. Перестройте приложение и перезапустите:

    bash
    NODE_ENV=production npm run build
    pm2 restart strapi-production

Рекомендуется сначала протестировать процесс обновления в тестовой среде, прежде чем применять его к рабочему серверу.

10.3 Мониторинг и управление логами

Настройте базовый мониторинг с помощью PM2:

bash
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

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

10.4 Контрольный список регулярного обслуживания

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

Ежедневно:

  • Мониторинг состояния сервера (CPU, RAM, диск)
  • Проверка журналов на наличие ошибок

Еженедельно:

  • Обновление системных пакетов
  • Проверка резервных копий
  • Анализ журналов доступа Nginx

Ежемесячно:

  • Очистка старых журналов и временных файлов
  • Проверка и обновление SSL-сертификатов
  • Проверка целостности данных

Ежеквартально:

  • Смена паролей доступа
  • Проверка и обновление правил файрвола
  • Тестирование процедуры восстановления из резервных копий

Шаг 11: Масштабирование и оптимизация для высоких нагрузок

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

11.1 Вертикальное масштабирование

Наиболее простой способ повысить производительность — увеличить ресурсы вашего VPS:

  1. Увеличьте RAM до 8 ГБ для улучшения обработки запросов
  2. Добавьте дополнительные vCPU для параллельной обработки
  3. Расширьте дисковое пространство для размещения большего объема медиафайлов

11.2 Кэширование запросов к API

Настройте кэширование часто запрашиваемых данных с помощью Redis:

bash
sudo apt install redis-server
npm install @strapi/plugin-redis --save

Затем добавьте следующую конфигурацию в config/env/production/plugins.ts:

typescript
1export default {
2  redis: {
3    config: {
4      connections: {
5        default: {
6          host: '127.0.0.1',
7          port: 6379,
8          db: 0,
9        },
10      },
11    },
12  },
13};

11.3 Оптимизация загрузки медиафайлов

Для проектов с большим количеством изображений и медиафайлов рекомендуется настроить CDN или объектное хранилище:

  1. Создайте учетную запись в облачном провайдере с поддержкой S3 (например, DigitalOcean Spaces)
  2. Установите плагин для Strapi:
    bash
    npm install @strapi/provider-upload-aws-s3 --save
  3. Настройте провайдера в config/env/production/plugins.ts

Заключение: ваше развертывание Strapi готово к работе

Следуя этому руководству, вы успешно развернули рабочий экземпляр Strapi 5 на вашем VPS со следующими преимуществами:

  • Интеграция с PostgreSQL для надежного хранения данных
  • Управление процессами с помощью PM2 для непрерывной работы
  • Безопасный HTTPS-доступ через Nginx
  • Автоматическое резервное копирование
  • Оптимизация производительности
  • Стратегия обслуживания и обновления

Теперь ваша система Strapi CMS готова обеспечивать контентом ваши цифровые проекты с максимальной гибкостью и контролем, при этом стоимость владения значительно ниже облачных альтернатив.

Интересный факт: Самостоятельное размещение Strapi может снизить общую стоимость владения до 65% по сравнению с эквивалентными управляемыми SaaS-альтернативами в течение двухлетнего периода, при этом обеспечивая больший контроль и возможность тонкой настройки.

Нужна профессиональная поддержка разработки?

В Ideaflow Studio мы специализируемся на создании исключительных цифровых проектов на основе современных архитектур headless CMS. Наша команда сертифицированных экспертов по Strapi готова помочь вам:

  • Разработать и внедрить пользовательские модели контента, оптимизированные для ваших бизнес-потребностей
  • Создать функциональные фронтенд-приложения с использованием Next.js, Nuxt или React
  • Оптимизировать ваше существующее развертывание Strapi для максимальной производительности и безопасности
  • Перейти с устаревших CMS платформ на современную headless архитектуру

Свяжитесь с нами сегодня по адресу hello@ideaflow.studio, чтобы обсудить, как мы можем помочь ускорить вашу цифровую трансформацию с помощью Strapi.

*[VPS]: Виртуальный приватный сервер *[CMS]: Система управления контентом