Skip to main content

Полное развертывание NBICS через Docker

Шаг 1. Создание структуры файлов проекта

Создайте папку для проекта, например my_project, и внутри неё организуйте следующую структуру:

my_project/
│
├── docker-compose.yml
├── .env
├── sql/
│   └── backup/    # Папка для бэкапа базы данных
├── site/          # Каталог вашего ASP.NET Core приложения
│   ├── appsettings.json
│   └── ...
└── nginx/
    └── default.conf

Шаг 2. Конфигурация .env файла

Создайте файл .env и настройте переменные окружения:

# SQL Server
MSSQL_SA_PASSWORD=Linux123
MSSQL_USER=wcf
MSSQL_USER_PASSWORD=Linux123
MSSQL_DB_NAME=VSM_School_sample_Web

# Nginx
DOMAIN=school-sample.nbics.net

# ASP.NET Core
APP_ENV=Production

Шаг 3. Конфигурация docker-compose.yml

Создайте файл docker-compose.yml для определения всех сервисов:

version: '3.8'

services:
  mssql:
    image: mcr.microsoft.com/mssql/server:2022-latest
    container_name: mssql
    environment:
      ACCEPT_EULA: "Y"
      MSSQL_SA_PASSWORD: ${MSSQL_SA_PASSWORD}
    ports:
      - "1433:1433"
    volumes:
      - ./sql/backup:/var/opt/mssql/backup
      - mssql_data:/var/opt/mssql

  dotnet:
    image: mcr.microsoft.com/dotnet/aspnet:7.0
    container_name: dotnet
    environment:
      ASPNETCORE_ENVIRONMENT: ${APP_ENV}
      ConnectionStrings__DefaultConnection: "Server=mssql;Database=${MSSQL_DB_NAME};User ID=${MSSQL_USER};Password=${MSSQL_USER_PASSWORD}"
    ports:
      - "5000:5000"
    volumes:
      - ./site:/app
    working_dir: /app
    command: ["dotnet", "VSM.Web.Core.dll"]
    depends_on:
      - mssql

  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
      - nginx_data:/var/www

volumes:
  mssql_data:
  nginx_data:

Шаг 4. Настройка SQL Server и базы данных

  1. Поместите файл бэкапа в sql/backup/.
  2. Внесите скрипты для восстановления базы данных в отдельный файл, например, init.sql (настраиваем автоматически):
USE [master];
RESTORE DATABASE [VSM_School_sample_Web] FROM DISK = N'/var/opt/mssql/backup/your_backup_file.bak'
WITH FILE = 1,
MOVE N'VSM_School_sample_Web' TO N'/var/opt/mssql/data/VSM_School_sample_Web.mdf',
MOVE N'VSM_School_sample_Web_Log' TO N'/var/opt/mssql/log/VSM_School_sample_Web.ldf',
NOUNLOAD,
STATS = 5;
GO

CREATE LOGIN [wcf] WITH PASSWORD = 'Linux123', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
GO

Шаг 5. Настройка Nginx

Создайте файл nginx/default.conf:

server {
    listen 80;
    server_name ${DOMAIN};
    
    location / {
        proxy_pass http://site:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        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;
    }
}

Шаг 6. Запуск Docker

  1. Запустите все сервисы:

docker-compose up -d

2. Убедитесь, что все контейнеры работают:

docker ps

Шаг 7. Настройка SSL

Для установки SSL-сертификата:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d ${DOMAIN}