Деплой C# приложения на VPS: пошаговое руководство

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение

Разработка C# приложения — это только половина дела. Чтобы ваш проект стал доступен пользователям в интернете, его необходимо развернуть на сервере. Виртуальный частный сервер (VPS) — это идеальное решение для размещения .NET приложений, так как он даёт полный контроль над окружением и позволяет настроить всё под конкретные нужды.

В этой статье мы разберём полный процесс деплоя C# приложения (ASP.NET Core) на VPS под управлением Linux (Ubuntu 22.04). Вы узнаете, как подготовить сервер, установить необходимое ПО, опубликовать приложение и настроить веб-сервер для работы с ним. Все шаги сопровождаются примерами кода и команд.

1. Подготовка VPS и установка .NET SDK

Первый шаг — это подготовка сервера. Мы будем использовать Ubuntu 22.04 LTS, так как это одна из самых популярных и стабильных ОС для серверов. Подключаемся к VPS по SSH:

ssh user@your-server-ip

После входа обновляем список пакетов и устанавливаем необходимые зависимости:

sudo apt update
sudo apt upgrade -y
sudo apt install wget apt-transport-https software-properties-common -y

Теперь добавляем репозиторий Microsoft и устанавливаем .NET SDK. Для .NET 8 выполняем:

wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install dotnet-sdk-8.0 -y

Проверяем установку:

dotnet --version

Если вы видите номер версии (например, 8.0.100), всё установлено корректно.

Важно: Если ваше приложение использует базу данных (например, PostgreSQL или SQLite), установите соответствующий пакет. Для PostgreSQL:

sudo apt install postgresql postgresql-contrib -y

2. Публикация и загрузка приложения на сервер

Теперь подготовим само приложение к деплою. На вашем локальном компьютере (где ведётся разработка) откройте терминал в корне проекта и выполните публикацию в режиме Release:

dotnet publish -c Release -o ./publish

Эта команда создаст папку publish со всеми необходимыми файлами для запуска приложения на сервере. Теперь нужно загрузить эту папку на VPS. Используем SCP или SFTP. Пример с SCP:

scp -r ./publish user@your-server-ip:/home/user/myapp

Где myapp — имя папки, в которой будет храниться ваше приложение на сервере.

После загрузки подключаемся к серверу и перемещаем файлы в более подходящее место, например, в /var/www/myapp:

sudo mkdir -p /var/www/myapp
sudo cp -r /home/user/myapp/* /var/www/myapp/

Не забудьте дать правильные права на папку:

sudo chown -R www-data:www-data /var/www/myapp
sudo chmod -R 755 /var/www/myapp

3. Настройка systemd для автоматического запуска

Чтобы ваше приложение автоматически запускалось при старте системы и перезапускалось в случае сбоя, создадим systemd-сервис. Создайте файл конфигурации:

sudo nano /etc/systemd/system/myapp.service

Вставьте следующее содержимое (замените пути и имя пользователя на свои):

[Unit]
Description=My ASP.NET Core Application
After=network.target

[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/YourApp.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=myapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Сохраните файл (Ctrl+O, затем Enter) и выйдите (Ctrl+X). Теперь перезагрузите systemd и запустите сервис:

sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp

Проверьте статус:

sudo systemctl status myapp

Если вы видите active (running), приложение работает. По умолчанию ASP.NET Core запускается на порту 5000 (http) и 5001 (https).

4. Настройка Nginx как reverse proxy

Для продакшн-среды рекомендуется использовать Nginx в качестве обратного прокси-сервера. Он будет принимать запросы от пользователей и перенаправлять их на ваше .NET приложение. Установите Nginx:

sudo apt install nginx -y

Создайте конфигурационный файл для вашего сайта:

sudo nano /etc/nginx/sites-available/myapp

Вставьте следующий код:

server {
    listen 80;
    server_name your-domain.com www.your-domain.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;
    }
}

Замените your-domain.com на ваш реальный домен или IP-адрес сервера. Если у вас нет домена, можно использовать server_name _;.

Активируйте конфигурацию:

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t  # Проверка конфигурации
sudo systemctl reload nginx

Теперь ваше приложение должно быть доступно по HTTP (порт 80). Для HTTPS (SSL) рекомендуется использовать Certbot от Let's Encrypt:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com

Следуйте инструкциям на экране. После этого Nginx будет автоматически перенаправлять трафик на HTTPS.

Заключение

Мы прошли полный цикл деплоя C# приложения на VPS: от установки .NET SDK до настройки production

Блоги

Рекомендаций по книгам