CareerHub - Вдохновляйтесь и создавайте свою вакансию, находите своего идеального кандидата, делясь возможностями с миром трудоустройства!
Backend и Frontend части командного проекта в рамках Хакатона Яндекс Практикум Х Карьерный трекер "10.2023"
Ссылка на проект: tracker-hiring.ddns.net
CareerHub предоставляет следующие возможности:
-
Регистрация: HR-специалисты могут создать учётную запись на платформе, предоставив необходимую информацию и учётные данные.
-
Создание Вакансий: Зарегистрированные HR-специалисты могут создавать вакансии, предоставляя детальное описание требований, необходимых навыков и других параметров.
-
Поиск Студентов: HR-специалисты имеют доступ к базе данных студентов, отфильтрованной строго по данным из созданной вакансии. Они могут просматривать профили студентов, фильтровать учитывая их навыки, опыт, грейд и специализацию.
-
Избранное и сравнение: HR-специалисты могут добавлять студентов в избранные, чтобы позже к ним вернуться, или добавлять в список сравнения, чтобы индивидуально сравнить кандидатов по всем полям одновременно.
-
Фильтрация и Сортировка: Чтобы найти наилучших кандидатов, платформа предоставляет инструменты для фильтрации студентов по различным дополнительным полям, таким как грейд, навыки, специализация и многим другим.
Репозиторий включает в себя два файла docker-compose.yml и docker-compose.production.yml, что позволяет развернуть проект на локальном или удалённом серверах.
Данная инструкция подразумевает, что на вашем локальном/удалённом сервере уже установлен Git, Python 3.10, пакетный менеджер pip, Docker, Docker Compose, утилита виртуального окружения python3-venv.
В проекте предусмотрена возможность запуска БД SQLite3 и PostgreSQL. Выбор БД осуществляется сменой значения DB_ENGINE на sqlite3 или postgresql. sqlite3 = SQLite3, postgresql = PostgreSQL.
В проекте настроена автодокументация с помощью Swagger. Для ознакомления перейдите по ссылке
С подробными инструкциями запуска вы можете ознакомиться ниже.
Склонируйте проект из репозитория:
git clone https://github.com/D-Nevskiy/CareerHub.git
Перейдите в директорию проекта:
cd CareerHub/
Перейдите в директорию infra и создайте файл .env:
cd infra/
nano .env
Добавьте строки, содержащиеся в файле .env.example и подставьте свои значения.
Пример из .env файла:
SECRET_KEY=DJANGO_SECRET_KEY # Ваш секретный ключ Django
DEBUG=False # True - включить Дебаг. Или оставьте пустым для False
IS_LOGGING=False # True - включить Логирование. Или оставьте пустым для False
ALLOWED_HOSTS=127.0.0.1 backend # Список адресов, разделенных пробелами
# Помните, если вы выставляете DEBUG=False, то необходимо будет настроить список ALLOWED_HOSTS.
# 127.0.0.1 и backend является стандартным значением. Через пробел.
# Присутствие backend в ALLOWED_HOSTS обязательно. Через название сервиса :
# docker-compose осуществляется отправка и подтверджение письма для активации аккаунта :
# с помощью celery и redis.
# БД выбирается автоматически на основе константы DB_ENGINE. Если DB_ENGINE = sqlite , используется SQLite3.
# Если DB_ENGINE = postgresql , используется PostgreSQL.
DB_ENGINE=postgresql
POSTGRES_USER=django_user # Ваше имя пользователя для бд
POSTGRES_PASSWORD=django # Ваш пароль для бд
POSTGRES_DB=django # Название вашей бд
DB_HOST=db # Стандартное значение - db
DB_PORT=5432 # Стандартное значение - 5432
EMAIL_HOST=smtp.yandex.ru # Адрес хоста эл. почты
EMAIL_PORT=465 # Порт эл. почты
EMAIL_USE_TLS=False # Использование TLS
EMAIL_USE_SSL=True # Использование SSL
EMAIL_HOST_USER=careerhub@yandex.ru # Адрес почты, с которой будут отправляться письма
EMAIL_HOST_PASSWORD=SecretPassword # Пароль почты, с которой будут отправляться письма
DEFAULT_FROM_EMAIL=careerhub@yandex.ru # Адрес почты, с которой будут отправляться письма
В директории infra проекта находится файл docker-compose.yml, с помощью которого вы можете запустить проект локально в Docker контейнерах.
Находясь в директории infra выполните следующую команду:
Примечание. Если нужно - добавьте в конец команды флаг -d для запуска в фоновом режиме.
sudo docker compose -f docker-compose.yml up
Она сбилдит Docker образы и запустит backend, frontend, СУБД, Celery, Redis и Nginx в отдельных Docker контейнерах.
Выполните миграции в контейнере с backend:
sudo docker compose -f docker-compose.yml exec careerhub-backend python manage.py makemigrations
sudo docker compose -f docker-compose.yml exec careerhub-backend python manage.py migrate
Соберите статику backend'a:
sudo docker compose -f docker-compose.yml exec careerhub-backend python manage.py collectstatic
По завершении всех операции проект будет запущен и доступен по адресу http://127.0.0.1/
Для остановки Docker контейнеров, находясь в директории infra выполните следующую команду:
sudo docker compose -f docker-compose.yml down
Либо просто завершите работу Docker Compose в терминале, в котором вы его запускали, сочетанием клавиш CTRL+C.
В проекте уже настроен Workflow для GitHub Actions.
Ваш GitHub Actions самостоятельно запустит:
- 🧪 Тесты: Запускаются тесты для проекта.
- 🏗️ Сборку образов: Git Action создает Docker-образы приложения.
- 🚀 Деплой: Образы отправляются на ваш репозиторий DockerHub, проект деплоится на сервер.
- ✉️ Уведомление: В случае успеха вы получите уведомление в Telegram.
Форкните репозиторий, перейдите в GitHub в настройки репозитория — Settings, найдите на панели слева пункт Secrets and Variables, перейдите в Actions, нажмите New repository secret.
Создайте следующие ключи:
Примечание. При подключении к вашему удалённому серверу воркер GitHub Actions создаст .env файл, создаст БД и запустит контейнер с backend'ом, используя эти константы.
# Общие секреты
DOCKER_USERNAME (Ваш логин в DockerHub)
DOCKER_PASSWORD (Ваш пароль в DockerHub)
HOST (IP адрес вашего удалённого сервера)
USER (Логин вашего удалённого сервера)
SSH_KEY (SSH ключ вашего удалённого сервера)
SSH_PASSPHRASE (Пароль вашего удалённого сервера)
TELEGRAM_TO (Ваш ID пользователя в Telegram)
TELEGRAM_TOKEN (Токен вашего бота в Telegram)
# PostgreSQL
POSTGRES_USER(Ваше имя пользователя для бд)
POSTGRES_PASSWORD(Ваш пароль для бд)
POSTGRES_DB(Название вашей бд)
DB_HOST(Адрес бд. Стандартное значение - db)
DB_PORT(Порт бд. Стандартное значение - 5432)
# Django
SECRET_KEY(Ваш секретный ключ Django)
DEBUG(Вкл/выкл DEBUG)
IS_LOGGING(Вкл/выкл Логирование)
ALLOWED_HOSTS(Список адресов, разделенных пробелами)
DB_ENGINE(sqlite или postgresql)
EMAIL_HOST=(Адрес хоста эл. почты)
EMAIL_PORT=(Порт эл. почты)
EMAIL_USE_TLS=(Использование TLS)
EMAIL_USE_SSL=(Использование SSL)
EMAIL_HOST_USER=(Адрес почты, с которой будут отправляться письма)
EMAIL_HOST_PASSWORD=(Пароль почты, с которой будут отправляться письма)
DEFAULT_FROM_EMAIL=(Адрес почты, с которой будут отправляться письма)
Внимание! Для корректного отображения изображений не забудьте помимо localhost, 127.0.0.1 и backend добавить в ALLOWED_HOSTS доменное имя вашего сайта.
Внимание! Дальнейшие действия подразумевают что на вашем удалённом сервере Nginx установлен и настроен как прокси-сервер. Изначально Nginx в Docker-контейнере слушает порт 8500.
В локальном проекте замените в файле docker-compose.production.yml названия образов в соответствии с вашим логином на DockerHub в нижнем регистре (Например your_username/careerhub_backend)
Аналогично измените названия образов и в файле main.yml, который находится в директории /.github/workflows/.
Подключитесь к вашему удалённому серверу любым удобным способом. Создайте в домашней директории директорию с названием careerhub и перейдите в неё.
mkdir careerhub
Готово.
Весь процесс автоматизирован! Как только вы инициируете коммит на локальной машине и отправите изменения на GitHub, GitHub Actions возьмёт дело в свои руки:
git add .
git commit -m "Ваше сообщение для коммита."
git push
После успешной отправки изменений перейдите в своём репозитории на GitHub во вкладку Actions. Вы увидите процесс работы Actions. После успешного окончания работы воркера в ваш Telegram придёт сообщение от бота:
Деплой проекта CareerHub успешно выполнен!
Данное сообщение означает что проект успешно запущен на сервере, проведены миграции и собрана статика backend'а.
После этого можно вернуться на удалённый сервер, в директорию careerhub и создать суперпользователя:
sudo docker compose -f docker-compose.production.yml exec -it careerhub-backend python manage.py createsuperuser
Внимание! : Для полноценной работы проекта на вашем удалённом сервере должен быть установлен, настроен и запущен Nginx. Удостоверьтесь что в конфиге по вашему доменному имени настроена переадресация всех запросов на 127.0.0.1:8500 и добавлена переадресация заголовков.
Чтобы проект отвечал базовым стандартам безопасности необходимо настроить SSL сертификат.
Установите certbot:
sudo apt install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Запустите sertbot и получите свой SSL сертификат:
sudo certbot --nginx
После перезапустите Nginx:
sudo systemctl reload nginx
sudo certbot certificates
Примечание. SSL-сертификаты от Let's Encrypt действительны в течение 90 дней. Их нужно постоянно обновлять. Если вы не хотите делать это самостоятельно, вы можете настроить автоматическое обновление сертификата с помощью команды ниже.
sudo certbot renew --dry-run
Теперь вы можете получить доступ к сайту по его доменному имени.
Как только убедитесь, что все страницы отображаются корректно - можете начать приглашать пользователей для создания вакансий и подбора кандидатов.
Максим Головин
Данил Распопов
Вы можете заглянуть в другие наши репозитории в наших профилях GitHub.