Введение
Разработка 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