- Проект Meow Moments позволяет пользователям делиться своими фотографиями котиков и просматривать фотографии котиков других пользователей.
- При загрузке фото котика пользователь должен ввести в специальные поля имя котика, год его рождения и, при желании, может добавить ему достижения.
- Добавлять и просматривать фотографии могут только зарегистрированные и авторизованные пользователи.
- Только авторы могут изменять свои фотографии и описание.
Репозиторий включает в себя два файла docker-compose.yml и docker-compose.production.yml, что позволяет развернуть проект как на локальном или удалённом серверах.
Данная инструкция подразумевает, что на вашем локальном сервере уже установлен Git, Python 3.9, пакетные менеджеры npm и pip, Docker, Docker Compose, утилита виртуального окружения python3-venv.
Для локального запуска в ручном режиме настроена и запущена СУБД PostgreSQL.
С подробными инструкциями запуска вы можете ознакомиться ниже.
Полные инструкции по запуску в ручном режиме серверов frontend и backend вы можете найти в соответствующих директориях репозитория в файлах README.md
MeowMoments/frontend/README.md
MeowMoments/backend/README.md
Склонируйте проект из репозитория:
git clone https://github.com/PrimeStr/MeowMoments.git
Перейдите в директорию проекта:
cd MeowMoments/
Создайте файл .env в корне проекта, затем добавьте строки, содержащиеся в файле .env.example и подставьте свои значения.
Пример из .env файла:
# Если вы будете использовать СУБД PostgreSQL - заполните следующие константы.
POSTGRES_USER=your_username # Пользователь Postgres
POSTGRES_PASSWORD=your_password # Пароль пользователя Postgres
POSTGRES_DB=db_name # Название БД
DB_HOST=db # Хост, по дефолту db
DB_PORT=port_for_db # Порт, по дефолту 5432
# Следующие константы необходимо заполнить независимо от выбора СУБД.
SECRET_KEY=DJANGO_SECRET_KEY # Секретный ключ Джанго
DEBUG=False # Выставьте True, если вам нужно включить дебаг. Оставьте пустым если не нужен.
ALLOWED_HOSTS=127.0.0.1 # 127.0.0.1 localhost по дефолту если DEBUG=False. Разделите адреса пробелами.
В корне проекта находится файл docker-compose.yml, с помощью которого вы можете запустить проект локально в Docker контейнерах.
Находясь в корне проекта выполните следующую команду:
Примечание. Если нужно - добавьте в конец команды флаг -d для запуска в фоновом режиме.
sudo docker compose -f docker-compose.yml up
Она сбилдит Docker образы и запустит backend, frontend, СУБД и Nginx в отдельных Docker контейнерах.
Выполните миграции в контейнере с backend:
sudo docker compose -f docker-compose.yml exec backend python manage.py migrate
Соберите статику backend'a:
sudo docker compose -f docker-compose.yml exec backend python manage.py collectstatic
Переместите собранную статику в volume, созданный Docker Compose для хранения статики:
sudo docker compose -f docker-compose.yml exec backend cp -r /app/collected_static/. /static/static/
По завершении всех операции проект будет запущен и доступен по адресу http://127.0.0.1/
Для остановки Docker контейнеров выполните следующую команду в корне проекта:
sudo docker compose -f docker-compose.yml down
Либо просто завершите работу Docker Compose в терминале, в котором вы его запускали, сочетанием клавиш CTRL+C.
В проекте уже настроен Workflow для GitHub Actions.
Ваш GitHub Actions самостоятельно запустит:
- 🧪 Тесты: Запускаются тесты для вашего проекта.
- 🏗️ Сборка образов: Git Action создает Docker-образы вашего приложения.
- 🚀 Деплой: Образы отправляются на ваш репозиторий DockerHub, проект деплоится на сервер.
- ✉️ Уведомление: В случае успеха вы получите уведомление в Telegram.
Перейдите в GitHub в настройки репозитория — Settings, найдите на панели слева пункт Secrets and Variables, перейдите в Actions, нажмите New repository secret.
Создайте следующие ключи:
DOCKER_USERNAME (Ваш логин в DockerHub)
DOCKER_PASSWORD (Ваш пароль в DockerHub)
HOST (IP адресс вашего удалённого сервера)
USER (Логин вашего удалённого сервера)
SSH_KEY (SSH ключ вашего удалённого сервера)
SSH_PASSPHRASE (Пароль вашего удалённого сервера)
TELEGRAM_TO (Ваш ID пользователя в Telegram)
TELEGRAM_TOKEN (Токен вашего бота в Telegram)
Подключитесь к вашему удалённому серверу любым удобным способом. Создайте в домашней директории директорию с названием MeowMoments.
mkdir MeowMoments
Перейдите в созданную директорию и создайте в ней файл .env, затем добавьте строки, содержащиеся в файле .env.example и подставьте свои значения.
nano .env
Пример из .env файла:
# По этим константам будет создана база данных для проекта.
POSTGRES_USER=your_username # Пользователь Postgres
POSTGRES_PASSWORD=your_password # Пароль пользователя Postgres
POSTGRES_DB=db_name # Название БД
DB_HOST=db # Хост, по дефолту db
DB_PORT=port_for_db # Порт, по дефолту 5432
SECRET_KEY=DJANGO_SECRET_KEY # Секретный ключ Джанго
DEBUG=False # Выставьте True, если вам нужно включить дебаг. Оставьте пустым если не нужен.
ALLOWED_HOSTS=127.0.0.1 # 127.0.0.1 localhost по дефолту если DEBUG=False. Разделите адреса пробелами.
При подключении к вашему удалённому серверу воркер GitHub Actions создаст БД и запустит контейнер с backend'ом, используя эти константы.
В локальном проекте замените в файле docker-compose.production.yml названия образов в соответствии с вашим логином на DockerHub в нижнем регистре (Например your_name/MeowMoments_backend)
Аналогично измените названия образов и в файле main.yml, который находится в директории /.github/workflows/.
Весь процесс автоматизирован! Как только вы инициируете коммит и отправите изменения на GitHub, GitHub Action берет дело в свои руки:
git add .
git commit -m "Ваше сообщение для коммита."
git push
После успешной отправки изменений перейдите в своём репозитории на GitHub во вкладку Actions. Вы увидите процесс работы Actions. После окончания работы воркера в ваш Telegram придёт сообщение от бота:
Деплой Meow Moments успешно выполнен!
После этого можно вернуться на удалённый сервер, в директорию MeowMoments и создать суперпользователя:
sudo docker compose -f docker-compose.production.yml exec backend python manage.py createsuperuser
Внимание! : Для полноценной работы проекта на вашем удалённом сервере должен быть установлен, настроен и запущен Nginx. Удостоверьтесь что в конфиге по вашему доменному имени настроена переадресация всех запросов на 127.0.0.1:9000.
Чтобы проект отвечал базовым стандартам безопасности необходимо настроить 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
Запустите sertbot и получите свой SSL сертификат:
sudo certbot --nginx
После перезапустите Nginx:
sudo systemctl reload nginx
sudo certbot certificates
Примечание. SSL-сертификаты от Let's Encrypt действительны в течение 90 дней. Их нужно постоянно обновлять. Если вы не хотите делать это самостоятельно, вы можете настроить автоматическое обновление сертификата с помощью команды ниже.
sudo certbot renew --dry-run
Теперь вы можете получить доступ к сайту по его доменному имени. Как только вы убедитесь, что все работает как надо, можете приглашать пользователей.
Максим Головин
Вы можете заглянуть в другие мои репозитории в моем профиле GitHub. Нажмите здесь.