Введение
Разработка C#-приложения на платформе .NET — это только половина дела. Чтобы ваш проект стал доступен пользователям в интернете, его необходимо правильно развернуть на сервере. VPS (Virtual Private Server) — идеальное решение для中小 бизнеса и инди-разработчиков: он даёт полный контроль над окружением по доступной цене. В этой статье мы разберём полный процесс деплоя C#-приложения на VPS под управлением Linux (Ubuntu 22.04). Вы узнаете, как подготовить сервер, опубликовать приложение, настроить reverse proxy с Nginx и обеспечить автозапуск через systemd.
1. Подготовка VPS и установка .NET Runtime
1.1. Подключение к серверу
После покупки VPS вы получите IP-адрес и root-пароль. Подключитесь по SSH:
ssh root@ваш-ip-сервера
Рекомендуется сразу создать отдельного пользователя для безопасности:
adduser appuser
usermod -aG sudo appuser
su - appuser
1.2. Установка .NET Runtime
Для работы C#-приложения на сервере нужен ASP.NET Core Runtime. Добавьте репозиторий Microsoft и установите пакет:
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-get update
sudo apt-get install -y aspnetcore-runtime-8.0
Проверьте установку:
dotnet --list-runtimes
Вы должны увидеть строку с версией ASP.NET Core 8.0.0.
2. Публикация приложения и загрузка на сервер
2.1. Публикация (publish) на локальной машине
На вашем компьютере с Visual Studio или .NET CLI откройте проект и выполните команду публикации:
dotnet publish -c Release -o ./publish
Эта команда создаст папку publish, содержащую все файлы, необходимые для запуска приложения (в том числе runtime-зависимости, если вы используете FDD — Framework-Dependent Deployment).
2.2. Загрузка на VPS
Скопируйте папку publish на сервер с помощью scp или sftp. На локальной машине выполните:
scp -r ./publish appuser@ваш-ip-сервера:/home/appuser/myapp
Теперь на сервере проверьте, что файлы на месте:
ls -la /home/appuser/myapp
3. Настройка systemd для автозапуска
Чтобы приложение запускалось при старте системы и автоматически перезапускалось после сбоев, создайте systemd-юнит.
3.1. Создание файла службы
Создайте файл /etc/systemd/system/myapp.service с правами root:
sudo nano /etc/systemd/system/myapp.service
Вставьте следующее содержимое:
[Unit]
Description=My ASP.NET Core Application
After=network.target
[Service]
WorkingDirectory=/home/appuser/myapp
ExecStart=/usr/bin/dotnet /home/appuser/myapp/YourAppName.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=myapp
User=appuser
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://localhost:5000
[Install]
WantedBy=multi-user.target
Замените YourAppName.dll на фактическое имя вашего файла .dll (обычно совпадает с именем проекта).
3.2. Запуск и включение службы
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
Проверьте статус:
sudo systemctl status myapp
Если всё настроено верно, вы увидите статус active (running). Теперь приложение слушает порт 5000 на локальном интерфейсе.
4. Настройка Nginx как reverse proxy
Для доступа к приложению извне по стандартным портам (80/443) и для добавления SSL-сертификата установите и настройте Nginx.
4.1. Установка Nginx
sudo apt update
sudo apt install nginx -y
4.2. Конфигурация сайта
Создайте файл конфигурации для вашего приложения:
sudo nano /etc/nginx/sites-available/myapp
Вставьте:
server {
listen 80;
server_name ваш-домен.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;
}
}
Активируйте конфигурацию и перезагрузите Nginx:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t # проверка синтаксиса
sudo systemctl restart nginx
4.3. Настройка брандмауэра (необязательно, но рекомендуется)
sudo ufw allow 'Nginx Full'
sudo ufw enable
Заключение
Вы успешно развернули C#-приложение на VPS. Теперь ваш проект доступен по доменному имени (или IP-адресу) через порт 80. Настроенный systemd гарантирует, что приложение будет автоматически запускаться при перезагрузке сервера и восстанавливаться после сбоев. Для production-среды обязательно добавьте SSL-сертификат (например, через Certbot) и настройте мониторинг. Помните: правильный деплой — залог стабильной работы вашего сервиса.
Если у вас возникли вопросы или сложности, оставляйте комментарии — мы поможем разобраться.