{"id":23674560,"url":"https://github.com/hackathon-team-2/currency-converter-backend","last_synced_at":"2026-02-08T17:32:41.139Z","repository":{"id":270057948,"uuid":"899527703","full_name":"hackathon-team-2/currency-converter-backend","owner":"hackathon-team-2","description":"Команда 2. Хакатон Яндекс.Практикум: Сервис для конвертации валют. Backend.","archived":false,"fork":false,"pushed_at":"2024-12-28T11:53:21.000Z","size":355,"stargazers_count":0,"open_issues_count":15,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-05-21T10:49:28.306Z","etag":null,"topics":["celery","celerybeat","docker-compose","drf","gunicorn","nginx","postgresql","redis"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hackathon-team-2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-12-06T13:01:53.000Z","updated_at":"2024-12-28T11:53:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"cffd3d0a-ceeb-4127-818c-066667da1b48","html_url":"https://github.com/hackathon-team-2/currency-converter-backend","commit_stats":null,"previous_names":["hackathon-team-2/currency-converter-backend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hackathon-team-2/currency-converter-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackathon-team-2%2Fcurrency-converter-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackathon-team-2%2Fcurrency-converter-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackathon-team-2%2Fcurrency-converter-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackathon-team-2%2Fcurrency-converter-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hackathon-team-2","download_url":"https://codeload.github.com/hackathon-team-2/currency-converter-backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackathon-team-2%2Fcurrency-converter-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29238325,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T14:18:14.570Z","status":"ssl_error","status_checked_at":"2026-02-08T14:18:14.071Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["celery","celerybeat","docker-compose","drf","gunicorn","nginx","postgresql","redis"],"created_at":"2024-12-29T13:27:34.709Z","updated_at":"2026-02-08T17:32:41.131Z","avatar_url":"https://github.com/hackathon-team-2.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Backend проекта \"Сервис для конвертации валют\"\n\nСоздание API и веб-приложения для конвертации валют с использованием актуальных данных о курсах валют от стороннего API.\n\nДаты проведения: 3 декабря - 28 декабря 2024 года.\n\nОрганизатор: АНО ДПО «Образовательные технологии Яндекса» (Яндекс.Практикум)\n\n[Подробная информация о Хакатоне](https://docs.google.com/document/d/1nQz2IvNutPv28m0HGASbrWm13tV1RCPeAaySq19uk1w/edit?tab=t.0)\n\n### Опубликованное приложение\n\n[Ссылка на сайт](https://currency-converter-team2.vercel.app/)\n\n[Фронтенд приложения](https://github.com/hackathon-team-2/currency-converter-frontend)\n\n[Бэкенд приложения](https://github.com/hackathon-team-2/currency-converter-backend)\n\n[Макет в Figma](https://www.figma.com/design/PHxF5BGFK2kv0NvCDQu1xE/%D0%9A%D0%BE%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B5%D1%80?node-id=1-3\u0026t=hhRhzISQrox11Nxz-0)\n\n## Содержание\n- [Технологии](#технологии)\n- [Локальный запуск проекта](#локальный-запуск-проекта)\n- [Структура проекта](#структура-проекта)\n- [Развёртывание на сервере](#развертывание-проекта-на-удаленном-сервере)\n\n\n## Технологии:\n### Frontend\nHTML5, JavaScript ES6, Sass / SCSS\n### Backend\nPython, Django REST Framework, drf-spectacular, Redis, Celery, Nginx, Docker, GitHub Actions, Gunicorn, corsheaders\n\n\n## Локальный запуск проекта\n1. Склонируйте проекта с git-репозитория и перейдите в корневую директорию проекта:\n```bash\ngit clone https://github.com/hackathon-team-2/currency-converter-backend.git\ncd currency-converter-backend\n```\n2. Используйте .env.example и создайте свой .env:\n```\nAPIKEY                        - токен можно получить здесь - https://freecurrencyapi.com/                \nDB_HOST='postgres_db'         - должен совпадать с названием сервиса postgres_db в docker-compose\n```\n\n3. В терминал для запуска выполните команду:\n\n```bash\ndocker compose up --build  \n```\n\n4. В отдельном терминале из корневой директории проекта выполните команды:\n```bash\ndocker compose exec backend python manage.py migrate\ndocker compose exec backend python manage.py collectstatic\ndocker compose exec backend sh -c 'cp -r /app/collected_static/. /backend_static/static/'\n```\n\n5. Для создания админа выполните команду:\n```bash\ndocker compose exec backend python manage.py createsuperuser\n```\n\n6. Проект станет доступен [по ссылке](http://127.0.0.1:8000/api/convert/?from=USD\u0026to=EUR\u0026amount=1000)\n\u003cimg src=\"screens/drf_interface.png\" alt=\"drf_interface\" style=\"float: left; margin-right: 10px;\" /\u003e\n\n7. Подробное описание станет доступно [по ссылке](http://127.0.0.1:8000/schema/swagger-ui/)\n\u003cimg src=\"screens/swagger_interface.png\" alt=\"swagger_interface\" style=\"float: left; margin-right: 10px;\" /\u003e\n\n8. Админка станет доступна по адресу http://127.0.0.1:8000/admin/\n\n\n## Структура проекта\n\n### Приложение api - сервис для конвертации валюты\n- Вью для get-запроса и обработки параметров  \n- Сериализатор для проверки параметров: наличие, соответствие    \n\nЗапрос:  \n```\nhttp://127.0.0.1:8000/api/convert?from=USD\u0026to=RUB\u0026amount=125\n```\n  \nОтвет:  \n```json\n{\n  \"info\": {\n    \"rate\": 100.0191775342\n  },\n  \"query\": {\n    \"amount\": \"125\",\n    \"from\": \"USD\",\n    \"to\": \"RUB\"\n  },\n  \"result\": 12502.397191775\n} \n```\nПримеры запросов для тестирования сервиса:  \nhttp://127.0.0.1:8000/api/convert?from=USD\u0026to=EUR\u0026amount=100  \nhttp://127.0.0.1:8000/api/convert?from=rub\u0026to=USD\u0026amount=100  \nhttp://127.0.0.1:8000/api/convert?from=RUB\u0026to=eur\u0026amount=5.5   \nhttp://127.0.0.1:8000/api/convert?from=rub\u0026to=qqq\u0026amount=100   \n\n\n### Freecurrencyapi - сторонний api-сервис, предоставляющий информацию о стоимости валют\nРеализация интеграции с сервисом находится в файле api/external_currency/freecurrencyapi.py  \nЧтобы отдельно протестировать работу сервиса:\n1. Допишите в конце файла:  \n```python\nif __name__ == '__main__':\n    result = convert('RUB', 'EUR', 10000)\n    print(result)\n```\n2. Запустите файл:\n```bash\npython api/external_currency/freecurrencyapi.py\n```\n\nДокументация на сервис - https://freecurrencyapi.com/docs/  \nДля подключения к freecurrencyapi нужен apikey, бесплатный тариф имеет ограничения:   \n\"5k Free Monthly Requests + 32 World Currencies + All exchange rates are updated on a daily basis\".  \n\n### Конфиг для логирования\n/api/external_currency/config.py\n\n### Связь фронта с бэком:\nДля связи фронта с бэкендом на удалённом сервере настроен nginx для обеспечения cors-политики.\n\n## Развертывание проекта на удаленном сервере:\n### Выполненные задачи для настройки сервера:\n**Установить на сервере Docker, Docker Compose, Nginx и certbot:**\n```\nsudo apt update\nsudo apt install curl                                   - установка утилиты для скачивания файлов\ncurl -fsSL https://get.docker.com -o get-docker.sh      - скачать скрипт для установки\nsh get-docker.sh                                        - запуск скрипта\nsudo apt-get install docker-compose-plugin              - последняя версия docker compose\nsudo apt install nginx                                  - установка nginx\nsudo systemctl start nginx                              - запуск nginx\nsudo apt install snapd                                  - установка пакетного менеджера snap.\nsudo snap install core; sudo snap refresh core          - установка и обновление зависимостей для пакетного менеджера snap\nsudo snap install --classic certbot                     - установка certbot\nsudo ln -s /snap/bin/certbot /usr/bin/certbot           - создание ссылки на certbot в системной директории для админа\n\n```\n**Создать на сервере директорию converter:**\n```\nmkdir converter\n```\n\n**Для работы с GitHub Actions необходимо в репозитории в разделе Secrets \u003e Actions создать переменные окружения:**\n```\nDOCKER_PASSWORD         - пароль от Docker Hub\nDOCKER_USERNAME         - логин Docker Hub\nHOST                    - публичный IP сервера\nUSER                    - логин пользователя на сервере\nSSH_KEY                 - приватный ssh-ключ\nSSH_PASSPHRASE          - пароль для ssh-ключа\nTELEGRAM_TO             - ID телеграм-аккаунта для посылки сообщения\nTELEGRAM_TOKEN          - токен бота, посылающего сообщение\n```\n**На сервере в директории converter создать файл .env и внести туда ваши данные по примеру из .env.example:**             \nУчтите, что\n```\nDB_HOST='postgres_db'         - должен совпадать с названием сервиса postgres_db в docker-compose\n```\n \n**На сервере настроить nginx:**\n1. На сервере в редакторе nano откройте конфиг Nginx:\n```\nsudo nano /etc/nginx/sites-enabled/default\n```\n2. Замените весь код в файле на этот:\n```\nserver {\n    index index.html;\n    server_tokens off;\n    server_name currency-converter.hopto.org;\n\n\n    location / {\n        add_header 'Access-Control-Allow-Origin' '*';\n        add_header 'Access-Control-Allow-Methods' 'GET';\n        proxy_set_header Host $http_host;\n        proxy_pass http://127.0.0.1:8000;\n    }\n\n}\n```\nВместо currency-converter.hopto.org подставьте свой рабочий домен\n\n\n3. Убедитесь, что в конфиге нет ошибок и перезапустите nginx:\n```\nsudo nginx -t\nsudo service nginx reload\nsudo systemctl restart nginx\n```\n4. Получите ssl сертификат:\n```\nsudo certbot --nginx\nsudo nginx -t\nsudo service nginx reload\n```\n**Склонируйте репозиторий на локальный компьютер:**\n```\ngit clone https://github.com/hackathon-team-2/currency-converter-backend.git\n```\n### После каждого обновления репозитория (push в ветку main) будет происходить:\n\n1. Проверка кода на соответствие стандарту PEP8 (с помощью пакета flake8)\n2. Сборка и доставка докер-образов backend и gateway на Docker Hub\n3. Разворачивание проекта на удаленном сервере\n4. Отправка сообщения в Telegram в случае успеха\n\n### Чтобы создать суперпользователя, после запуска проекта на сервере в директории /converter выполните команду:\n```\nsudo docker compose -f docker-compose.production.yml exec backend python manage.py createsuperuser\n```\n\n## Проект доступен по адресам:\nhttps://currency-converter.hopto.org/schema/swagger-ui/       - Swagger документация                          \nhttps://currency-converter-livid-alpha.vercel.app/            - Готовый проект, связанный с фронтом                        \nhttps://currency-converter.hopto.org/admin/                   - Админка, в которой можно управлять периодическими задачами                             \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackathon-team-2%2Fcurrency-converter-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhackathon-team-2%2Fcurrency-converter-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackathon-team-2%2Fcurrency-converter-backend/lists"}