Nginx + Docker 极简部署 Odoo16 支持 HTTPS 避坑指南

这篇具有很好参考价值的文章主要介绍了Nginx + Docker 极简部署 Odoo16 支持 HTTPS 避坑指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Nginx + Docker 极简部署 Odoo16 支持 HTTPS

在生产环境使用 Odoo 官方 Docker 镜像部署 odoo16,使用 Nginx 作为反向代理,并支持 Https协议,记录遇到的问题,作为避坑指南,最后推荐一个免费的符合OpenAPI规范的接口模块。

环境

  • centos7
  • docker V23
  • nginx
  • https 证书
  • Odoo 模块

Docker 部署 Odoo16

  1. 安装 docker 及 docker compose (非 docker-compose 无下划线)
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 启动 docker:sudo systemctl start docker
  2. 测试 docker: docker run hello-world

:Odoo 16.0 附件默认存储到文件系统 (~/.local/share/Odoo 本次安装时是在该目录) ,但docker 中设置的 volume 默认为 /var/lib/odoo/,若升级或删除镜像会导致附件丢失, 日志报错:exceptions.CacheMiss,无法加载部分js。可以在odoo.conf 中设置为 data_dir = /var/lib/odoo。或设置 odoo 系统参数 ir_attachment.location 为 db-storage 将附件存储到数据库。
4. 目录结构

参考模板:https://github.com/khoibv/odoo-projects

├── addons						-- 要安装的 odoo 模块             
│   ├── muk_web_theme			-- 主题模块
│   └── requirements.txt		-- 额外安装的依赖 Python包
├── config
│   └── odoo.conf				-- odoo 系统运行参数
├── .env			            -- docker 环境变量,设置容器名称、Odoo 版本
├── docker-compose.yml			-- docker 
├── odoo_pg_pass				-- 数据库密码文件
└── restart.sh                  -- 脚本,pull 代码 重启容器等
  1. 拉取并创建 Odoo 镜像:docker compose up -d 启动了 Odoo 及 Postgresql 服务
  2. 查看运行日志:docker logs -f --tail 2000 <容器名>
  3. 进入镜像交互操作:docker exec -it <容器名> /bin/bahs
    • cd /mnt/extra-addons 实际进入的是 addons,将本地文件夹映射到 docker 容器
    • 在容器中安装新增依赖:
      pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
  4. 重启Odoo:
    docker compose restart web web 是docker-compose.yml中的配置
  5. docker-compose.yml 文件配置说明:(非完整配置
services:
  web:
    image: "odoo:${VERSION}" #下载.env中配置的 Odoo 镜像版本
    container_name: "${APP:-myodoo}-odoo-v${VERSION}" # 容器名
    ports:
      - "${VERSION}069:8069"  # 将 odoo 默认 8069 端口映射到 docker 容器外部访问
      - "${VERSION}072:8072" # websocket 实时聊天 端口
    volumes:
      - "odoo-web-data:/var/lib/odoo" # 创建 docker 数据卷,Odoo 生成的 web 数据,如附件等,需要与 Odoo 配置一致,删除容器数据不丢失
      - "./v${VERSION}/config/odoo.conf:/etc/odoo/odoo.conf" # 本地文件映射到 docker
      - "./v${VERSION}/addons:/mnt/extra-addons" # 本地 Odoo 模块映射到 Docker 中,可以被 Odoo 发现安装

  db:
    image: postgres:14 # 数据库镜像版本
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD_FILE=/run/secrets/postgresql_password # 使用文件指定密码
      - POSTGRES_USER=odoo # 数据库用户名
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - odoo-db-data:/var/lib/postgresql/data/pgdata # 创建 docker 数据卷存放数据库的数据,升级容器防止数据丢失
    secrets:
      - postgresql_password
secrets:
  postgresql_password:
    file: odoo_pg_pass # 存放数据库密码字符串的本地文件

Odoo 运行参数

[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
admin_passwd = odoo
; http_port = 8069		   -- 默认值
; longpolling_port = 8072  -- 默认值
; 代理模式,必须有反向代理服务
proxy_mode = True
dbfilter = <过滤数据库,支持正则>
db_user = <数据库用户名>
db_password = <数据库密码>
db_port = 5432

:LiveChat 实时聊天及通知不可用,查看日志 websocket 报错: websocket.py KeyError: 'socket'
原因: 在多进程模式下,会启动一个监听 gevent port(默认8072) 的 LiveChat worker 进程,但客户端无法连接。
方案:需要使用反向代理把 /websocket 开头的请求重定向到gevent端口。
nginx 配置示例:

# Redirect websocket requests to odoo gevent port
 location /websocket {
	proxy_pass http://127.0.0.1:8072;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection $connection_upgrade;
	proxy_set_header X-Forwarded-Host $host;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Proto $scheme;
	proxy_set_header X-Real-IP $remote_addr;
}

Nginx 配置说明(HTTPS)

首先在 /etc/odoo.conf 中开启代理模式:

proxy_mode = True

Nginx配置说明: (仅 server 部分,省略 http 等)

...
# http -> https 将 http 请求转为 https
server {
  listen 80;
  server_name odoo.mycompany.com;
  rewrite ^(.*) https://$host$1 permanent;
}

server {
  listen 443 ssl;
  server_name www.mycompany.com;

  # Add Headers for odoo proxy mode
  proxy_set_header X-Forwarded-Host $host;
  ...

  # SSL 证书,可从云厂商申请免费测试版,放到对应目录下
  ssl_certificate /etc/ssl/nginx/server.crt;
  ssl_certificate_key /etc/ssl/nginx/server.key;
  ...

  # log 确认已存在 nginx 文件夹: `/var/log/nginx`
  access_log /var/log/nginx/odoo.access.log;
  error_log /var/log/nginx/odoo.error.log;

  # 重定向 websocket 请求到 odoo gevent 端口
  location /websocket {
    proxy_pass http://127.0.0.1:8072;
		...
  }

  # 重定向其他请求
  location / {
    proxy_redirect off;
    proxy_pass http://127.0.0.1:8069; # 与 docker 设置一致 
  }
...
}

修改 Odoo 其他配置

:图片无法展示,浏览器报错:

Mixed Content: The page at 'https://' was loaded over HTTPS, but requested an insecure resource 'http://'. This request has been blocked; the content must be served over HTTPS.

通过 ssh 密钥对实现免密登录

可用于git 免密拉代码或登录远程服务器。核心在于客户机与远程服务机的配置,一台机器既可为服务端也可以为客户端。

客户端机器:使用指定的私钥访问服务器。

  1. 通过 ssh-add ~/.ssh/<私钥文件> 临时指定私钥
  2. 写入配置文件 .ssh/config:
Host <host_name>
  HostName <ip>
  PreferredAuthentications publickey
  User <root>
  IdentityFile ~/.ssh/<私钥文件>

注意:不添加到 config 文件, 新打开终端, 可能报错:git Permission denied (publickey)

远程机器
添加公钥到~/.ssh/authorized_keys: 存放可远程免密登录的用户公钥,每行一个
云主机:需要到控制台添加密钥对并绑定到服务器。

测试ssh -i 私钥文件 username@ip 或 ssh <host_name>

结果展示

Nginx + Docker 极简部署 Odoo16 支持 HTTPS 避坑指南

参考

  1. Nginx配置详解
  2. Odoo官网Https配置说明
  3. Odoo Docker 镜像
  4. Docker及config 配置模板
  5. Centos 安装 Docker

推荐模块

可生成生成符合OpenAPI规范的接口
自动记录接口调用日志
配置字段及权限
https://apps.odoo.com/apps/modules/16.0/openapi/

前端分页列表查询示例:文章来源地址https://www.toymoban.com/news/detail-462249.html

	let params = {
    kwargs: {
      domain: [['is_published', '=', true]],
      //可以查询关联表的字段, *2m 返回列表[{}], m2o返回对象
      fields: ['id', 'name', 'tag_ids/name', 'published_date', 'view_count', 'author_id/name'],
      limit: 10,
      offset: 0,
    }
  }
  const model = 'blog.post'
  const url = `/${model}/call/search_read_nested`
  const res = await CommonApi.queryList(url, params)

到了这里,关于Nginx + Docker 极简部署 Odoo16 支持 HTTPS 避坑指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • win10 搭建odoo16环境(docker或本地)

    一、 1.安装docker,下载docker工具 本人使用docker_toolbox进行安装,此处需注意git的path 创建default虚拟机,国内下载iso文件可能存在问题, 使用已下载好的iso文件 地址:https://github.com/boot2docker/boot2docker/releases 也可联系博主咨询 a.将文件放在 C:UsersAdministrator.dockermachinecache目录

    2024年02月08日
    浏览(31)
  • 《Docker》阿里云服务器docker部署nginx并配置https踩坑记录(完整)

    前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~ 主页: oliver尹的主页 格言: 跌倒了爬起来就好~ 来个关注吧,点个赞吧,谢谢 今天在为阿里云服务器续期的时候发现原来阿里云上面也

    2024年02月06日
    浏览(35)
  • 群晖NAS和绿联NAS的Docker安装odoo16社区版和企业版教程

    Docker安装odoo17,odoo16方法一样的 社区版安装: 1.在群晖后台安装好docker套件,并去控制面板-终端机和SNMP打开SSH功能。 绿联nas的同样进管理界面安装docker套件 绿联打开SSH方法是在设备-远程调试下面 把远程调试打开,然后就会跳出来 验证码 然后下面这一段L#W$%W1uGa+验证码 (+号

    2024年02月11日
    浏览(101)
  • docsify项目部署(华为云+宝塔+centos+docker+nginx)踩坑指南

    首先在服务器中安装docker 由于之前我的python默认版本升级到了python3,但yum执行使用的是python2,就遇到报错 解决: 将首行/usr/bin/python改为/usr/bin/python2. 其次 遇到第二个类似的错误,同理 将首行/usr/bin/python后加个2 接下来安装 显示版本 参考链接:(3条消息) docsify快速部署搭建

    2024年02月11日
    浏览(32)
  • lua使用resty.http做nginx反向代理(https请求,docker容器化部署集群),一个域名多项目转发

    下载使用 链接:https://pan.baidu.com/s/1uQ7yCzQsPWsF6xavFTpbZg 提取码:htay –来自百度网盘超级会员V5的分享 ad_load.lua文件

    2024年01月18日
    浏览(52)
  • 源码编译nginx支持https

    编译openssl 从github下载指定版本的源码 https://github.com/openssl/openssl/releases 下载后解压 tar -zcvf openssl-3.1.1.tar.gz 进入文件夹后配置 cd openssl-3.1.1 ./Configure --prefix=/data/projects/build/openssl-3.1.1 --prefix参数指定路径 执行编译 make -j8 不需要安装到系统,此时当前目录下面会有 libssl.so和l

    2024年02月13日
    浏览(38)
  • nginx配置ssl支持https的详细步骤

    文章概要 :在建站的时候我们通常要让网站通过https进行访问,不然使用http过程中,所有信息都是未加密的,并且用户访问的时候浏览器会屏蔽我们的网站。本文介绍如何通过nginx配置ssl以支持通过https协议访问网站。 本文内容来自:谷流仓AI - ai.guliucang.com 打开nginx.conf配置

    2024年03月28日
    浏览(43)
  • Nginx同时支持Http和Https的配置详解

    当配置Nginx同时支持HTTP和HTTPS时,需要进行以下步骤: 获得SSL证书:从可信任的证书颁发机构(CA)或使用自签名证书创建SSL证书。 将证书和私钥保存到服务器:将SSL证书和私钥文件保存到指定的位置,通常是 /etc/nginx/ssl/ 目录。 配置HTTP服务: 打开 Nginx 配置文件: 通常是

    2024年02月02日
    浏览(38)
  • Nginx之正向代理与反向代理进阶(支持https)

    在【Nginx之正向代理与反向代理】一文中我们实现了将Nginx服务器作为正向代理服务器和反向代理服务器, 但美中不足的是仅支持http协议,不支持https协议 。 我们先看看看http和https的区别: http协议 :协议以明文方式发送数据,不提供任何方式的数据加密。不适合传输一些敏

    2024年02月13日
    浏览(32)
  • Nginx 同一端口 同时支持http与https 协议

    通过 nginx ,让同一端口 同时支持http与https 协议 通过使用 Nginx,可以实现同一端口同时支持 HTTP 和 HTTPS 协议。下面是一种可能的配置方式: 配置 HTTP 服务 在 Nginx 配置文件中,添加以下配置块用于处理 HTTP 请求: 配置 HTTPS 服务 在 Nginx 配置文件中,添加以下配置块用于处理

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包