# Пошаговое руководство по установке на Ubuntu сервер
# Устанавливаем Asp.Net Core Runtime
Ссылка на инструкцию.
# Добавляем репозиторий
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
# Устанавливаем
sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install aspnetcore-runtime-3.1
# Устанавливаем PostgreSql
Ссылка на инструкцию.
# Устанавливаем
sudo apt-get install postgresql-11
# Устанавливаем пароль для пользователя postgres
# Открывается консоль postgres
sudo -u postgres psql
# Задаём пароль пользовател
ALTER USER postgres PASSWORD 'postgres_user_password';
Вместо postgres_user_password
необходимо задать пароль
# Cоздаём базу данных
CREATE DATABASE my_site.com;
my_site.com
- имя базы
# Собираем проект локально и записываем на сервер
Скачиваем с репозитория код SunEngine
на локальный компьютер.
Все скрипты сборки и публикации находятся в директории Scripts/
В директории Scripts/
копируем файл PUBLISH.template
в PUBLISH
и редактируем его, настраивая все параметры
Собираем проект выполнив скрипт - build.sh
(появится папка build
в корневом каталоге проекта)
Создаём на сервере папку /site/my_site.com
. Путь может быть любым.
Выкладываем build
на сервер, запуская скрипт publi.sh
На сервере редактируем файлы настроек в директории /site/my_site.com/Config
# Настройки подключения
В файле /Config/DataBaseConnection.json
необходимо указать имя базы данных, пользователя postgres и пароль.
{
"DataBaseConnection": {
"Linq2dbProvider": "PostgreSQL.9.5",
"FluentMigratorProvider": "Postgres",
"ConnectionString": "Host=localhost;Database=my_site.com;Username=postgres;Password=postgres_user_password"
}
}
# Заполняем базу данных начальными данными
В папке /site/my_site.com/Server
запускаем
dotnet SunEngine.dll init migrate
Эта команда создаёт таблицы и другие структуры в базе данных и заполняет начальными данными.
Подробнее о командах dotnet SunEngine.dll
в статье.
# Создаём kestrel сервис на systemd
Ссылка на инструкцию.
systemd
позволяет после старта сервера постоянно держать необходимые процессы запущенными, и перезапускать, если они вынужденно выключаются.
Создаём файл my_site.com.service
в папке /etc/systemd/system
[Unit]
Description=SunEngine my_site.com
[Service]
WorkingDirectory=/site/my_site.com
ExecStart=/usr/bin/dotnet /site/my_site.com/Server/SunEngine.dll server
SyslogIdentifier=my_site.com
User=www-data
Restart=always
RestartSec=10
KillSignal=SIGINT
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
# Включаем systemd сервис
systemctl enable my_site.com
# Команды которые могут пригодиться
# Посмотреть логи systemd процессв
journalctl -fxeu my_site.com
# Перезапуск процесса systemd
systemctl restart my_site.com
# Конфигурация Nginx веб сервера
Ссылка на инструкцию.
# Устанавливаем Nginx
sudo apt-get update
sudo apt-get install nginx
# Создание Nginx
конфигурации
Создаём файл /etc/nginx/sites-available/my_site.com
server {
listen 443 http2; # https port
listen [::]:443 http2; # IP v6
server_name my_site.site; # домен
charset utf-8;
ssl on; # включаем ssl
ssl_certificate /etc/ssl/mysite.site/my_site.com.crt; # Путь к ssl сертификату
ssl_certificate_key /etc/ssl/mysite.site/my_site.com.key; # Путь к ключу сертификата
gzip on; # включаем gzip архивацию потока данных
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types text/xml application/atom+xml application/rss+xml application/xhtml+xml text/javascript application/javascript
application/x-javascript text/x-json application/json application/x-web-app-manifest+json text/css text/plain
text/html font/opentype application/x-font-ttf image/x-icon image/svg+xml;
gzip_disable "msie6";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
location / { # Endpoint для клиентской части
root /site/my_site.com/wwwroot;
try_files $uri $uri/ /index.html; # если файл не найден - возвращаем index.html
open_file_cache max=1000 inactive=20s; # кеширование файлов клиента на сервере
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
}
location ~ \.(js|json|css|svg|svgz|eot|otf|woff|woff2|ttf|rss|atom|ico|jpg|jpeg|gif|png)$ { # кеширование в браузере
expires 14d; # хранить кеш 14 дней
}
location /api/ { # Endpoint для серверной части. Работает как reverse proxy отправляя запросы в Kestrel работающим отдельным процессом.
proxy_pass http://localhost:5000/; # Порт должен соответствовать настройкам kestrel в "Config/SunEngine.json"
client_max_body_size 11M; # максимальный размер тела запроса, который допускает Nginx ~= максимальный размер для upload файла
}
}
server { # редирект в случае входа через http
listen 80;
listen [::]:80;
server_name mysite.site;
return 301 https://$host$request_uri;
}
# Активизируем настройки my_site.com
sudo ln -s /etc/nginx/sites-available/my_site.com /etc/nginx/sites-enabled/my_site.com
# Перезагружаем настройки Nginx
sudo systemctl reload nginx