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 с ошибкой