大家生产环境是如何部署、更新基于openresty开发的工程?

456 views
Skip to first unread message

Berson

unread,
Jan 18, 2018, 9:06:07 PM1/18/18
to openresty

请教:大家生产环境是如何部署、更新基于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目录分离呢?


已知解决方法:

  1. 涉及`PATH`的地方全部用绝对路径。->带来的问题是:由于绝对路径,多人在同一台服务器上开发时不能同时启动
  2. 维护两套配置,一套绝对,一套相对。->带来的问题是:每次修改配置文件需要维护两套配置,容易忘记修改其中某个

以上困惑,请大家指教。

Zoom.Quiet

unread,
Jan 19, 2018, 3:47:47 AM1/19/18
to openresty
俺记得以往公司是统一规定在 /opt/公司名 <-- 一个特殊固定目录中进行工程规划的,
以便在所有主机中完成一致性部署...

多人同主机开发, 测试环境在 user 私人目录中,
生产环境统一在一个固定的绝对路径开始入口.
 
  1. 维护两套配置,一套绝对,一套相对。->带来的问题是:每次修改配置文件需要维护两套配置,容易忘记修改其中某个

以上困惑,请大家指教。

--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty+subscribe@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+unsubscribe@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html



--
life is pathetic, go Pythonic! 人生苦短, Python当歌!
俺: http://zoomquiet.io
授: http://creativecommons.org/licenses/by-sa/2.5/cn/
怒: 冗余不做,日子甭过!备份不做,十恶不赦!
KM keep growing environment culture which promoting organization learning!

Berson

unread,
Jan 23, 2018, 12:05:56 AM1/23/18
to openresty
扣次扣次,得到了一个解决方法

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写道:

赵安家

unread,
Jun 7, 2018, 5:19:18 AM6/7/18
to openresty
ansible了解一下?


在 2018年1月19日星期五 UTC+8上午10:06:07,Berson写道:

请教:大家生产环境是如何部署、更新基于openresty开发的工程?如果用Git+Jenkins,是如何把源码和logs, client_body_temp, xxx_temp目录分离的?

Reply all
Reply to author
Forward
0 new messages