Перенос проекта 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
. Для этого:
- создайте git-репозиторий из текущего проекта .
- используйте соответствующий
.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
- клонируйте проект с другой ВМ и настройте виртуальную среду в этой ВМ
Более простой способ:
заархивируйте весь проект, исключив из него директорию
env
и др. игнорируемые материалы вручную.переместите 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