Публикация net core 3 приложения в Unix

Как запустить Net Core приложение в Ubuntu

Net core - это прекрасная технология вызывающая общий интерес во всем мире, да и сам Microsoft делает много для продвижения. Наверное каждый, кто пробовал зайти немного дальше, чем отладка в любимом дебагере, сталкивается с одной очень интересной проблемой. Как запустить веб приложение, чтобы оно работало как сервис и еще желательно стартовало вместе с системой. Всё это естественно сделать не на IIS (можно с ним, но это, если у вас безлимитное железо).

В net core по умолчанию есть свой, родненький web сервер, назвали его - kestrel(зачем?). Тоесть, это означает, если вы стартуете приложение, оно уже готово обрабатывать HTTP(S) запросы. И может показаться, что этого вполне достаточно, однако, это не так. Встроенный kestrel разработан не для того чтобы сражаться с интернет запросами в одиночку. Kestrel очень хорошо подходит для создания микросервиса, но если обрабатывать статические файлы или управлять server lifetime вы очень расстроитесь(и сервер тоже).

  • Отсутствует возможность запустить несколько веб приложений на одном порту (когда у вас много сайтов работает на 80 или 443 порту).
  • Lifetime Management - отсутствует. Отсутствует возможность контроля приложения (это вам не php, там всё компилируется), в случае, совершенно врядле, если так случится, что ваше приложение упадёт с ошибкой. Ему никто не поможет. Оно упадёт и не сможет подняться.
  • Статические файлы - нет кэширования, нет сжатия данных.
  • И еще немного - безопасность, возможности администрирования, управление SSL сертификатами, логирование запросов и другое(возможно...)

Вот собственно, так его запустить нельзя, не рабочий это вариант. Значит надо что-то поставить как прокси, а точнее, reverse-proxy и не что-то, а nginx. Про nginx говорить нечего, лучший web server. Установка nginx не входит в данный гайд, подразумеваем, что nginx уже установлен и запущен. Трудится и обслуживает http(s) запросики.

Конфиг, надо разместить его директории /etc/nginx/sites-available/ (может меняться в зависимости от дистрибутива). Позволит принимать запросы из интернета, и перенаправлять их в сторону малышки kestrel на 5000 порт используется по умолчанию для релизной версии приложения.

    server {
        listen        80;
        server_name   example.com *.example.com;
        location / {
            proxy_pass         http://localhost:5000;
            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_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }
    }

Настройка запуска приложения

    sudo nano /etc/systemd/system/kestrel-helloapp.service

Скопируйте содержимое в файл.

    
    [Unit]
    Description=Example .NET Web API App running on Ubuntu

    [Service]
    WorkingDirectory=/var/www/helloapp
    ExecStart=/usr/bin/dotnet /var/www/helloapp/helloapp.dll
    Restart=always
    # Restart service after 10 seconds if the dotnet service crashes:
    RestartSec=10
    KillSignal=SIGINT
    SyslogIdentifier=dotnet-example
    User=www-data
    Environment=ASPNETCORE_ENVIRONMENT=Production
    Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

    [Install]
    WantedBy=multi-user.target

Сохраните файл и включите службу.

    sudo systemctl enable kestrel-helloapp.service

Запустите службу и убедитесь, что она работает.

    
    sudo systemctl start kestrel-helloapp.service
    sudo systemctl status kestrel-helloapp.service

    ● kestrel-helloapp.service - Example .NET Web API App running on Ubuntu
        Loaded: loaded (/etc/systemd/system/kestrel-helloapp.service; enabled)
        Active: active (running) since Thu 2016-10-18 04:09:35 NZDT; 35s ago
    Main PID: 9021 (dotnet)
        CGroup: /system.slice/kestrel-helloapp.service
                └─9021 /usr/local/bin/dotnet /var/www/helloapp/helloapp.dll

Просмотр журналов

    
    sudo journalctl -fu kestrel-helloapp.service

или

    
    sudo journalctl -fu kestrel-helloapp.service --since "2016-10-18" --until "2016-10-18 04:00"

Если вы решили создать интернет-магазин и хотите наполнить его страницы качественным контентом, но у вас нет способностей или времени писать интересные тексты, можете обратиться за помощью к профессионалам. Компания GoodwillGroup занимается разработкой и продвижением сайтов на платформе 1С:Битрикс, а также написанием красивых и уникальных статей. Опытные копирайтеры знают всё о создании интернет-магазинов, благодаря чему помогут вам заинтересовать посетителей интересными описаниями товаров и повысить посещаемость сайта.

+1
Share
Pin
Like
Send
Share
Send

Прочитайте другие наши записи в блоге