Avanpost CA : 1. Руководство по установке

1. Руководство по установке

Навигатор по разделу:

Установка из дистрибутива

1.1 Инсталляция и настройка PostgreSQL

Версия PostgreSQL поддерживается начиная с postgresql15, так же пример инсталляции на примере Redos8 (https://redos.red-soft.ru/base/redos-7_3/7_3-administation/7_3-smdb-in-ro/7_3-install-postgresql/).

В данной инструкции пример инсталляции приводится на версии postgresql18

Установить пакет необходимой версии (пример версия 18)

dnf install postgresql18-server


Инициализировать БД

sudo postgresql-18-setup initdb  


Добавить сервис в автозагрузку и запустить, проверить статус

sudo systemctl enable postgresql-18.service --now 
sudo systemctl status postgresql-18.service


Разрешить подключение к БД

echo "host all all 127.0.0.1/0 md5" | sudo tee -a /var/lib/pgsql/18/data/pg_hba.conf 


Включить прослушивание всех адресов

sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /var/lib/pgsql/18/data/postgresql.conf | grep listen_addresses 


Зайти под пользователем в psql

sudo -u postgres psql 


Добавить пароля для пользователя postgres

bash
postgres=# ALTER USER postgres WITH ENCRYPTED PASSWORD 'P@ssw0rd';
# ALTER ROLE
\q


Перезагрузить сервис postgres

sudo systemctl restart postgresql-18.service


1.2 Инсталляция и настройка Avanpost CA


Создать пользователя avanpost и задать в

sudo useradd avanpost -m -d /opt/avanpost


Задать пароль:

sudo passwd avanpost


Перейти в пользователя

su - avanpost


Разархивировать архив 

sudo unzip Avanpost.CA.v0.1+b30d0c8.zip


Создать папку /opt/avanpost/ca/config

mkdir /opt/avanpost/ca/config


Добавить переменные окружения в /opt/avanpost/ca/config/env

ВНИМАНИЕ

Используются в контексте работы сервиса systemd


nano /opt/avanpost/ca/config/env
CA_DATABASE_URL=postgres://postgres:P@ssw0rd@127.0.0.1:5432/postgres?sslmode=disable

Задать переменные окружения и применить их

ВНИМАНИЕ

Используется для применения миграции выполнив команду, и для дальнейшей работы с бинарным файлом ca в консольном режиме


nano /opt/avanpost/.bashrc
export CA_DATABASE_URL=postgres://postgres:P@ssw0rd@127.0.0.1:5432/postgres?sslmode=disable


source .bashrc

Проверить вывод переменной:

echo $CA_DATABASE_URL

Выполнить миграцию.

ВНИМАНИЕ

Данный шаг является не обязательным и будет выполнен в рамках работы сервиса systemd.


/opt/avanpost/tools/migratetool/migratetool
# 2025/09/01 19:11:57 INFO Database migration completed database="migrating: success"
# 2025/09/01 19:11:57 INFO Migration complete


Создать systemd сервис

sudo vi /etc/systemd/system/ca.service


Добавить конфиг

[Unit]
Description=Avanpost CA

[Service]
WorkingDirectory=/opt/avanpost/ca
ExecStart=bash -c 'cd /opt/avanpost/tools/migratetool && ./migratetool && cd /opt/avanpost/ca && ./ca'
Restart=always
RestartSec=10
User=avanpost
EnvironmentFile=/opt/avanpost/ca/config/env
SyslogIdentifier=ca


[Install]
WantedBy=multi-user.targe


Перезагрузить demon

sudo systemctl daemon-reload


Добавить в автозагрузку и запустить сервис

sudo systemctl enable --now ca.service


1.3 Инсталляция и настройка Nginx Reverse Proxy

Установить пакет Nginx

sudo dnf install nginx


Создать конфиг systemd

sudo vim /etc/nginx/conf.d/ca.conf


Добавить в него содержимое

server {
    listen        80;
    server_name   ca01.avanpost.local;

    location /api/ {
        proxy_pass          http://127.0.0.1:9999/api/;
        proxy_http_version  1.1;
        proxy_redirect      off;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   Host              $host;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
    }

    location /swagger/ {
        proxy_pass         http://127.0.0.1:9999/swagger/;
    }

	location /scep/ {
        proxy_pass         http://127.0.0.1:9999/scep/;
    }

    location /ocsp/ {
        proxy_pass         http://127.0.0.1:9999/ocsp/;
    }

    location /public/ {
        proxy_pass         http://127.0.0.1:9999/public/;
    }

    location /wstep/ {
        proxy_pass         http://127.0.0.1:9999/wstep/;
    }

    location / {
        proxy_pass          http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_redirect      off;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   Host              $host;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
    }
}


Отключить Selinux (REDOS)

sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive'/ /etc/selinux/config


Перезагрузить ВМ

sudo init 6


"Быстрый старт" в Docker-е

Avanpost CA может быть развернут в виде набора Docker-контейнеров в среде контейнерной виртуализации. Такой способ развертывания является простым и быстрым, что позволяет его эффективно применять в рамках демо, тестирования, пилотирования и т.д.

Внимание

Для поддержки этого способа развертывания на целевом сервере/компьютере должен быть установлен Docker

Порядок установки:

  1. Разместите файл-архив (Avanpost.CA.v*.zip) с продуктом на сервер в любом удобном месте (например, в home)
  2. Разархивируйте его в папку и перейдите в нее. Структура внутри будет выглядеть следующим образом:
  3. В папке compose отредактируйте файл ca.env и задайте переменные:
    # Адрес API CA (только хост)
    API_URL=change.me # hostname only
    
    # Имя пользователя в БД Postgres
    POSTGRES_USER=change.me
    
    # Пароль пользователя в БД Postgres
    POSTGRES_PASSWORD=change.me
    
    # Имя БД Postgres
    POSTGRES_DB=change.me
    
    # Строка подключения к БД Postgres
    CA_DATABASE_URL=postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@postgres:5432/$POSTGRES_DB?sslmode=disable
    Пример:
    API_URL=ca.local
    POSTGRES_USER=admin
    POSTGRES_PASSWORD=P@ssw0rd
    POSTGRES_DB=ca
    CA_DATABASE_URL=postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@postgres:5432/$POSTGRES_DB?sslmode=disable
  4. В папке compose выполните команду запуска проекта:
    docker compose -p "avanpost-ca" up -d
  5. После того, как контейнеры будут созданы и запущены, можно перейти в административный интерфейс Avanpost CA по адресу http://localhost (если Docker установлен локально) или по адресу сервера


Обсуждение