Git Product home page Git Product logo

kittygram_final's Introduction

Kittygram - Финальный учебный проект от Яндекс.Практикума

Github Actions main workflow Python Docker

Использованные при реализации проекта технологии

  • Docker
  • Django
  • djangorestframework
  • Python
  • gunicorn
  • Nginx
  • PostgreSQL

Как развернуть проект

Для установки проекта потребуется выполнить следующие действия:

Локальная настройка и запуск проекта

Клонировать репозиторий к себе на компьютер и перейти в директорию с проектом:

git clone https://github.com/denis-shtanskiy/kittygram_final.git
cd kittygram_final

Для проекта создать и активировать виртуальное окружение, установить зависимости: для windows:

python -m venv venv
source venv/Scripts/activate
python -m pip install --upgrade pip
pip install -r backend/requirements.txt
cd kittygram_final

для linux:

python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
pip install -r backend/requirements.txt
cd kittygram_final

.env

Для корректной работы backend-части проекта, создайте в корне файл .env и заполните его переменными по примеру из файла .env.example или по примеру ниже:

POSTGRES_DB=kittygram
POSTGRES_USER=kittygram_user
POSTGRES_PASSWORD=kittygram_password
DB_NAME=kittygram
DB_HOST=kitty
DB_PORT=12345
SECRET_KEY=safq12432tdzxqxght_!erks       # стандартный ключ, который создается при старте проекта
DEBUG=True
ALLOWED_HOSTS=['IP_адрес_сервера', '127.0.0.1', 'localhost', 'домен_сервера']

Установите docker compose на свой компьютер. Для запуска проекта на локальной машине достаточно:

  • Запустить проект, ключ -d запускает проект в фоновом режиме
  • выполнить миграции
  • собрать статику и скопировать её
docker compose -f docker-compose.prodauction.yml up --build -d
docker compose -f docker-compose.prodauction.yml exec backend python manage.py migrate
docker compose -f docker-compose.prodauction.yml exec backend python manage.py collectstatic  && \
docker compose -f docker-compose.prodauction.yml exec backend cp -r /app/static_backend/. /backend_static/static/

Если вы используете удаленный сервер

Для работы на удаленном сервере потребуется:

  1. Установить Nginx
  2. Отредактировать конфигурационный файл:
    server {
     server_name IP_адрес_сервера домен_сервера;
    
     location / {
         proxy_pass http://127.0.0.1:9000;
     }
    }
  3. Настроить и установить Docker
  4. Перенести файл `docker-compose.production.yml с локальной машины на удаленную
  5. Запустить контейнеры
  6. Выполнить миграции собрать статику и скопировать её, так же как описано для локальной машины Необходимые команды
sudo apt install nginx -y                                # устанавливаем Nginx
sudo systemctl start nginx                               # запускаем Nginx
sudo nano /etc/nginx/sites-enabled/default               # заходим редактировать файл конфигурации
sudo nginx -t                                            # проверяем корректность настроек
sudo service nginx reload                                # перезапускаем Nginx
sudo service nginx status                                # проверяем что Nginx запущен и работает без ошибок
sudo apt install snapd && \                              # Устанавливаем certbot для получения SSL-сертификата
sudo snap install core && \                              # Устанавливаем certbot для получения SSL-сертификата
sudo snap refresh core && \                              # Устанавливаем certbot для получения SSL-сертификата
sudo snap install --classic certbot && \                 # Устанавливаем certbot для получения SSL-сертификата
sudo ln -s /snap/bin/certbot /usr/bin/certbot            # Устанавливаем certbot для получения SSL-сертификата
sudo certbot --nginx                                     # Запускаем certbot получаем SSL-сертификат
sudo service nginx reload                                # Сертификат автоматически сохранится в конфигурации Nginx
sudo apt update && sudo apt install curl                 # Устанавливаем Docker
curl -fSl https://get.docker.com -o get-docker.sh        # Устанавливаем Docker
sudo sh ./get-docker.sh                                  # Настраиваем Docker
sudo apt-get install docker-compose-plugin               # Настраиваем Docker
sudo nano docker-compose.production.yml                  # В этот файл перенесем содержимое из файла на локальной машине
sudo docker compose -f docker-compose.production.yml up -d # Запускаем контейнеры на удаленном сервере в фоновом режиме

Автоматизация запуска при изменении в коде

Workflow Для постоянного использования CI/CD интеграции и деплоя в репозитории проекта на GitHub в разделе Actions перейти Settings/Secret and variables/Actions нужно прописать переменные окружения для доступа к сервисам - Secrets:

DOCKER_USERNAME                # логин в DockerHub
DOCKER_PASSWORD                # пароль пользователя в DockerHub
DOCKER_USER                    # имя пользователя для репозиториев
HOST                           # ip_address сервера
USER                           # имя пользователя
SSH_KEY                        # приватный ssh-ключ (cat ~/.ssh/id_rsa) по выбору: удаленный сервер или локальная машина
PASSPHRASE                     # кодовая фраза (пароль) для ssh-ключа по выбору: удаленный сервер или локальная машина

TELEGRAM_TO                    # id телеграм-аккаунта (можно узнать у @userinfobot, команда /start)
TELEGRAM_TOKEN                 # токен бота (получить токен можно у @BotFather, /token, имя бота)

По команде git push в репозитории на github отрабатывают сценарии:

  • tests - для всех веток проверка кода по стандартам PEP8 и запуск локальных тестов.
  • build_and_push_to_docker_hub - сборка и отправка образов в удаленный репозиторий на DockerHub
  • deploy - автоматический деплой проекта
  • send_message - отправка соообщения разработчику в Telegram

Автор

Denis Shtanskiy Telegram: @shtanskiy

kittygram_final's People

Contributors

denis-shtanskiy avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.