之前一直使用Odoo源码配置开发环境,安装的步骤比较多,费时。趁着升级到16版本的机会,尝试使用docker快速配置Odoo的VSCode开发环境。
(1)操作系统:ubuntu 20.04 Alternative downloads | Ubuntu
(2)集成开发工具:vscode Visual Studio Code - Code Editing. Redefined
如果之前未安装docker,终端会提示:
Command 'docker' not found, but can be installed with:
sudo snap install docker # version 20.10.17, or
sudo apt install docker.io # version 20.10.21-0ubuntu1~20.04.2
See 'snap info docker' for additional versions.
(1)安装docker,在终端输入:sudo apt install docker.io
(2)检查安装是否成功:sudo docker -v
输出版本信息则表示正常安装。
(1)拉取Odoo镜像:sudo docker pull odoo:16.0
(2)拉取Postgres镜像:sudo docker pull postgres:15.0
(3)查看镜像拉取结果:sudo docker images
(1)启动Postgres容器:sudo docker run -d -p 5432:5432 -e POSTGRES_USER=odoo16 -e POSTGRES_PASSWORD=odoo16 -e POSTGRES_DB=postgres --name odoo16 postgres:15.0
(2)启动Odoo容器:sudo docker run -d -p 8069:8069 --name odoo16_app --link odoo16:db -t odoo:16.0
(数据库名、用户名、密码、端口等可按需更改)
在浏览器输入127.0.0.1:8069,就可以看到熟悉的Odoo页面了。
(1)修改用户权限
sudo chmod o+rw /var/run/docker.sock
sudo groupadd docker
sudo gpasswd -a $USER docker
newgrp docker
(2)安装docker插件:vscode扩展里,搜索“docker“。安装,侧边栏出现容器图标。
在第一步事先修改了用户权限,所不会出现vscode没有权限访问容器的错误了。
通过docker插件,attach操作后可以远程查看containers和images信息。
此时odoo16和postgres15容器尚未启动,红色方框图标。
鼠标在容器名上右键选择启动(先postgres,后odoo)。顺利启动后容器的红色停止图标变成了绿色三角图标。
(1)查看odoo运行日志
在docker插件的odoo图标上,右键选择“View Logs”,在VSCode的终端可以看到当前Odoo容器的运行日志。
(2) 脚手架创建自定义模块
在docker插件的odoo图标上,右键选择“Attach Shell”,可以进入Odoo容器的终端。
配置文件在容器中的位置是/etc/odoo/odoo.conf,可通过插件在树状结构中查看 (官方odoo镜像没有安装vim\nano等工具)。
可以发现,自定义模块在/mnt/extra-addons目录下。
切换到模块目录,Odoo容器终端: cd /mnt/extra-addons
创建自定义模块,Odoo容器终端: odoo scaffold firstmodule
当前文件夹出现firstmodule模块。
开发者模式,更新,在应用中检索到“firstmodule”。
到此,环境配置完毕,可以自由玩耍了。
这次使用docker配置odoo环境,在VSCode配置上卡了半天,没找到比较匹配直观的教程,记录下过程供今后使用。在走通第一遍后,效率大幅提高,五分种可以搞定,而以往源码方式的配置需要花费半个小时以上,且将来可很方便部署到生产环境。
有些不习惯的是,之前用源码部署配置方式,各类配置文件在哪个目录下可以在源码中快速找到,同时也可以查看自带的模块的代码。现在使用容器方式,目录结构就不同了,也看不到源码,心中有种空荡荡的不踏实的感觉。
(1)在“docker”插件的基础上,安装“dev container”,可以更方便新增、修改、删除容器文件,就像本机操作文件一样。
(2)dev container插件进入终端,提示“终端进程“/usr/sbin/nologin”启动失败(退出代码: 1)”问题
vscode的文件--首选项--设置,搜索“terminal.integrated.shell”,将default profile:linux改为“bash”