Skip to content

Как задеплоить проект C# ASP.NET

Подготовка

Подключение по ssh к удаленному серверу

Чтобы подключиться к удаленному серверу по ssh надо ввести следующую команду:

ssh root@192.192.192.192

root - пользователь, под который мы заходим
192.192.192.192 - адрес сервера, к которому подклюаемся
Если надо указать конкретно порт, то добавляем ключ -p 8000 с указанием нужного порта

Чтобы войти на сервер потребуется ввести пароль от пользователя, под которым осущетсвляется вход или использовать ключи доступа.

Обновление и установка пакетов

Обновление пакетов:

sudo apt update && apt upgrade

Установка нужных пакетов:

sudo apt install vim tmux tree nginx

vim - удобный текстовый редактор
tmux - терминальный мультиплексор (разбирает терминал на части)
tree - просмотр дерева файлов
nginx - наш web server

Установка .NET

Скачиваем и устанавливаем

Следуем инструкции на официальном сайте Microsoft:

  • Скачиваем скрипт автоматической установкой
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
  • Выдаем права на запуск
chmod +x ./dotnet-install.sh
  • Устанавливаем SDK
./dotnet-install.sh --version latest
  • Устанавливаем ASP.NET
./dotnet-install.sh --version latest --runtime aspnetcore
  • Устанавливаем нужную версию .NET (6.0 меняем на свою)
./dotnet-install.sh --channel 6.0

Переменные окружения для запуска

Чтобы воспользоваться командой dotnet необходимо установить переменные окружения:

export DOTNET_ROOT=$HOME/.dotnet
export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools

Проверяем, все ли корректно установилось

Проверяем установку следующей командой:

dotnet --version

Если появилось информация о версии .NET, то все установилось корректно, в противном случае может быть ошибка dotnet: command not found, это означает, что система не знает данную комманду.

Запуск проекта

Копирование проекта

Чтобы скопировать проект с github, надо воспользоваться коммандой (указываем ссылку на свой репозиторий):

git clone https://github.com/shlyapp/mkdocs-wiki.git

Запуск проекта

Переходим в директорию с проектом при помощи команды

cd app/

Запускаем проект при помощи команды:

dotnet run

Как проверить?

Чтобы проверить, все ли корректно запустилось и наш проект работает, воспользуемся утилитой curl для отправки запросов (где укажем локальный хост, порт, на котором работает приложение и нужный запрос):

curl http://localhost:5000/

Если нам выводится ответ от севера, который мы ожидаем, то все работает исправно и проект запустился локально.

Создаем публикацию проекта

Находясь в папке с проектом запускаем комманду для публикации проекта:

dotnet publish

Теперь в папке app/bin/Debug/net6.0/publish/ есть файл App.dll, который будем в дальнейшем запускать.

Создание службы

Созданим службу для автоматического запуска нашего проекта.

  • создаем файл и пишем конфиг:
vim /etc/systemd/system/kestrel-deploy-asp.service
[Unit]
Description=My .NET Web API App

[Service]
WorkingDirectory=/root/app/ 
ExecStart=/root/.dotnet/dotnet /root/app/bin/Debug/net6.0/ProductApi.dll
Restart=always

[Install]
WantedBy=multi-user.target
  • включаем сервис:
sudo systemctl enable kestrel-deploy-asp.service
  • запускаем:
sudo systemctl start kestrel-deploy-asp.service
  • проверяем статус:
sudo systemctl status kestrel-deploy-asp.service

Подключение к Nginx

Открытие портов

  • скачиваем ufw (если нет):
sudo apt install ufw
  • открываем порты:
sudo ufw allow 'Nginx Full'
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
  • запускаем:
sudo ufw enable
sudo ufw status

Настраиваем конфиг

  • создаем файл и пишем конфиг:
vim /etc/nginx/sitec-available/you-server-name.ru
server { 
    listen 80; 
    server_name you-server-name.ru; 
    location / 
    { 
        proxy_pass http://127.0.0.1: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 ln -s /etc/nginx/sites-available/you-server-name.ru /etc/nginx/sites-enabled/
  • редактируем конфиг:
sudo vim /etc/nginx/nginx.conf
  • расскомментируем строку server_names_hash_bucket_size 64 в блоке http

Запуск

  • запукаем!
sudo systemctl restart nginx
sudo systemctl restart kestrel-deploy-asp