diff --git a/.assets/hrbox-tiffany.png b/.assets/hrbox-tiffany.png new file mode 100644 index 0000000..608728c Binary files /dev/null and b/.assets/hrbox-tiffany.png differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..5067059 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +![HRBOX](.assets/hrbox-tiffany.png) +--- +В этом репозитории представлены инструкция в pdf и шаблоны для развёртывания HRBOX On-Premise с помощью Docker. +--- diff --git a/templates/Application Server/hrbox/.env b/templates/Application Server/hrbox/.env new file mode 100644 index 0000000..bec413b --- /dev/null +++ b/templates/Application Server/hrbox/.env @@ -0,0 +1,67 @@ +INSTANCE_NAME=onprem +APP_INTERNAL_URL=http://web:80 +APP_COOKIE_VALIDATION_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 32-symbolic key in .env.local +APP_ENCRYPTION_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 64-symbolic key .env.local +SERVICES_INTERNAL_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 64-symbolic key .env.local +CHATBOX_WRAPPING_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 32-symbolic key in .env.local + +S3_ENDPOINT=http://minio:9000 +S3_BUCKET=hrbox +S3_KEY= +S3_SECRET= +S3_REGION=us-east-1 +S3_VERSION=latest +S3_PATH_STYLE=true + +POSTGRES_VHOST=postgresql +POSTGRES_PORT=5432 +POSTGRES_DB=hrbox +POSTGRES_USER=hrbox +POSTGRES_PASSWORD= + +YII_ENV=dev +YII_DEBUG=1 +YII_TRACE_LEVEL=0 + +AUTH_HOST= + +LAUNCHER_CLIENT_ID=launcher +LAUNCHER_ACK=600 +LAUNCHER_FILE_PROCESSES=1 +LAUNCHER_TASK_PROCESSES=5 +LAUNCHER_SEND_PROCESSES=10 +HRBOX_SESSION_PREFIX=HRBOX- + +HR_WEBSERVER=true +HR_WORKER=true + +REDIS_HOST=redis +REDIS_PORT=6379 + +NATS_HOST=nats +NATS_PORT=4222 +NATS_MONITOR_PORT=8222 + +SMTP_USERNAME= +SMTP_PASSWORD= +SMTP_HOST= +SMTP_PORT= +SMTP_FROM= +SMTP_FROM_HOST= +SMTP_SECURITY_TYPE= +SMTP_SSL_ALLOW_SELF_SIGNED= +SMTP_SSL_VERIFY_PEER= + +SENTRY_DSN=https://54139ffa2dda46abba01afe3579346df@sentry.hrserver.ru/8 +GOWORKER_SENTRY_DSN=https://67598c2823c83ec5a9a2247fe39e9b10@sentry.hrserver.ru/20 +CHATBOX_SENTRY_DSN=https://aa682678dc95227e055274b35635d309@sentry.hrserver.ru/21 +DOCCONV_SENTRY_DSN=https://50c2a3514745f82438dea13a35314bb7@sentry.hrserver.ru/15 + +LDAPTLS_REQCERT=never + +#FILE_IMAGE_ALLOWED_EXTENSIONS=png,jpg,gif,webp,jpeg +#FILE_VIDEO_ALLOWED_EXTENSIONS=mov,avi,mp4,webm,wmv,m4p,m4v +#FILE_ARCHIVE_ALLOWED_EXTENSIONS=zip,rar,7z,gz +#FILE_DOCUMENT_ALLOWED_EXTENSIONS=pdf,doc,docx,xls,xlsx,xlsm,csv,ppt,pptx,epub,odt,odp,ods,rtf,djvu,txt,fb2,fb3,mobi +#FILE_OTHER_ALLOWED_EXTENSIONS=mp3,key,eps,epf,torrent,dmg,svg,ai,cdr,indd,psd,enc +#FILE_ENCRYPTED_ALLOWED_EXTENSIONS=enc diff --git a/templates/Application Server/hrbox/.env.local b/templates/Application Server/hrbox/.env.local new file mode 100644 index 0000000..f0ababe --- /dev/null +++ b/templates/Application Server/hrbox/.env.local @@ -0,0 +1,68 @@ +# Основные настройки приложения # +DEFAULT_TENANT_HOSTNAME= # Здесь адрес портала (например, hrbox.company.ru) +FORCE_HTTPS=true # Принудительно использовать HTTPS +APP_ENV=prod # Вариант инсталляции (dev / prod) + +# Настройки внутренних сервисов # +GEONAMES_URL=http://geonames:8181 # Оставьте в соответствии с именем контейнера и порта в docker +# КЭДО +KEDOCA_URL=http://kedoca:8558 # Оставьте в соответствии с именем контейнера и порта в docker +TSP_URL=http://qs.cryptopro.ru/tsp/tsp.srf # Зачастую не изменяется +KEDO_ENGINE=gost +KEDO_ALGORITHM=gost2012_256 +KEDO_PKEYOPT=paramset:A +# Новый воркер +GOWORKER_URL=http://goworker:8686 # Оставьте в соответствии с именем контейнера и порта в docker +GOWORKER_PUSH_MIN_INTERVAL=1s # Минимальный интервал обновления данных + +# Хаб +HUB_URL=https://hub.hrbox.io # Предоставляется HRBOX +HUB_TOKEN= # Предоставляется HRBOX + +# Ключи # +APP_ENCRYPTION_KEY= # Здесь ваш случайный ключ на 64 символа для шифрования +APP_COOKIE_VALIDATION_KEY= # Здесь ваш ключ на 32 символа (для валидации куки) +SERVICES_INTERNAL_SECRET= # Секрет на 64 символа для внутренних сервисов +CHATBOX_WRAPPING_KEY= # Здесь ваш ключ на 32 символа (для шифрования чатов) + +# База данных # +POSTGRES_VHOST=10.0.0.20 # IP хоста БД +POSTGRES_PORT=5432 # Порт хоста БД +POSTGRES_DB=hrbox # Имя базы данных +POSTGRES_USER=hrbox # Имя пользователя владельца базы данных +POSTGRES_PASSWORD=password # Пароль пользователя +POSTGRES_CITUS=false # установить true ТОЛЬКО В СЛУЧАЕ использования расширения Citus + +# NATS JetStream # +NATS_URL=nats://10.0.0.11:4222,nats://10.0.0.12:4222,nats://10.0.0.13:4222 # Перечисление хостов NATS кластера + +# Redis или совместимая нереляционная БД # +REDIS_HOST=10.0.0.13 # IP хоста Redis +REDIS_PORT=6379 # Порт Redis +REDIS_CONNECTION=tcp://10.0.0.13:6379 # Строка подключения, параметр необходим для работы Чатбокса +# REDIS_PASSWORD=password # Пароль от Redis в случае использования парольной аутентификации + +# Объектное оранилище # +S3_ENDPOINT=http://s3.company.com # Адрес объектного хранилища +S3_BUCKET=hrbox-bucket # Имя бакета +S3_KEY=accesskey # Ключ доступа +S3_SECRET=secretkey # Секрет ключа доступа +S3_PREFIX= # Префиксная идентификация, зачастую не требуется +S3_REGION=us-east-1 # Регион, для MinIO по умолчанию оставьте us-east-1 +S3_VERSION=latest # Версия, зачастую по умолчанию latest +S3_PATH_STYLE=true # В большинстве случаев изменение не требуется (false необходимо при использовании AWS S3) + +# Почтовый сервер # Требуется для рассылки приглашений пользователям +SMTP_USERNAME= # Имя пользователя SMTP +SMTP_PASSWORD= # Пароль пользователя SMTP +SMTP_HOST=smtp.yandex.ru # Адрес хоста SMTP для рассылок, для yandex - smtp.yandex.ru +SMTP_PORT=465 # 25, 465 или 687 в зависимости от используемых механизмов защиты. Для Yandex - 465 +SMTP_FROM_HOST=hrbox.company # Установите Ваш домен +SMTP_SECURITY_TYPE=ssl # тип защиты (none, ssl, tls), для Yandex - ssl +SMTP_SSL_ALLOW_SELF_SIGNED=true # Разрешить самоподписанные сертификаты (true / false) +SMTP_SSL_VERIFY_PEER=false # Включить проверку пиров (true / false) +SENDER_ENV=PROD + +# OAuth. Если не используется - не раскомментируйте строки, чтобы не было пустых значений # +# YANDEX_CLIENT_ID= # ID при использовании Yandex OAuth +# YANDEX_CLIENT_PASSWORD= # Пароль при использовании Yandex OAuth \ No newline at end of file diff --git a/templates/Application Server/hrbox/docker-compose.yml b/templates/Application Server/hrbox/docker-compose.yml new file mode 100644 index 0000000..c8e2dd1 --- /dev/null +++ b/templates/Application Server/hrbox/docker-compose.yml @@ -0,0 +1,56 @@ +networks: + hrbox: + +x-common: &common + restart: 'always' + env_file: + - .env + - .env.local + networks: + - hrbox + +services: + web: + <<: *common + image: cr.yandex/crphnph9c2s776j32sjd/hrbox:latest + ports: + - '80:80' + + worker: + <<: *common + image: cr.yandex/crphnph9c2s776j32sjd/hrbox:latest + command: hrbox-worker + + goworker: + <<: *common + image: cr.yandex/crphnph9c2s776j32sjd/hrbox-goworker:latest + ports: + - '8686:8686' + + chatbox: + <<: *common + image: cr.yandex/crphnph9c2s776j32sjd/hrbox-chatbox:latest + ports: + - '9797:9797' + + geonames: + <<: *common + image: cr.yandex/crphnph9c2s776j32sjd/hrbox-geonames:latest + ports: + - '8181:8181' + + file-processor: + <<: *common + image: cr.yandex/crphnph9c2s776j32sjd/hrbox-file-processor:latest + restart: 'always' + depends_on: + - web + + kedoca: + <<: *common + image: cr.yandex/crphnph9c2s776j32sjd/hrbox-kedoca:latest + volumes: + - ./dev/ca-cert:/ca-cert + ports: + - '8558:8558' + diff --git a/templates/Application Server/hrbox/readme.md b/templates/Application Server/hrbox/readme.md new file mode 100644 index 0000000..003c9ed --- /dev/null +++ b/templates/Application Server/hrbox/readme.md @@ -0,0 +1,6 @@ +### HRBOX ### +HRBOX может быть горизонтально масштабирован на любое число Application Servers, что потребует балансировки roundrobin для запросов на домен. На каждом сервере приложения должен быть свой экземпляр NATS, настроенный по требованиям, указанным в *readme* для NATS. + +Для конфигурации используются переменные окружения. Набор неизменяемых переменных представлен в *.env*. Переопределямые под конкретную инсталляцию переменные находятся в *.env.local*. + +Укажите в *.env.local* все необходимые параметры в соответствии с данными в файле комментариями. \ No newline at end of file diff --git a/templates/Application Server/nats/docker-compose.yml b/templates/Application Server/nats/docker-compose.yml new file mode 100644 index 0000000..54d8ed1 --- /dev/null +++ b/templates/Application Server/nats/docker-compose.yml @@ -0,0 +1,20 @@ +volumes: + hrbox-nats-data: + +services: + nats: + restart: "on-failure" + image: nats:2.10 + command: + - "-js" + - "--server_name=nats1" + - "--cluster_name=nats" + - "--cluster=nats://0.0.0.0:6222" + - "--routes=nats-route://10.0.0.12:6222,nats-route://10.0.0.30:6222" + - "--store_dir=/data" + volumes: + - hrbox-nats-data:/data + ports: + - "4222:4222" + - "8222:8222" + - "6222:6222" \ No newline at end of file diff --git a/templates/Application Server/nats/readme.md b/templates/Application Server/nats/readme.md new file mode 100644 index 0000000..250b539 --- /dev/null +++ b/templates/Application Server/nats/readme.md @@ -0,0 +1,10 @@ +### NATS JetStream ### +NATS развёртывается на всех Application Server и на Брокере. +- "--server_name=nats1" — имена должны различаться на всех экземплярах кластера NATS; +- "--cluster_name=nats" — должен совпадать на всех экземплярах; +- "--cluster=nats://0.0.0.0:6222" — оставьте в текущем виде; +- "--routes=nats-route://10.0.0.12:6222,nats-route://10.0.0.30:6222" — здесь указываются пути ко всем *остальным* хостам NATS в кластере. Укажите все, кроме текущего. + +**Не забудьте указать все адреса кластера NATS в .env.local в директории с манифестом для приложения HRBOX на Application Servers и для HR-Conductor на Брокере.** + +NATS_URL=nats://10.0.0.11:4222,nats://10.0.0.12:4222,nats://10.0.0.30:4222 \ No newline at end of file diff --git a/templates/Brocker Server/conductor/.env b/templates/Brocker Server/conductor/.env new file mode 100644 index 0000000..f26545c --- /dev/null +++ b/templates/Brocker Server/conductor/.env @@ -0,0 +1 @@ +NATS_URL=nats://10.0.0.11:4222,nats://10.0.0.12:4222,nats://10.0.0.30:4222 \ No newline at end of file diff --git a/templates/Brocker Server/conductor/docker-compose.yml b/templates/Brocker Server/conductor/docker-compose.yml new file mode 100644 index 0000000..3743974 --- /dev/null +++ b/templates/Brocker Server/conductor/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + hrboxonprem: + +x-common: &common + restart: "on-failure" + env_file: + - .env + networks: + - hrboxonprem + logging: + options: + max-size: "10m" + max-file: "3" + +services: + conductor: + <<: *common + image: cr.yandex/crphnph9c2s776j32sjd/hrbox-conductor:latest + volumes: + - /var/spool/cron/crontabs + - /etc/conductor \ No newline at end of file diff --git a/templates/Brocker Server/conductor/readme.md b/templates/Brocker Server/conductor/readme.md new file mode 100644 index 0000000..bd07ef2 --- /dev/null +++ b/templates/Brocker Server/conductor/readme.md @@ -0,0 +1,2 @@ +### HR-Conductor ### +Conductor используется в для управления cron задачами. Разворачивается в единственном экземпляре и требует единственную переменную окружения — *NATS_URL*, идентичную той, что используется в HRBOX Application. diff --git a/templates/Brocker Server/dragonfly/docker-compose.yml b/templates/Brocker Server/dragonfly/docker-compose.yml new file mode 100644 index 0000000..7234706 --- /dev/null +++ b/templates/Brocker Server/dragonfly/docker-compose.yml @@ -0,0 +1,11 @@ +services: + dragonfly: + image: 'docker.dragonflydb.io/dragonflydb/dragonfly' + ulimits: + memlock: -1 + ports: + - "6379:6379" + volumes: + - dragonflydata:/data +volumes: + dragonflydata: \ No newline at end of file diff --git a/templates/Brocker Server/dragonfly/readme.md b/templates/Brocker Server/dragonfly/readme.md new file mode 100644 index 0000000..dd1afb0 --- /dev/null +++ b/templates/Brocker Server/dragonfly/readme.md @@ -0,0 +1,9 @@ +### Dragonfly ### +Dragonfly - полностью совместимая с Redis РБД, и используется для хранения кэша и сессий пользователя. + +! Данный сервис не обрабатывает персональные и иные чувствительные данные, и в стандартном развёртывании не использует парольную аутентификацию. При необходимости по требованиям безопасности реализации парольной аутентификации: + +(*может значительно повлиять на производительность!*) +- Убедитесь, что HRBOX WebSocket использует версию 2.3 или новее; +- Измените команду запуска Redis/Dragonfly таким образом, чтобы сервис запускался с парольной защитой; +- Добавьте "REDIS_PASSWORD=пароль" во все *.env.local* приложений. diff --git a/templates/Brocker Server/nats/docker-compose.yml b/templates/Brocker Server/nats/docker-compose.yml new file mode 100644 index 0000000..540b530 --- /dev/null +++ b/templates/Brocker Server/nats/docker-compose.yml @@ -0,0 +1,20 @@ +volumes: + hrbox-nats-data: + +services: + nats: + restart: "on-failure" + image: nats:2.10 + command: + - "-js" + - "--server_name=nats3" + - "--cluster_name=nats" + - "--cluster=nats://0.0.0.0:6222" + - "--routes=nats-route://10.0.0.11:6222,nats-route://10.0.0.12:6222" + - "--store_dir=/data" + volumes: + - hrbox-nats-data:/data + ports: + - "4222:4222" + - "8222:8222" + - "6222:6222" \ No newline at end of file diff --git a/templates/Brocker Server/nats/readme.md b/templates/Brocker Server/nats/readme.md new file mode 100644 index 0000000..2799b85 --- /dev/null +++ b/templates/Brocker Server/nats/readme.md @@ -0,0 +1,10 @@ +### NATS JetStream ### +NATS развёртывается на всех Application Server и на Брокере. +- "--server_name=nats3" — имена должны различаться на всех экземплярах кластера NATS; +- "--cluster_name=nats" — должен совпадать на всех экземплярах; +- "--cluster=nats://0.0.0.0:6222" — оставьте в текущем виде; +- "--routes=nats-route://10.0.0.11:6222,nats-route://10.0.0.12:6222" — здесь указываются пути ко всем *остальным* хостам NATS в кластере. Укажите все, кроме текущего. + +**Не забудьте указать все адреса кластера NATS в .env.local в директории с манифестом для приложения HRBOX на Application Servers и для HR-Conductor на Брокере.** + +NATS_URL=nats://10.0.0.11:4222,nats://10.0.0.12:4222,nats://10.0.0.30:4222 \ No newline at end of file