Сервис автоматически парсит расписание когда вы сохраняете его в указанный бакет MinIO в Excel формате. Предоставляет API для интеграции с клиентом по защищенному соединению. Позволяет отслеживать состояние нагрузки системы в реальном времени.
- Java
- Spring: Web, Data, Security, Actuator
- ApachePOI
- PostgreSQL
- Redis
- MinIO
- Open Telemetry
- Micrometer
- ClickHouse
- Docker
-
Клонируйте репозиторий:
git clone https://github.com/simadimonyan/schedule-parse-system.git cd schedule-parse-service -
Отредактируйте
.envиapplication.properties. Для production дополнительно настройтеgrafana.iniиcompose.yaml. Следуйте комментариям в коде. При наличии доменного имени указывать его по url в соответствии с комментариями. -
Если используется HTTP, закомментируйте строки для nginx в
compose.yaml. Для HTTPS (если у вас нет сертификатов): -
Создайте сертификаты через certbot и локальный nginx вне Docker. Поместите сертификаты в
volumes/nginx/ssl(обновлять каждые 3 месяца), если этой папки нет - создайте ее. Если не выполнить этот шаг - могут возникнуть проблемы с настройкой на уровне настройки ключей и доступа к сервисам. Отредактируйтеconfigs/nginx/nginx.conf. Настройте автообновление сертификатов через crontab. Откройте файл crontab. Выполните следующую команду в терминале:
crontab -e- Это откроет файл crontab в текстовом редакторе. Добавьте строку. В самом низу файла добавьте команду для cron проверки обновления сертификатов дважды в день:
0 0,12 * * * /usr/bin/certbot renew --cert-path /root/schedule-parse-system/volumes/nginx/ssl/fullchain.pem --key-path /root/schedule-parse-system/volumes/nginx/ssl/privkey.pem --post-hook "docker exec nginx nginx nginx -s reload"
- Отредактируйте конфигурационный файл journald (для предотвращения переполнения памяти диска):
sudo nano /etc/systemd/journald.conf- Найдите и измените (или добавьте) строку:
[Journal]
SystemMaxUse=100MНиже приведены основные переменные окружения, используемые сервисом. Укажите их значения в файле .env или соответствующих конфигурациях.
| Переменная | Описание |
|---|---|
POSTGRES_USER |
Имя пользователя для подключения к PostgreSQL |
POSTGRES_PASSWORD |
Пароль пользователя PostgreSQL |
POSTGRES_DB |
Имя базы данных PostgreSQL |
REDIS_USER_PASSWORD |
Пароль для подключения к Redis |
MINIO_ROOT_USER |
Имя root-пользователя MinIO |
MINIO_ROOT_PASSWORD |
Пароль root-пользователя MinIO (должен содержать цифры, спецсимволы и буквы разных регистров) |
MINIO_WEBHOOK_AUTH_TOKEN |
Токен авторизации для вебхука MinIO (используется для интеграции с сервисом) |
PGADMIN_DEFAULT_EMAIL |
Email для входа в pgAdmin |
PGADMIN_DEFAULT_PASSWORD |
Пароль для входа в pgAdmin |
CLICKHOUSE_USER |
Имя пользователя ClickHouse |
CLICKHOUSE_PASSWORD |
Пароль пользователя ClickHouse |
HYPERDX_API_URL |
URL для подключения к HyperDX API (заменить на доменное имя в production) |
HYPERDX_API_PORT |
Порт HyperDX API |
HYPERDX_APP_URL |
URL для подключения к приложению HyperDX (заменить на доменное имя в production) |
HYPERDX_APP_PORT |
Порт приложения HyperDX |
FRONTEND_URL |
URL фронтенда (указать доменное имя в production) |
MINIO_SERVER_URL |
URL сервера MinIO |
MINIO_BROWSER_REDIRECT_URL |
URL для доступа к веб-интерфейсу MinIO (/console для production) |
GF_SECURITY_ADMIN_USER |
Имя администратора Grafana |
GF_SECURITY_ADMIN_PASSWORD |
Пароль администратора Grafana |
sudo docker compose upПри проблемах с правами доступа, где pgAdmin и grafana бесконечно перезапускаются, выполните:
sudo chmod -R 777 ./volumes-
docker exec -it minio /bin/sh -
bash minio-generate-keys.sh(адрес сервера: http://minio:9000) -
Перейдите в
/src/main/resources -
Отредактируйте
application.propertiesс новыми ключами. -
Перезапустите приложение:
docker restart app -
Дождитесь запуска сервиса
app -
docker exec -it minio /bin/sh -
bash minio-manual-init-webhook.sh(повторять с шага 7-8 при перезапуске app) -
Для того, чтобы защитить сервер от переполнения памяти необходимо настроить первичные данные для скрипта перезагрузки и очистки сервисов (очищает volume clickhouse и кеш docker контейнеров):
# 1. Добавьте сгенирированные на шаге 2 MinIO ключи по переменным MINIO_ACCESS_KEY и MINIO_SECRET_KEY на строчках 11 и 12
# 2. Добавьте ваш URL с subpath к сервису для функции wait_for_service на строчках 146 и 147
nano restart-services.sh- Настройте автоочистку и перезапуск через crontab. Откройте файл crontab. Выполните следующую команду в терминале:
crontab -e- Это откроет файл crontab в текстовом редакторе. Добавьте строку. В самом низу файла добавьте команду для cron автоочистки и перезапуска сервисов каждые 12 часов (начиная с 01:00):
0 1,12 * * * /usr/bin/bash /root/schedule-parse-system/restart-services.sh
Инициализируйте четность недели через Swagger:
POST /api/v1/configuration/week/swap
Authorization: Bearer <access-token> (application.properties)
Body:
Bearer <admin-token> (application.properties)
- Подключитесь к базе данных через интерфейс pgAdmin. (адрес: app_db)
- Измените доменное имя в
.env. - Подключите ClickHouse. (адрес: http://clickhouse:8123)
- При ошибках подключения к базе — перезапустите сервис
clickhouse.
- Откройте файл
configs/grafana/grafana.ini. - Найдите и отредактируйте параметры:
- Установите параметр
root_urlс subpath/grafana - Убедитесь, что
serve_from_sub_path = true.
- Установите параметр
- Для production:
- Откройте
compose.yaml. - Удалите строки с портами, чтобы исключить прямой доступ и повысить безопасность соединений.
- Откройте
- Добавьте плагин ClickHouse.
- Добавьте datasource (адрес: clickhouse)
- Импортируйте дашборд из
/configs/grafana/MonitorDashboard.json. - При ошибках подключения — перезапустите сервис базы
clickhouse.
- HyperDX: https://schedule-imsit.ru
- MinIO: https://schedule-imsit.ru/console/
- pgAdmin: https://schedule-imsit.ru/pgadmin/
- Grafana: https://schedule-imsit.ru/grafana/
- API Swagger: https://schedule-imsit.ru/schedule/
- Redis: tcp://schedule-imsit.ru:6379
- Swagger API: http://localhost:8080
- HyperDX: http://localhost:8081
- MinIO: http://localhost:9001
- Grafana: http://localhost:3000
- pgAdmin: http://localhost:15432
- Redis: http://localhost:6380
- PostgreSQL: http://localhost:5432
- Запросы с одного IP: 10 r/s
- TCP соединения с одного IP: 2
- Кеширование ответов с кодом 200: 10 минут
- Время хранения логов, метрик и трассировок: 12 часов




