Dmitriy Azarov

Установка и запуск .net core на ubuntu 16.04

Установка и запуск .net core на ubuntu 16.04

Для начала ставим все обновления

sudo apt-get update        # Fetches the list of available updates
sudo apt-get upgrade       # Strictly upgrades the current packages
sudo apt-get dist-upgrade  # Installs updates (new ones)
sudo reboot

Копируем локальный ssh ключ на сервере

ssh-copy-id -i ~/.ssh/id_rsa.pub {username}@{remotePublicIPAddress}

Проверяем, что он успешно добавился

cat .ssh/authorized_keys

Редактируем настройки ssh, запрещаем авторизацию по паролю

sudo nano /etc/ssh/sshd_config
  • Port XX — Порт, желательно сменить. По умолчанию 22.
  • PermitRootLogin — Разрешить авторизацию root, через ssh. (no)
  • PubkeyAuthentication — Разрешить авторизацию по публичному ключу (yes)
  • PasswordAuthentication — Разрешить авторизацию по паролю (no)

Проверяем конфигурацию

sshd -t

Добавляем раздел

Я хочу, чтобы директория с файлами сайта была /var/www/..., при этом это должен быть не системный диск (размер которого очень маленький). Поэтому подключаем еще один диск и маунтим его в эту директорию.

Смотрим, какие сейчас есть устройства

sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
NAME   FSTYPE  SIZE MOUNTPOINT LABEL
sdb              8G
L-sdb1 ext4      8G /mnt
sdc            200G
sda             30G
L-sda1 ext4     30G /          cloudimg-rootfs

После добавления диска его нужно отформатировать

sudo mkfs -t ext4 /dev/sdc
NAME   FSTYPE  SIZE MOUNTPOINT LABEL
sdb              8G
L-sdb1 ext4      8G /mnt
sdc    ext4    200G
sda             30G
L-sda1 ext4     30G /          cloudimg-rootfs

Смотрим идентификатор диска

sudo blkid
/dev/sdb1: UUID="a250df59-2e01-4490-9eba-21e7e0580062" TYPE="ext4" PARTUUID="b2afa407-01"
/dev/sda1: LABEL="cloudimg-rootfs" UUID="a3f91fc3-3067-43d1-b704-7b1ab3a66579" TYPE="ext4" PARTUUID="31520363-01"
/dev/sdc: UUID="0618176d-74ba-46ef-ad52-1e78865195e8" TYPE="ext4"

Добавляем связку при запуске системы

sudo nano /etc/fstab

Добавляем туда строку

UUID=d272a5cf-33f0-4fb6-a249-a3f5e85c4b14       /var/www ext4   defaults,discard        0 0

Чтобы не перегружать систему - выполняем ручной mount

mount /var/www

Подготовка сервера

Добавляем своего пользователя в группу www-data. Изменяем права /var/www

sudo adduser USERNAME www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www

Настраиваем firewall

sudo ufw default deny           # Запрещаем все
sudo ufw default allow outgoing # Разрешаем исходящие
sudo ufw allow ssh              # Разрешаем ssh
sudo ufw allow 80/tcp           # Разрешаем 80 порт
sudo ufw allow 443/tcp          # Разрешаем 8443 порт

sudo ufw enable                # Включаем
sudo ufw status verbose        # Проверяем статус

nginx

Устанавливаем и настраиваем nginx

sudo apt-get install nginx
sudo service nginx start

Редактируем /etc/nginx/nginx.conf после подключения виртуальных хостов добавляем конфиг сервера по умолчанию, который на все остальные хосты будет возвращать 404.

server {  
    listen      80;
    listen      443; # add this to block HTTPS access
    server_name <server_ip>;
    return      404;
}

Устанавливаем .net core. Полная инструкция, ниже вариант для меня (Ubuntu 16.04).

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg

sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-get update

sudo apt-get install dotnet-sdk-2.1.3

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

dotnet --version

Запускаем .net core

Создаем файл, для демона sudo nano /etc/systemd/system/kestrel-hellomvc.service

[Unit]
Description=Example .NET Web API App running on Ubuntu

[Service]
WorkingDirectory=/var/www/oxozle.com/publish
ExecStart=/usr/bin/dotnet /var/www/oxozle.com/publish/blog.dll
Restart=always
RestartSec=10  # Restart service after 10 seconds if dotnet service crashes
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Включаем, проверяем, стартуем

systemctl enable kestrel-hellomvc.service
systemctl start kestrel-hellomvc.service
systemctl status kestrel-hellomvc.service

Так как .net core находится за прокси, добавим защиты для проксирования. Создаем файл /etc/nginx/proxy.conf

proxy_redirect 			off;
proxy_set_header 		Host 			$host;
proxy_set_header		X-Real-IP 		$remote_addr;
proxy_set_header		X-Forwarded-For	$proxy_add_x_forwarded_for;
proxy_set_header    X-Forwarded-Proto $scheme;
client_max_body_size 	10m;
client_body_buffer_size 128k;
proxy_connect_timeout 	90;
proxy_send_timeout 		90;
proxy_read_timeout 		90;
proxy_buffers			32 4k;

Редактируем /etc/nginx/nginx.conf и после начала секции http добавляем

http {
    include    /etc/nginx/proxy.conf;
    add_header X-Frame-Options "SAMEORIGIN";
    ...
}

Полезные ссылки и команды

Залить файл на сервер

rsync -avz /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/

Разархивировать zip

sudo apt-get install unzip
unzip file.zip -d destination_folder
  • 21 янв. 2018
  • nginx, .net core, ubuntu
1 комментарий
Артур, Пятница, 7 сентября 2018 г.

Большое спасибо за помощь!

ответить
Ваш комментарий
адрес не будет опубликован
Текст