3. Устанавливаем SQL Server 2022
3.1. Добавляем ключ GPG для MS SQL Server
wget -q -O- https://packages.microsoft.com/keys/microsoft.asc | \
gpg --dearmor | sudo tee /usr/share/keyrings/microsoft.gpg > /dev/null 2>&1
3.2. Добавляем репозиторий MS SQL Server
echo "deb [signed-by=/usr/share/keyrings/microsoft.gpg arch=amd64,armhf,arm64] https://packages.microsoft.com/ubuntu/22.04/mssql-server-2022 jammy main" | \
sudo tee /etc/apt/sources.list.d/mssql-server-2022.list
3.3. Обновляем репозиторий
sudo apt update
3.4. Устанавливаем SQL Server
sudo apt install mssql-server
3.5. Для завершения установки выполняем команду
sudo /opt/mssql/bin/mssql-conf setup
3.6. Настраиваем SQL Server
-
Выбираем 3 (Express) -
Принимаем условия лицензии (Yes) -
Выбираем цифру 9 (русский язык) -
Вводим дважды пароль системного администратора
3.7. Включаем службу и проверяем её статус
sudo systemctl is-enabled mssql-server
sudo systemctl status mssql-server
3.8. Устанавливаем MS SQL Tools для терминала
echo "deb [signed-by=/usr/share/keyrings/microsoft.gpg arch=amd64,armhf,arm64] https://packages.microsoft.com/ubuntu/22.04/prod jammy main" | \
sudo tee /etc/apt/sources.list.d/prod.list
sudo apt update
sudo apt install mssql-tools unixodbc-dev
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> /etc/environment
source /etc/environment
echo $PATH
3.9. Проверяем вход в SQL Server
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -p
Попросит ввести пароль и впустит в командную строку SQL
Вводим exit для выхода из интерпретатора.
4. Устанавливаем Dotnet 8.0
sudo apt-get update
sudo apt-get install -y dotnet-sdk-8.0
wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y aspnetcore-runtime-8.0
5. Скачивание и распаковка сайта и базы данных
5.1. Создаём каталог для скачиваемых ресурсов
sudo mkdir -p /home/nbics_archive
5.2. Скачиваем по очереди туда сайт и базу данных
sudo wget -O /home/nbics_archive/school-sample.nbics.net_2025_02_04.zip "https://>nextcloud.nbics.net/index.php/s/zJzBRENozBycTde/download"
sudo wget -O /home/nbics_archive/VSM_School-sample_Web_2025_02_04.bak "https://>nextcloud.nbics.net/index.php/s/8nSLXAcyrGjrook/download"
Внимание! Проверяйте работоспособность ссылок.
5.3. Создаём каталог для сайта (если уже существует, ничего страшного)
sudo mkdir -p /var/www
5.4. Распаковываем архив с сайтом в созданный каталог
sudo unzip /home/nbics_archive/school-sample.nbics.net_2025_02_04.zip -d /var/www
5.5. Создаём каталог для бэкапа базы данных
sudo mkdir -p /var/opt/mssql/backup/
5.6. Копируем туда бэкап (если он там есть, то перезаписи не будет)
sudo cp -n /home/nbics_archive/VSM_School-sample_Web_2025_02_04.bak /var/opt/mssql/backup/
5.7. Дать права на новый каталог (!! проверить, возможно команда не нужна !!)
sudo chown -R mssql:mssql /var/opt/mssql/backup/
6. Восстановление базы данных
6.1. Заходим в интерпретатор SQL
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -p
Вводим пароль.
6.2. Восстанавливаем базу данных командами
USE [master]
RESTORE DATABASE [VSM_School-sample_Web] FROM DISK = N'/var/opt/mssql/backup/VSM_School-sample_Web_2025_02_04.bak'
WITH FILE = 1,
MOVE N'VSM_School-sample_Web' TO N'/var/opt/mssql/data/ExtraSql/VSM_School-sample_Web.mdf',
MOVE N'VSM_School-sample_Web_MSGS' TO N'/var/opt/mssql/data/ExtraSql/VSM_School-sample_Web.ndf',
MOVE N'VSM_School-sample_Web_1' TO N'/var/opt/mssql/log/ExtraSql/VSM_School-sample_Web_1.ldf',
NOUNLOAD,
STATS = 5;
GO
6.3. Проверяем созданную базу
- Просмотр списка баз данных:
SELECT name FROM sys.databases;
GO
Будет так:
name
----------------------------
master
tempdb
model
msdb
VSM_School-sample_Web(5 rows affected)
..............................
- Переключение на вашу восстановленную базу данных:
USE [VSM_School-sample_Web];
GO
Будет так:
Changed database context to 'VSM_School-sample_Web'.
..............................
- Просмотр списка таблиц в вашей базе данных:
SELECT name FROM sys.tables;
GO
Будет примерно так:
name
------------------------------------------------
PersPhysical
RoleUserRelations
Files
WebPages
ConfigurationsTree
WebPageResources
CourseVersionConfigurationsTree
TableFiles
Enums
Qualifiers
RegisteredAssemblies
Stat
CourseConfigurationAccess
Talks
TypeRelations
Quals
TalkMembers
QualRels
Entities
AssembliesReferences
GlobalSettings
Messages
Meta
PluginLog
Tables
Permissions
Relations
Qualifiers
MetaGroup
MessageFiles
PrincipalSettings
Entities
Docs
MessageConfigurationsTree
Timers
EntityStates
Quals
Sites
RelationStates
Enums
Rels
SiteUsers
TalkMemberMessages
Strs
SitePlugins
Addresses
Territories
UserDevices
Captcha
Groups
Objects
Fields
VersionFiles
VersionConfigurationsTree
SmallInts
GroupTalk
Roles
SocialNetworksUsers
Users(59 rows affected)
..............................
- Выполнение простого запроса к вашей базе данных (например, выборка первых 10 строк из таблицы):
SELECT TOP 10 * FROM Enums;
GO
Будет что-то типа этого:
Enum Id Code Alias Name > Memo From To > Flag0 Flag1 Flag2 Flag3 Flag4 Flag5 Flag6 Flag7 ImportSrc ImportId ImportCode >Imports Header Enum_Code
---- --- ------------------------------- --------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------ ------ ----- ----- ----- ----- ----- ----- ----- ----- --------- ----------- ------------------------------------ ------- ------ ---------
0 0 ТПД Типы данных Типы данных > NULL NULL > NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL > 255 0 NULL
0 36 uniqueidentifier uniqueidentifier uniqueidentifier
И ТАК ДАЛЕЕ....
ВНИМАНИЕ!! После этого команда exit для выхода из интерпретатора может не сработать (а может и сработать). Придётся закрыть терминал или сеанс SSH, и снова открыть.
После повторного открытия в следующие разы выход из интерпретатора SQL с помощью команды exit будет нормальным.
7. Создаём аккаунт wcf для базы данных
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -p
CREATE LOGIN [wcf] WITH PASSWORD = 'Debian123', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
Выходим (exit)
Проверяем существование wcf
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U wcf -p
Вводим пароль
Если появилась строка приглашения ко вводу команд - выходим (exit)
Входим опять под SA
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -p
Даём права на БД для wcf
USE [VSM_School-sample_Web]
GO
alter user wcf with login = wcf
GO
exit
!!! ВНИМАНИЕ !!!
Если при создании логина для wcf впишем параметр CHECK_EXPIRATION=ON то пароль от wcf автоматически сбросится через 90 дней.
Проверить это можно войдя в учётку wcf, и введя команду
select LOGINPROPERTY('wcf','DaysUntilExpiration')
Чтобы предотвратить сброс нужно писать CHECK_EXPIRATION=OFF
Либо, если уже поставили значение на ON, можно под учёткой SA ввести команду
ALTER LOGIN [wcf] WITH CHECK_EXPIRATION = OFF;
8. Настройка файла appsettings.json
sudo nano /var/www/school-sample.nbics.net_2025_02_04/appsettings.json
В пустые кавычки ставим пароль SA
"DbAdminPassword": "",
Это оригинальная строка
"ConnectionString": "Data Source=lpc:(local);Initial Catalog=VSM_School-sample_Web;Persist Security Info=True;User ID=wcf;Password=",
Меняем её так:
"ConnectionString": "Data Source=localhost;Initial Catalog=VSM_School-sample_Web;Persist Security Info=True;User ID=wcf;Password=Debian123",
9. Создание файла Kestrel
ВНИМАНИЕ! Если есть файрволл, открываем порт 5000
В каталоге /etc/systemd/system/ создаём файл с именем kestrel-school-sample.nbics.net_2025_02_04-service.service
sudo touch /etc/systemd/system/kestrel-school-sample.nbics.net_2025_02_04-service.service
Открываем файл
sudo nano /etc/systemd/system/kestrel-school-sample.nbics.net_2025_02_04-service.service
Вставляем в пустой файл такие строки:
[Unit]
Description=vsm veb core school-sample.nbics.net_2025_02_04 application
[Service]
WorkingDirectory=/var/www/school-sample.nbics.net_2025_02_04
ExecStart=/usr/bin/dotnet /var/www/school-sample.nbics.net_2025_02_04/VSM.Web.Core.dll
Restart=always
RestartSec=10
SyslogIdentifier=school-sample.nbics.net_2025_02_04
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
Сохраняем файл.
Даём права nginx на каталог с сайтом (для этого сначала установите Nginx - sudo apt install nginx)
sudo chown -R www-data:www-data /var/www/school-sample.nbics.net_2025_02_04
sudo chmod -R 755 /var/www/school-sample.nbics.net_2025_02_04
Запускаем службу
sudo systemctl enable kestrel-school-sample.nbics.net_2025_02_04-service.service
sudo systemctl start kestrel-school-sample.nbics.net_2025_02_04-service.service
Проверяем
sudo systemctl status kestrel-school-sample.nbics.net_2025_02_04-service.service
10. Создание админского аккаунта для веб-интерфейса НБИКС.
Заходим в интерпретатор под учёткой SA
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -p
USE [VSM_School-sample_Web];
GO
update Tech.Users set Password = 0x35666132383565316265626530613636 where Id = database_principal_id('администратор')
GO
exit
11. Настраиваем веб-сервер Nginx
Внимание. Для этого сначала установите Nginx
sudo apt install nginx
Создаём конфигурационный файл
sudo touch /etc/nginx/sites-available/nbics.conf
Открываем этот файл (можно в принципе пропустить предыдущую команду, файл создастся автоматически при открытии несуществующего файла)
sudo nano /etc/nginx/sites-available/nbics.conf
Вписываем туда следующие строки:
server {
listen 80;
server_name school-sample.nbics.net_2025_02_04;
root /var/www/school-sample.nbics.net_2025_02_04;
keepalive_timeout 60;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_cache off;
proxy_buffering off;
proxy_read_timeout 100s;
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;
}
}
Сохраняем следующими комбинациями клавиш, последовательно три комбинации:
Ctrl-X
Shift-Y
Enter
Cоздаём линк.
sudo ln -s /etc/nginx/sites-available/nbics.conf /etc/nginx/sites-enabled/nbics.conf
Проверяем работоспособность Nginx:
sudo nginx -t
Должно быть так:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
12. Установка и настройка Letsencrypt
Для того, чтобы сайт открывался без проблем, используя доступ по протоколу //https необходимо создать и установить SSL сертификат. Для этого используется Let’s Encrypt - бесплатный, автоматизированный и открытый Центр Сертификации, созданный на благо всего общества организацией Internet Security Research Group (ISRG)
Имя сайта должно быть зарегистрировано и у компьютера должен быть статический IP
Устанавливаем certbot и зависимости
sudo apt install certbot python3-certbot-nginx -y
Создаём сертификат
sudo certbot --nginx -d <имя.вашего.домена>
Тестовый комментарий