Help:Installation: Difference between revisions

From Svacer Wiki
(extend docker-compose runtime parameters override section)
m (fix link)
 
(103 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Category:Help]]
== Установка и запуск ==
== Установка и запуск ==
Для работы сервера необходим PostgreSQL. Его можно установить как пакет, либо запустить в докере — docker-compose файл для этого находится в '''./extra/docker-compose-postgres.yml'''.
Для использования только клиента Svacer достаточно [[Svacer#Релизы|скачать исполняемый файл]] '''svacer''', или установить [[Help:Installation#Svacer|deb/rpm пакет]].
Svacer состоит из единственного бинарного файла. Он предоставляет как backend-часть, так и веб-сервер, который передаёт статику. По умолчанию запускается на порту 8080.
После запуска по умолчанию создается учётная запись пользователя '''admin''' c паролем '''admin'''. Изменить пароль можно в веб-интерфейсе.
Сервер имеет широкие возможности настройки параметров запуска. Узнать о них подробнее можно, прочитав '''svacer --help'''.


=== Установка и запуск из deb/rpm пакета ===
Сервер Svacer можно запустить в [[Help:Installation#docker compose|докере]] или из [[Help:Installation#deb/rpm|deb/rpm пакета]].
При установке из .deb или .rpm пакета Svacer ставится в директорию, прописанную в $PATH, поэтому при запуске полный путь к исполняемому файлу '''svacer''' указывать не требуется, он будет доступен просто по имени.


==== .deb ====
=== docker compose ===
Добавьте наш apt-репозиторий и установите Svacer из него.
Рекомендуемый и самый простой способ деплоя — развернуть сервер Svacer в докер-контейнерах, воспользовавшиcь [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml] файлом:


<pre>
<nowiki>curl -LO https://svacer.ispras.ru/extra/docker-compose.yml</nowiki>
  echo 'deb https://repo.ispras.ru/apt /' | sudo tee /etc/apt/sources.list.d/ispras.list
docker compose up -d
  wget -q -O - https://repo.ispras.ru/apt/key.asc | sudo apt-key add -
  sudo apt update
  sudo apt install -y svacer
</pre>


Если нет возможности установить из репозитория (допустим, на машине без доступа к интернету), скачайте .deb пакет релиза и выполните следующую команду
После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.


  sudo apt install ./svacer_<version>_amd64.deb
Для сборки своего докер-образа Svacer можете использовать [[Dockerfile]] в качестве референса.


Если вы планируете использовать Svacer только как клиент для взаимодействия с сервером, то больше ничего устанавливать и конфигурировать не нужно.  
Для указания других параметров сервера можете [[Help:Configuration#Дополнительные параметры при запуске в docker|переопределить команду запуска]] в docker-compose файле.


Если планируете использовать Svacer как сервер, установите (или [[Help:Installation#Запуск_в_docker_только_PostgreSQL|запустите в докере]]) PostgreSQL версии не ниже 10-й.
=== deb/rpm ===
==== PostgreSQL ====
{{Note|type=info|text=Disclaimer
* Рекомендуемая версия PostgreSQL — 15 и выше. С более старыми версиями корректная работа Svacer не гарантируется.
* Svacer требует эксклюзивного доступа к базе. Использование одной и той же базы для нескольких экземпляров Svacer может приводить к порче данных.}}


На debian-based системах, обычно, чтобы установить PostgreSQL достаточно выполнить команду
Для работы сервера Svacer установите PostgreSQL, следуя [https://www.postgresql.org/download/linux документации postgres]. Для RedHat-based OS нужно дополнительно установить пакет postgresql-contrib соответствующей версии.


  sudo apt install postgresql
Пример для Ubuntu 22:


Если такая команда не работает, возможно, в репозиториях вашей ОС нет PostgreSQL. В таком случае обратитесь к [https://www.postgresql.org/download/linux/ руководству по установке] PostgreSQL.
sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
sudo apt install -y postgresql-17


После установки [[Help:Installation#Настройка_и_запуск|создайте БД и запустите сервер Svacer]].
Пример для Rocky Linux 9.4:


==== .rpm ====
<nowiki>sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm</nowiki>
Скачайте .rpm пакет релиза Svacer и выполните следующую команду
sudo dnf -qy module disable postgresql
sudo dnf install -y postgresql17-server postgresql17-contrib
sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
sudo systemctl enable postgresql-17
sudo systemctl start postgresql-17


  sudo yum install ./svacer-<version>.x86_64.rpm
==== Браузер для PDF-отчетов ====
Для создания PDF-отчетов с использованием нового HTML-генератора установите браузер Google Chrome на машину, где запускается сервер Svacer. Рекомендуется устанавливать из официального репозитория, следуя [https://www.google.com/chrome/?platform=linux инструкции с сайта google].  


Если вы планируете использовать Svacer только как клиент для взаимодействия с сервером, то больше ничего устанавливать и конфигурировать не нужно.
{{Note|type=info|text=Рекомендуемые системные требования при генерации PDF-отчетов для больших проектов с использованием HTML-генератора: Intel Core i9, 64 GB RAM, SSD, видеокарта Nvidia}}


Если планируете использовать Svacer как сервер, установите (или [[Help:Installation#Запуск_в_docker_только_PostgreSQL|запустите в докере]]) PostgreSQL версии не ниже 10-й, следуя [https://www.postgresql.org/download/linux/redhat/ документации], также установите пакет postgresql-contrib из тех же репозиториев.
При запуске Svacer проверит доступность браузера для генерации PDF. Если он не установлен или генерация не работает, будет использован нативный генератор: менее продвинутый, но для него не нужен браузер. Можно явно включить использование нативного генератора, передав опцию <code>--pdf-generator=native</code> при запуске сервера Svacer.


Пример для Centos 7
При невозможности установить Google Chrome, например если нет пакета для вашего дистрибутива Linux, можно установить Chromium. Его пакет в репозиториях, в зависимости от вышей ОС, может называться <code>chromium-browser</code> или <code>chromium</code>. В некоторых случаях генерация с Chromium может не работать. Например, если Svacer установлен из deb-пакета, а Сhromium из snap (на Ubuntu он устанавливается именно так даже при использовании apt) и сервер Svacer запускается от отдельного системного пользователя, от которого Chromium не может запуститься. В этом случае установите Google Chrome, с ним генерация работает.


<pre>
==== Svacer ====
  sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
На Debian-based OS добавьте apt-репозиторий и установите Svacer из него.
  sudo yum install -y postgresql14-server postgresql14-contrib
  sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
  sudo systemctl enable postgresql-14
  sudo systemctl start postgresql-14
</pre>


Для версий PostgreSQL ниже 13-й требуется явно разрешить подключение к локальному хосту базы с логином/паролем. Для этого проверьте следующие строчки в конце файла '''/var/lib/pgsql/<version>/data/pg_hba.conf'''
<nowiki>echo 'deb [signed-by=/usr/share/keyrings/ispras.gpg] https://repo.ispras.ru/apt /' | sudo tee /etc/apt/sources.list.d/ispras.list</nowiki>
<nowiki>curl -fsSL https://repo.ispras.ru/apt/key.asc | sudo gpg --dearmor -o /usr/share/keyrings/ispras.gpg</nowiki>
sudo apt update
sudo apt install -y svacer


  # IPv4 local connections:
На RedHat-based OS добавьте dnf-репозиторий и установите Svacer из него
  host    all    all    127.0.0.1/32    ident<br>
  # IPv6 local connections:
  host    all    all    ::1/128        ident


В случае если в последнем столбце указано значение '''ident''', поменяйте его на '''md5''' и перезапустите PostgreSQL.
<nowiki>curl -fsSL https://repo.ispras.ru/rpm/ispras.repo | sudo tee /etc/yum.repos.d/ispras.repo</nowiki>
sudo dnf install -y svacer


  sudo systemctl restart postgresql-12
Для создания БД PostgreSQL запустите '''psql''' от учетной записи пользователя '''postgres'''


После установки [[Help:Installation#Настройка_и_запуск|создайте БД и запустите сервер Svacer]].
sudo su -l postgres
psql


==== Настройка и запуск ====
И выполните следующие запросы:
Процесс настройки и запуска одинаковый для Svacer установленного из .deb и .rpm пакетов.
create database svace;
create user svace with encrypted password 'svace';
grant all privileges on database svace to svace;
alter user svace superuser;


В процессе установки создаются следующие файлы и директории
В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace. Также этому пользователю выдаются права суперюзера, что необходимо для создания расширений в PostgreSQL. При использовании этих значений по умолчанию дальнейшая конфигурация не требуется и можно переходить к запуску.
* /etc/default/svacer — конфигурационный файл
* /var/log/svacer — директория для логов
* /var/lib/svacer — директория для object store


После установки Svacer требуется создать пользователя и БД PostgreSQL. Для этого перейдите в пользователя postgres, запустите psql и выполните соответствующие запросы, после чего выйдите из консоли PostgreSQL и из пользователя postgres.
При использовании других значений нужно поменять параметры подключения к БД в файле '''/etc/default/svacer'''


  sudo su -l postgres
SVACER_ARGS="--pg postgres://<user>:<password>@127.0.0.1:5432/<database>"
  psql
  postgres=# create database svace;
  postgres=# create user svace with encrypted password 'svace';
  postgres=# grant all privileges on database svace to svace;
  postgres=# alter user svace superuser;


В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace, а также этому пользователю выдаются права суперюзера (это необходимо для создания расширений в PostgreSQL). При использовании этих значений дальнейшая конфигурация не требуется и можно переходить к запуску.
В этой же строке можно указать прочие аргументы для запуска сервера Svacer.
 
При использовании других имен пользователя, БД или пароля потребуется дополнительная конфигурация перед запуском Svacer: в файле '''/etc/default/svacer''' нужно поменять параметры подключения к БД в строке
 
  SVACER_ARGS="--pg postgres://<user>:<password>@127.0.0.1:5432/<database>"
 
В этой же строке можно указывать прочие аргументы для запуска сервера Svacer.


На Astra Linux необходимо в файле '''/etc/parsec/mswitch.conf''' установить параметр <code>zero_if_notfound: yes</code>, иначе при запуске Svacer будет ошибка подключения к БД вида
На Astra Linux необходимо в файле '''/etc/parsec/mswitch.conf''' установить параметр <code>zero_if_notfound: yes</code>, иначе при запуске Svacer будет ошибка подключения к БД вида


  error obtaining MAC configuration for user "svace" (SQLSTATE 57P03)
error obtaining MAC configuration for user "svace" (SQLSTATE 57P03)


После создания БД и настройки конфигурации Svacer запустить его можно следующими командами
После создания БД и конфигурации сервера Svacer запустить его можно следующими командами


  sudo systemctl enable svacer
sudo systemctl enable svacer
  sudo systemctl start svacer
sudo systemctl start svacer


После чего проверить успешность запуска командой
После чего проверить успешность запуска командой


  systemctl status svacer
systemctl status svacer
 
В случае успешного запуска сервер будет доступен по адресу http://localhost:8080
 
=== Запуск в docker ===
==== Svacer + PostgreSQL ====
Установите docker и docker-compose. Поскольку образы PostgreSQL и Svacer размещены на докер-хабе, для их скачивания при запуске необходимо наличие интернета.
 
Используйте для запуска docker-compose файл, находящийся в дистрибутиве Svacer: '''./extra/docker-compose.yml'''. Перейдите в директорию, где находится этот файл и выполните команду
 
  docker-compose up -d
 
При этом будет запущено два контейнера: PostgreSQL и Svacer. После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080
 
В процессе запуска в текущей локации будут созданы две директории
 
* postgres_data — для хранения БД PostgreSQL
* svacer_data — для object store сервера Svacer


Они будут примонтированы в соответствующие контейнеры, это необходимо для сохранения данных БД и сервера после остановки или перезапуска контейнеров.
После запуска сервер будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.
 
Важное уточнение: в докере запускается только сервер Svacer. Для импорта и загрузки результатов на сервер будет нужен исполняемый файл svacer.
 
Остановить сервер Svacer можно, выполнив следующую команду
 
  docker-compose down
 
Для сборки своего докер-образа Svacer можете использовать наш [[Dockerfile]] в качестве референса.
 
==== Только PostgreSQL ====
Также можно запустить в докер-контейнере только PostgreSQL. Используйте файл '''./extra/docker-compose-postgres.yml''' (его же можно скачать [https://svacer.ispras.ru/extra/docker-compose-postgres.yml отсюда])
 
  docker-compose -f docker-compose-postgres.yml up -d
 
Чтобы остановить, соответственно
 
  docker-compose -f docker-compose-postgres.yml down
 
При таком способе запуска создается пользователь и база, указанные в Svacer как параметры по умолчанию, поэтому при запуске сервера Svacer параметр '''--pg''' можно не указывать (и не менять в конфиг-файле '''/etc/default/svacer''' при установке Svacer из пакетов).
 
=== Установка и запуск вручную ===
Для установки Svacer скачайте и распакуйте архив дистрибутива (файл с названием '''svacer_release-<version>.zip''').
 
При использовании PostgreSQL, предварительно настроенного на каком-либо хосте, необходимо использовать соответствующие параметры запуска. Допустим, PostgreSQL работает на локальном хосте, в нем создана БД '''svacer_db''', доступная от пользователя '''svacer_user''' с паролем '''svacer123'''. В этом случае запустите Svacer со следующими параметрами
 
  ./bin/svacer server --pg postgres://svacer_user:svacer123@127.0.0.1:5432/svacer_db
 
Если вы запустили PostgreSQL в докер-контейнере, используя файл '''./extra/docker-compose-postgres.yml''', то при запуске Svacer параметр '''--pg''' для подключения к БД можно не указывать, поскольку был создан пользователь и база, указанные в Svacer как параметры по умолчанию.
 
После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080


=== Установка и запуск на Windows ===
=== Установка и запуск на Windows ===
==== Установка вручную ====
PostgreSQL нужен только для сервера Svacer, для клиента не требуется.  
Далее будут описаны шаги установки и запуска Svacer как сервера. Для использования Svacer только как клиента установка и настройка БД PostgreSQL не требуется, достаточно распаковать архив дистрибутива и использовать файл '''bin/svacer.exe'''.
* Скачайте установщик PostgreSQL для Windows: https://www.postgresql.org/download/windows
* Скачайте установщик PostgreSQL для Windows: https://www.postgresql.org/download/windows
* Установите PostgreSQL, выбрав, как минимум, компоненты "PostgreSQL Server" и "Command Line Tools"
* Установите PostgreSQL, выбрав, как минимум, компоненты "PostgreSQL Server" и "Command Line Tools"
Line 170: Line 110:
   alter user svace superuser;
   alter user svace superuser;
* Выйдите из консоли PostgreSQL
* Выйдите из консоли PostgreSQL
* Скачайте и распакуйте архив дистрибутива Svacer (файл с названием '''svacer_release-<version>.zip''')
* Запустите '''svacer-server.exe''' из консоли с указанием параметров подключения к БД. Если при создании пользователя и БД PostgreSQL вы использовали для них имя по умолчанию 'svace', как в примере выше, то указывать данные для подключения к БД при запуске сервера не обязательно
* В консоли перейдите в директорию дистрибутива и запустите '''svacer.exe'''. Если при создании пользователя и БД PostgreSQL вы использовали для них имя по умолчанию 'svace', как в примере выше, то указывать данные для подключения к БД при запуске сервера не обязательно
   svacer-server.exe run
   cd svacer-release-6-0-3
  bin\svacer.exe server
* Если создавали пользователя или БД с другими именами, то при запуске сервера надо указать их явно
* Если создавали пользователя или БД с другими именами, то при запуске сервера надо указать их явно
   bin\svacer.exe server --pg postgres://svacer_user:svacer_password@127.0.0.1:5432/svacer_database
   svacer-server.exe run --pg postgres://svacer_user:svacer_password@127.0.0.1:5432/svacer_database
* После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080
* После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin
 
==== Установка из .msi ====
* Запустите файл установщика '''svacer-<version>.msi'''. Если появляется окно с предупреждением и текстом "Windows protected your PC", нажмите в нем "More info", а после — кнопку "Run anyway". Cледуйте шагам для установки Svacer
* После завершения установки Svacer будет добавлен в PATH, поэтому можно будет запускать его просто по имени, без полного пути
* Если планируется использовать Svacer только как клиент, то больше никаких действий не требуется
* Если нужно запустить Svacer как сервер — установите и настройте БД PostgreSQL как описано в предыдущей главе
* После настройки PostgreSQL запустите '''svacer.exe''' с указанием параметров подключения к БД аналогично тому, как описано в предыдущей главе
* Также для запуска сервера можете использовать скрипт '''start_svacer_server.cmd''', он устанавливается туда же, куда и сам Svacer и тоже добавляется в PATH. Перед запуском в этом скрипте можете поменять параметры подключения к БД (или не менять, если при создании БД использовали имя по умолчанию 'svace')
 
== Расширенная конфигурация ==
=== Настройка TLS ===
Svacer может быть сконфигурирован для поддержки TLS несколькими способами. Первый способ — использовать reverse proxy с поддержкой HTTPS и проксированием в Svacer по HTTP, второй — запуск Svacer с нативной поддержкой TLS.
 
==== Reverse proxy ====
Данный способ позволяет обеспечить безопасную передачу данных только по протоколу HTTPS, данные по протоколу gRPC передаются в незащищенном виде.
 
===== Nginx =====
Создайте конфигурационный файл с подобным содержанием в '''/etc/nginx/sites-enabled/'''
<pre>
server {
    listen 443 ssl;
    listen [::]:443 ssl;
 
    server_name svacer.ispras.ru;
 
    # for large data transfers and continuous connections
    client_max_body_size        0;
    proxy_connect_timeout      600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;
 
    # path to ssl-certificate and key
    ssl_certificate /etc/ssl/certs/svacer.ispras.ru.crt;
    ssl_certificate_key /etc/ssl/private/svacer.ispras.ru.key;
 
    location / {
        include proxy_params;
 
        # to make WebSockets work
        proxy_http_version  1.1;
        proxy_set_header    Upgrade $http_upgrade;
        proxy_set_header    Connection "upgrade";
 
        # svacer HTTP URL
        proxy_pass http://127.0.0.1:8080;
    }
}
</pre>
 
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Nginx.
  systemctl restart nginx
 
Также, если ваш сервер виден из интернета и его внешний IP-адрес привязан к доменному имени, можете использовать Let's Encrypt и Certbot для получения валидного SSL-сертификата. См. [https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/ эту инструкцию].
 
===== Apache =====
Включите нужные модули в Apache
  sudo a2enmod ssl proxy proxy_http
 
Создайте конфигурационный файл с подобным содержанием в '''/etc/apache2/sites-enabled/'''
<pre>
<VirtualHost *:443>
    SSLEngine On
    ProxyPreserveHost On
    ProxyTimeout 600
   
    # path to ssl-certificate and key
    SSLCertificateFile /etc/ssl/certs/svacer.ispras.ru.crt
    SSLCertificateKeyFile /etc/ssl/private/svacer.ispras.ru.key
   
    # svacer HTTP URL
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/
 
    # to make WebSockets work
    ProxyPass /api/ws/ ws://127.0.0.1:8080/api/ws/
    ProxyPassReverse /api/ws/ ws://127.0.0.1:8080/api/ws/
    RewriteEngine on
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
    RewriteRule /api/ws/(.*) ws://127.0.0.1:8080%{REQUEST_URI} [P]
 
    ServerName svacer.ispras.ru
    ServerAdmin svacer@ispras.ru
</VirtualHost>
</pre>
 
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Apache.
  systemctl restart apache2
 
==== Нативно ====
Данный способ позволяет обеспечить безопасную передачу данных как по протоколу HTTPS, так и по протоколу gRPC. Если сервер запускается с поддержкой TLS, то эта опция относится как к протоколу HTTPS, так и протоколу gRPC.
По умолчанию сервер запускается без поддержки TLS, при этом в логах отображается информация об этом.
TLS for REST and gRPC DISABLED
 
Для запуска сервера с поддержкой TLS необходимо указать сертификат сервера и соответствующий закрытый ключ.
svacer server --ssl-cert svacer.crt --ssl-key svacer.key
 
При этом ключ должен быть в незашифрованном виде. Права доступа к файлу должны быть 0600. В файле сертификата можно указывать цепочку сертификатов. В этом случае сервер, при подключении клиента, будет возвращать всю цепочку. Первым сертификатом в цепочке всегда должен идти сертификат сервера Svacer. Формат файла — PEM. TLS соединение активируется и для протокола REST и для протокола gRPC.
 
Работа сервера по проктолу TLS сопровождается следующей записью в логе:
Using TLS for REST and gRPC protocols
 
Работа с таким сервером через CLI происходит как обычно. Для указания необходимости подключаться по TLS можно явно указать протокол в параметре '''--host''', либо добавить опцию '''--ssl'''.
<pre>
svacer upload --host https://example.com
svacer upload --ssl --host example.com
</pre>
Также в клиенте можно определить параметр '''--ssl-ca-certs'''. Он позволяет задать доверенные сертификаты корневых центров. Указывается шаблон файлов (с *) или конкретный файл. Путь к директории должен быть абсолютным. В случае отсутствия этого параметра используется TLS, но сертификат сервера не проверяется. Этому случаю соответствует запись в логе клиента:
Using weak TLS configuration, because no CA certificate found
 
Если сертификаты были загружены, в логе будет строчка:
added 1 ca certs from /home/user/svacer/svacer.crt
 
Для администрирования сервера в плане используемого сертификата (например, замена при истечении срока действия) добавлена область в CLI svacer admin: '''server:config'''. В данной области есть 3 команды: '''show''', '''reload''', '''update'''. ID в этом случае нужно всегда указывать в значение '''ssl.cert'''.
* '''show''' отображает текущий используемый сертификат
 
:<pre>svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action show</pre>
 
* '''reload''' — заставляет сервер перечитать использованные при старте сервера файлы с сертификатом и ключом
 
:<pre>svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action reload</pre>
 
* '''update''' — позволяет переслать на сервер новый сертификат (и ключ, если надо) и записать их в указанные при старте сервера файлы. При использовании этой команды нужно сформировать файл с новым сертификатом и, при необходимости, ключом, в формате PEM (используете '''cat''' для объединения сертификата и ключа в один файл) и указать этот файл в параметре value. Если в файле не будет указан закрытый ключ, то сервером будет использован текущий (тот, что был указан при запуске). Данная команда также изменит файлы сертификата и ключа (если он указан), указанные при старте сервера, на новые значения.
 
:<pre>svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action update --value svacer.pem</pre>


:Некоторое время после обновления сертификата сервер может использовать старые сертификаты (для уже установленных соединений). Для новых соединений будет использован обновленный сертификат.
== Обновление ==
{{Note|type=reminder|text='''Перед обновлением настоятельно рекомендуется [[Help:Backup|делать резервные копии]]'''}}


=== Выбор сетевых интерфейсов и портов сервера ===
Миграции схем БД PostgreSQL и object store происходят автоматически при обновлении на новую версию Svacer. Поэтому для обновления Svacer достаточно остановить сервер старой версии, запустить сервер новой версии, указав ему те же параметры БД и object store, и подождать, пока не пройдет обновление, после чего Svacer запустится как обычно. При больших объемах данных в БД это может занять существенное время, до нескольких часов. Прогресс можно отслеживать по логам сервера.  
* По умолчанию web-сервер запускается на всех сетевых интерфейсах, на порту 8080 ('''0.0.0.0:8080'''). Для указания конкретного сетевого интерфейса можно использовать опцию '''--listen <network interface>''', для указания другого порта: '''--port <port_number>.
* Аналогично для grpc-сервера: по умолчанию — '''0.0.0.0:3002''', для выбора конкретного интерфейса: '''--listen-grpc <network_interface>''', для указания другого порта: '''--grpc <port_number>'''.
Пример:
  svacer server --listen 127.0.0.1 --port 9090 --listen-grpc 127.0.0.1 --grpc 3004


=== Увеличение лимита открытых файлов ===
Версии не имеют обратной совместимости, то есть после обновления на следующую версию, откатиться на предыдущую можно будет, только восстановив БД из бэкапа.
Актуально только для Linux.


Если проекты большие, или их много, в object store создается большое количество файлов. Для нормальной работы Svacer при этом рекомендуется увеличивать системный лимит количества одновременно открытых файлов.  
{{Note|type=warn|text=После запуска Svacer при обновлении обязательно дождитесь пока миграция БД завершится. Если прервать процесс во время миграции, принудительно остановив Svacer, база данных может оказаться в неконсистентном состоянии и придется восстанавливать данные из бэкапа.}}


В POSIX таких лимита два:
=== Upgrade notes ===
* soft nofiles — текущее максимальное значение
==== 12-x-x ====
* hard nofiles — общесистемное максимальное значение
* Рекомендуем обновить PostgreSQL до версии 15 или выше. С более старыми версиями корректная работа Svacer не гарантируется
* Если вы использовали аутентификацию с помощью LDAP в версиях Svacer 5-1-X и у вас не работает механизм тегирования или уведомлений (подписки), см [[LDAP_configuration#Некоторые_замечания_для_пользователей,_которые_использовали_LDAP_в_версиях_Svacer_5-1-X|решение проблем с отсутствием статуса пользователя в БД]]


В большинстве систем hard значение достаточно большое, а soft обычно маленькое, что и приводит к проблемам. Пример на Debian 11:
==== 11-x-x ====
Нет специфических рекомендаций по обновлению.


  $ ulimit -Sn
==== 10-x-x ====
  1024
Нет специфических рекомендаций по обновлению.
  $ ulimit -Hn
  1048576


Начиная с версии 6-0-0 Svacer пытается автоматически увеличить soft limit до значения hard limit при запуске, а начиная с версии 8-0-0 — проверяет, что увеличить удалось и выводит сообщение с текущим лимитом. Если видите в логах подобную запись — у soft и hard одно, достаточно большое значение — значит все в порядке.
==== 9-0-0 ====
{{Note|type=reminder|text=При обновлении на эту версию рекомендуем не меньше 8GB RAM для корректности миграций}}


  Open files limit (soft and hard): 1048576
Базово, никаких обязательных ручных действий с базой данных или object store при обновлении на 9-0-0 не требуется. Описанные ниже шаги могут помочь увеличить производительность сервера Svacer или решить возможные проблемы.


Для более ранних версий, или если на вашем дистрибутиве Linux это не работает автоматически, можете увеличить лимит вручную одним из следующих способов:
'''1.'''


* Перед запуском Svacer выполнить из консоли команду, увеличив лимит для текущей сессии
В версии 9-0-0 поменялся формат object store, поэтому при обновлении с предыдущих версий Svacer на 9-0-0 или выше будет запущена конвертация object store в новый формат. Конвертация сначала записывает новые данные, а потом, если все прошло успешно, удаляет старые. Из-за этого для конвертации нужно примерно в два раза больше свободного дискового пространства, чем занимает текущий object store. При больших размерах object store и медленном диске конвертация может занять много времени.
  ulimit -Sn 16384


* Либо один раз увеличить на уровне системы — в файл '''/etc/security/limits.conf''' добавить
Конвертация запустится автоматически при обновлении на 9-0-0, но можно запустить вручную отдельно:


  * soft nofile 16384
svacer-server kvconvert --from <path> --to <path>


* Если запускаете Svacer как сервис systemd, добавьте параметр '''LimitNOFILE''' в секцию '''[Service]''' файла описания сервиса.
Расположение object store в файловой системе описано в [[Help:Backup#Бэкап object store вручную|разделе про бэкапы]].
:В файле из .deb/.rpm пакета нашего релиза Svacer этот параметр уже добавлен


  [Service]
'''2.'''
  LimitNOFILE=16384


:После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer
Перед установкой новой версии рекомендуется выполнить следующий запрос в БД для удаления дубликатов описаний чекеров.


  sudo systemctl daemon-reload
delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));
  sudo systemctl restart svacer.service


=== Дополнительные параметры при запуске в docker-контейнере ===
Если вы уже выполняли этот запрос при [[Help:Installation#8-0-0|обновлении на 8-0-0]], то второй раз запускать не обязательно.
При запуске в докер-контейнере можно указать дополнительные параметры, к примеру добавить конфиг для LDAP.


Для этого переопределите команду запуска (см. референс в [[Dockerfile]]) сервиса svacer в docker-compose файле и допишите туда нужные параметры:
'''3.'''


  command: ["/svacer/bin/svacer", "server", "--store", "/data/store", "--pg", "postgres://svace:svace@postgresql:5432/svace", "--ldap", "/svacer/ldap.cfg"]
После обновления на версию 9-0-0 и завершения всех миграций БД (когда станет доступен веб-интерфейс) рекомендуем выполнить команду <code>VACUUM FULL</code> в PostgreSQL для очистки и оптимизации базы данных.


Сам конфигурационный файл можно примонтировать как volume:
psql -h <postgres_host> -U <username> <svacer_database_name> -c 'VACUUM FULL;'


  volumes:
Например:  
    - ./ldap.cfg:/svacer/ldap.cfg


Можете использовать переменные из секции environment docker-compose файла, тогда в строке запуска их надо экранировать с помощью <code>$$</code> и запускать Svacer как команду bash, чтобы в контейнере подставились значения переменных
psql -h localhost -U svacer svacer_db -c 'VACUUM FULL;'


  environment:
==== 8-0-0 ====
    - SVACER_PG_URL=postgres://svace:svace@postgresql:5432/svace
Если при обновлении на версию 8-0-0 и выше возникает подобная ошибка
    - STORE=/data/store
Key (config_id, checker_id, languages, tools)=(4cd178ce-a2b2-4692-a45a-f84b145c807b, FB.ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT, {JAVA}, {SpotBugs}) is duplicated
    - LDAP_CONFIG=/svacer/ldap.cfg
Это значит, что в БД есть дубликаты чекеров. Выполните следующий SQL-запрос в PostgreSQL-базе Svacer, чтобы удалить их:
  volumes:
delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));
    - ./ldap.cfg:/svacer/ldap.cfg
  command: ["bash", "-c", "/svacer/bin/svacer server --store $$STORE --pg $$SVACER_PG_URL --ldap $$LDAP_CONFIG"]

Latest revision as of 12:22, 28 November 2025

Установка и запуск

Для использования только клиента Svacer достаточно скачать исполняемый файл svacer, или установить deb/rpm пакет.

Сервер Svacer можно запустить в докере или из deb/rpm пакета.

docker compose

Рекомендуемый и самый простой способ деплоя — развернуть сервер Svacer в докер-контейнерах, воспользовавшиcь docker-compose.yml файлом:

curl -LO https://svacer.ispras.ru/extra/docker-compose.yml
docker compose up -d

После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.

Для сборки своего докер-образа Svacer можете использовать Dockerfile в качестве референса.

Для указания других параметров сервера можете переопределить команду запуска в docker-compose файле.

deb/rpm

PostgreSQL

Disclaimer
  • Рекомендуемая версия PostgreSQL — 15 и выше. С более старыми версиями корректная работа Svacer не гарантируется.
  • Svacer требует эксклюзивного доступа к базе. Использование одной и той же базы для нескольких экземпляров Svacer может приводить к порче данных.

Для работы сервера Svacer установите PostgreSQL, следуя документации postgres. Для RedHat-based OS нужно дополнительно установить пакет postgresql-contrib соответствующей версии.

Пример для Ubuntu 22:

sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
sudo apt install -y postgresql-17

Пример для Rocky Linux 9.4:

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf -qy module disable postgresql
sudo dnf install -y postgresql17-server postgresql17-contrib
sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
sudo systemctl enable postgresql-17
sudo systemctl start postgresql-17

Браузер для PDF-отчетов

Для создания PDF-отчетов с использованием нового HTML-генератора установите браузер Google Chrome на машину, где запускается сервер Svacer. Рекомендуется устанавливать из официального репозитория, следуя инструкции с сайта google.

Рекомендуемые системные требования при генерации PDF-отчетов для больших проектов с использованием HTML-генератора: Intel Core i9, 64 GB RAM, SSD, видеокарта Nvidia

При запуске Svacer проверит доступность браузера для генерации PDF. Если он не установлен или генерация не работает, будет использован нативный генератор: менее продвинутый, но для него не нужен браузер. Можно явно включить использование нативного генератора, передав опцию --pdf-generator=native при запуске сервера Svacer.

При невозможности установить Google Chrome, например если нет пакета для вашего дистрибутива Linux, можно установить Chromium. Его пакет в репозиториях, в зависимости от вышей ОС, может называться chromium-browser или chromium. В некоторых случаях генерация с Chromium может не работать. Например, если Svacer установлен из deb-пакета, а Сhromium из snap (на Ubuntu он устанавливается именно так даже при использовании apt) и сервер Svacer запускается от отдельного системного пользователя, от которого Chromium не может запуститься. В этом случае установите Google Chrome, с ним генерация работает.

Svacer

На Debian-based OS добавьте apt-репозиторий и установите Svacer из него.

echo 'deb [signed-by=/usr/share/keyrings/ispras.gpg] https://repo.ispras.ru/apt /' | sudo tee /etc/apt/sources.list.d/ispras.list
curl -fsSL https://repo.ispras.ru/apt/key.asc | sudo gpg --dearmor -o /usr/share/keyrings/ispras.gpg
sudo apt update
sudo apt install -y svacer

На RedHat-based OS добавьте dnf-репозиторий и установите Svacer из него

curl -fsSL https://repo.ispras.ru/rpm/ispras.repo | sudo tee /etc/yum.repos.d/ispras.repo
sudo dnf install -y svacer

Для создания БД PostgreSQL запустите psql от учетной записи пользователя postgres

sudo su -l postgres
psql

И выполните следующие запросы:

create database svace;
create user svace with encrypted password 'svace';
grant all privileges on database svace to svace;
alter user svace superuser;

В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace. Также этому пользователю выдаются права суперюзера, что необходимо для создания расширений в PostgreSQL. При использовании этих значений по умолчанию дальнейшая конфигурация не требуется и можно переходить к запуску.

При использовании других значений нужно поменять параметры подключения к БД в файле /etc/default/svacer

SVACER_ARGS="--pg postgres://<user>:<password>@127.0.0.1:5432/<database>"

В этой же строке можно указать прочие аргументы для запуска сервера Svacer.

На Astra Linux необходимо в файле /etc/parsec/mswitch.conf установить параметр zero_if_notfound: yes, иначе при запуске Svacer будет ошибка подключения к БД вида

error obtaining MAC configuration for user "svace" (SQLSTATE 57P03)

После создания БД и конфигурации сервера Svacer запустить его можно следующими командами

sudo systemctl enable svacer
sudo systemctl start svacer

После чего проверить успешность запуска командой

systemctl status svacer

После запуска сервер будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.

Установка и запуск на Windows

PostgreSQL нужен только для сервера Svacer, для клиента не требуется.

  • Скачайте установщик PostgreSQL для Windows: https://www.postgresql.org/download/windows
  • Установите PostgreSQL, выбрав, как минимум, компоненты "PostgreSQL Server" и "Command Line Tools"
  • Задайте и запомните пароль на шаге выбора пароля для суперпользователя
  • Остальные параметры при установке можно оставить по умолчанию
  • После установки PostgreSQL откройте консоль, перейдите в директорию, куда установили PostgreSQL, запустите его клиент с указанием пользователя "postgres" и авторизуйтесь с паролем, заданным во время установки
 cd c:\Program Files\PostgreSQL\15\bin
 psql -U postgres
  • Запустится консоль управления PostgreSQL. Выполните в ней следующие команды, чтобы создать БД и пользователя для Svacer
 create database svace;
 create user svace with encrypted password 'svace';
 grant all privileges on database svace to svace;
 alter user svace superuser;
  • Выйдите из консоли PostgreSQL
  • Запустите svacer-server.exe из консоли с указанием параметров подключения к БД. Если при создании пользователя и БД PostgreSQL вы использовали для них имя по умолчанию 'svace', как в примере выше, то указывать данные для подключения к БД при запуске сервера не обязательно
 svacer-server.exe run
  • Если создавали пользователя или БД с другими именами, то при запуске сервера надо указать их явно
 svacer-server.exe run --pg postgres://svacer_user:svacer_password@127.0.0.1:5432/svacer_database
  • После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin

Обновление

Перед обновлением настоятельно рекомендуется делать резервные копии

Миграции схем БД PostgreSQL и object store происходят автоматически при обновлении на новую версию Svacer. Поэтому для обновления Svacer достаточно остановить сервер старой версии, запустить сервер новой версии, указав ему те же параметры БД и object store, и подождать, пока не пройдет обновление, после чего Svacer запустится как обычно. При больших объемах данных в БД это может занять существенное время, до нескольких часов. Прогресс можно отслеживать по логам сервера.

Версии не имеют обратной совместимости, то есть после обновления на следующую версию, откатиться на предыдущую можно будет, только восстановив БД из бэкапа.

После запуска Svacer при обновлении обязательно дождитесь пока миграция БД завершится. Если прервать процесс во время миграции, принудительно остановив Svacer, база данных может оказаться в неконсистентном состоянии и придется восстанавливать данные из бэкапа.

Upgrade notes

12-x-x

  • Рекомендуем обновить PostgreSQL до версии 15 или выше. С более старыми версиями корректная работа Svacer не гарантируется
  • Если вы использовали аутентификацию с помощью LDAP в версиях Svacer 5-1-X и у вас не работает механизм тегирования или уведомлений (подписки), см решение проблем с отсутствием статуса пользователя в БД

11-x-x

Нет специфических рекомендаций по обновлению.

10-x-x

Нет специфических рекомендаций по обновлению.

9-0-0

При обновлении на эту версию рекомендуем не меньше 8GB RAM для корректности миграций

Базово, никаких обязательных ручных действий с базой данных или object store при обновлении на 9-0-0 не требуется. Описанные ниже шаги могут помочь увеличить производительность сервера Svacer или решить возможные проблемы.

1.

В версии 9-0-0 поменялся формат object store, поэтому при обновлении с предыдущих версий Svacer на 9-0-0 или выше будет запущена конвертация object store в новый формат. Конвертация сначала записывает новые данные, а потом, если все прошло успешно, удаляет старые. Из-за этого для конвертации нужно примерно в два раза больше свободного дискового пространства, чем занимает текущий object store. При больших размерах object store и медленном диске конвертация может занять много времени.

Конвертация запустится автоматически при обновлении на 9-0-0, но можно запустить вручную отдельно:

svacer-server kvconvert --from <path> --to <path>

Расположение object store в файловой системе описано в разделе про бэкапы.

2.

Перед установкой новой версии рекомендуется выполнить следующий запрос в БД для удаления дубликатов описаний чекеров.

delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));

Если вы уже выполняли этот запрос при обновлении на 8-0-0, то второй раз запускать не обязательно.

3.

После обновления на версию 9-0-0 и завершения всех миграций БД (когда станет доступен веб-интерфейс) рекомендуем выполнить команду VACUUM FULL в PostgreSQL для очистки и оптимизации базы данных.

psql -h <postgres_host> -U <username> <svacer_database_name> -c 'VACUUM FULL;'

Например:

psql -h localhost -U svacer svacer_db -c 'VACUUM FULL;'

8-0-0

Если при обновлении на версию 8-0-0 и выше возникает подобная ошибка

Key (config_id, checker_id, languages, tools)=(4cd178ce-a2b2-4692-a45a-f84b145c807b, FB.ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT, {JAVA}, {SpotBugs}) is duplicated

Это значит, что в БД есть дубликаты чекеров. Выполните следующий SQL-запрос в PostgreSQL-базе Svacer, чтобы удалить их:

delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));