|
|
(44 intermediate revisions by 3 users not shown) |
Line 1: |
Line 1: |
| [[Category:Help]] | | [[Category:Help]] |
| == Установка и запуск == | | == Установка == |
| Для работы сервера необходим PostgreSQL. Его можно установить как пакет, либо запустить в докере — docker-compose файл для этого находится в '''./extra/docker-compose-postgres.yml'''. | | Для работы сервера необходим PostgreSQL. Его можно установить как пакет, либо запустить в докере — docker-compose файл для этого находится в '''./extra/docker-compose-postgres.yml'''. |
| Svacer состоит из единственного бинарного файла. Он предоставляет как backend-часть, так и веб-сервер, который передаёт статику. По умолчанию запускается на порту 8080. | | Svacer сервер состоит из единственного бинарного файла — '''svacer'''. Он предоставляет как backend-часть, так и веб-сервер, который передаёт статику. По умолчанию запускается на порту 8080. |
| После запуска по умолчанию создается учётная запись пользователя '''admin''' c паролем '''admin'''. Изменить пароль можно в веб-интерфейсе. | | После запуска по умолчанию создается учётная запись пользователя '''admin''' c паролем '''admin'''. Изменить пароль можно в веб-интерфейсе. |
| Сервер имеет широкие возможности настройки параметров запуска. Узнать о них подробнее можно, прочитав '''svacer --help'''. | | Сервер имеет широкие возможности настройки параметров запуска. Узнать о них подробнее можно, прочитав '''svacer --help'''. |
|
| |
|
| === Установка и запуск из deb/rpm пакета === | | === Установка и запуск из deb/rpm пакета === |
| При установке из .deb или .rpm пакета Svacer ставится в директорию, прописанную в $PATH, поэтому при запуске полный путь к исполняемому файлу '''svacer''' указывать не требуется, он будет доступен просто по имени.
| | Процесс установки из .deb и .rpm пакетов несколько различается и будет описан ниже в отдельных главах. Процесс настройки и запуска не различается и будет описан в одной общей главе. |
|
| |
|
| ==== .deb ==== | | ==== .deb ==== |
| Добавьте apt-репозиторий и установите Svacer из него.
| | Скачайте .deb пакет релиза и выполните следующую команду |
|
| |
|
| <pre>
| | sudo apt install ./svacer_<version>_amd64.deb |
| echo 'deb https://repo.ispras.ru/apt /' | sudo tee /etc/apt/sources.list.d/ispras.list
| |
| wget -q -O - https://repo.ispras.ru/apt/key.asc | sudo apt-key add -
| |
| sudo apt update
| |
| sudo apt install -y svacer
| |
| </pre> | |
|
| |
|
| Если нет возможности установить из репозитория (допустим, на машине без доступа к интернету), скачайте .deb пакет релиза и выполните следующую команду
| | При этом, если в репозиториях есть PostgreSQL нужной версии, он будет установлен автоматически. Если нет, то установка завершится с ошибкой о зависимости от PostgreSQL. В этом случае вам надо будет установить PostgreSQL версии не ниже 10-й (см. [https://www.postgresql.org/download/linux/ документацию]), после чего повторить установку Svacer. |
| | |
| sudo apt install ./svacer_<version>_amd64.deb
| |
| | |
| Если вы планируете использовать Svacer только как клиент для взаимодействия с сервером, то больше ничего устанавливать и конфигурировать не нужно. | |
| | |
| Если планируете использовать Svacer как сервер, установите (или [[Help:Installation#Только_PostgreSQL|запустите в докере]]) PostgreSQL версии не ниже 10-й.
| |
| | |
| На debian-based системах, обычно, чтобы установить PostgreSQL достаточно выполнить команду
| |
| | |
| sudo apt install postgresql
| |
| | |
| Если такая команда не работает, возможно, в репозиториях вашей ОС нет PostgreSQL. В таком случае обратитесь к [https://www.postgresql.org/download/linux/ руководству по установке] PostgreSQL.
| |
| | |
| После установки [[Help:Installation#Настройка_и_запуск|создайте БД и запустите сервер Svacer]].
| |
|
| |
|
| ==== .rpm ==== | | ==== .rpm ==== |
| Скачайте .rpm пакет релиза Svacer и выполните следующую команду
| | Установите PostgeSQL версии не ниже 10-й для вашей ОС следуя [https://www.postgresql.org/download/linux/redhat/ документации]. Дополнительно установите пакет postgresql-contrib из тех же репозиториев. |
| | |
| sudo yum install ./svacer-<version>.x86_64.rpm
| |
| | |
| Если вы планируете использовать Svacer только как клиент для взаимодействия с сервером, то больше ничего устанавливать и конфигурировать не нужно.
| |
| | |
| Если планируете использовать Svacer как сервер, установите (или [[Help:Installation#Только_PostgreSQL|запустите в докере]]) PostgreSQL версии не ниже 10-й, следуя [https://www.postgresql.org/download/linux/redhat/ документации], также установите пакет postgresql-contrib из тех же репозиториев.
| |
|
| |
|
| Пример для Centos 7 | | Пример для Centos 7<br> |
|
| |
|
| <pre>
| | sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm |
| sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
| | sudo yum install -y postgresql14-server postgresql14-contrib |
| sudo yum install -y postgresql14-server postgresql14-contrib
| | sudo /usr/pgsql-14/bin/postgresql-14-setup initdb |
| sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
| | sudo systemctl enable postgresql-14 |
| sudo systemctl enable postgresql-14
| | sudo systemctl start postgresql-14 |
| sudo systemctl start postgresql-14
| |
| </pre>
| |
|
| |
|
| Для версий PostgreSQL ниже 13-й требуется явно разрешить подключение к локальному хосту базы с логином/паролем. Для этого проверьте следующие строчки в конце файла '''/var/lib/pgsql/<version>/data/pg_hba.conf''' | | Для версий PostgreSQL ниже 13-й требуется явно разрешить подключение к локальному хосту базы с логином/паролем. Для этого проверьте следующие строчки в конце файла '''/var/lib/pgsql/<version>/data/pg_hba.conf''' |
|
| |
|
| # IPv4 local connections:
| | # IPv4 local connections: |
| host all all 127.0.0.1/32 ident<br>
| | host all all 127.0.0.1/32 ident<br> |
| # IPv6 local connections:
| | # IPv6 local connections: |
| host all all ::1/128 ident
| | host all all ::1/128 ident |
|
| |
|
| В случае если в последнем столбце указано значение '''ident''', поменяйте его на '''md5''' и перезапустите PostgreSQL. | | В случае если в последнем столбце указано значение '''ident''', поменяйте его на '''md5''' и перезапустите PostgreSQL. |
|
| |
|
| sudo systemctl restart postgresql-12
| | sudo systemctl restart postgresql-12 |
|
| |
|
| После установки [[Help:Installation#Настройка_и_запуск|создайте БД и запустите сервер Svacer]].
| | Скачайте .rpm пакет релиза Svacer и выполните следующую команду |
| | |
| | sudo yum install ./svacer-<version>.x86_64.rpm |
|
| |
|
| ==== Настройка и запуск ==== | | ==== Настройка и запуск ==== |
Line 77: |
Line 52: |
| После установки Svacer требуется создать пользователя и БД PostgreSQL. Для этого перейдите в пользователя postgres, запустите psql и выполните соответствующие запросы, после чего выйдите из консоли PostgreSQL и из пользователя postgres. | | После установки Svacer требуется создать пользователя и БД PostgreSQL. Для этого перейдите в пользователя postgres, запустите psql и выполните соответствующие запросы, после чего выйдите из консоли PostgreSQL и из пользователя postgres. |
|
| |
|
| sudo su -l postgres
| | sudo su -l postgres |
| psql
| | psql |
| postgres=# create database svace;
| | postgres=# create database svace; |
| postgres=# create user svace with encrypted password 'svace';
| | postgres=# create user svace with encrypted password 'svace'; |
| postgres=# grant all privileges on database svace to svace;
| | postgres=# grant all privileges on database svace to svace; |
| postgres=# alter user svace superuser;
| | postgres=# alter user svace superuser; |
|
| |
|
| В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace, а также этому пользователю выдаются права суперюзера (это необходимо для создания расширений в PostgreSQL). При использовании этих значений дальнейшая конфигурация не требуется и можно переходить к запуску. | | В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace, а также этому пользователю выдаются права суперюзера (это необходимо для создания расширений в PostgreSQL). При использовании этих значений дальнейшая конфигурация не требуется и можно переходить к запуску. |
Line 88: |
Line 63: |
| При использовании других имен пользователя, БД или пароля потребуется дополнительная конфигурация перед запуском Svacer: в файле '''/etc/default/svacer''' нужно поменять параметры подключения к БД в строке | | При использовании других имен пользователя, БД или пароля потребуется дополнительная конфигурация перед запуском Svacer: в файле '''/etc/default/svacer''' нужно поменять параметры подключения к БД в строке |
|
| |
|
| SVACER_ARGS="--pg postgres://<user>:<password>@127.0.0.1:5432/<database>"
| | SVACER_ARGS="--pg postgres://<user>:<password>@127.0.0.1:5432/<database>" |
|
| |
|
| В этой же строке можно указывать прочие аргументы для запуска сервера Svacer. | | В этой же строке можно указывать прочие аргументы для запуска сервера Svacer. |
|
| |
| На Astra Linux необходимо в файле '''/etc/parsec/mswitch.conf''' установить параметр <code>zero_if_notfound: yes</code>, иначе при запуске Svacer будет ошибка подключения к БД вида
| |
|
| |
| 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 | | В случае успешного запуска сервер будет доступен по адресу http://localhost:8080 |
| | |
| | При установке из .deb или .rpm пакета Svacer ставится в директорию, прописанную в $PATH, поэтому при запуске Svacer для импорта и загрузки результатов полный путь к исполняемому файлу '''svacer''' указывать не требуется, он будет доступен просто по имени. |
|
| |
|
| === Запуск в docker === | | === Запуск в docker === |
| ==== Svacer + PostgreSQL ====
| |
| Установите docker и docker-compose. Поскольку образы PostgreSQL и Svacer размещены на докер-хабе, для их скачивания при запуске необходимо наличие интернета. | | Установите docker и docker-compose. Поскольку образы PostgreSQL и Svacer размещены на докер-хабе, для их скачивания при запуске необходимо наличие интернета. |
|
| |
|
| Используйте для запуска docker-compose файл, находящийся в дистрибутиве Svacer: '''./extra/docker-compose.yml'''. Перейдите в директорию, где находится этот файл и выполните команду | | Используйте для запуска docker-compose файл, находящийся в дистрибутиве Svacer: '''./extra/docker-compose.yml'''. Перейдите в директорию, где находится этот файл и выполните команду |
|
| |
|
| docker-compose up -d
| | docker-compose up -d |
|
| |
|
| При этом будет запущено два контейнера: PostgreSQL и Svacer. После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080 | | При этом будет запущено два контейнера: PostgreSQL и Svacer. После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080 |
|
| |
|
| В процессе запуска в текущей локации будут созданы две директории | | В процессе запуска в текущей директории будут созданы две директории |
|
| |
|
| * postgres_data — для хранения БД PostgreSQL | | * postgres_data — для хранения БД PostgreSQL |
| * svacer_data — для object store сервера Svacer | | * svacer_data — для object store сервера Svacer |
|
| |
|
| Они будут примонтированы в соответствующие контейнеры, это необходимо для сохранения данных БД и сервера после остановки или перезапуска контейнеров.
| | Эти директории будут примонтированы в соответствующие контейнеры как volumes, это необходимо для сохранения данных БД и сервера после остановки или перезапуска контейнеров. |
|
| |
|
| Важное уточнение: в докере запускается только сервер Svacer. Для импорта и загрузки результатов на сервер будет нужен исполняемый файл svacer. | | Важное уточнение: в докере запускается только сервер Svacer. Для импорта и загрузки результатов на сервер будет нужен исполняемый файл svacer. |
Line 128: |
Line 100: |
| Остановить сервер Svacer можно, выполнив следующую команду | | Остановить сервер Svacer можно, выполнив следующую команду |
|
| |
|
| docker-compose down
| | docker-compose down |
|
| |
|
| Для сборки своего докер-образа Svacer можете использовать [[Dockerfile]] в качестве референса.
| | Также можно запустить в докер-контейнере только PostgreSQL для последующего запуска Svacer вручную. Используйте файл '''./extra/docker-compose-postgres.yml''' |
|
| |
|
| ==== Только PostgreSQL ====
| | docker-compose -f docker-compose-postgres.yml up -d |
| Также можно запустить в докер-контейнере только 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
| | docker-compose -f docker-compose-postgres.yml down |
| | |
| При таком способе запуска создается пользователь и база, указанные в Svacer как параметры по умолчанию, поэтому при запуске сервера Svacer параметр '''--pg''' можно не указывать (и не менять в конфиг-файле '''/etc/default/svacer''' при установке Svacer из пакетов).
| |
|
| |
|
| === Установка и запуск вручную === | | === Установка и запуск вручную === |
| Для установки Svacer скачайте и распакуйте архив дистрибутива (файл с названием '''svacer-<version>.zip'''). | | Для установки Svacer скачайте и распакуйте архив дистрибутива (файл с названием вида '''svacer_release-<version>.zip'''). |
|
| |
|
| При использовании PostgreSQL, предварительно настроенного на каком-либо хосте, необходимо использовать соответствующие параметры запуска. Допустим, PostgreSQL работает на локальном хосте, в нем создана БД '''svacer_db''', доступная от пользователя '''svacer_user''' с паролем '''svacer123'''. В этом случае запустите Svacer со следующими параметрами | | При использовании PostgreSQL, предварительно настроенного на каком-либо хосте, необходимо использовать соответствующие параметры запуска. Допустим, PostgreSQL работает на локальном хосте, в нем создана БД '''svacer_db''', доступная от пользователя '''svacer_user''' с паролем '''svacer123'''. В этом случае запустите Svacer со следующими параметрами |
|
| |
|
| ./bin/svacer server --pg postgres://svacer_user:svacer123@127.0.0.1:5432/svacer_db
| | ./bin/svacer server --pg postgres://svacer_user:svacer123@127.0.0.1:5432/svacer_db |
|
| |
|
| Если вы запустили PostgreSQL в докер-контейнере, используя файл '''./extra/docker-compose-postgres.yml''', то при запуске Svacer параметр '''--pg''' для подключения к БД можно не указывать, поскольку был создан пользователь и база, указанные в Svacer как параметры по умолчанию. | | Если вы запустили PostgreSQL в докер-контейнере, используя файл '''./extra/docker-compose-postgres.yml''', то при запуске Svacer параметр '''--pg''' для подключения к БД можно не указывать, поскольку был создан пользователь и база, прописанные в Svacer как параметры по умолчанию. |
|
| |
|
| После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080 | | После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080 |
| | | По умолчанию web сервер запускается на интерфейсе '''0.0.0.0:<port>'''. Для указания отличного сетевого интерфейса пользователь может использовать опцию '''--listen <network interface>'''. |
| === Установка и запуск на Windows ===
| | По умолчанию grpc сервер запускается на интерфейсе '''0.0.0.0:<port>'''. Для указания отличного сетевого интерфейса пользователь может использовать опцию '''--listen-grpc <network interface>'''. |
| ==== Установка вручную ====
| |
| Далее будут описаны шаги установки и запуска Svacer как сервера. Для использования Svacer только как клиента установка и настройка БД PostgreSQL не требуется, достаточно распаковать архив дистрибутива и использовать файл '''bin/svacer.exe'''.
| |
| * Скачайте установщик 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 (файл с названием '''svacer-<version>.zip''')
| |
| * В консоли перейдите в директорию дистрибутива и запустите '''svacer.exe'''. Если при создании пользователя и БД PostgreSQL вы использовали для них имя по умолчанию 'svace', как в примере выше, то указывать данные для подключения к БД при запуске сервера не обязательно
| |
| cd svacer-8-0-0
| |
| bin\svacer.exe server
| |
| * Если создавали пользователя или БД с другими именами, то при запуске сервера надо указать их явно
| |
| bin\svacer.exe server --pg postgres://svacer_user:svacer_password@127.0.0.1:5432/svacer_database
| |
| * После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080
| |
| | |
| ==== Установка из .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')
| |
| | |
| == Обновление ==
| |
| '''Перед обновлением настоятельно рекомендуется [[Help:Backup#Создание и восстановление резервной копии|делать резервные копии]].'''
| |
| | |
| Миграции схем БД PostgreSQL и object store происходят автоматически при обновлении на новую версию Svacer. Поэтому для обновления Svacer достаточно остановить сервер старой версии, запустить сервер новой версии, указав ему те же параметры БД и object store, и подождать, пока не пройдет обновление, после чего Svacer запустится как обычно. При больших объемах данных в БД это может занять существенное время, до нескольких часов. Прогресс можно отслеживать по логам сервера.
| |
| | |
| <span style="color:#ff0000">
| |
| <big>После запуска Svacer при обновлении обязательно дождитесь пока миграция БД завершится. Если прервать процесс во время миграции, принудительно остановив Svacer, база данных может оказаться в неконсистентном состоянии и придется восстанавливать данные из бэкапа.</big>
| |
| </span>
| |
| | |
| При обновлении сразу на несколько версий вперед желательно последовательно проходить через каждую major версию, выбирая ее последний патч (к примеру, <code>6-0-3 > 7-0-1 > 8-0-0</code>).
| |
| | |
| Версии не имеют обратной совместимости, то есть после обновления на следующую версию, откатиться на предыдущую можно будет, только восстановив БД из бэкапа.
| |
| | |
| === Проблемы и решения ===
| |
| ==== duplicated key ====
| |
| Если при обновлении на версию 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));
| |
| | |
| == Расширенная конфигурация ==
| |
| === Настройка 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>
| |
| | |
| :Некоторое время после обновления сертификата сервер может использовать старые сертификаты (для уже установленных соединений). Для новых соединений будет использован обновленный сертификат.
| |
| | |
| === Выбор сетевых интерфейсов и портов сервера ===
| |
| * По умолчанию 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 при этом рекомендуется увеличивать системный лимит количества одновременно открытых файлов.
| |
| | |
| В POSIX таких лимита два:
| |
| * soft nofiles — текущее максимальное значение
| |
| * hard nofiles — общесистемное максимальное значение
| |
| | |
| В большинстве систем hard значение достаточно большое, а soft обычно маленькое, что и приводит к проблемам. Пример на Debian 11:
| |
| | |
| $ ulimit -Sn
| |
| 1024
| |
| $ ulimit -Hn
| |
| 1048576
| |
| | |
| Начиная с версии 6-0-0 Svacer пытается автоматически увеличить soft limit до значения hard limit при запуске, а начиная с версии 8-0-0 — проверяет, что увеличить удалось и выводит сообщение с текущим лимитом. Если видите в логах подобную запись — у soft и hard одно, достаточно большое значение — значит все в порядке.
| |
| | |
| Open files limit (soft and hard): 1048576
| |
| | |
| Для более ранних версий, или если на вашем дистрибутиве Linux это не работает автоматически, можете увеличить лимит вручную одним из следующих способов:
| |
| | |
| * Перед запуском Svacer выполнить из консоли команду, увеличив лимит для текущей сессии
| |
| ulimit -Sn 16384
| |
| | |
| * Либо один раз увеличить на уровне системы — в файл '''/etc/security/limits.conf''' добавить
| |
| | |
| * soft nofile 16384
| |
| | |
| * Если запускаете Svacer как сервис systemd, добавьте параметр '''LimitNOFILE''' в секцию '''[Service]''' файла описания сервиса.
| |
| :В файле из .deb/.rpm пакета релиза Svacer этот параметр уже добавлен
| |
| | |
| [Service]
| |
| LimitNOFILE=16384
| |
| | |
| :После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer
| |
| | |
| sudo systemctl daemon-reload
| |
| sudo systemctl restart svacer.service
| |
| | |
| === Дополнительные параметры при запуске в docker-контейнере ===
| |
| При запуске в докер-контейнере можно указать дополнительные параметры, к примеру добавить конфиг для LDAP.
| |
| | |
| Для этого переопределите команду запуска (см. референс в [[Dockerfile]]) сервиса svacer в docker-compose файле и допишите туда нужные параметры:
| |
| | |
| command: ["/svacer/bin/svacer", "server", "--store", "/data/store", "--pg", "postgres://svace:svace@postgresql:5432/svace", "--ldap", "/svacer/ldap.cfg"]
| |
| | |
| Сам конфигурационный файл можно примонтировать как volume:
| |
| | |
| volumes:
| |
| - ./ldap.cfg:/svacer/ldap.cfg
| |
| | |
| Можете использовать переменные из секции environment docker-compose файла, тогда в строке запуска их надо экранировать с помощью <code>$$</code> и запускать Svacer как команду bash, чтобы в контейнере подставились значения переменных
| |
| | |
| environment:
| |
| - SVACER_PG_URL=postgres://svace:svace@postgresql:5432/svace
| |
| - STORE=/data/store
| |
| - LDAP_CONFIG=/svacer/ldap.cfg
| |
| volumes:
| |
| - ./ldap.cfg:/svacer/ldap.cfg
| |
| command: ["bash", "-c", "/svacer/bin/svacer server --store $$STORE --pg $$SVACER_PG_URL --ldap $$LDAP_CONFIG"]
| |
Установка
Для работы сервера необходим PostgreSQL. Его можно установить как пакет, либо запустить в докере — docker-compose файл для этого находится в ./extra/docker-compose-postgres.yml.
Svacer сервер состоит из единственного бинарного файла — svacer. Он предоставляет как backend-часть, так и веб-сервер, который передаёт статику. По умолчанию запускается на порту 8080.
После запуска по умолчанию создается учётная запись пользователя admin c паролем admin. Изменить пароль можно в веб-интерфейсе.
Сервер имеет широкие возможности настройки параметров запуска. Узнать о них подробнее можно, прочитав svacer --help.
Установка и запуск из deb/rpm пакета
Процесс установки из .deb и .rpm пакетов несколько различается и будет описан ниже в отдельных главах. Процесс настройки и запуска не различается и будет описан в одной общей главе.
.deb
Скачайте .deb пакет релиза и выполните следующую команду
sudo apt install ./svacer_<version>_amd64.deb
При этом, если в репозиториях есть PostgreSQL нужной версии, он будет установлен автоматически. Если нет, то установка завершится с ошибкой о зависимости от PostgreSQL. В этом случае вам надо будет установить PostgreSQL версии не ниже 10-й (см. документацию), после чего повторить установку Svacer.
.rpm
Установите PostgeSQL версии не ниже 10-й для вашей ОС следуя документации. Дополнительно установите пакет postgresql-contrib из тех же репозиториев.
Пример для Centos 7
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
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
Для версий PostgreSQL ниже 13-й требуется явно разрешить подключение к локальному хосту базы с логином/паролем. Для этого проверьте следующие строчки в конце файла /var/lib/pgsql/<version>/data/pg_hba.conf
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
В случае если в последнем столбце указано значение ident, поменяйте его на md5 и перезапустите PostgreSQL.
sudo systemctl restart postgresql-12
Скачайте .rpm пакет релиза Svacer и выполните следующую команду
sudo yum install ./svacer-<version>.x86_64.rpm
Настройка и запуск
Процесс настройки и запуска одинаковый для Svacer установленного из .deb и .rpm пакетов.
В процессе установки создаются следующие файлы и директории
- /etc/default/svacer — конфигурационный файл
- /var/log/svacer — директория для логов
- /var/lib/svacer — директория для object store
После установки Svacer требуется создать пользователя и БД PostgreSQL. Для этого перейдите в пользователя postgres, запустите psql и выполните соответствующие запросы, после чего выйдите из консоли PostgreSQL и из пользователя postgres.
sudo su -l postgres
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: в файле /etc/default/svacer нужно поменять параметры подключения к БД в строке
SVACER_ARGS="--pg postgres://<user>:<password>@127.0.0.1:5432/<database>"
В этой же строке можно указывать прочие аргументы для запуска сервера Svacer.
После создания БД и настройки конфигурации Svacer запустить его можно следующими командами
sudo systemctl enable svacer
sudo systemctl start svacer
После чего проверить успешность запуска командой
systemctl status svacer
В случае успешного запуска сервер будет доступен по адресу http://localhost:8080
При установке из .deb или .rpm пакета Svacer ставится в директорию, прописанную в $PATH, поэтому при запуске Svacer для импорта и загрузки результатов полный путь к исполняемому файлу svacer указывать не требуется, он будет доступен просто по имени.
Запуск в docker
Установите 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
Эти директории будут примонтированы в соответствующие контейнеры как volumes, это необходимо для сохранения данных БД и сервера после остановки или перезапуска контейнеров.
Важное уточнение: в докере запускается только сервер Svacer. Для импорта и загрузки результатов на сервер будет нужен исполняемый файл svacer.
Остановить сервер Svacer можно, выполнив следующую команду
docker-compose down
Также можно запустить в докер-контейнере только PostgreSQL для последующего запуска Svacer вручную. Используйте файл ./extra/docker-compose-postgres.yml
docker-compose -f docker-compose-postgres.yml up -d
Чтобы остановить, соответственно
docker-compose -f docker-compose-postgres.yml down
Установка и запуск вручную
Для установки 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
По умолчанию web сервер запускается на интерфейсе 0.0.0.0:<port>. Для указания отличного сетевого интерфейса пользователь может использовать опцию --listen <network interface>.
По умолчанию grpc сервер запускается на интерфейсе 0.0.0.0:<port>. Для указания отличного сетевого интерфейса пользователь может использовать опцию --listen-grpc <network interface>.