Это сайт сети ресторанов Star Burger. Здесь можно заказать превосходные бургеры с доставкой на дом.
Сеть Star Burger объединяет несколько ресторанов, действующих под единой франшизой. У всех ресторанов одинаковое меню и одинаковые цены. Просто выберите блюдо из меню на сайте и укажите место доставки. Мы сами найдём ближайший к вам ресторан, всё приготовим и привезём.
На сайте есть три независимых интерфейса. Первый — это публичная часть, где можно выбрать блюда из меню, и быстро оформить заказ без регистрации и SMS.
Второй интерфейс предназначен для менеджера. Здесь происходит обработка заказов. Менеджер видит поступившие новые заказы и первым делом созванивается с клиентом, чтобы подтвердить заказ. После оператор выбирает ближайший ресторан и передаёт туда заказ на исполнение. Там всё приготовят и сами доставят еду клиенту.
Третий интерфейс — это админка. Преимущественно им пользуются программисты при разработке сайта. Также сюда заходит менеджер, чтобы обновить меню ресторанов Star Burger.
Тестовая версия сайта развернута тут: Devman-Burgers.RU
Пример показан на основе ОС Ubuntu:
Обновите пакеты, установите Git и Docker:
apt update && apt install git docker
Скачайте код:
git clone https://github.com/devmanorg/star-burger.git
Желательно проекты размещать в /opt/ (вот почему).
Перейдите в каталог проекта:
cd /opt/star-burger
Создайте .env
-файл и пропишите переменные:
DEBUG
— дебаг-режим. ПоставьтеFalse
.SECRET_KEY
— секретный ключ проекта. Он отвечает за шифрование на сайте. Например, им зашифрованы все пароли на вашем сайте. Ключ можно получить тутALLOWED_HOSTS
— см. документацию DjangoYANDEX_GEO_APIKEY
- ключ от API Яндекс-геокодера (инструкция тут).ROLLBAR_ENABLED
- флаг подключения системы мониторинга ROLLBAR.ROLLBAR_ACCESS_TOKEN
- токен от системы мониторинга ROLLBAR (инструкция тут).ROLLBAR_ENVIRONMENT
- название окружения или инсталляции сайта (development
илиproduction
).YOUR_DOMAIN
- домен Вашего сайта (напримерyour_domain.ru
).DOMAIN_NAME
- доменное имя сайта (напримерyour_domain
).DB_ENGINE
- выбранная БД (данная сборка работает на PostgreSQL -django.db.backends.postgresql
).DB_NAME
- имя БД для подключения.DB_USER
- имя пользователя БД.DB_PASSWORD
- пароль к БД.DB_HOST
- адрес подключения к БД. Тут задается имя сервиса - необходимо указатьdb
.DB_PORT
- порт подключения к БД. Для подключения необходимо указать5432
.
Разместите файлы ssl-сертификатов и ключа в каталоге /opt/star-burger/nginx/ssl
:
Файл your_domain.crt
должен иметь вид:
-----BEGIN CERTIFICATE-----
#Ваш сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Промежуточный сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Корневой сертификат#
-----END CERTIFICATE-----
Где:
your_domain.ru
— домен сайта
./nginx/ssl/your_domain.crt
— путь до созданного файла с тремя сертификатами
./nginx/ssl/your_domain.key
— путь до файла с приватным ключом
Запустите сборку контейнеров:
docker-compose up -d --build
Примените миграции в таком порядке:
docker-compose exec web python manage.py migrate auth --noinput
docker-compose exec web python manage.py migrate admin --noinput
docker-compose exec web python manage.py migrate contenttypes --noinput
docker-compose exec web python manage.py migrate sessions --noinput
docker-compose exec web python manage.py migrate foodcartapp --noinput
docker-compose exec web python manage.py migrate address --noinput
Соберите заново статику:
docker-compose exec web python manage.py collectstatic --no-input --clear
Для быстрого обновления кода на сервере используйте скрипт deploy_starburger.sh
:
#!/bin/bash
set -Eeuo pipefail
cd /opt/star-burger/
docker-compose down
git pull
docker-compose up -d --build
docker-compose exec web python manage.py migrate --noinput
docker-compose exec web python manage.py collectstatic --no-input --clear
if [ -f .env ]; then
export $(echo $(cat .env | sed 's/#.*//g'| xargs -0) | envsubst)
fi
LOCAL_USERNAME=$(whoami)
REVISION=$(git rev-parse --short HEAD)
echo "Code version is:" "$REVISION"
echo "Environment:" "$ROLLBAR_ENVIRONMENT"
curl https://api.rollbar.com/api/1/deploy/ \
-F access_token="$ROLLBAR_ACCESS_TOKEN" \
-F environment="$ROLLBAR_ENVIRONMENT" \
-F revision="$REVISION" \
-F local_username="$LOCAL_USERNAME"
printf "\nDeploy completed!\n"
Код написан в учебных целях — это урок в курсе по Python и веб-разработке на сайте Devman. За основу был взят код проекта FoodCart.
Где используется репозиторий:
- Второй и третий урок учебного курса Django