Как ускорить разработку на Odoo с помощью Docker на Windows

При стандартной работе менеджера разработки на Windows все будет работать очень медленно. Это связано с тем, что все файлы с которыми мы работаем и пытаемся пробросить внутрь контейнера доступны для WSL Linux как сетевые. Чтобы избежать этого мы будем сразу работать внутри WSL Linux. Это позволит значительно ускорить работу системы и позволит не переходить на Linux сразу.

Такой подход имеет свои ограничения - скорость копирования данных из файловой системы Windows в файловую систему WSL Linux очень низкая. Файловая система Linux находится внутри виртуального жесткого диска, который имеет динамический размер. Поэтому такой способ разработки подходит для небольших(по объему базы данных) и учебных проектов. В случае промышленной разработки я рекомендую переходить целиком на Linux, это позволит обойти все эти ограничения.

Будем считать что у вас уже установлены следующие программы на вашу Windows

  • Docker Desktop
  • VSCode

При установке Docker Desktop его инсталятор сам попытается установить WSL2, а так же в него будет установлено два минималистичных WSL Linux дистрибутива с именами docker-desktop и docker-desktop-data

Для наших целей необходимо установить WSL2 и Debian

Запускаем PowerShell (от имени администратора)

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Чтобы проверить, какой версии установлен wsl и в случае необходимости сменить версию, следуйте советам на здесь Чтобы удалить подсистему linux, следуйте советам вот тут

Установка Debian на WSL

Устанавливаем Debian

wsl --install -d Debian

При запуске вводим имя пользователя и пароль. Я ставлю следущие:

  • имя пользователя - odoo
  • пароль - odoo

После этого вы должны остаться в Debian консоли примерно такого вида:

odoo@DESTOP-B6VG0DP:_

Если вы вышли в консоль Windows то зайти заново можно с помощью команды:

wsl --distribution Debian --user odoo

Настройка Docker Desktop

Для того, чтобы у нас все корректно работало нам нужно правильно подготовить Docker Desktop. Для этого нам надо его запустить.

Настройка Docker-Desktop

  1. Нажимаем на шестриренку и открвается меню настроек
  2. Находим пункт WSL Integration
  3. Снимаем галочку, чтобы не использовался встроенный дитрибутив
  4. Включаем Debian
  5. Применяем наши настройки

Подключение к Debian с помощью VSCode

Для всех дальнейших действий мы будем использовать VSCode, поэтому запускаем его и устанавливаем себе дополнительное расширение с именем "Remote Development"

Установка расширения

  1. Кликаем на эту иконку
  2. В строке поиска вводим текст
  3. Устанавливаем это расширение

После этого мы сможем подключиться к WSL дистрибутиву

Подключение к WSL

  1. Нажимаем на эту кнопку
  2. выбираем этот пункт меню и выбираем Debian

Затем ждем когда VSCode установит свои компоненты внуть Debian, при первом запуске это может занять некоторое время

После того как VSCode все установил и подключился, нам нужно выбрать рабочий каталог

Открываем рабочий каталог

  1. Нажимаем на иконку для перехода в режим управления файлами
  2. Нажимаем кнопку "Открыть папку"
  3. Выбираем домашний каталог нашего пользователя, в нашем случае это /home/odoo
  4. Нажимаем ОК

На вопрос о доверии этой папке:

Доверяете ли вы автору

  1. Ставим галочку
  2. Нажимаем - "Да, я доверяю авторам"

После этого надо открыть терминал:

Открываем терминал

  1. Нажимаем на меню "Терминал"
  2. Открваем

Теперь мы можем работать с коммандной строкой нашего Debian, а справа у нас файлы домашнего каталога пользовалетя odoo

Начинаем подготовку системы:

Ставим все нужные пакеты

sudo apt install -y git mc docker.io docker-compose

система попросит пароль - это пароль от нашего пользователя Debian в нашем случае это odoo

Сейчас мы находимся в домашнем каталоге пользователя odoo. В Linux файловая систем имеет древовидную структуру и всегда начинается с /. Это так называемый корень файловой системы. Все домашние каталоги пользователей находятся в каталоге /home и называются именем пользователя. В нашем случае наша домашний каталог имеет полный путь /home/odoo. В этом же каталоге хранятся все индивидуальные настройки самого пользователя. Так же для навигации по каталогам вы можете запустить команду mc, ее мы установили на предыдущем шаге. Это двух-панельный файловый менеджер. Оно поможет лучше ориентироваться в файловой системе Linux. Если вы запустили mc то кликните мышкой на F10(Выход) в правом нижнем углу, или наберите exit.

Теперь давайте создадим каталог для хранения наших проектов:

mkdir /home/odoo/projects

Теперь заходим в папку projects

cd /home/odoo/projects

И клонируем туда наш менеджер проектов:

git clone https://github.com/aayartsev/odoo_dev_project.git

И создадим каталог для нашего учебного проекта:

mkdir /home/odoo/projects/odoo_demo_project-16

Теперь заходим туда

cd /home/odoo/projects/odoo_demo_project-16

И запускаем нашу менеджер проектов:

python3 /home/odoo/projects/odoo_dev_project/odpm.py --init https://github.com/aayartsev/odoo_demo_project.git

Когда система спросит какую версию вы odoo вы хотите запустить то пишите 16.0, т.к. модули в этом проекте рассчитаны на нее.

После этого вы можете открыть новое окно VSCode и отрыть новое подключение к WSL, при выборе папке уже выбирайте /home/odoo/projects/odoo_demo_project-16

Если вы хотите сделать проект для 17 версии, то создайте в каталог /home/odoo/projects/odoo_demo_project-17 и попробуйте сделать это самостоятельно, глядя на документацию самого проекта. Все модули и ветки работаю и в 17 версии, но требуют небольшой правки. При запуске odoo сама вам об этом напишет и откажется запускаться. Это будет первая тренировка на отладку системы. Обратите внимание на плашку ru, нажав на которую, вы попадете на русскую версию документации.

Для работы с git репозиториями нужно будет сформировать ключи и отправить публичную часть на git сервер. Как это сделать, вы можете прочитать тут, вас интересует именно Linux, хотя на компьютере у вас стоить Windows.

Перезапустить систему

Остановить систему можно нажатием сочетания клавиш Ctrl+C, затем нажать кнопку вверх и нажать Enter, таким образом система будет перезапущена

Обсуждение

Обсудить, указать на ошибки и опечатки можно здесь