Пример настройки Web приложения .NET Core в Ubuntu под Apache

Ubuntu

Сейчас компания Microsoft всё больше сил уделяет .NET Core, который является по настоящему кроссплатформенным и универсальным. Поэтому не лишним будет зафиксировать процесс настройки доступа к сайту написанному на .NET Core в Ubuntu Linux с использованием Apache.

Итак приступим.

Если у вас не установлен dot-net на Ubuntu, то предварительно устанавливаем его:
Подключаем репозиторий (В нашем случае для версии Ubuntu 16.04, для разных версий можно посмотреть здесь)

wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

Устанавливаем компоненты
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.2


Теперь берем свой готовый сайт на .NET Core (или делаем простенький пример как здесь), и размещаем его в папке например:
var/net/sample


Теперь мы можем запустить этот сайт на Ubuntu при помощи команды:
dotnet MyFirstCore.dll

Но при этом сайт запустится на 5000 порту, и не будет работать как сервис, т.е. не будет самостоятельно восстанавливаться и перезапускаться при перезагрузке сервера.

Устраним этот недостаток, запустим наш сайт как сервис, для этого:

Проверяем, установлен ли у нас в системе пакет systemd, и если не установлен то устанавливаем:
sudo apt-get install -y systemd 


В папке /etc/systemd/system создаем файл myfirstcore.system следующего содержания:
[Unit]
Description=MyFirstCore

[Service]
WorkingDirectory=/var/net/sample
ExecStart=/usr/share/dotnet/dotnet /var/net/sample/MyFirstCore.dll
Restart=always
RestartSec=10
SyslogIdentifier=myfirstcore
#Здесь лучше использовать специально созданного пользователя а не root, но для эксперимента сойдет
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target


Перезагружаем конфигурацию, и включаем наш сервис:
systemctl daemon-reload  
systemctl enable myfirstcore.service 


Теперь мы можем загружать сервис и смотреть его статус:
systemctl start myfirstcore.service  
systemctl status myfirstcore.service


Но всё вышесказанное нам дает лишь запущеный сервис на указанном в приложении порту, в нашем случае это 5000 порт.
Сам Microsoft не рекомендует выпускать его наружу, а использовать в качестве прокси Apache или Nginx.

Итак, настроим Apache, для работы с нашим сайтом, это очень просто:

Для этого добавляем в sites-enabled новый хост с редиректом на наш сервис:
<VirtualHost *:80>
    ServerAdmin mail@mailserver.ru
    ServerName yourdomain.ru
    ServerAlias www.yourdomain.ru

    ProxyPreserveHost On

    ProxyPass / http://127.0.0.1:5000/

    ProxyPassReverse / http://127.0.0.1:5000/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


После этого перезапускаем Apache
service apache2 restart


Вот и всё. :)

Ubuntu NET Core Apache dotnet

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