В этом руководстве представлено пошаговое руководство по развертыванию приложения 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:

  1. Войдите в свою учетную запись DigitalOcean и нажмите кнопку Создать в правом верхнем углу панели управления.
  2. Выберите Droplets в раскрывающемся меню.
  3. Выберите имя хоста для вашего дроплета.
  4. Выберите размер капли. Strapi рекомендует минуту 2 ГБ ОЗУ. Сам Dokku требует не менее 1 ГБ оперативной памяти.
  5. Выберите регион центра обработки данных, ближайший к вашей целевой аудитории.
  6. Выберите Ubuntu 22.04 LTS в качестве операционной системы вашего дроплета. (Здесь важно не использовать xx.10, так как это не сработает)
  7. Выберите любые дополнительные параметры, которые вам нужны, такие как резервное копирование или мониторинг.
  8. Нажмите Создать дроплет, чтобы завершить настройку и создать дроплет.

После того, как ваш дроплет создан, вы можете получить к нему доступ через SSH и настроить свой сервер. Дайте мне знать, если у вас есть еще вопросы!

🔐 Важно о SSH

Примечание. Обратите внимание, что для использования Dokku нам нужен ключ SSH. Если у вас его нет, обязательно создайте его. Вы можете узнать, как это сделать здесь. Windows MAC/Linux (Unix)

⚠️ Обратите внимание, что приведенные здесь команды предполагают, что вы подключились к серверу по SSH.

🐳 Установите Докку

Чтобы установить 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

  1. Создайте новый файл в своем репозитории с именем .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.

  1. Чтобы добавить секреты SECRET и HOST, перейдите в свой репозиторий на GitHub и нажмите НастройкиСекретыНовый секрет репозитория. В поле Имя введите SECRET. В поле Value вставьте свой закрытый ключ SSH. Повторите процесс для секрета HOST со значением IP-адрес или доменное имя вашего сервера Dokku. .o добавьте закрытый ключ SSH в Dokku, SSH на свой сервер и выполните следующую команду

👔 Вручную отправить в Dokku

Вы можете сделать следующее, если не хотите автоматизировать развертывание и просто нажать.

  1. В своем проекте 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.

  1. В вашем проекте запустите npx @strapi-community/dockerize@latest
  2. Выберите диспетчер пакетов yarn / npm
  3. Выберите НЕТ, чтобы использовать docker-compose
  4. Выберите Производство.
  5. Готово 🎉

Теперь, когда мы создали файл 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.