扣次扣次,得到了一个解决方法
1. 为 OpenResty 编写类似 service 服务的脚本,里面设置需要的环境变量
```
export RUNNING_MODE="online" # or "dev"
export CUSTOM_DIR=/online/xxx # 外部依赖的目录
if [[ $RUNNING_MODE ~= "oline" ]]; then
export CUSTOM_DIR=/custom/dir/xxx # 外部依赖的目录,开发模式自定义
fi
```
2. 在 nginx.conf 中增加 env RUNNING_MODE; env CUSTOM_DIR;
3. 代码 xxx.lua 中
- 对 CUSTOM_DIR默认为/online/xxx
- 同构 os.getenv(RUNNING_MODE),若 RUNNING_MODE 不为"online",则再 os.getenv(CUSTOM_DIR) 覆盖默认值
4. Jenkins 部署通过 tar zxf xxx.tar.gz -C /online/xxx/projec-root/ 实现Jenkins部署管理
在 tar -C 之前删除指定的目录,如src、conf,防止 Git 上删除的文件或目录,在线上环境无法删除。
好处
1. 一些不方便放到Git代码仓库的数据,可以放到 CUSTOM_DIR 中
2. 通过控制 RUNNING_MODE 的值,来决定是线上环境还是开发环境
3. 对 CUSTOM_DIR 设置默认值,实现不用 stop 掉 OpenResty 也能获得外部依赖数据的路径
4. 设置 RUNNING_MODE = "dev"(非"online"即可) 和 CUSTOM_DIR 来解决同一台服务器下多人开发,外部依赖数据冲突的问题
在 2018年1月19日星期五 UTC+8上午10:06:07,Berson写道:
请教:大家生产环境是如何部署、更新基于openresty开发的工程?如果用Git+Jenkins,是如何把源码和logs, client_body_temp, xxx_temp目录分离的?
我的部署方式:
把更改的源码文件用rsync至服务器,备份旧的,然后覆盖(我也觉得low 😂),然后nginx -s reload。因为诸多限制(git的私钥不允许放在生产环境上,也不允许单独为项目创建git账号),所有不能用git pull。
关于源码和logs等目录分离:
启动方式
/usr/local/openresty/nginx/sbin/nginx -p /data/myproject -c /data/myproject/conf/nginx.conf
目前的目录结构
.
├── conf
│ ├── nginx.conf
│ └── xxx.conf
├── logs
│ ├── access.log
│ └── error.log
└── src
├── bar.lua
├── foo.lua
└── lib
└── xxx.lua
配置:
error_log logs/error.log crit;
...;
lua_package_path "$prefix/src/?.lua;;"
server {
{
listen 80;
location /foo {
content_by_lua_file src/foo.lua;
access_log logs/access.log main;
}
}
疑惑:
xxx_by_lua_file、lua_package_path、logs, xxx_temp临时目录等都依赖Nginx启动选项-p PATH来查找源码位置。如何将源码文件和logs、xxx_temp目录分离呢?
已知解决方法:
- 涉及`PATH`的地方全部用绝对路径。->带来的问题是:由于绝对路径,多人在同一台服务器上开发时不能同时启动
- 维护两套配置,一套绝对,一套相对。->带来的问题是:每次修改配置文件需要维护两套配置,容易忘记修改其中某个
以上困惑,请大家指教。