Развёртывание вашего приложения Sisk
Эта страница переведена с английского автоматически. Читать оригинал
Процесс развёртывания приложения Sisk состоит в публикации вашего проекта в продакшн. Хотя процесс относительно прост, стоит обратить внимание на детали, которые могут быть критичными для безопасности и стабильности инфраструктуры развертывания.
Идеально, если вы готовы развернуть приложение в облаке, после проведения всех возможных тестов, чтобы приложение было готово к работе.
Публикация вашего приложения #
Публикация вашего приложения или сервиса Sisk — это генерация бинарных файлов, готовых и оптимизированных для продакшна. В этом примере мы скомпилируем бинарники для продакшна, чтобы запустить их на машине, где установлен .NET Runtime.
Вам понадобится установленный .NET SDK на вашей машине для сборки приложения и .NET Runtime на целевом сервере для его запуска. Как установить .NET Runtime на ваш Linux‑сервер, вы можете узнать здесь, Windows и Mac OS.
В папке, где находится ваш проект, откройте терминал и выполните команду публикации .NET:
$ dotnet publish -r linux-x64 -c ReleaseЭто сгенерирует ваши бинарные файлы в bin/Release/publish/linux-x64.
Примечание
Если ваше приложение использует portable configuration file, скопируйте service-config.json на сервер вместе со всеми бинарными файлами, сгенерированными dotnet publish.
Вы можете оставить файл предварительно сконфигурированным, с переменными окружения, портами прослушивания и хостами, а также дополнительными настройками сервера.
Следующий шаг — перенести эти файлы на сервер, где будет размещено ваше приложение.
После этого дайте исполняемые права вашему бинарному файлу. В данном случае предположим, что имя нашего проекта — «my-app»:
$ cd /home/htdocs
$ chmod +x my-app
$ ./my-appПосле запуска приложения проверьте, появляются ли сообщения об ошибках. Если их нет, значит приложение работает.
На данном этапе, скорее всего, будет невозможно получить доступ к вашему приложению из внешней сети, так как правила доступа, такие как брандмауэр, ещё не настроены. Мы рассмотрим это в следующих шагах.
У вас должен быть адрес виртуального хоста, на котором ваше приложение слушает запросы. Он задаётся вручную в приложении и зависит от того, как вы инстанцируете сервис Sisk.
Если вы не используете portable configuration file, найдите его там, где вы определяете экземпляр HttpServer:
HttpServer server = HttpServer.Emit(5000, out HttpServerConfiguration config, out var host, out var router);
// sisk должен слушать http://localhost:5000/Ассоциация ListeningHost вручную:
config.ListeningHosts.Add(new ListeningHost("https://localhost:5000/", router));Или, если вы используете portable configuration file, в вашем service-config.json:
{
"Server": { },
"ListeningHost": {
"Ports": [
"http://localhost:5000/"
]
}
}Исходя из этого, мы можем создать обратный прокси, который будет слушать ваш сервис и делать трафик доступным в открытой сети.
Прокси вашего приложения #
Проксирование вашего сервиса означает, что вы не будете напрямую выставлять сервис Sisk во внешнюю сеть. Эта практика очень распространена при развертывании серверов, потому что:
- Позволяет привязать SSL‑сертификат к вашему приложению;
- Создаёт правила доступа до обращения к сервису и предотвращает перегрузки;
- Позволяет контролировать полосу пропускания и лимиты запросов;
- Разделяет балансировщики нагрузки для вашего приложения;
- Предотвращает повреждения безопасности в случае сбоя инфраструктуры.
Вы можете обслуживать приложение через обратный прокси, такой как Nginx или Apache, либо использовать туннель http‑over‑dns, например Cloudflared.
Также не забудьте правильно обрабатывать заголовки переадресации вашего прокси, чтобы получать информацию о клиенте, такую как IP‑адрес и хост, через forwarding resolvers.
Следующий шаг после создания туннеля, настройки брандмауэра и запуска приложения — создать сервис для вашего приложения.
Примечание
Использовать SSL‑сертификаты напрямую в сервисе Sisk на системах, отличных от Windows, невозможно. Это связано с реализацией HttpListener, который является центральным модулем управления HTTP‑очередью в Sisk, а реализация различается от ОС к ОС. Вы можете использовать SSL в сервисе Sisk, если привяжете сертификат к виртуальному хосту через IIS. Для остальных систем настоятельно рекомендуется использовать обратный прокси.
Создание службы #
Создание службы сделает ваше приложение всегда доступным, даже после перезапуска сервера или некорректного сбоя.
В этом простом руководстве мы используем материал из предыдущего урока в качестве примера, чтобы ваш сервис всегда оставался активным.
Перейдите в папку, где находятся файлы конфигурации службы:
Shell cd /etc/systemd/systemСоздайте файл
my-app.serviceи включите в него следующее содержимое:my-app.serviceINI [Unit] Description=<description about your app> [Service] # установить пользователя, который будет запускать службу User=<user which will launch the service> # путь ExecStart не относителен к WorkingDirectory. # указать полный путь к исполняемому файлу WorkingDirectory=/home/htdocs ExecStart=/home/htdocs/my-app # настроить службу на постоянный перезапуск при сбое Restart=always RestartSec=3 [Install] WantedBy=multi-user.targetПерезапустите модуль менеджера служб:
Shell $ sudo systemctl daemon-reloadЗапустите только что созданную службу по имени файла и проверьте, работает ли она:
Shell $ sudo systemctl start my-app $ sudo systemctl status my-appТеперь, если ваше приложение запущено («Active: active»), включите службу, чтобы она запускалась после перезагрузки системы:
Shell $ sudo systemctl enable my-app
Теперь вы готовы представить ваше приложение Sisk всем.