Перенос проекта django на другую машину

Это вопрос новичка, но я не нашел ответа. Я хотел бы перенести свой проект django с виртуальной машины с Ubuntu 18.04 на другую виртуальную машину с Ubuntu 18.04.

Это пример структуры каталогов

pd_videowebapp/
├── db.sqlite3
├── env
│   ├── bin
│   ├── lib
│   └── pyvenv.cfg
├── manage.py
├── media
│   ├── images
│   └── video
├── mysite
│   ├── core
│   ├── __init__.py
│   ├── __pycache__
│   ├── settings.py
│   ├── static
│   ├── templates
│   ├── urls.py
│   └── wsgi.py
├── Pipfile
├── requirements.txt
└── static
    ├── admin
    ├── style2.css
    └── style3.css

В каталоге env находится виртуальная среда Python.

Перед тем, как перевести его, я бы запустил

$ pip freeze > requirements.txt

Затем я бы зазиповал всю структуру каталогов, кроме db.sqlite3 и media каталогов.

Затем распакуйте его на другой виртуальной машине.

Затем скопируйте каталог db.sqlite3 и media в нужное место.

Затем создайте виртуальную среду на другой виртуальной машине.

Затем запустить

$ pip install -r requirements.txt

Или лучше скопировать весь проект с каталогом env в начале? Что лучше? Я что-то упустил? Или есть лучший подход?

Или лучше скопировать весь проект с каталогом env в начале? Что лучше? Я что-то упустил? Или есть лучший подход?

Лучше не копировать каталог env. Исключите этот каталог.

Существует множество способов сделать это. Я предлагаю вам использовать Git. Для этого:

  1. создайте git-репозиторий из текущего проекта
  2. .
  3. используйте соответствующий .gitignore файл, чтобы игнорировать env директорию и другие вещи, связанные с окружением:
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Other stuff
  1. клонируйте проект с другой ВМ и настройте виртуальную среду в этой ВМ

Более простой способ:

  1. заархивируйте весь проект, исключив из него директорию env и др. игнорируемые материалы вручную.

  2. переместите zip-файл на другую виртуальную машину и настройте виртуальную среду в этой машине

    .

Вы мыслите правильно. Вы можете сжать проект без каталога env.

Создайте виртуальную среду в новой системе: предполагая, что вы уже установили python3-pip, python3-dev и т.д., как требуется, а затем установите проект в новой системе, перейдя в dir проекта из терминала и выполнив эти команды (как вы знаете) -

# install virtual env
pip install virtualenv

# create virtual env
virtualenv -p /usr/bin/python3 venv

# activate virtual env
source venv/bin/activate

# install project dependencies
pip install -r requirements.txt

Тогда все в порядке. Кроме того, вы можете создать удаленный репозиторий (например, на Github) и игнорировать виртуальное окружение dir env через файл .gitignore]

Если вы ищете решение, которое не требует перенастройки новой системы, я настоятельно рекомендую использовать Docker

Для более простой передачи можно использовать docker

и вы можете использовать Dockerfile ниже:

# syntax=docker/dockerfile:1

FROM python:3.9

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /code

RUN pip install --upgrade pip

COPY requirements.txt /code/

RUN pip install -r requirements.txt

#COPY daemon.json /etc/docker/daemon.json

COPY . /code/

EXPOSE 80

Вы можете найти больше о докеризации приложения django здесь https://docs.docker.com/samples/django/

Надеемся, что вы найдете это полезным!

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

Не копируйте виртуальные каталоги env

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

Используйте git и .gitignore для указания нестабильных ресурсов

Если вы управляете своим проектом с помощью git, у вас обязательно должен быть .gitignore, в котором указано, какие ресурсы являются автогенерируемыми, специфичными для пользователя, непостоянными и т.д. и не должны быть частью общего репозитория.

Перед переходом к следующему шагу вам следует настроить его, как предложил @hamraa.

Используйте git для перемещения проекта

Предполагая, что у вас есть подключение к Интернету на обеих машинах, зачем вам нужно что-то застегивать и перемещать?

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

Если это не так, но целевая виртуальная машина имеет SSH-соединение с исходной машиной, вы можете просто вызвать:

git clone ssh://<username>@<hostname>:/<path-to-repo>

Используйте git-bundle для создания перемещаемого пакета из вашего репозитория

Если между машинами нет сетевого соединения, вы можете использовать классную функцию Git, позволяющую легко перемещать репозитории с помощью одного файла.

Команда проста:

git bundle create app.bundle <commit/tag/branch>

Затем вы можете переместить этот пакет на любую другую машину и использовать:

git clone app.bundle

Рассмотрите возможность использования Docker

Я не буду спорить против Docker, я люблю Docker. Но(!) я не думаю, что должен быть решением. Используя хорошие скрипты, вы можете просто иметь очень простой в использовании Git-репозиторий, который вы можете настроить быстро и легко. Редко бывают случаи, когда есть единственный правильный путь. Я не думаю, что это один из них.

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

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html

Вернуться на верх