В этом руководстве представлено пошаговое руководство по развертыванию приложения Strapi с использованием Dokku и DigitalOcean.
Это руководство охватывает все: от установки Dokku и создания нового приложения до настройки SSL с помощью Let’s Encrypt и настройки автоматического развертывания на GitHub. Следуя этим инструкциям, вы сможете развертывать и управлять веб-приложениями, базами данных и другими службами на своих серверах или облачных провайдерах, таких как DigitalOcean.
Что такое Докку?
Dokku — это PaaS на базе Docker, который помогает создавать и управлять жизненным циклом приложений. Он разработан как легкая и простая альтернатива Heroku.
Вы можете думать об этом как о собственном Heroku, который вы можете развернуть в своей собственной инфраструктуре. С Dokku вы можете легко развертывать и управлять веб-приложениями, базами данных и другими службами на своих собственных серверах или у облачных провайдеров, таких как DigitalOcean.
Примечание. Напоминаем, что если вы ищете дешевый хостинг, мы знаем, что он работает. Симен рекомендовал бы Контабо. Сервер поставляется со следующим:
- 200 ГБ места на SSD или 50 ГБ NVMe
- 8 ГБ ОЗУ
- Четыре ядра виртуальных ЦП
Партнерская ссылка здесь. Это рекомендуется не Strapi, а лично Сименом Даэлином.
👷♀️ Предпосылки
- Проект Страпи
- мин. 2 ГБ оперативной памяти (рекомендуется 4 ГБ+)
🥷 Настройка сервера
Конечно! Вот пошаговое руководство по настройке дроплета в DigitalOcean:
- Войдите в свою учетную запись DigitalOcean и нажмите кнопку Создать в правом верхнем углу панели управления.
- Выберите Droplets в раскрывающемся меню.
- Выберите имя хоста для вашего дроплета.
- Выберите размер капли. Strapi рекомендует минуту 2 ГБ ОЗУ. Сам Dokku требует не менее 1 ГБ оперативной памяти.
- Выберите регион центра обработки данных, ближайший к вашей целевой аудитории.
- Выберите Ubuntu 22.04 LTS в качестве операционной системы вашего дроплета. (Здесь важно не использовать xx.10, так как это не сработает)
- Выберите любые дополнительные параметры, которые вам нужны, такие как резервное копирование или мониторинг.
- Нажмите Создать дроплет, чтобы завершить настройку и создать дроплет.
После того, как ваш дроплет создан, вы можете получить к нему доступ через SSH и настроить свой сервер. Дайте мне знать, если у вас есть еще вопросы!
🔐 Важно о SSH
Примечание. Обратите внимание, что для использования Dokku нам нужен ключ SSH. Если у вас его нет, обязательно создайте его. Вы можете узнать, как это сделать здесь. Windows MAC/Linux (Unix)
🐳 Установите Докку
Чтобы установить Dokku, вы можете использовать однострочную команду, представленную в официальной документации Dokku. SSH на ваш сервер и выполните следующую команду:
wget -NP . https://dokku.com/bootstrap.sh
sudo DOKKU_TAG=v0.30.9 bash bootstrap.sh
Эта команда загрузит и запустит сценарий установки Dokku, который установит Dokku на ваш сервер. Убедитесь, что у вас есть про SSH на ваш сервер, прежде чем продолжить установку.
После завершения установки вы можете получить доступ к веб-интерфейсу Dokku, перейдя к https://your-server-ip
в браузере. Оттуда вы можете настроить свой сервер и развернуть свои приложения.
Теперь, пожалуйста, убедитесь, что ваш SSH у вас под рукой, так как он нам нужен.
PUBLIC_KEY="your-public-key-contents-here"
echo "$PUBLIC_KEY" | dokku ssh-keys:add admin
🍏 Создание приложения
Чтобы создать новое приложение с именем mystrapi
, выполните на сервере Dokku следующую команду:
dokku apps:create mystrapi
💾 Создание базы данных Postgres
sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git
После установки плагина создайте новый экземпляр PostgreSQL с именем «strapi», выполнив:
dokku postgres:create strapi
Чтобы связать экземпляр PostgreSQL с вашим приложением, выполните следующую команду:
dokku postgres:link strapi mystrapi
⚠️ Пожалуйста, обратите внимание на имя пользователя и пароль, которые будут распечатаны, и сохраните их, если они понадобятся нам позже. Строка, которую вы ищете, это DSN, и она написана так: «postgres://DATABASE_USERNAME:DATABASE_PASSWORD@DBHOST:DATABASE_PORT/DATABASE_NAME»
⚙️ Настройте переменные среды Dokku и Strapi.
Это код oneline
для установки HOST, PORT, APP_KEYS, API_TOKEN_SALT, ADMIN_JWT_SECRET, JWT_SECRET.
dokku config:set mystrapi HOST=0.0.0.0 PORT=1337 APP_KEYS="$(for i in {1..3}; do openssl rand -base64 16; done | tr '\n' ',')" API_TOKEN_SALT=$(openssl rand -base64 32) ADMIN_JWT_SECRET=$(openssl rand -base64 32) JWT_SECRET=$(openssl rand -base64 32)
dokku config:set mystrapi DATABASE_USERNAME=INSERT FROM OUTPUT ABOVE DATABASE_PASSWORD=INSERT FROM OUTPUT ABOVE DATABASE_PORT=INSERT FROM OUTPUT ABOVE DATABASE_HOST=INSERT FROM OUTPUT ABOVE DATABASE_NAME= INSERT FROM OUTPUT ABOVE
🌎 Необязательно: Настройка домена
Далее вам нужно настроить домен для вашего приложения. Выполните следующую команду, чтобы добавить домен:
dokku domains:set-global example.com
dokku domains:add mystrapi backend.example.com
Замените example.com на желаемое доменное имя.
🔐 Настройка SSL и Let’s Encrypt
Чтобы настроить Let’s Encrypt для своего приложения, вам необходимо установить плагин Let’s Encrypt, запустив:
sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
После установки плагина вы можете включить Let’s Encrypt для своего домена, выполнив следующую команду:
dokku letsencrypt:set --global email <your-email>
dokku letsencrypt:enable mystrapi
dokku letsencrypt:cron-job --add
Замените <your-email>
своим адресом электронной почты.
Вот и все! Теперь вы создали новое приложение, установили PostgreSQL, связали его со своим приложением, добавили домен и настроили Let's Encrypt. Теперь вы можете развернуть свое приложение, отправив свой код на сервер Dokku.
🚒 Настроить прокси
При развертывании Strapi с помощью Dokku важно помнить, что Dokku использует прокси-сервер для маршрутизации запросов на правильный порт в контейнере (помните, что каждое приложение является контейнером в Dokku). Strapi использует порт 1337, поэтому, чтобы использовать Strapi с Dokku, нам нужно настроить прокси-сервер для маршрутизации портов 80. и 443 на порт 1337.
Для этого мы можем использовать команду dokku proxy:set
с соответствующими аргументами. В частности, нам нужно указать имя нашего приложения в Dokku и порты, которые мы хотим проксировать на порт 1337. Команда для настройки прокси для Strapi будет выглядеть так:
dokku proxy:set mystrapi http:80:1337 https:443:1337
Здесь mystrapi
нужно заменить на название вашего приложения в Dokku. После успешного выполнения этой команды Dokku направит запросы с портов 80 и 443 на порт 1337.
🚀 Автоматическое развертывание с помощью git
- Создайте новый файл в своем репозитории с именем
.github/workflows/deployment.yml
со следующим содержимым:
name: Deployment
on:
push:
branches: [main]
jobs:
build:
name: Deploy to Dokku
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Dokku Deployment
uses: dokku/github-action@master
with:
git_remote_url: "ssh://dokku@${{ secrets.HOST }}:22/APPNAME"
ssh_private_key: ${{ secrets.SECRET }}
git_push_flags: "--force"
env:
BUILDER_ENV: production
Замените APPNAME
на название вашего приложения в Dokku.
- Чтобы добавить секреты
SECRET
иHOST
, перейдите в свой репозиторий на GitHub и нажмите Настройки › Секреты › Новый секрет репозитория. В поле Имя введитеSECRET
. В поле Value вставьте свой закрытый ключ SSH. Повторите процесс для секретаHOST
со значением IP-адрес или доменное имя вашего сервера Dokku. .o добавьте закрытый ключ SSH в Dokku, SSH на свой сервер и выполните следующую команду
👔 Вручную отправить в Dokku
Вы можете сделать следующее, если не хотите автоматизировать развертывание и просто нажать.
- В своем проекте Strapi добавьте сервер Dokku в качестве репозитория.
git remote add dokku ssh://dokku@IP-ADDRESS-OR-DOMAIN-TO-DOKKU:22/APPNAME
git push dokku
Или вы можете использовать git sync, если у вас уже есть общедоступный репозиторий. Это будет иметь Dokku PULL непосредственно из GitHub или других репозиториев.
⚠️ Обратите внимание: репозиторий должен быть общедоступным.
dokku git:sync --build mystrapi https://github.com/GITHUBUSERNAME/REPONAME.git
Теперь последнее, что нам нужно сделать, это то, что несколько лет назад GitHub изменил ветки с master на main, поэтому мы должны сообщить Dokku, что хотим придерживаться этого.
dokku git:set --global deploy-branch main
Вы также можете удалить --global
и установить его для каждого приложения, если используете другую ветку.
🐳 Использование нашего собственного Dockerfile (необязательно)
Как вы заметили, у людей могут быть проблемы. Мы также рассмотрим настройку Docker для использования вашего Dockerfile вместо использования herokuish
. Использование файла Docker означает, что мы знаем, что создаваемая среда всегда будет одинаковой и не изменится.
Создать Dockerfile для использования со Strapi очень просто с помощью Strapi Community Dockerize Tool.
- В вашем проекте запустите
npx @strapi-community/dockerize@latest
- Выберите диспетчер пакетов
yarn / npm
- Выберите НЕТ, чтобы использовать
docker-compose
- Выберите Производство.
- Готово 🎉
Теперь, когда мы создали файл Dockerfile, мы можем сообщить Dokku, что мы хотим его построить для этого проекта.
Снова на вашем сервере Dokku
dokku builder-dockerfile:set mystrapi Dockerfile.prod
Это говорит Dokku искать файл prod. Если у вас есть только Dockerfile, указывать его не нужно. Dokku достаточно умен, чтобы автоматически определять его.
👷♂️Аргументы сборки Dockerfile
В качестве нашего Dockerfile
мы хотим указать аргумент сборки, например NODE_ENV
. Мы можем сказать ему, чтобы он всегда собирал для производства или переопределял его на то, что мы хотим. Выполняем следующую команду на сервере
dokku docker-options:add mystrapi build '--build-arg NODE_ENV=production'
Если вы ранее использовали руководство и пытались выполнить развертывание с помощью herokuish
, нам необходимо СБРОСИТЬ его, чтобы использовать Docker.
Во-первых, давайте получим URL-адрес пакета сборки, который был установлен.
dokku buildpacks:report mystrapi
Тогда давайте удалим его, вы ищете список Buildpacks и копируете URL:
dokku buildpacks:remove mystrapi INSERT URL FROM BUILDPACKS ABOVE
// Example
dokku buildpacks:remove mystrapi https://github.com/heroku/heroku-buildpack-nodejs.git
Теперь при развертывании он должен использовать файл Dockerfile вместо herokuish
. Пожалуйста, проверьте их документацию по этому здесь.
🎁 Подведение итогов
В этом руководстве вы узнали, как развернуть приложение Strapi с помощью Dokku и DigitalOcean. Dokku — это PaaS на базе Docker, который помогает создавать и управлять жизненным циклом приложений.
Мы рассказали, как установить Dokku, создать новое приложение, установить PostgreSQL, связать его с вашим приложением, добавить домен, настроить SSL с помощью Let’s Encrypt, настроить прокси-сервер и настроить автоматическое развертывание на GitHub.
Мы также предоставили инструкции по ручной отправке в Dokku. Обладая этими знаниями, вы сможете легко развертывать и управлять веб-приложениями, базами данных и другими службами на своих собственных серверах или у облачных провайдеров, таких как DigitalOcean.
В целом, развертывание приложения Strapi с использованием Dokku и DigitalOcean — это простой процесс, который можно выполнить всего за несколько шагов. Следуя шагам, описанным в этом руководстве, вы сможете настроить масштабируемый, надежный и безопасный сервер для своего приложения Strapi.