Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/smolodtsova13/kittygram_final

Социальная сеть для обмена фотографиями питомцев
https://github.com/smolodtsova13/kittygram_final

django django-rest-framework docker docker-compose github-actions gunicorn nginx postgresql python

Last synced: 22 days ago
JSON representation

Социальная сеть для обмена фотографиями питомцев

Awesome Lists containing this project

README

        

# Социальная сеть для котиков Kittygram

## Технологический стек
[![Python](https://img.shields.io/badge/-Python-464646?style=flat&logo=Python&logoColor=56C0C0&color=008080)](https://www.python.org/)
[![Django](https://img.shields.io/badge/-Django-464646?style=flat&logo=Django&logoColor=56C0C0&color=008080)](https://www.djangoproject.com/)
[![Django REST Framework](https://img.shields.io/badge/-Django%20REST%20Framework-464646?style=flat&logo=Django%20REST%20Framework&logoColor=56C0C0&color=008080)](https://www.django-rest-framework.org/)
[![PostgreSQL](https://img.shields.io/badge/-PostgreSQL-464646?style=flat&logo=PostgreSQL&logoColor=56C0C0&color=008080)](https://www.postgresql.org/)
[![Nginx](https://img.shields.io/badge/-NGINX-464646?style=flat&logo=NGINX&logoColor=56C0C0&color=008080)](https://nginx.org/ru/)
[![gunicorn](https://img.shields.io/badge/-gunicorn-464646?style=flat&logo=gunicorn&logoColor=56C0C0&color=008080)](https://gunicorn.org/)
[![Docker](https://img.shields.io/badge/-Docker-464646?style=flat&logo=Docker&logoColor=56C0C0&color=008080)](https://www.docker.com/)
[![Docker-compose](https://img.shields.io/badge/-Docker%20compose-464646?style=flat&logo=Docker&logoColor=56C0C0&color=008080)](https://www.docker.com/)
[![Docker Hub](https://img.shields.io/badge/-Docker%20Hub-464646?style=flat&logo=Docker&logoColor=56C0C0&color=008080)](https://www.docker.com/products/docker-hub)
[![GitHub%20Actions](https://img.shields.io/badge/-GitHub%20Actions-464646?style=flat&logo=GitHub%20actions&logoColor=56C0C0&color=008080)](https://github.com/features/actions)

## Описание проекта Kittygram
Kittygram — это социальная сеть для обмена фотографиями любимых питомцев.
Пользователи могут регистрироваться, загружать фотографии с описанием и смотреть питомцев других пользователей. Также есть возможность добавить/убрать (своего) питомца, подобрать цвет, на который его окрас больше всего походит, рассказть всем о достижениях котика и указать его возраст!

### Запуск проекта

- Склонируйте репозиторий на свой компьютер:
```
git clone [email protected]:SMolodtsova13/kittygram_final.git
```
- Создайте файл `.env` и заполните его своими данными. Все необходимые переменные перечислены в файле `.env.example`, находящемся в корневой директории проекта.

## Создание Docker-образов

- Замените `YOUR_USERNAME` на свой логин на DockerHub:

```
cd frontend
docker build -t YOUR_USERNAME/kittygram_frontend .
cd ../backend
docker build -t YOUR_USERNAME/kittygram_backend .
cd ../nginx
docker build -t YOUR_USERNAME/kittygram_gateway .
```

- Загрузите образы на DockerHub:

```
docker push YOUR_USERNAME/kittygram_frontend
docker push YOUR_USERNAME/kittygram_backend
docker push YOUR_USERNAME/kittygram_gateway
```

## Деплой на сервере

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

```
ssh -i PATH_TO_SSH_KEY/SSH_KEY_NAME YOUR_USERNAME@SERVER_IP_ADDRESS
```

- Создайте на сервере директорию `kittygram`:

```
mkdir kittygram
```

- Установите Docker Compose на сервер:

```
sudo apt update
sudo apt install curl
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo apt install docker-compose
```

- Скопируйте файлы `docker-compose.production.yml` и `.env` в директорию `kittygram/` на сервере:

```
scp -i PATH_TO_SSH_KEY/SSH_KEY_NAME docker-compose.production.yml YOUR_USERNAME@SERVER_IP_ADDRESS:/home/YOUR_USERNAME/kittygram/docker-compose.production.yml
```

Где:
- `PATH_TO_SSH_KEY` - путь к файлу с вашим SSH-ключом
- `SSH_KEY_NAME` - имя файла с вашим SSH-ключом
- `YOUR_USERNAME` - ваше имя пользователя на сервере
- `SERVER_IP_ADDRESS` - IP-адрес вашего сервера

- Запустите Docker Compose в режиме демона:

```
sudo docker-compose -f /home/YOUR_USERNAME/kittygram/docker-compose.production.yml up -d
```

- Выполните миграции, соберите статические файлы бэкенда и скопируйте их в `/static/static/`:

```
sudo docker-compose -f /home/YOUR_USERNAME/kittygram/docker-compose.production.yml exec backend python manage.py migrate
sudo docker-compose -f /home/YOUR_USERNAME/kittygram/docker-compose.production.yml exec backend python manage.py collectstatic
sudo docker-compose -f /home/YOUR_USERNAME/kittygram/docker-compose.production.yml exec backend cp -r /app/collected_static/. /static/static/
```

- Откройте конфигурационный файл Nginx в редакторе nano:

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

- Измените настройки `location` в секции `server`:

```
location / {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:9000;
}
```

- Проверьте правильность конфигурации Nginx:

```
sudo nginx -t
```

Если вы получаете следующий ответ, значит, ошибок нет:
```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

- Перезапустите Nginx:

```
sudo service nginx reload
```
## Настройка CI/CD

- Файл workflow уже написан и находится в директории:

```
kittygram/.github/workflows/main.yml
```

- Для адаптации его к вашему серверу добавьте секреты в GitHub Actions:

```
DOCKER_USERNAME # имя пользователя в DockerHub
DOCKER_PASSWORD # пароль пользователя в DockerHub
HOST # IP-адрес сервера
USER # имя пользователя
SSH_KEY # содержимое приватного SSH-ключа (cat ~/.ssh/id_rsa)
SSH_PASSPHRASE # пароль для SSH-ключа

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

## Автор:
_Молодцова Светлана_
**telegram** _@smolodtsova_