Server в Docker
Docker - это платформа с открытым исходным кодом, предназначенная для упрощения и ускорения разработки приложений. Основная идея Docker - создание окружения, где приложения могут работать независимо от операционной системы или инфраструктуры. Разработанный нами образ Stimulsoft Server для Docker не требует сложной настройки, и практически сразу готов к работе. В образе уже установлено и настроено всё, что понадобится для запуска и работы Сервера на любой операционной системе, которая поддерживает работу Docker.Запуск контейнера
Для запуска Сервера из образа достаточно выполнить команду "docker" с указанными ниже аргументами:docker run --name=stimulsoft-server -p 8080:8080 stimulsoft/server:latest
Данная команда выполнит следующие действия:
- создаст новый контейнер с именем "stimulsoft-server";
- выполнит сопоставление внутреннего порта 8080 с локальным портом 8080;
- из репозитория Docker Hub загрузит последнюю версию Сервера;
- осуществит запуск контейнера с указанными параметрами.
После этого, можно перейти по адресу http://localhost:8080 и увидеть работу Сервера. На данном этапе нет возможности полноценно оценить работу Сервера, так как для работы требуется подключение к базе данных.
Подготовка базы данных
Для полноценной работы Сервера необходима база данных. Сервер поддерживает работу с базами данных MS SQL, MySQL и PostgreSQL. На данном этапе, выбранный сервер базы данных уже должен быть готов к работе. Для начала, необходимо создать отдельную пустую базу данных (схему данных) с выбранным именем, а для пользователя установить разрешения для создания и изменения таблиц в этой базе данных. Для примера используется схема данных с именем "server" и пользователь "root", у которого есть доступ ко всем таблицам.Для передачи строки подключения к базе данных Серверу, можно воспользоваться переменными окружения. Для этого необходимо добавить к команде запуска следующие аргументы:
docker run --name=stimulsoft-server -p 8080:8080 -e Storage__DatabaseType="MySql" -e Storage__MySqlConnectionString="Server=host.docker.internal; port=3306; Database=server; UserId=root; Pwd=123456;" stimulsoft/server:latest
Указанная команда устанавливает следующие переменные окружения:
- Storage__DatabaseType: тип базы данных "MySql";
- Storage__MySqlConnectionString: строка подключения для MySQL базы данных.
В примере в качестве адреса сервера базы данных установлено значение "host.docker.internal", которое зарезервировано в Docker для подключения контейнера к приложениям, запущенным на локальном компьютере (хосте). Если на локальном компьютере запущен MySQL сервер, доступный по адресу "localhost", он будет доступен в контейнере по адресу "host.docker.internal".
Для подключения к MS SQL либо PostgreSQL базам данных, в настройках необходимо установить тип "MsSql" либо "PostgreSql", и воспользоваться переменными окружения для соответствующей базы данных:
- Storage__MsSqlConnectionString
- Storage__PostgreSqlConnectionString
После выполнения данной команды, можно перейти по адресу http://localhost:8080 и увидеть окно создания администратора Сервера. Если администратор уже создан, будет отображено окно логина в систему.
Назначение рабочей директории Сервера
Для работы Серверу необходимо место, где будут храниться логи работы и служебные файлы. По умолчанию, данная директория находится в самом контейнере по следующему пути:/var/lib/stimulsoft-server
Самым простым способом для доступа к служебным файлам Сервера является сопоставление этой директории с директорией на локальном компьютере. Для этого достаточно добавить один параметр в команду запуска:
docker run --name=stimulsoft-server -p 8080:8080 -v "c:\docker\stimulsoft-server:/var/lib/stimulsoft-server" -e Storage__DatabaseType="MySql" -e Storage__MySqlConnectionString="Server=host.docker.internal; port=3306; Database=server; UserId=root; Pwd=123456;" stimulsoft/server:latest
Параметр "-v" сопоставляет Windows директорию "c:\docker\stimulsoft-server" на локальном компьютере (хосте) с внутренней директорией контейнера "/var/lib/stimulsoft-server", все служебные файлы Сервера теперь будут расположены в этой директории. Даже после удаления и нового создания контейнера, или переноса директории с её содержимым на новый компьютер, все данные будут сохранены до тех пор, пока данная директория не будет удалена вручную.
Настройка работы HTTPS
Для безопасного соединения с Сервером предпочтительно использовать протокол HTTPS, который также легко настроить при помощи переменных окружения. Добавим к команде запуска несколько необходимых для этого аргументовdocker run --name=stimulsoft-server -p 8080:8080 -v "c:\docker\stimulsoft-server:/var/lib/stimulsoft-server" -e Storage__DatabaseType="MySql" -e Storage__MySqlConnectionString="Server=host.docker.internal; port=3306; Database=server; UserId=root; Pwd=123456;" -e ASPNETCORE_HTTPS_PORTS=8081 -e Urls="https://*:8081;http://*:8080" -e ASPNETCORE_Kestrel__Certificates__Default__Path="/var/lib/stimulsoft-server/aspnetapp.pfx" -e ASPNETCORE_Kestrel__Certificates__Default__Password="123456" stimulsoft/server:latest
Указанная команда устанавливает следующие переменные окружения:
- ASPNETCORE_HTTPS_PORTS: устанавливает внутренний порт, который будет использоваться для протокола HTTPS;
- Urls: устанавливает разрешенные URL адреса для прослушивания внутренним сервером Kestrel, в данном случае все URL адреса для портов 8081 и 8080;
- ASPNETCORE_Kestrel__Certificates__Default__Path: путь к сертификату PFX, который необходимо приобрести у одного из доверенных поставщиков сертификатов. Данный сертификат должен быть доступен в контейнере, проще всего скопировать его в рабочую директорию Сервера "c:\docker\stimulsoft-server", и указать внутренний путь к этой директории;
- ASPNETCORE_Kestrel__Certificates__Default__Password: пароль сертификата, полученный от поставщика сертификатов.
После выполнения данной команды, в браузере можно перейти по адресу https://localhost:8081 и увидеть окно создания администратора Сервера. Если администратор уже создан, будет отображено окно логина в систему.
Если готового сертификата еще нет, то для разработки и тестирования есть возможность создать локальный сертификат. Для этого необходимо выполнить команду:
dotnet dev-certs https -ep "c:\docker\stimulsoft-server\aspnetapp.pfx" -p 123456
Локальный сертификат будет создан в рабочей директории Сервера с указанным паролем.
Использование команды "docker compose"
Для создания и управления контейнером, а также для запуска одновременно нескольких контейнеров и установки связи между ними, удобнее использовать команду "docker compose". Для работы понадобится создать файл docker-compose.yml в директории "c:\docker", в котором будут описаны все параметры запуска Docker контейнера.Для примера, можно привести аналог запуска контейнера при помощи команды "docker", описанного выше. Создадим файл "c:\docker\docker-compose.yml", который в данном случае будет выглядеть таким образом:
name: stimulsoft-server
services:
server:
image: stimulsoft/server:latest
ports:
- 8080:8080
- 8081:8081
volumes:
- ./stimulsoft-server:/var/lib/stimulsoft-server
environment:
ASPNETCORE_HTTP_PORTS: 8080
ASPNETCORE_HTTPS_PORTS: 8081
Urls: "https://*:8081;http://*:8080"
ASPNETCORE_Kestrel__Certificates__Default__Path: "/var/lib/stimulsoft-server/aspnetapp.pfx"
ASPNETCORE_Kestrel__Certificates__Default__Password: 123456
Storage__DatabaseType: "MySql"
Storage__MySqlConnectionString: "Server=host.docker.internal; port=3306; Database=server; UserId=root; Pwd=123456;"
После этого необходимо перейти в директорию "c:\docker" и запустить команду "docker compose up". Данная команда настроит контейнер по инструкциям из файла docker-compose.yml и запустит виртуальную машину.
Преимуществом такого подхода является простота редактирования параметров контейнера, а также возможность запуска нескольких контейнеров и установки связи между ними. Например, можно запустить отдельный контейнер с MySQL сервером баз данных, и настроить работу Сервера с этим контейнером. Для этого достаточно добавить в файл загрузку образа "mysql" из репозитория Docker Hub, а также изменить строку подключения:
В строке подключения в качестве адреса MySQL сервера необходимо указать имя контейнера MySQL базы данных, в данном случае "mysql". После выполнения команды "docker compose up", будут запущены два контейнера и установлена связь между ними. Теперь в браузере можно перейти по адресу https://localhost:8081 и увидеть окно создания администратора Сервера. Если администратор уже создан, будет отображено окно логина в систему.
name: stimulsoft-server
services:
server:
image: stimulsoft/server:latest
ports:
- 8080:8080
- 8081:8081
volumes:
- ./stimulsoft-server:/var/lib/stimulsoft-server
environment:
ASPNETCORE_HTTP_PORTS: 8080
ASPNETCORE_HTTPS_PORTS: 8081
Urls: "https://*:8081;http://*:8080"
ASPNETCORE_Kestrel__Certificates__Default__Path: "/var/lib/stimulsoft-server/aspnetapp.pfx"
ASPNETCORE_Kestrel__Certificates__Default__Password: 123456
Storage__DatabaseType: "MySql"
Storage__MySqlConnectionString: "Server=mysql; port=3306; Database=server; UserId=root; Pwd=123456;"
mysql:
image: mysql:8.0
ports:
- 3306:3306
volumes:
- './mysql:/var/lib/mysql'
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_DATABASE: "server"
Указанная конфигурация настраивает контейнер следующим образом:
- использует образ MySQL сервера версии 8.0;
- сопоставляет локальную директорию "c:\docker\mysql" с внутренней директорией "/var/lib/mysql" в контейнере MySQL сервера, в которой хранятся все таблицы базы данных;
- сопоставляет локальный порт 3306 с внутренним портом контейнера 3306 для доступа к базе данных;
- настраивает в переменных окружения пароль базы данных и имя схемы данных, которая будет автоматически создана после запуска MySQL контейнера.
В строке подключения в качестве адреса MySQL сервера необходимо указать имя контейнера MySQL базы данных, в данном случае "mysql". После выполнения команды "docker compose up", будут запущены два контейнера и установлена связь между ними. Теперь в браузере можно перейти по адресу https://localhost:8081 и увидеть окно создания администратора Сервера. Если администратор уже создан, будет отображено окно логина в систему.
Дополнительные настройки Сервера
Помимо уже рассмотренных настроек подключения к базе данных и настройки HTTPS протокола, Сервер имеет множество других настроек, разделенных на категории. Присутствует возможность настроить параметры отправки почты, настроить элементы веб-интерфейса Сервера, параметры входа в систему, установить общие опции построения отчетов.Пример некоторых настроек Сервера:
name: stimulsoft-server
services:
server:
image: stimulsoft/server:latest
ports:
- 8080:8080
- 8081:8081
volumes:
- ./stimulsoft-server:/var/lib/stimulsoft-server
environment:
LoginUi__ShowSignUp: false
Reports__AllowReportCompilation: false
Smtp__UserName: "Stimulsoft"
Smtp__Password: "123456"
NavigationUi__ShowData: false
MainUi__ShowDownload: false
Storage__DatabaseType: "MySql"
Storage__MySqlConnectionString: "Server=host.docker.internal; port=3306; Database=server; UserId=root; Pwd=123456;"
Список всех доступных настроек Сервера с подробным описанием можно найти в документации на странице нашего сайта.
Обновление Сервера
Преимуществом использования Docker является простой контроль версий Сервера. В примере в качестве тега версии используется версия "latest", которая всегда является последней и обновляется с очередным релизом Сервера. Если по какой-либо причине требуется использовать конкретную версию Сервера, можно просто указать её в качестве тега, выбрав одну из доступных в репозитории Docker Hub:name: stimulsoft-server
services:
server:
image: stimulsoft/server:2025.3.1
После изменения версии, либо для повторной загрузки последней версии "latest" version, you need to pull the updated image from the repository before starting the container. This can easily be done using the "docker compose pull", перед запуском контейнера необходимо выполнить обновление образа из репозитория. Это легко сделать при помощи команды "docker compose pull", после этого можно заново запустить контейнер, который будет автоматически обновлен.Для экономии места на диске компьютера, можно удалить устаревшие неиспользуемые образы. Это можно легко сделать при помощи команды "docker image prune". Если в будущем какие-либо из удалённых образов понадобятся для создания и работы контейнера, они будут заново автоматически скачаны из репозитория Docker Hub.