hh-cli-server
Безопасный прокси-сервер для hh-cli.
Описание
hh-cli-server — это веб-сервис, который выступает в роли посредника между hh-cli и API HeadHunter. Его единственная задача — решить фундаментальную проблему безопасности: Client Secret никогда не должен храниться в клиентском приложении. Если поместить его в код hh-cli, любой сможет его извлечь и скомпрометировать.
Примечание: Клиент
hh-cliоперирует только временным кодом авторизации, а сервер проводит рукопожатие и получает токен доступа,Client Secretникогда не покидает сервер.
Развёртывание и разработка
Для развёртывания вам понадобится:
- Сервер под управлением Linux (инструкция написана для Debian/Ubuntu).
- Доменное имя, делегированное на IP-адрес вашего сервера.
- Python 3.9+ и
pip. Client IDиClient Secretот dev.hh.ru.
Шаг 1: Клонирование
Подключитесь к серверу по SSH и склонируйте репозиторий:
git clone https://github.com/fovendor/hhcli-server.git
cd hhcli-server
Шаг 2: Настройка окружения
Установка venv и создание окружения:
sudo apt update && sudo apt install -y python3-venv
python3 -m venv venv
source venv/bin/activate
Установка зависимостей:
pip install -r <(poetry export -f requirements.txt)
Шаг 3: Файл с ключами
Создайте файл .env в корне проекта для хранения ваших API-ключей.
nano .env
Добавьте в него ваши ключи в следующем формате:
HH_CLIENT_ID="ВАШ_ID_КЛИЕНТА"
HH_CLIENT_SECRET="ВАШ_СЕКРЕТ_КЛИЕНТА"
Важно: Этот файл никогда не должен попадать в Git. Он уже добавлен в
.gitignore.
Шаг 4: Настройка Systemd для автозапуска
Создайте сервис, который будет автоматически запускать Gunicorn и стартовать приложение.
sudo nano /etc/systemd/system/hhcli-server.service
Создайте конфигурацию, заменив your_user на имя пользователя системы:
[Unit]
Description=Gunicorn instance to serve hhcli-server
After=network.target
[Service]
User=your_user
Group=www-data
# ЗАМЕНИТЕ 'your_user'
WorkingDirectory=/home/your_user/hhcli-server
# ЗАМЕНИТЕ 'your_user'
EnvironmentFile=/home/your_user/hhcli-server/.env
# ЗАМЕНИТЕ 'your_user'
ExecStart=/home/your_user/hhcli-server/venv/bin/gunicorn --workers 3 --bind unix:hhcli_server.sock -m 007 hhcli_server.app:app
[Install]
WantedBy=multi-user.target
Запустите и включите сервис:
sudo systemctl start hhcli-server
sudo systemctl enable hhcli-server
# Проверьте статус. Должно быть "active (running)"
sudo systemctl status hhcli-server
Шаг 5: Настройка Nginx
Скопируйте пример конфигурации. Нужно заменить все вхождения your_domain.com и your_user на реальные значения.
sudo cp nginx_config/hhcli-server.conf /etc/nginx/sites-available/your_domain.com.conf
sudo nano /etc/nginx/sites-available/your_domain.com.conf
Включите сайт и проверьте конфигурацию Nginx:
# ЗАМЕНИТЕ 'your_domain.com'
sudo ln -s /etc/nginx/sites-available/your_domain.com.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Шаг 6: Настройка HTTPS с Certbot
Это финальный шаг для обеспечения безопасности.
# Устанавливаем Certbot
sudo apt install certbot python3-certbot-nginx
# ЗАМЕНИТЕ 'your_domain.com'
sudo certbot --nginx -d your_domain.com
Следуйте инструкциям Certbot. Он автоматически получит SSL-сертификат и настроит Nginx для работы по HTTPS.
Готово! Ваш прокси-сервер развернут и доступен по адресу https://your_domain.com/.
API Эндпоинты
GET /api/get_config: Возвращает публичныйclient_id.POST /api/exchange_code: Принимает JSON{ "code": "..." }и обменивает его наaccess_token.
Лицензия
Metadata
Release files for hhcli-server 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hhcli_server-0.1.1.tar.gz | 5.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hhcli_server-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.9 kB
Release files / hhcli_server-0.1.1.tar.gz
| Download URL | hhcli_server-0.1.1.tar.gz |
|---|---|
| Size | 5.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
881e788763ecb7b97f740c3a59af606befebc79bc3ac4dace71179df9ebc93f0
|
|
BLAKE2b-256 checksum How to use checksums |
f373ab30ca280669c3da376532b0955523684bac888a2449633a79376e21bf09
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / hhcli_server-0.1.1-py3-none-any.whl
| Download URL | hhcli_server-0.1.1-py3-none-any.whl |
|---|---|
| Size | 5.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a575b1a1a21f03922214165705ff2fd7ddb52fee1464821b23c967dd613f0c01
|
|
BLAKE2b-256 checksum How to use checksums |
779b35c84c55d37629d5a58a01865dddd696dc3a05f4081c8170d32c3fc1decd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|