# Инструкция

## Требования

Ubuntu 22.04 Desktop
2 ядра
2 Gb RAM
40 Gb SSD

## Установка

1. Установите Ubuntu 22.04 Desktop

https://releases.ubuntu.com/22.04/
Например:
`ubuntu-22.04.3-desktop-amd64.iso`

Во время установки выбираем тип:
Обычная установка

Примечание:
возможно для более комфортного взаимодействия с сервером можно установить ssh-server.

```bash
sudo apt update
sudo apt install -y openssh-server 
```

2. Установить Docker

https://docs.docker.com/engine/install/ubuntu/




```bash
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc


sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update
```


```bash
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

Проверяем версию docker:

```bash
docker --version
#Docker version 29.4.1, build 055a478
```


3. Копирование папки с проектом

Создаем папку "app" для проекта:
```bash
mkdir -p ~/app
```

Копируем файлы удобным способом.


```bash
curl -L -o ~/app/SiMedLaboratory2_v2.5.4.2.zip https://files.simplex48.ru/SiMedLaboratory2/SiMedLaboratory2_v2.5.4.2.zip
unzip ~/app/SiMedLaboratory2_v2.5.4.2.zip -d ~/app
```

Если не установлен unzip, то можно установить:
```bash
sudo apt update && sudo apt install unzip
```

Примечание:

Копирование по ssh. Запускать из папки с файлами.
("user" - заменить на пользователя в системе, подставить свой IP адрес)
```bash
scp -r  ./* user@192.168.1.2:/home/user/app
```

Проверить список скопированных файлов и папок:

```bash
cd ~/app
ls -la
```
Вывод:
```
app
Docker
docker-compose.yml
Dockerfile.simlab
Dockerfile.simrep
examples.env
readme.md
SiMedLaboratory2_v2.5.4.2.zip
SiMedReporter
```
~416Mb

4. Создание конфигурации.

```bash
cd ~/app
```

В папке с файлами:
создаем конфигурационный env файл
```bash
cp examples.env .env
```

Редактируем настройки указываем нужные порты, пользователей, пароли:
```bash
nano .env
```

```
# версия сборки
TAG=v1
# уникальный тэг
TAG_ORG=simlab
# порт по которому будет доступна БД postgres, созданная в docker
POSTGRES_PORT_EXT=5432
# пароль к БД
POSTGRES_PASSWORD=test
# суперпользователь БД
POSTGRES_USER=simlab
# название БД
POSTGRES_DB=biolab

# логин для pgadmin
PGADMIN_DEFAULT_EMAIL=pgadmin@admin.com
# пароль для pgadmin
PGADMIN_DEFAULT_PASSWORD=test
# порт по которому будет доступен pgadmin, созданный в docker
PGADMIN_PORT_EXT=8080
```

Создать структуру для AppData
- AllowIpAddresses.txt – файл в котором указываются ip адреса, которые имеют доступ к приложению
- CoveringBlankTemplate.html – шаблон сопроводительного бланка
- ResultsTemplate.html – шаблон бланка результатов
- Создать папку Reports. В данную папку добавляются шаблоны RDLC для формирования отчётов приложения
- Создать папку Licenses. В данную папку добавляются шаблоны лицензии

```bash
#например
# в название должен быть подставлено значение, которое совпадает с тэгом указанном в файле env. simlab_${TAG_ORG}
# пусть должен совпадать с тем который указан в файле docker-compose.yml
mkdir -p ~/app/tmp/docker/simlab_simlab/AppData
```
Настроить и скопировать необходимые конфигурации

Добавьте или измените содержимое папки Docker/configs/AppData, если необходимо. Далее скопируйте:

```bash
cp -r ~/app/Docker/configs/AppData/* ~/app/tmp/docker/simlab_simlab/AppData
```


Распаковать и скопировать chrome-linux64

```bash
unzip ~/app/Docker/configs/chrome-linux64.zip -d ~/app/tmp/docker/simlab_simlab/AppData
```

Распаковать файлы приложения:

```bash
unzip ~/app/app/app.zip -d ~/app/app
rm ~/app/app/app.zip
```

```bash
unzip ~/app/SiMedReporter/SiMedReporter.zip -d ~/app/SiMedReporter
rm ~/app/SiMedReporter/SiMedReporter.zip
```


При необходимости проверить и настроить конфигурации в файлах appsettings.json
```bash
nano ~/app/Docker/configs/settings_app/appsettings.json
nano ~/app/Docker/configs/settings_reporter/appsettings.json
```

Примеры конфигурации:

```
{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft.AspNetCore": "Debug",
      "Microsoft.AspNetCore.Authentication": "Trace",
      "Microsoft.Hosting.Lifetime": "Trace"
    }
  },
  "ConnectionStrings": {
    "DefaultConnection": "Host=postgres48;Port=5432;Database=biolab;Username=simlab;Password=test;Trust Server Certificate=true"
  },
  "AllowedHosts": "*",
  "PathToLogDirectory": "/app/logs"
}
```

Database, Username, Password - должны совпадать в введенными ранее в файле .env.
Host, Port - нужно изменять если подключение идет к внешней базе. По умолчанию подключается к базе созданной в контейнере Docker.

```
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "RunAsService": false,
  "RunAsServiceURLs": "http://0.0.0.0:6000",
  "Token": "29a60331-80c8-43e4-b026-38f16552eb40"
}
```

Проверить что в папке app присутствует папка wwwroot, иначе разархивировать из конфигурации:
```bash
ls -l ~/app/app/wwwroot
```
Если Итого 0, то:
```bash
unzip ~/app/Docker/configs/wwwroot.zip -d ~/app/app/wwwroot
```




Запустить сборку проекта:

```bash
cd ~/app
sudo docker compose build
```

Примерное время выполнения:
```
  ✔ Image simlab:v1 Built                                                          531.5s
 ✔ Image simrep:v1 Built                                                          531.5s
```


Запустить проект:

```bash
sudo docker compose up -d
```

Пример вывода:
```
[+] up 41/41
 ✔ Image dpage/pgadmin4:9.1    Pulled                   42.1s
 ✔ Image postgres:17           Pulled                   32.1s
 ✔ Network app_dotcom          Created                   0.1s
 ✔ Volume pgadmin-data-simlab  Created                   0.0s
 ✔ Container app-simrep-1      Started                   1.0s
 ✔ Container simlab-postgres48 Started                   1.0s
 ✔ Container simlab-pgadmin48  Started                   0.9s
 ✔ Container app-simlab-1      Started                   1.0s
```

Проверить проект:

```bash
  sudo docker ps
```

Пример вывода:
```
CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS          PORTS                                                                                  NAMES
cb222cec5f93   dpage/pgadmin4:9.1   "/entrypoint.sh"         49 seconds ago   Up 48 seconds   443/tcp, 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp                                       simlab-pgadmin48
334e36c06a1a   simlab:v1            "/entrypoint.sh"         49 seconds ago   Up 48 seconds   0.0.0.0:5000->5000/tcp, [::]:5000->5000/tcp, 0.0.0.0:5001->80/tcp, [::]:5001->80/tcp   app-simlab-1
1f79892c1677   postgres:17          "docker-entrypoint.s…"   49 seconds ago   Up 48 seconds   0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp                                            simlab-postgres48
7912fc8ea7e0   simrep:v1            "/usr/local/bin/star…"   49 seconds ago   Up 48 seconds   0.0.0.0:6000->6000/tcp, [::]:6000->6000/tcp                                            app-simrep-1
```


Заходим в браузер и пишем
http://localhost:5001/Account/Login


В настройках отчета (Настройки->Формирование отчетов) ввести URL службы:
```
http://simrep:6000
```
Нажать "Сохранить". Потом "Проверка связи". Должно появится подтверждение об успешном соединении.

Для удобства можно или установить nginx для перенаправления и в hosts прописать домен и адрес.

В папках правим кофигурацию, добавляем лицензию, смотрим логи:
```bash
cd ~/app/tmp/docker/simlab_simlab/AppData
cd ~/app/tmp/docker/simlab_simlab/logs
```

