Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

Деплой .netcore 1.0 app на Ubuntu?

Подскажите как задеплоить .net core 1.0 WebApp приложение на ubuntu в продакшен?


Ответ

В целом по этой ссылке все достаточно подробно расписано (docs.asp.net/en/latest/publishing/linuxproduction.html). Мои шаги были следующими (Ubuntu 16.04):
Установить .net core, если не установлено; Загрузить бинарники приложения на prod сервер, проверьте, что все стартует. Т.к. сервер разворачивается на Ubuntu, то нужно использовать Kestrel:

var host = new WebHostBuilder() .UseKestrel() .UseConfiguration(config) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup() .Build();

В статье, указанной выше, рекомендуют использовать nginx. Пока asp.net не очень дружит с ssl и прочими штуками, а nginx - может. Поэтому ставим его. К тому же можно настроить нормальную маршрутизацию: 1. Install: sudo apt-get install nginx 2. Start: sudo service nginx start 3. Check: sudo service nginx status В nginx.config (/etc/nginx/nginx.config) настраиваем маршрутизацию:

location /test/gateway/ {
rewrite /test/gateway/(.*) /$1 break; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_pass http://127.0.0.1:9595; }
В proxy_pass вы указывается путь к вашему приложению. Я пока на одной машине разворачиваю и тестовое приложение, и production. Поэтому использую разные URL для их доступа.

rewrite /test/gateway/(.*) /$1 break;
Эта команда изменяет url, убирая /test/gateway/. Таким образом, доступ к тестовому и боевому сервер отличаются только во внешнем url, внутри приложения вносить изменения не нужно.
Сделаем так, чтобы приложение загружалось при старте и перезагружалось при падении. Для этого используем systemctl. В /etc/systemd/system создаем файл app_name.service со следующим содержимым:

[Unit] Description=Gateway server for StreetFlow.
[Service] TimeoutStartSec=0 ExecStart=/usr/bin/dotnet /etc/bt/st.gateway/GatewayServer.dll
WorkingDirectory=/etc/bt/st.gateway Restart=always
[Install] WantedBy=multi-user.target
Мы указываем, какую команду нужно выполнить, нужно ли запускать при ошибке. Так же можно указать зависимости, скажем, от postgresql или nginx. После создания сервиса нужно выполнить две команды: sudo systemctl enable your_app sudo systemctl start your_app Иногда после изменения конфига сервис может не запуститься. Это лечится командой sudo systemctl daemon-reload.
Поздравляю, ваше приложение развернуто!

Комментариев нет:

Отправить комментарий