В мире современной веб-разработки головные 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 ufw
Strapi 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 pm2
pm2 start npm --name "strapi-production" -- run start
pm2 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 --save
config/env/production/plugins.ts
Следуя этому руководству, вы успешно развернули рабочий экземпляр Strapi 5 на вашем VPS со следующими преимуществами:
Теперь ваша система Strapi CMS готова обеспечивать контентом ваши цифровые проекты с максимальной гибкостью и контролем, при этом стоимость владения значительно ниже облачных альтернатив.
Интересный факт: Самостоятельное размещение Strapi может снизить общую стоимость владения до 65% по сравнению с эквивалентными управляемыми SaaS-альтернативами в течение двухлетнего периода, при этом обеспечивая больший контроль и возможность тонкой настройки.
В Ideaflow Studio мы специализируемся на создании исключительных цифровых проектов на основе современных архитектур headless CMS. Наша команда сертифицированных экспертов по Strapi готова помочь вам:
Свяжитесь с нами сегодня по адресу hello@ideaflow.studio, чтобы обсудить, как мы можем помочь ускорить вашу цифровую трансформацию с помощью Strapi.
*[VPS]: Виртуальный приватный сервер *[CMS]: Система управления контентом