前言

二次开发容易出现问题,作为菜鸟不会用git版本管理,但又怕文件及数据系统出错。
准备手搓简单的本地备份脚本。


一、odoo目录结构

如果要备份,最好先搞清楚哪些需要备份。
在这里插入图片描述NSSM 是一个用于将任何可执行文件作为 Windows 服务运行的工具。其安装目录包含了 NSSM 的可执行文件nssm.exe以及相关的依赖文件。
POSTGRES是数据库。
python不用管
server是主要的服务器文件夹,所有服务器文件在这里面,是后续修改重点需要备份。
sessions 用于存储用户会话信息。当用户登录 Odoo 系统后,系统会生成一个会话 ID,并将相关的会话数据存储在这个文件夹中。这些会话数据可以用于跟踪用户的登录状态、权限信息等,确保用户在一定时间内可以保持登录状态并正常使用系统。
thirdparty第三方应用。

二、如何备份文件

1.数据库备份

数据库相关备份方案比较成熟,可以直接用内置的或安装自动备份模块。
方案一,用原生的内置数据备份http://localhost/web/database/manager,备份后自动下载到本地。注意restore恢复必须是建新数据库名称,不能覆盖原数据库。恢复完成后可以改odoo.conf内的设置,映射到新的数据库上。
方案二,到github下载https://github.com/Yenthe666/auto_backup或者csdn https://download.csdn.net/download/cgplayer/90487727
注意如果安装模块出现 pysftp错误,说明未安装pysftp,需在venv下pip3 install pysftp==0.2.9,提前安装好pysftp
在这里插入图片描述
如果执行备份时右边出现一堆错误,结尾写 Command pg_dump not found. ,可到odoo.conf增加:
pg_path = C:\Program Files\PostgreSQL\16\bin 路径根据实际postgresql安装路径修改。

2.源程序文件任务计划自动备份

由于比较菜,不会用提高性能的Linux,因此选了windows server 服务器
开启任务计划程序,新建任务计划。
在这里插入图片描述
可以使用以下脚本定期自动备份7天内所有修改的文件(20250421更新:此方案比较保险。如果熟练后,可分开备份数据库及session文件夹即可,源程序git版本管理)

@echo off
echo [%date% %time%] 正在停止 odoo-server 服务... >> odoobak.log
net stop "odoo-server-18.0" >> odoobak.log 2>&1
if %errorlevel% equ 0 (
    echo [%date% %time%] odoo 服务已成功停止。 >> odoobak.log
) else (
    echo [%date% %time%]  odoo stop failed >> error.log
)

echo [%date% %time%] 正在停止 PostgreSQL 服务... >> odoobak.log
net stop "PostgreSQL_For_Odoo" >> odoobak.log 2>&1
if %errorlevel% equ 0 (
    echo [%date% %time%] PostgreSQL 服务已成功停止。 >> odoobak.log
) else (
    echo [%date% %time%] 停止 PostgreSQL 服务时出现错误,请检查服务名称或权限。 >> error.log
)

setlocal enabledelayedexpansion

:: 配置参数
set "target_dir=C:\Program Files\Odoo 18.0.20250309"
set "days_back=7"
set "7z_exe=C:\Program Files\7-Zip\7z.exe"
set "output_zip=D:\ODOOBAK\modified1days_files_%date:~0,4%%date:~5,2%%date:~8,2%.zip"
set "file_list=C:\modified_files.txt"

:: 生成修改文件列表
powershell -Command "$cutoff = (Get-Date).AddDays(-%days_back%); Get-ChildItem -Path '%target_dir%' -Recurse -File | Where-Object { $_.LastWriteTime -gt $cutoff } | ForEach-Object { $_.FullName.Substring('%target_dir%'.Length + 1) } | Out-File '%file_list%' -Encoding UTF8"

:: 检查是否有文件需要压缩
if %%~z%file_list% EQU 0 (
    echo 没有找到修改过的文件。
    exit /b
)

:: 执行压缩
cd /D C:\Program Files\Odoo 18.0.20250309
"C:\Program Files\7-Zip\7z.exe" a -tzip "%output_zip%" -i@"%file_list%"

:: 清理临时文件
echo 压缩完成:%output_zip%

echo [%date% %time%] 正在启动 PostgreSQL 服务... >> odoobak.log
net start "PostgreSQL_For_Odoo" >> odoobak.log 2>&1
if %errorlevel% equ 0 (
    echo [%date% %time%] PostgreSQL 服务已成功停止。 >> odoobak.log
) else (
    echo [%date% %time%] 停止 PostgreSQL 服务时出现错误,请检查服务名称或权限。 >> error.log
)

net start "odoo-server-18.0" >> odoobak.log 2>&1
if %errorlevel% equ 0 (
    echo [%date% %time%] odoo 服务已成功停止。 >> odoobak.log
) else (
    echo [%date% %time%]  odoo stop failed >> error.log
)

因文件压缩必须停止odoo和postgres两个系统服务。


总结

通过简单的两步操作,实现Odoo 二次开发的备份需求,重点是备份 server 目录(核心代码)、POSTGRES 数据库、NSSM 服务配置及 sessions 数据。采用双备份策略:①通过 auto_backup 模块实现数据库自动化备份;②利用 Windows 任务计划创建批处理脚本,定期备份 7 天内修改的文件(排除第三方库和 Python 环境)。此方案兼顾数据安全与代码版本控制,适合新手在 Windows 环境下快速建立本地备份机制。放心大胆进行后续开发,做到有备无患。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐