README.md

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

Технологии

  • Python
  • Django
  • djangorestframework
  • Nginx
  • gunicorn

Установка проекта на локальный компьютер из репозитория

  • Клонировать репозиторий git clone <адрес вашего репозитория>
  • Перейти в директорию с клонированным репозиторием
  • Установить виртуальное окружение python3 -m venv venv
  • Установить зависимости pip install -r requirements.txt
  • В директории /backend/kittygram_backend/ создать файл .env
  • В файле .env прописать ваш SECRET_KEY в виде: SECRET_KEY = '<ваш_ключ>'

Деплой проекта на удаленный сервер

Подключение сервера к аккаунту на GitHub

  • Обновить или установить Git. sudo apt update sudo apt install git
  • Сгенерировать SSH-ключи ssh-keygen
  • Сохранить открытый ключ в вашем аккаунте на GitHub. Для этого вывести ключ в терминал командой cat .ssh/id_rsa.pub. Скопировать ключ от символов ssh-rsa, включительно, и до конца. Добавить это ключ к вашему аккаунту на GitHub.
  • Клонировать проект с GitHub на сервер: git clone git@github.com:Ваш_аккаунт/<Имя проекта>.git

Запуск backend проекта на сервере

  • Установить pip и venv sudo apt install python3-pip python3-venv -y
  • Cоздать и активировать виртуальное окружение python3 -m venv venv source venv/bin/activate
  • Установить зависимости pip install -r requirements.txt
  • Выполнить миграции python manage.py migrate
  • Создать суперюзера python manage.py createsuperuser
  • Отредактировать settings.py на сервере: ALLOWED_HOSTS = ['<внешний адрес вашего сервера>', '127.0.0.1', 'localhost']

Запуск frontend проекта на сервере

  • Установить на сервер Node.js: curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - &&\ sudo apt-get install -y nodejs
  • Установить зависимости. Из директории <ваш проект>/frontend/ выполнить команду: npm i

Установка и запуск Gunicorn

  • При активированном venv установить gunicorn pip install gunicorn==20.1.0
  • Открыть файл settings.py и установить DEBUG = False
  • В директории /etc/systemd/system/ создать файл gunicorn.service sudo vim /etc/systemd/system/gunicorn.service со следующим кодом:

      [Unit]
    
      Description=gunicorn daemon
    
      After=network.target
    
      [Service]
    
      User=yc-user
    
      WorkingDirectory=/home/<имя пользователя в системе>/<имя проекта>/backend/
    
      ExecStart=/home/<имя пользователя в системе>/<имя проекта>/venv/bin/gunicorn --bind 0.0.0.0:8080 kittygram_backend.wsgi
    
      [Install]
    
      WantedBy=multi-user.target
    

Установка и настройка Nginx

  • Dыполнить команду: sudo apt install nginx -y
  • Для установки ограничений на открытые порты выполнить команду: sudo ufw allow 'Nginx Full' && sudo ufw allow OpenSSH
  • Включить файервол sudo ufw enable

    Собрать и разместить статику frontend-приложения.

  • Перейти в директорию <имя_проекта>/frontend/ и выполнить команду npm run build Результат сохранится в директории …/frontend/build/. В системную директорию сервера /var/www/ скопировать содержимое папки /frontend/build/
  • открыть файл конфигурации веб-сервера sudo vim /etc/nginx/sites-enabled/default и заменить его содержимое следующим кодом:

      server {
    
          listen 80;
          server_name публичный_ip_вашего_удаленного_сервера;
    
          location / {
          root   /var/www/<имя проекта>;
          index  index.html index.htm;
          try_files $uri /index.html;
          }
    
      }
    
  • Проверить корректность конфигурации sudo nginx -t
  • Перезагрузить Nginx sudo systemctl reload nginx ### Настроить проксирование запросов
  • Открыть файл конфигурации Nginx /etc/nginx/sites-enabled/default и добавить в него ещё один блок location

      server {
    
          listen 80;
          server_name публичный_ip_вашего_удаленного_сервера;
    
          location /api/ {
              proxy_pass http://127.0.0.1:8080;
          }
    
          location /admin/ {
      	    proxy_pass http://127.0.0.1:8000;
      		}
    
          location / {
              root   /var/www/<имя_проекта>;
              index  index.html index.htm;
              try_files $uri /index.html;
          }
    
      }
    
  • Сохранить изменения, проверить и перезагрузить конфигурацию веб-сервера:

      sudo nginx -t
      sudo systemctl reload nginx
    

    ### Собрать и настроить статику для backend-приложения.

  • в файле settings.py прописать настройки

      STATIC_URL = 'static_backend'
      STATIC_ROOT = BASE_DIR / 'static_backend'
    
  • Активировать venv, перейти в директорию с файлом manage.py и выполнить команду python manage.py collectstatic

  • В директории_<имя_проекта>/backend/_ будет создана директория static_backend/
  • Скопировать директорию static_backend/ в директорию /var/www/<имя_проекта>/

Добавление доменного имени в настройки Django

  • В файле settings.py добавить в список ALLOWED_HOSTS доменное имя: ALLOWED_HOSTS = [‘ip_адрес_вашего_сервера’, ‘127.0.0.1’, ‘localhost’, ‘ваш-домен’]
  • Сохранить изменения и перезапустить gunicorn sudo systemctl restart gunicorn
  • Внести изменения в конфигурацию Nginx. Открыть конфигурационный файл командой: sudo nano /etc/nginx/sites-enabled/default
  • Добавьте в строку server_name выданное вам доменное имя (через пробел, без < >):

      server {
      ...
          server_name <ваш-ip> <ваш-домен>;
      ...
      }
    
  • Проверить конфигурацию sudo nginx -t и перезагрузить её командой sudo systemctl reload nginx, чтобы изменения вступили в силу.

    Получение и настройка 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

  • Запустить certbot и получить SSL-сертификат:

      sudo certbot --nginx
    
  • сертификат автоматически сохранится на вашем сервере в системной директории /etc/ssl/ Также будет автоматически изменена конфигурация Nginx: в файл /etc/nginx/sites-enabled/default добавятся новые настройки и будут прописаны пути к сертификату.
  • перезагрузить конфигурацию Nginx sudo systemctl reload nginx
Конвейеры
0 успешных
0 с ошибкой