sudo apt update
sudo apt-get install nginx
Проверям статус
sudo systemctl status nginx
теперь если зайти по Ip на сервер мы увидим заставку nginx
sudo ufw allow 22/tcp && sudo ufw allow 80/tcp && sudo ufw allow 443/tcp
первый это ssh, второй http, третий https
sudo unlink /etc/nginx/sites-enabled/default
cd /var/www && sudo mkdir myapp && cd myapp
где myapp
- ваше название
копируем в директорию файлы сервера разрешаем выполнение файла
chmod +x AppFileName
где AppFileName
имя вашего запускаемого файла (dll)
запускаем апи командой
./AppFileName
Видим что приложение поднялось
Не забываем в program.cs пробрасывать заголовки
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
sudo nano /etc/nginx/sites-available/default
server {
listen 80;
root /var/www/testapp; # убеждаемся что наш сайт лежит тут
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;
}
}
Включаем сайт
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
проверяем статус nginx
sudo nginx -t
если ошибок нет то все ок, перезагружаем его
sudo nginx -s reload
sudo systemctl restart nginx
тестируем что работает
curl -v http://ipaddress/weatherforecast
Ставим бота
sudo snap install --classic certbot
проверяем что все ок
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Готовимся к выпуску сертификатов Создаем директорию
mkdir /var/www/letsencrypt
Настраиваем разрешения
chown www-data:www-data /var/www/letsencrypt
Настраиваем nginx добавив секцию
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
location = /.well-known/acme-challenge/ {
return 404;
}
и добавив ссылку на домен
server_name your.domain.ru ;
sudo nano /etc/nginx/sites-available/default
В итоге файл будет выглядеть так:
server {
listen 80;
root /var/www/testapp; # make sure to match this with your folder name
server_name your.domain.ru ;
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
location = /.well-known/acme-challenge/ {
return 404;
}
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;
}
}
перезагружаем nginx
sudo nginx -s reload
sudo systemctl restart nginx
Регистрируемся
certbot register -m admin@example.com
Получаем сертификат
Сначала тестируем что все ок и дсн видит адрес и сертификат может быть выпущен:
certbot certonly --dry-run --webroot -w /var/www/letsencrypt -d example.com -d www.example.com
если с адресами все ок – выполняем без –dry-run
certbot certonly --webroot -w /var/www/letsencrypt -d example.com -d www.example.com
Перейдем в /etc/letsencrypt/live
где для каждого полученного сертификата будет создана папка с именем первого указанного в запросе домена, т.е. для нашего примера - example.com. Внутри будут находиться четыре файла:
- cert.pem - собственно сертификат
- chain.pem - цепочка доверия, включает корневой и промежуточный сертификаты Let's Encrypt
- fullchain.pem - полная цепочка, включающая кроме содержимого chain.pem сам сертификат
- privkey.pem - закрытый ключ сертификата, данный файл является секретным.
Именно эти файлы следует использовать в конфигурационных файлах служб при настройке SSL
Добавляем ссылки на сертификаты в nginx а так же сам домен сервера
server {
listen 80;
server_name new.xrpldaddy.ru ;
root /var/www/testapp; # make sure to match this with your folder name
# SSL certificate paths
ssl_certificate /etc/letsencrypt/live/new.xrpldaddy.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/new.xrpldaddy.ru/privkey.pem;
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
location = /.well-known/acme-challenge/ {
return 404;
}
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 certbot renew --dry-run
Перезапускаем nginx
sudo systemctl restart nginx
создаем сервис для автозапуска приложения при сбоях и перезагрузках
sudo nano /etc/systemd/system/myapp.service
вставляем содержимое
[Unit]
Description=My Example API
After=network.target
[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/var/www/myapp/AppFileName
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=myapp
User=www-data
[Install]
WantedBy=multi-user.target
Если нужны настройки переменных – задайте их под параметром User
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://localhost:5000
Включаем сервис
sudo systemctl enable myapp
Запускаем сервис
sudo systemctl start myapp.service
Проверяем статус
sudo systemctl status myapp.service
если что пошло не так – читаем логи с ошибками сервиса (проверяем параметры и пути, перезагружаем сервис)
sudo systemctl daemon-reload
читаем логи командой
journalctl -u myapp.service