momtheprogram / infra_sprint1

The project was created to practice project management on a remote server, configure servers, test and update code, and deploy the project to a remote server.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Kittigram - социальная сеть для владелцев милых котиокв. Это социальная сеть нужна для обмена фографиями своих любимых питомцев. Платформа разработана на Django в качестве и React. В бэкенд-приложении присутствует RESTful API для взаимодействия с базой данных, обработки запросов. Здесь реализованы модели данных для пользователей, питомцев, фотографий и других сущностей. Также бэкенд предоставляет эндпоинты для регистрации и аутентификации пользователей, добавления новых питомцев и загрузки фотографий. Фронтенд-приложение на React взаимодействует с бэкендом через API, получая данные и отправляя запросы на создание, обновление и удаление объектов. На фронтенде реализованы страницы для просмотра, добавления и редактирования фотографий и профилей питомцев. Безопасность данных обеспечивается использованием аутентификации и авторизации Django. Этот проект может быть запущен на сервере или на локальной машине после установкизависимостей. Это открытый исходный код, поэтому вы можете адаптировать его под свои потребности или вносить свои изменения.

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

Откройте терминал и перейдите в скрытую директорию .ssh — из любой директории выполните команду:

cd ~/.ssh

В директории .ssh создайте новую директорию для SSH-ключей. Выполните команду: mkdir название-директории Перенесите файл SSH-ключa в только что созданную директорию Установите права доступа к файлам SSH-ключей с помощью команд:

chmod 600 название_файла_закрытого_SSH-ключа

Введите команду:

ssh -i путь_до_файла_с_SSH_ключом/название_файла_с_SSH_ключом login@ip

Обновите список доступных пакетов:

sudo apt update

проверьте установлен ли Git:

git --version

если нет то установите:

sudo apt install git

Сгенерируйте SSH ключ и добавьте на GitHub:

ssh-keygen

Сделайте Fork и клонируйте репозиторий:

git clone git@github.com:Ваш_аккаунт/infra_sprint1.git 

Далее установите на сервер пакетный менеджер и утилиту для создания виртуального окружения. Сделать это можно одной командой, перечислив все необходимые к установке пакеты:

sudo apt install python3-pip python3-venv -y

Далее начинайте работать с зависимостями. Перейдите в директорию с бэкенд-приложением проекта, создайте и активируйте виртуальное окружение, установите пакеты из файла requirements.txt:

# Переходим в директорию backend-приложения проекта.

cd infra_sprint1/backend/

# Создаём виртуальное окружение.

python3 -m venv venv

# Активируем виртуальное окружение.

source venv/bin/activate

# Возвращаемся назад 

cd ..

# Устанавливаем зависимости.

pip install -r requirements.txt

Перед запуском бэкенд-приложения — выполните миграции и создайте суперюзера, чтобы протестировать работу панели администратора. Для этого из директории, в которой находится файл manage.py, выполните команды:

# Применяем миграции.

python manage.py migrate

# Создаём суперпользователя.

python manage.py createsuperuser

На удалённом сервере при активированном виртуальном окружении проекта установите пакет gunicorn:

pip install gunicorn==20.1.0

В директории /etc/systemd/system/ создайте файл gunicorn.service и откройте его в Nano/Vim(Советую,мой любимый, даже если не сможете выйти с негоЮ то найдете кучу мемов):

sudo nano /etc/systemd/system/gunicorn.service

или

sudo vim /etc/systemd/system/gunicorn.service

Подставьте в код из листинга свои данные, добавьте этот код без комментариев в файл gunicorn.service и сохраните изменения.

[Unit]
# Это текстовое описание юнита, пояснение для разработчика.
Description=gunicorn daemon 

# Условие: при старте операционной системы запускать процесс только после того, 
# как операционная система загрузится и настроит подключение к сети.
# Ссылка на документацию с возможными вариантами значений 
# https://systemd.io/NETWORK_ONLINE/
After=network.target 

[Service]
# От чьего имени будет происходить запуск:
# укажите имя, под которым вы подключались к серверу.
User=<имя_пользователя> 

# Путь к директории проекта:
# /home/<имя-пользователя-в-системе>/
# <директория-с-проектом>/<директория-с-файлом-manage.py>/.
# Например:
WorkingDirectory=/home/<имя_пользователя>/infra_sprint1/backend/

# Команду, которую вы запускали руками, теперь будет запускать systemd:
# /home/<имя-пользователя-в-системе>/
# <директория-с-проектом>/<путь-до-gunicorn-в-виртуальном-окружении> --bind 0.0.0.0:8000 kittygram_backend.wsgi
ExecStart=/home/<имя_пользователя>/infra_sprint1/backend/venv/bin/gunicorn --bind 0.0.0.0:8000 kittygram_backend.wsgi

[Install]
# В этом параметре указывается вариант запуска процесса.
# Значение <multi-user.target> указывают, чтобы systemd запустил процесс,
# доступный всем пользователям и без графического интерфейса.
WantedBy=multi-user.target

Запустите процесс gunicorn.service:

sudo systemctl start gunicorn

Дополнительной командой добавьте процесс Gunicorn в список автозапуска операционной системы на удалённом сервере: sudo systemctl enable gunicorn Установка Nginx:

sudo systemctl start nginx

Укажите файрволу, какие порты должны остаться открытыми. Для этого выполните на сервере две команды по очереди:

sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH

Теперь включите файрвол:

sudo ufw enable

Перейдите в директорию infra_sprint1/frontend и выполните команду:

npm run build

Чтобы Nginx раздавал статику, он должен знать, где она лежит. У веб-сервера есть системная директория, которую он использует по умолчанию для доступа к статическим файлам, — /var/www/. Скопируйте в эту директорию содержимое папки .../frontend/build/:

# Команда cp — копировать, ключ -r — рекурсивно, включая вложенные папки и файлы.
sudo cp -r /home/yc-user/taski/frontend/build/. /var/www/taski/ 
# Точка после build важна — будет скопировано содержимое директории.

Через редактор Nano/Vim(советую) откройте файл конфигурации веб-сервера:

sudo nano /etc/nginx/sites-enabled/default

или

sudo vim /etc/nginx/sites-enabled/default

Удалите все настройки из файла, запишите и сохраните новые:

server {

    listen 80;
    server_name публичный_ip_вашего_удалённого_сервера;

    # Новый блок.
    location /api/ {
        # Эта команда определяет, куда нужно перенаправить запрос.
        proxy_pass http://127.0.0.1:8000;
    }

    location / {
        root   /var/www/infra_sprint1;
        index  index.html index.htm;
        try_files $uri /index.html;
    }

}

Сохраните изменения, проверьте и перезагрузите конфигурацию веб-сервера:

sudo nginx -t
sudo systemctl reload nginx

Чтобы подготовить бэкенд-приложение для сбора статики, в файле settings.py укажите директорию, куда эту статику нужно сложить. Через редактор Nano откройте файл settings.py, укажите новое значение для константы STATIC_URL и создайте константу STATIC_ROOT:

# Замените стандартное значение 'static' на 'static_backend',
# чтобы не было конфликта запросов к статике фронтенда и бэкенда.
STATIC_URL = 'static_backend'
# Укажите директорию, куда бэкенд-приложение должно сложить статику.
STATIC_ROOT = BASE_DIR / 'static_backend'
# Укажите по какому адресу будет делаться запрос
MEDIA_URL = '/media/'
# Укажите директорию, куда бэкенд-приложение должно сложить картинки.
MEDIA_ROOT = '/var/www/kittygram/media' 

Теперь собираем статику бэкенд-приложения: сохраните изменения и закройте файл, на удалённом сервере при активированном виртуальном окружении перейдите в директорию с файлом manage.py и выполните команду:

python manage.py collectstatic

Перейдите в корень проекта Kittygram и скопируйте директорию static_backend/ в директорию /var/www/infra_sprint1/. Для этого выполните команду:

sudo cp -r /home/yc-user/taski/backend/static_backend/ /var/www/taski/

Чтобы изменения в файле settings.py вступили в силу, перезапустите Gunicorn:

sudo systemctl restart gunicorn

Находясь на сервере, перейдите в директорию /taski/backend/backend, с помощью Nano откройте файл settings.py и добавьте в список ALLOWED_HOSTS полученное доменное имя:

ALLOWED_HOSTS = ['xxx.xxx.xxx.xxx', '127.0.0.1', 'localhost', 'ваш-домен'] 
# Вместо xxx.xxx.xxx.xxx — IP вашего сервера.
# Домен вводится в формате 'project.hopto.org'.

Сохраните изменения и перезапустите Gunicorn командой:

sudo systemctl restart gunicorn

Измените конфигурационный файл Nginx:

sudo nano /etc/nginx/sites-enabled/default

Перезагрузите nginx:

sudo systemctl reload nginx

Устновите ssl-сертификаты: Ссылка на certbot

Файл .env должен содержать такие переменные:

-DEBUG, -SECRET_KEY

Технологии

1.Frontend:

Node.js Next.js React\

  • Полный список библиотек в файле packeje.json

2.Backend:

Django DRF Gunicorn Pillow

  • Полный список библиотек в файле requirements.txt

3.Сервер:

nginx

Автор проекта Ляховицкая Наталья https://github.com/momtheprogram/api_yatube

About

The project was created to practice project management on a remote server, configure servers, test and update code, and deploy the project to a remote server.


Languages

Language:JavaScript 48.4%Language:CSS 31.7%Language:Python 18.3%Language:HTML 1.6%