Как запустить проект django на другом компьютере

Обновлено: 03.07.2024

Django это наверно самый популярный на сегодняшний день фреймвор для создания сайтов, написан он языке Python. Для разработки любого веб приложения или целого сайт нужен локальный веб сервер, с помощью которого можно тестировать написанное. Локальных веб серверов достаточно много, есть готовые сборки включающие в себя полный комплект инструментов, например, XAMPP после установки вы получите Apache, MySQL, интерпретатор скриптов PHP и т.д. Но в Django есть собственный локальный веб сервер. Для того чтобы начать им пользоваться достаточно его запустить одной командой. Давайте подробно расскажу о том как запустить локальный веб сервер Django.

Рекомендую прочитать следующие статьи которые касаются темы создания и разработки сайтов.

Как запустить локальный веб сервер Django

И так у вас установлен фреймворк Django, теперь необходимо создать проект. Для этого открываем командную строку и переходим в папку \Django, введя команду.

Дальше создаем проект командой.

django-admin startproject myproekt

После выполнения этой команды в папке C:\Python\django появиться новый проект myproekt.

Сервер Django

Для того чтобы запустить локальный веб сервер Django нужно перейти в папку с созданным проектом

и запустить сервер введя команду.

Кстати после runserver можно указать IP адрес вашего компьютера и порт, например.

python manage.py runserver 192.168.0.1

В этом случае веб сервер будет доступен по указанному IP а не по стандартному 127.0.0.1.

python manage.py runserver 9123

А в этом случае открыть сайт можно будет только указав порт 9123.

Если ни чего не указывать то доступ к сайт можно получить введя в браузере 127.0.0.1:8000.

Запуск локального сервера Django

Осталось только проверить все ли работает правильно. Открываем браузер и вводим адрес, если вы видите вот такую страницу значить все хорошо.

Как запустить локальный веб сервер Django

Я младший инженер-программист, и я совсем новичок в Django. Я создал это приложение и работаю над README, чтобы объяснить другим, как создавать, клонировать и настраивать приложение на своих машинах. Я застрял при попытке воссоздать шаги.

Это порядок, в котором я разработал шаги:

  1. Вилка и клон репо
  2. Источник виртуальной среды
  3. Требования к установке Pip.txt
  4. Получите access_token и secret_key и сохраните в secrets.sh
  5. Настройте Postgres DB, создайте пользователя и базу данных
  6. Миграция (?) - вот где я застреваю!

Я попытался перенести приложение, но не применимо.

Я пытался django-admin startproject ig_miner_app . но я получаю этот код ошибки:

CommandError: /Users/Erin/Desktop/CodeByEAllard/project/instagram_miner/manage.py already exists, overlaying a project or app into an existing directory won't replace conflicting files

Если я смогу разобраться с этим, я просто смогу запустить сервер как обычно, верно?

Я уверен, что что-то упустил (или многие вещи), но не знаю, что это такое. Я чувствую себя глупо, потому что я, очевидно, был в состоянии создать приложение в первую очередь, но не могу понять, как объяснить кому-то еще, чтобы сделать то же самое! Есть ли какие-либо предложения о том, как заставить сервер работать?

Во-первых, вы получаете эту ошибку, потому что вы запускаете проект в том же каталоге, что и клонированный проект, этот каталог уже содержит приложение с именем ig_miner_app и, следовательно, конфликт имени.

Что касается шагов по запуску проекта другими пользователями, это должно работать.

Создать и запустить виртуальную среду

Установите зависимости проекта:

Создать файл с именем "secrets.sh"

touch secrets.sh (Mac и Linux)

Получить секрет от MiniWebTool и добавить его в secrets.sh

Добавить секретный файл .sh в файл .gitignore

Создайте базу данных postgres и добавьте учетные данные в settings.py

Создать учетную запись администратора

Сделать миграции для приложения

Затем снова запустить

Запустить сервер разработки

И откройте localhost: 8000 в браузере, чтобы просмотреть приложение.

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

Как вы сказали, когда вы клонируете репо, вы должны установить требования

После этого вам необходимо настроить базу данных. Добавьте подробности в settings.py

Как только это будет сделано, и у вас есть ключи и секреты, вы должны выполнить миграцию, а затем мигрировать.

Перейдите в каталог приложения и запустите

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

Применить миграцию, которая фактически создает таблицы базы данных.

Теперь, когда вы вносите какие-либо изменения в модели или добавляете дополнительные модели или поля, вам необходимо снова выполнить две последние команды.

Кажется, моя IDE автоматически активирует venv, если он находится в каталоге проекта, что постоянно приводило к ошибке при клонировании из git.

ModuleNotFoundError: No module named ''

Мне пришлось вручную удалить исходный venv и создать новый виртуальный env, а затем запустил эти команды. Работал как PyCharm после :)

pip install -r requirements.txt

python manage.py collectstatic

Попробуйте передать имя приложения команде migrate :

Я делаю следующие шаги после клонирования проекта из GitHub:

Они отлично работают в моей системе.

  1. Создайте virtualenv и активируйте его.
  2. Установите все зависимости.
  3. Перейдите в домашний каталог проекта.
  4. запустите $ python manage.py runserver.

Привет @allardbrain и добро пожаловать в Чудесный Мир Развития ^ _ ^

Хотя я надеюсь, что этот вопрос уже решен, если позволите, давайте вернемся к чему-то очень быстрому - я уверен, что другие сделали и в настоящее время делают эту ошибку.

Я попробовал 'django-admin startproject ig_miner_app. но я получаю этот код ошибки:

"CommandError:" Ядда Ядда Ядда .

Джанго на самом деле имеет удивительную документацию. Парни, стоящие за этим, были на самом деле писателями и журналистами, а не вашими типичными парнями из CS.

Я пытаюсь сказать, что, изучая что-то новое, читайте Документацию; пробежаться по учебнику To-Do App. Вот почему ..

Это уже было выполнено, если вы извлекаете рабочую копию ранее существующего Приложения. Ваша проблема должна быть с этим файлом в первую очередь .

Именно здесь devDependencies излагают свои требования, если хотите, аналогично вашим основным

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


Зачем вам запускать Django внутри Docker локально? Как компактно запустить различные программные компоненты для работы одной информационной системы?

Я попытаюсь здесь ответить на эти вопросы. Посмотрите, относится ли это к вашему варианту использования. Этот пост о том, как это сделать.

В результате выполнения этого поста у вас будет:

  • Настроенный локально Docker на вашем компьютере разработчика.
  • Работающий Django в Docker контейнере в том же окне разработки.
  • Поставить точку останова для отлаживания кода!

Зачем вам запускать Django внутри Docker локально? Как компактно запустить различные программные компоненты для работы одной информационной системы?

Я попытаюсь здесь ответить на эти вопросы. Посмотрите, относится ли это к вашему варианту использования. Этот пост о том, как это сделать.

В результате выполнения этого поста у вас будет:

  • Настроенный локально Docker на вашем компьютере разработчика.
  • Работающий Django в Docker контейнере в том же окне разработки.
  • Поставить точку останова для отлаживания кода!

Предварительные требования

Уже установленный локально Docker. В целях проверки концепции я использовал Docker Desktop.

Минимальная настройка Docker

Наша минимальная настройка Docker’а будет содержать:

  • запускать реляционную базу данных Postgres
  • непосредственный запуск команды runserver, что необходимо для целей отладки

Наша минимальная настройка Docker’а не будет содержать:

  • веб-сервер, такой как Nginx
  • gunicorn или uwsgi как «клей» между фреймворком (код Django) и веб-сервером

Так как целью является локальная разработка с Docker, ни то, ни другое не нужно.

Минимальное знакомство с Docker

Если некоторые концепции Docker все еще не ясны вам, не волнуйтесь. Мне самому все время приходится искать что-то новое.

Когда я начал, я нашел эту статью действительно полезной: 6 основ Docker, которые вы должны полностью понять, когда приступаете к работе. Эта статья объясняет взаимосвязь и ключевые различия между ними:

  • Контейнеры
  • Образы
  • Dockerfiles
  • Тома
  • Перенаправление порта
  • Docker Compose

Спасательный круг, если вас смущает шквал нового Docker жаргона. Как это было для меня. В этом посте мы будем настраивать:

  • один Dockerfile
  • один файл Docker compose или docker-compose.yml

Настройка локального проекта Django

Dockerfile

Добавим Dockerfile в корневой каталог вашего проекта Django со следующим содержимым:

Давайте подробнее рассмотрим этот Dockerfile.

Строка 1 выбирает образ: FROM python: 3 указывает Docker начать с образа python: 3. Часто встречается Alpine версия образа Python. Alpine Linux намного меньше, чем большинство базовых образов дистрибутива, и в целом приводит к более компактным образам.

Строка 2 устанавливает переменную среды PYTHONUNBUFFERED равной 1. Что это? Обычно, если у вас есть процесс, передающий данные в ваше приложение, терминал может буферизовать данные. Терминал хранит данные в буфере до тех пор, пока не будет достигнут предел размера или определенный символ (обычно новая строка или EOF). В этот момент он полностью сбрасывает весь кусок данных в ваше приложение. То же самое для выходных данных и данных об ошибках (stdout и stderr). Эта опция сообщает терминалу не использовать буферизацию.

Оставшийся набор инструкций в строках 3-7:

  • создает каталог /code на корневом уровне
  • копирует файл require.txt в него
  • устанавливает пакеты Python (в контейнере не требуется virtualenv в начале)
  • копирует в него полный каталог проекта

Итак, Dockerfile рассмотренный выше:

  1. выбирает базовый образ
  2. настраивает его так, чтобы мы могли запускать что-то поверх него, устанавливая необходимые пакеты и копируя код нашего проекта Django.

Причесали! Вопрос: Итак, как нам запустить этот контейнер?

Ответ: Мы будем использовать docker-compose.

Вопрос: Но контейнер выше работает только с Django. Разве нам не нужен контейнер для Postgres?

Ответ: Нам не нужно настраивать контейнер Postgres, поскольку Docker предоставляет образ Docker для Postgres, который мы можем просто запустить. Затем мы входим в него и настраиваем его так, как если бы он работал локально.

Вопрос: Должны ли мы написать сценарий оболочки и выполнить процесс Docker на нашей локальной машине для обоих контейнеров?

Ответ: Нет. Docker предоставляет docker-compose, а не полагается на сценарии оболочки.

docker-compose

Большим преимуществом файла docker-compose.yml является то, что он очень удобочитаемый.

Добавим этот файл docker-compose.yml в каталог Django проекта:

У нас есть две «службы», db и web.

Служба db запускает процесс Postgres внутри контейнера, который использует образ postgres.

POSTGRES_DB, POSTGRES_USER и POSTGRES_PASSWORD жестко закодированы в docker-compose.yml. Однако вы можете настроить их для использования переменных среды, используя файл .env или .envrc. Это ИМХО не стоит усилий, если вы делаете это только для локального тестирования.

web служба запускает процесс runserver manage.py внутри контейнера с именем django_web.

Инструкция сборки: сообщает Docker compose использовать Dockerfile, расположенный в этом же каталоге, для запуска web службы. Служба будет запущена внутри контейнера django_web. Документы по сборке здесь.

Команда запускает команду runserver в Django и выставляет ее на порту контейнера 8000.

Контейнерное имя - это пользовательское имя, которое вы можете добавить для ясности. Мы увидим его эффект, когда будем запускать вещи в следующем разделе.

Среда позволяет вам повторно использовать переменные окружения с хоста. Больше информации об управлении переменными среды для вашего проекта Django. В этом случае переменная окружения DATABASE_URL используется повторно.

Тома используются для «монтирования» путей к хостам. Основное использование в нашем контексте - это «поделиться» кодом на нашей машине с кодом в служебном контейнере django_web. Документы здесь.

Достаточно объяснений! Давайте начнем!

Заставляем работать python в локальном контейнере

Убедитесь, что ваш Docker Desktop работает.

Запустите docker ps, чтобы вывести список контейнеров. Предполагая, что не запущены другие контейнеры, вы не должны их видеть. Ваш вывод должен быть ниже:

Запустите команду ниже, чтобы запустить два контейнера в соответствии с вашим docker-compose.yml:

Вывод терминала должен заканчиваться обычным выводом команды runserver Django:

При запуске docker ps теперь должны отображаться два контейнера (прокрутите вправо, чтобы увидеть полный вывод):

Обратите внимание, что вывод названий NAMES зависит от имени каталога проекта. Например, поскольку у контейнера службы db нет имени, получающееся имя контейнера - djangtest_db1, потому что каталог проекта - djangotest.

В другом терминальном окне/вкладке войдём в контейнер db docker:

После входа, откройте psql от имени пользователя postgres:

Создадим базу данных:

Выйдем из psql и контейнера db docker.

Войдем в web контейнер:

После входа запустим следующую команду, чтобы применить миграцию базы данных и создать суперпользователя:

Вы можете выйти из web контейнера. Прежде чем продолжить, остановим предыдущий web сервис.

Нажмите на команду, чтобы остановить процесс, как если бы вы использовали локальный процесс сервера запуска Django.

После этого при запуске docker ps должен отображаться только запущенный сервис db.

Время отладки!

Обновите код и установите точку останова в одном из ваших представлений. Я использовал отладчик IPython ipdb.

Перестраиваем web контейнер

После изменения кода, чтобы перестроить web контейнер, включая зависимости:

Разложим приведенную выше команду docker-compose up:

  • -d или --detach означает «Отдельный режим»; запускать контейнеры в фоновом режиме
  • --no-deps инструктирует docker-compose не запускать связанные сервисы
  • --build инструктирует docker-compose для создания любых необходимых образов перед запуском контейнеров web - это сервис, для которого я использую docker-compose

Отлаживаем

Для отладки с помощью ipdb, используется docker-compose run, документы здесь .

Флаг --service-ports web заставляет сервис web выставлять необходимые порты для возможности отладки:

Если вы запустите Docker PS, вы должны увидеть, что ваш веб-сервис запущен и работает.

Получить доступ к URL, где это остановит выполнение на вашей точке останова. Так как я установил свою точку останова на домашней странице, я вижу вывод терминала ниже:

Обратите внимание, что /code/items/views.py - это расположение модуля в контейнере, а не в вашем локальной среде разработчика.

Что означает … вот и все, вы отлаживаете код, работающий в вашей службе Docker!

Результат

Этот топик направлен на то, чтобы вы начали и поняли основы. Я оставил ссылки по пути, если вы хотите погрузиться глубже.

Он не собирался показывать вам все, что можно сделать с помощью Docker. Отнюдь не всё.

Пейзаж «технических операций» постоянно меняется. И я уверен, что многие команды (или их аргументы) быстро устареют.

Если вы занимаетесь программированием некоторое время, то наверняка слышали о Docker или о таком термине, как контейнеры. В этом руководстве разберемся с его значением как раз на примере Docker, а также рассмотрим, как контейнеризировать простое Django-приложение. В конце темы вы будете знать следующее:

  • Виртуализация
  • Контейнеризация (с помощью Docker)
  • Docker
  • Создание Dockerfile
  • Docker Compose
  • Настройка Django приложения в среде Docker с помощью Dockerfile и docker-compose

Условия

  • Git/GitHub
  • PyCharm (или любой другой редактор кода)
  • Опыт работы с Django

Что такое виртуализация

Обычно при развертывании веб-приложения в хостинге (например, DigitalOcean или Linode) вы настраиваете виртуальную машину или виртуальный компьютер, куда будет перенесен весь код с помощью git, FTP или другими средствами. Это называется виртуализацией.

Со временем разработчики начали видеть недостатки такого процесса — как минимум затраты на приспосабливание к изменениям в операционной системе. Им хотелось объединить среды разработки и производственную, вследствие чего и появилась идея контейнеризации.

Что такое контейнеры, и что в них такого особенного?

Контейнер, если говорить простыми словами, — это место для среды разработки, то есть, вашего приложения и тех зависимостей, которые требуются для его работы.

Контейнеры позволяют разработчику упаковывать приложение со всеми зависимостями и передавать его между разными средами без каких-либо изменений.

Поскольку контейнеризация — куда более портативное, масштабируемое и эффективное решение, такие платформы, как Docker, становятся популярным выбором разработчиков.

Введение в Docker

Docker — это набор инструментов, с помощью которого можно создавать, управлять и запускать приложения в контейнерах. Он позволяет запросто упаковывать и запускать приложения в виде портативных, независимых и легких контейнеров, которые способны работать где угодно.

Установка Docker

Для установки Docker на компьютере, воспользуйтесь инструкцией с официального сайта. У каждой операционной системы есть своя версия приложения.

Настройка приложения

Для этого руководства используем репозиторий приложения для опросов, написанного на Django. По мере продвижения в этом руководстве настроим Dockerfile , в котором будут обозначены инструкции для контейнера, внутри которого приложение и будет работать. После этого же настроим и файл docker-compose.yml для упрощения всего процесса.

На ПК с установленным git перейдите в выбранную папку и клонируйте следующий репозиторий из GitLab:

После этого перейдите в корень этой папки и откройте ее в редакторе с помощью такой команды:

Запуск Django-приложения в Docker контейнере

В этой папке создайте файл Dockerfile (регистр играет роль) без формата. Внутри него будут находиться настройки контейнера. Инструкции из него компьютер будет выполнять каждый раз при запуске команды docker build .

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

В файле requirements.txt добавьте Django версии 3.1.2 в таком формате:

Что такое Dockerfile

Идея написания Dockerfile может показаться сложной, но не забывайте, что это всего лишь инструкция (набор шагов) для создания собственных образов (images). Dockerfile будет содержать следующее:

  1. Базовый образ, на основе которого требуется построить свой. Он выступает своего рода фундаментом для вашего приложения. Это может быть операционная система, язык программирования (Python в нашем случае) или фреймворк.
  2. Пакеты и дополнительные инструменты для образа.
  3. Скрипты и файлы, которые требуется скопировать в образ. Обычно это и есть исходный код приложения.

При чтении или написании такого файла удобно держать в голове следующее:

Создание Dockerfile

Приложение будет работать на основе официального образа Python. Напишем следующие инструкции:

Файл Docker Compose

Docker Compose — это отличный инструмент, помогающий определять и запускать приложения, для которых требуются несколько сервисов.

Обычно Docker Compose использует файл docker-compose.yml для настройки сервисов, которые приложение будет использовать. Запускаются эти сервисы с помощью команды docker-compose up . Это создает и запускает все сервисы из файла. В большинстве веб-приложений нужны, веб-сервер (такой как nginx) и база данных (например, PostgreSQL). В этом приложении будем использовать SQLite, поэтому внешняя база данных не потребуется.

Для использования особенностей Docker Compose нужно создать файл docker-compose.yml в той же папке, где находится Dockerfile и добавить туда следующий код:

Дальше разберем содержимое файла построчно:

Эта строка сообщает Docker, какая версия docker-compose должна быть использована для запуска файла. На момент написания руководства последняя версия — 3.8, но обычно синтаксис не сильно меняется по мере выхода последующих.

После настройки docker-compose откройте терминал и запустите команду docker-compose up -d для запуска приложения. Дальше открывайте ссылку localhost:8000 в браузере, чтобы увидеть приложение в действии:

Запуск Django-приложения в Docker контейнере

Для закрытия контейнера используется команда docker-compose down .

Выводы

В этом руководстве вы познакомились с виртуализацией, контейнеризацией и другими терминами из мира Docker. Также вы теперь знаете, что такое Dockerfile, как его создавать для запуска контейнеризированного Django-приложения. Наконец, разобрались с настройкой docker-compose с помощью файла docker-compose.yml для сервисов, от которых зависит самое приложения.

Не существует единого правильного способа использовать Docker в Django-приложении, но считается хорошей практикой следовать официальным инструкциями, чтобы максимально обезопасить свое приложение.

Читайте также: