Подскажите как задеплоить .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
В статье, указанной выше, рекомендуют использовать 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.
Поздравляю, ваше приложение развернуто!
Комментариев нет:
Отправить комментарий