В мире современной веб-разработки головные CMS (Content Management Systems) стали стандартом для компаний, стремящихся к гибкости в управлении контентом. Strapi 5, одна из лидирующих open-source headless CMS, предлагает разработчикам мощные инструменты для создания масштабируемых веб-приложений при сохранении полного контроля над инфраструктурой.
Хотя облачные решения кажутся привлекательными своей простотой, развертывание Strapi на собственном виртуальном приватном сервере (VPS) дает существенные преимущества для растущего бизнеса в Казахстане:
В этом руководстве мы подробно рассмотрим процесс установки и настройки Strapi 5 на VPS, чтобы вы могли запустить надежное и безопасное решение менее чем за час.
Ключевая выгода: При правильной настройке собственного VPS с Strapi вы получаете превосходную производительность и безопасность при снижении ежемесячных затрат на хостинг до 50-70% по сравнению с управляемыми облачными решениями.
Перед началом установки убедитесь, что у вас есть:
VPS с минимальными характеристиками:
Доменное имя с доступом к управлению DNS-записями
SSH-доступ к вашему серверу (терминал для Mac/Linux или PuTTY для Windows)
Базовые знания командной строки и опыт работы с Node.js
Существующий проект Strapi или план по созданию нового
Профессиональный совет: Если вы планируете работать с большим количеством типов контента или API-интеграций, настоятельно рекомендуем выбрать VPS с 4 ГБ оперативной памяти для обеспечения оптимальной производительности при сборке проекта.
Безопасность вашего сервера — основа успешного проекта. Начнем с базовой конфигурации и защиты VPS.
Подключитесь к вашему VPS с помощью команды:
ssh имя_пользователя@IP_ВАШЕГО_СЕРВЕРАЕсли возникают проблемы с подключением из-за ошибок known_hosts, примените следующие права доступа:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/known_hostsУстановите корректное имя хоста для системной идентификации:
sudo hostnamectl set-hostname content.вашдомен.kzОбновите файл hosts, чтобы отразить эту конфигурацию:
sudo nano /etc/hostsДобавьте следующую строку:
1IP_ВАШЕГО_СЕРВЕРА content.вашдомен.kzВ настройках DNS вашего регистратора доменов создайте A-запись, которая указывает content.вашдомен.kz на IP-адрес вашего сервера. Обычно эти изменения распространяются в течение 30 минут – 24 часов, в зависимости от вашего DNS-провайдера.
Обновите системные пакеты для устранения потенциальных уязвимостей:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git unzip ufwStrapi 5 поддерживает несколько систем управления базами данных, но PostgreSQL обеспечивает лучшее сочетание производительности, надежности и функциональности для рабочей среды.
Установите сервер PostgreSQL и клиентские инструменты:
sudo apt install -y postgresql postgresql-contribСоздайте специальную базу данных и пользователя для вашего приложения Strapi:
sudo -i -u postgres
psqlВ консоли PostgreSQL выполните:
1CREATE DATABASE strapidb;
2CREATE USER strapiuser WITH ENCRYPTED PASSWORD 'ВАШ_НАДЕЖНЫЙ_ПАРОЛЬ';
3GRANT ALL PRIVILEGES ON DATABASE strapidb TO strapiuser;
4\q
5exitПримечание по безопасности: Используйте сложный уникальный пароль для пользователя базы данных. Рекомендуем использовать команду
openssl rand -hex 16для создания криптографически стойкой случайной строки.
Strapi 5 требует Node.js версии 18 или выше. Установим LTS-версию для оптимальной стабильности.
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejsПроверьте установку:
node -v  # Должно показывать v18.x.x или выше
npm -v   # Должно показывать 8.x.x или вышеТеперь, когда окружение подготовлено, можно развернуть само приложение Strapi.
Если ваш проект Strapi размещен в Git-репозитории (рекомендуется для командной работы):
cd ~
git clone https://github.com/ВАШ_ПОЛЬЗОВАТЕЛЬ/ВАШ_РЕПОЗИТОРИЙ.git strapi-production
cd strapi-productionАльтернативно, вы можете передать локальный проект через SCP или SFTP.
Установите необходимые пакеты и зависимости для производственной среды:
npm install
npm install pg dotenv --saveСоздайте специальную конфигурацию для рабочей среды:
mkdir -p config/env/production
touch config/env/production/.envОтредактируйте этот файл в любом текстовом редакторе и добавьте:
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Для генерации различных секретных ключей используйте:
openssl rand -hex 32  # Запустите эту команду несколько раз для каждого ключаСоздайте файл конфигурации базы данных специально для рабочей среды:
nano config/env/production/database.tsДобавьте следующую конфигурацию:
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});Соберите ваше приложение Strapi для рабочей среды:
NODE_OPTIONS="--max_old_space_size=4096" NODE_ENV=production npm run buildЭтот процесс может занять несколько минут, особенно на VPS с ограниченными ресурсами.
Для обеспечения непрерывной работы вашего приложения Strapi и автоматического перезапуска после перезагрузки сервера используем менеджер процессов PM2.
npm install -g pm2pm2 start npm --name "strapi-production" -- run startpm2 save
pm2 startup systemdСледуйте инструкциям, предоставленным командой pm2 startup, чтобы включить автоматический запуск.
Для безопасного доступа к вашему экземпляру Strapi из интернета используем Nginx в качестве обратного прокси с SSL-шифрованием.
sudo apt install -y nginxСоздайте новый конфигурационный файл Nginx:
sudo nano /etc/nginx/sites-available/strapiДобавьте следующую конфигурацию:
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}Активируйте эту конфигурацию:
sudo ln -s /etc/nginx/sites-available/strapi /etc/nginx/sites-enabled/
sudo nginx -t  # Проверка конфигурации
sudo systemctl restart nginxЗащитите ваше приложение бесплатным SSL-сертификатом:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d content.вашдомен.kzСледуйте инструкциям для завершения настройки SSL.
Настройте базовый файрвол для защиты вашего сервера:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enableПроверьте статус файрвола:
sudo ufw statusЕсли вы переносите проект с другого хостинга, необходимо перенести данные.
Для автоматической миграции с другого экземпляра Strapi:
npx strapi transfer --from=remote --url=https://ВАШ_СУЩЕСТВУЮЩИЙ_STRAPI/admin --token=ВАШ_TRANSFER_TOKENЕсли автоматический перенос недоступен:
Экспорт из источника:
pg_dump -h ИСХОДНЫЙ_ХОСТ -U ИСХОДНЫЙ_ПОЛЬЗОВАТЕЛЬ -d ИСХОДНАЯ_БД -F c -f backup.dumpПередача на ваш VPS:
scp backup.dump имя_пользователя@IP_ВАШЕГО_СЕРВЕРА:/home/имя_пользователя/Восстановление на вашем VPS:
pg_restore -U strapiuser -d strapidb -F c backup.dumpДля переноса загрузок и медиафайлов:
rsync -avz -e ssh /путь/к/локальным/uploads/ имя_пользователя@IP_ВАШЕГО_СЕРВЕРА:/home/имя_пользователя/strapi-production/public/uploads/Настройте ваше развертывание Strapi для оптимальной производительности:
Отредактируйте конфигурацию PM2:
pm2 stop strapi-production
pm2 start npm --name "strapi-production" --node-args="--max_old_space_size=2048" -- run start
pm2 saveУлучшите конфигурацию Nginx для кэширования статических ресурсов:
sudo nano /etc/nginx/sites-available/strapiДобавьте внутри блока server:
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:
sudo systemctl restart nginxДля долгосрочной стабильности важно установить процедуры регулярного обслуживания вашего сервера и приложения.
Настройте ежедневное автоматическое резервное копирование базы данных:
mkdir -p ~/backups
crontab -eДобавьте следующую строку:
10 0 * * * pg_dump -U strapiuser -d strapidb -F c -f ~/backups/strapi-backup-$(date +\%Y\%m\%d).dumpЭто создаст ежедневную резервную копию в полночь, назначая файлам имена в формате даты.
Важно: Периодически проверяйте работоспособность ваших резервных копий, пытаясь восстановить тестовую базу данных. Резервная копия, которую нельзя восстановить, бесполезна!
Для безопасного обновления вашего приложения Strapi следуйте этому алгоритму:
Создайте резервную копию перед обновлением:
pg_dump -U strapiuser -d strapidb -F c -f ~/backups/strapi-pre-update.dumpПолучите последние изменения из репозитория:
cd ~/strapi-production
git pull origin mainУстановите зависимости:
npm installПерестройте приложение и перезапустите:
NODE_ENV=production npm run build
pm2 restart strapi-productionРекомендуется сначала протестировать процесс обновления в тестовой среде, прежде чем применять его к рабочему серверу.
Настройте базовый мониторинг с помощью PM2:
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7Это обеспечит автоматическое управление файлами журналов, предотвращая заполнение диска.
Для поддержания оптимальной производительности и безопасности сервера рекомендуется регулярно выполнять следующие задачи:
Ежедневно:
Еженедельно:
Ежемесячно:
Ежеквартально:
По мере роста вашего проекта может потребоваться дополнительная оптимизация для обработки увеличивающейся нагрузки.
Наиболее простой способ повысить производительность — увеличить ресурсы вашего VPS:
Настройте кэширование часто запрашиваемых данных с помощью Redis:
sudo apt install redis-server
npm install @strapi/plugin-redis --saveЗатем добавьте следующую конфигурацию в config/env/production/plugins.ts:
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};Для проектов с большим количеством изображений и медиафайлов рекомендуется настроить CDN или объектное хранилище:
npm install @strapi/provider-upload-aws-s3 --saveconfig/env/production/plugins.tsСледуя этому руководству, вы успешно развернули рабочий экземпляр Strapi 5 на вашем VPS со следующими преимуществами:
Теперь ваша система Strapi CMS готова обеспечивать контентом ваши цифровые проекты с максимальной гибкостью и контролем, при этом стоимость владения значительно ниже облачных альтернатив.
Интересный факт: Самостоятельное размещение Strapi может снизить общую стоимость владения до 65% по сравнению с эквивалентными управляемыми SaaS-альтернативами в течение двухлетнего периода, при этом обеспечивая больший контроль и возможность тонкой настройки.
В Ideaflow Studio мы специализируемся на создании исключительных цифровых проектов на основе современных архитектур headless CMS. Наша команда сертифицированных экспертов по Strapi готова помочь вам:
Свяжитесь с нами сегодня по адресу hello@ideaflow.studio, чтобы обсудить, как мы можем помочь ускорить вашу цифровую трансформацию с помощью Strapi.
*[VPS]: Виртуальный приватный сервер *[CMS]: Система управления контентом