Пример настройки Web приложения .NET Core в Ubuntu под Apache C#
Сейчас компания 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
Вот и всё. :)