Публикация приложения ASP.Net Core на VPS с CentOS 7 + Nginx

В данной статье рассмотрим способ развертывания ASP.NET Core приложения под Linux на примере CentOS 7. Подразумевается наличие bash оболочки на системе разработчика (Linux\MacOS). В последних версиях Windows 10 можно воспользоваться встроенной bash оболочкой, для этого из магазина приложений Windows можно установить дистрибутив Debian или любой другой. После этого вы сможете открыть bash shell под windows и устанавливать любые необходимые пакеты через apt-get или другой менеджер пакетов в зависимости от дистрибутива. Также подразумевается наличие доступа по ssh до vps и сгенерированный публичный ключ ssh, для этого можно запустить в bash команду ssh-keygen. 

После входа на сервер по ssh под root создадим пользователя для выполнения административных задач и пользователя для запуска приложений, для этого выполняем


adduser www
passwd www
adduser admin
passwd admin
gpasswd -a admin wheel

добавляем пользователя admin в группу www

usermod -a -G www admin

даем полные права группе www на каталог /home/www
chmod g+rwx -R /home/www

на рабочей системе копируем публичный ключ на сервер для авторизации без пароля под пользователем admin
ssh-copy-id admin@yourvps.host
затем выполняем вход через ssh admin@yourvps.host без пароля по ключу
создаем на сервере каталог /home/www/yourapp для вашего приложения

на рабочей системе выполняем dotnet publish --configuration Release в каталоге проекта
копируем развертывание на сервер (выполняем команду на рабочей системе):
rsync -r --delete -z -v bin/Release/netcoreapp2.2/publish/ admin@yourvps.com:/home/www/yourapp

устанавливливаем на сервере dotnet core
sudo yum install epel-release
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-3.0
также можно установить другую версию dotnet sdk, например
sudo yum install dotnet-sdk-2.2
переходим в каталог приложения и проверяем работоспособность
cd /home/www/yourapp
dotnet yourappname.dll
если в консоли появилось сообщение, что приложение запущено на localhost:5000 значит все получилось, и можно проверить его из браузера, предварительно прокинув порт с сервера на свою машину
откроем еще одно окно терминала и выполним еще одно подключение по ssh с перенаправление портов
ssh -L:5000:localhost:5000 admin@yourvps.host
после этого можно открыть браузер и перейти по адресу http://localhost:5000 чтобы увидеть результат работы приложения на сервере

теперь настроим автозапуск, создадим файл с описание сервиса
sudo nano /etc/systemd/system/kestrel-yourapp.service
и вставим туда содержимое:

[Unit]
Description=Your App Name .NET Web Service

[Service]
WorkingDirectory=/home/www/yourapp
ExecStart=/usr/bin/dotnet /home/www/yourapp/yourappname.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-yourapp
User=www
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=DOTNET_CLI_TELEMETRY_OPTOUT=1

[Install]
WantedBy=multi-user.target

включаем сервис и запускаем
systemctl enable kestrel-yourapp.service
systemctl start kestrel-yourapp.service
systemctl status kestrel-yourapp.service

теперь настроим nginx, создаем описание репозитория
sudo nano /etc/yum.repos.d/nginx.repo
с содержимым
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
установим nginx
sudo yum install nginx
запустим
sudo systemctl enable nginx
sudo systemctl start nginx
разрешим доступ к портам 80 и 443
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

создадим конфиг для перенаправление входящих http запросов с nginx вашему приложению
sudo nano /etc/nginx/conf.d/yourvps.host.conf
содержимое:
server {
    listen        80;
    server_name   yourvps.host www.yourvps.host;
    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;
    }
}
и применим изменения конфигов nginx
sudo systemctl reload nginx

после этого ваш сервис должен быть доступен по адресу http://yourvps.host

теперь настроим развертывание с перезапуском сервиса, чтобы обновлять приложение на сервере одной командой
для начала разрешим на сервере перезапуск сервиса приложения без запроса пароля
sudo echo admin ALL = NOPASSWD: /bin/systemctl restart kestrel-yourapp.service | sudo tee /etc/sudoers.d/kestrel-yourapp > /dev/null

создадим в каталоге проекта на рабочей системе скрипт publish.sh
touch publish.sh
chmod +x publish.sh
nano publish.sh
со следующим содержимым
#!/bin/sh
dotnet publish --configuration Release
rsync -r --delete -z -v bin/Release/netcoreapp2.2/publish/ admin@yourvps.host:/home/www/yourapp
ssh admin@yourvps.host "sudo systemctl restart kestrel-yourapp.service

теперь для установки новой версии приложения достаточно выполнить ./publish.sh из терминала
если у вас используется другая версия dotnet core, замените путь источника команды rsync в соответствии с версией, замените netcoreapp2.2 на netcoreapp3.0, например.


Далее осталось настроить SSL, это можно сделать в конфиге nginx, но я пока решил использовать SSL от сервиса Cloudflare, который предоставляет бесплатную защиту от DDoS и работает как прокси между посетителем и вашим сервисом.

Комментарии

  1. New Online Baccarat Rules - The Best Online Casinos
    The best online casinos クイーンカジノ give you the ラッキーニッキー best online games to play. Get the best real money online casino 바카라사이트 games like roulette, blackjack,

    ОтветитьУдалить
  2. Las Vegas Sands to purchase the proposed Las Vegas Sands
    The sale of the proposed Las Vegas 울산광역 출장샵 Sands 나주 출장안마 casino-hotel-hotel-hotel 안성 출장안마 is expected to cost $28 million, 통영 출장안마 but officials 군산 출장마사지 are still unsure

    ОтветитьУдалить
  3. Welcome to the Star Casino & Resort - Biloxi, MS
    Welcome to the Star Casino & 오산 출장마사지 Resort. Enjoy 24/7 Vegas-style gaming 광양 출장샵 with 경주 출장안마 table games, live entertainment, and a relaxing spa. 김제 출장안마 Book now 삼척 출장샵 for great

    ОтветитьУдалить
  4. Sega Genesis Classics - Airjordan's 14Retro
    Sega Genesis Classics is a compilation of over 50 넷마블 토토 큐어 벳 classic titles from air jordan 18 retro yellow sale the golden air jordan 18 stockx sale era of Sega. It includes over 룰렛 배당 50 website to buy air jordan 18 retro yellow titles, including Sonic the Hedgehog,

    ОтветитьУдалить
  5. NoVCasino Casino - NOVCASINO.COM
    NoVCasino.com novcasino offers a no deposit bonus of 100% up to €150. poormansguidetocasinogambling.com No Deposit Bonus is given ventureberg.com/ to new players only. gri-go.com No 출장안마 deposit bonuses expire

    ОтветитьУдалить
  6. The national government, which licenses Internet gambling entities, made a criticism to the World Trade Organization about the us government's actions to impede on-line gaming. The Caribbean nation received the preliminary ruling however WTO's appeals body considerably narrowed that favorable ruling in April 2005. Yes, all the on-line casinos on our listing are strictly regulated by gambling authorities in nations such as Curacao. This ensures that on-line casinos uphold a normal of honest gaming 1xbet and are topic to audits regarding their gaming practices. That stated, each casino on our listing is licensed and geared up to take actual cash wagers from gamers. There is an efficient customer help setting with telephone and e mail options available.

    ОтветитьУдалить

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