使用OpenResty实现苍穹补丁更新
1 背景说明
因客户的安全规范要求,服务器不提供ssh连接方式,这将导致苍穹默认的升级补丁方式无法正常使用(K8S无法ssh连接nginx服务器),无法自动更新应用仓库和静态资源,手动更新补丁需要一定的运维能力且失误率高。为解决这一难题,可以使用OpenRestry方案来实现苍穹补丁更新。
两种更新方式的流程对比:
流程图-SSH方式更新苍穹补丁
流程图-Openresty方式更新苍穹补丁
2 openresty部署配置
2.1安装openresty
下载地址:http://openresty.org/cn/download.html
编译安装:
# ./configure --prefix=/usr/local/openresty --with-luajit --with-cc-opt=-O2 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_ssl_module --with-http_iconv_module
# make && make install
修改配置文件参考下文
启动服务: /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
停止服务: /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf -s stop
注册系统服务:
新增或修改系统服务配置文件
# vi /usr/lib/systemd/system/openresty.service [Unit] Description=The openresty nginx HTTP and reverse proxy server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking #指定用户和组运行 User=root Group=root ExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t ExecStart=/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl start openresty
2.2 权限配置
openresty的运行用户要能对服务根目录/var/appstatic、应用仓库路径、补丁仓库路径、静态资源路径进行操作,且能访问其根目录 (建议都配置在服务根目录下)。
2.3 访问配置
openresty/nginx/conf/的nginx.conf配置参考如下:
# cat /usr/local/openresty/nginx/conf/nginx.conf user root; #设置普通用户运行需要对安装目录、日志目录、应用仓库等目录授权 worker_processes 4; events { use epoll; multi_accept on; worker_connections 61024; } http { include mime.types; default_type application/octet-stream; access_log logs/access.log main; client_max_body_size 2048m; sendfile on; #tcp_nopush on; gzip on; gzip_buffers 4 8k; gzip_comp_level 2; gzip_min_length 1000; gzip_types text/plain text/json text/css application/x-httpd-php application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript image/png image/jpg image/jpeg image/gif image/bmp; keepalive_timeout 65; include conf.d/*.conf; server{ listen 8188 default_server; #服务监听端口,可自定义修改 listen [::]:8188 default_server; #服务监听端口,可自定义修改 server_name localhost; root /var/appstatic/; # 应用仓库和静态资源根路径 autoindex on; # 显示目录结构 autoindex_exact_size on; # 显示文件大小 autoindex_localtime on;# 显示文件时间 client_max_body_size 2048m; location /upload { content_by_lua_file lua/upload.lua; } location /copy { content_by_lua_file lua/cp.lua; } location /unzip { content_by_lua_file lua/unzip.lua; } location /mkdir { content_by_lua_file lua/mkdir.lua; } location /clear { content_by_lua_file lua/rm.lua; } } }
说明:
(1)本文以监听8188端口为例,具体可自定义修改。
(2)设置nginx的运行用户为root,可自定义用户,但需要提前授权: user root;
(3)修改上传大小限制为: client_max_body_size 2048m;
(4)Lua脚本文件放至/usr/local/openresty/nginx/lua
lua脚本文件详见附件
3 MC配置
3.1 修改mc环境变量
添加:mc_nginx_server=openresty的地址,用于mc自升级访问的根路径
tips:mc6.0及以上的版本默认将高级配置信息隐藏了,可以通过在mc的环境变量上添加配置:isShowAdvancedParamsPanel=true
3.2 修改补丁仓库配置
补丁仓库URL:修改为openresty的补丁仓库地址,用于给苍穹下载补丁文件使用
补丁仓库路径:修改为openresty能访问的系统绝对路径,用于上传补丁包的路径
3.3 修改集群配置信息
修改集群配置中应用仓库路径、静态资源路径
应用仓库路径:修改为openresty能访问到的系统绝对路径,用于更新应用仓库文件;
应用仓库地址:修改为APPSTORE_URL的地址,用于同步开发资源给开发人员下载使用;
静态资源路径:修改为openresty能访问到的系统绝对路径,用于更新静态资源文件;
高级配置信息:
mc.upload.server: openresty服务地址,用于上传补丁时的根路径
mc.upload.rootpath: openresty提供appstore和静态资源地址的系统根路径
以上配置好之后就可以通过openresty方式上传和更新补丁了。
Tips:6.0的mc版本默认取消了高级配置信息的显示,可在mc的环境变量中配置isShowAdvancedParamsPanel=true显示出来。
4 附录:容器运行openresty方式
可从hub.docker.com官网拉取镜像
# docker pull docker.io/openresty/openresty:latest
tips:容器方式需要将补丁仓库和应用仓库静态资源部署在一起,且容器需要挂载持久化卷
4.1 镜像优化
官方的openresty镜像缺少unzip命令,需要基于该官方镜像将unzip命令装载进去并重新制作成新的镜像
Dockerfile内容如下,(可在附件的文档中获取到Dockerfile和命令文件):
FROM docker.io/openresty/openresty:latest ADD vi /bin/vi ADD unzip /bin/unzip ADD zip /bin/zip ADD telnet /bin/telnet ADD wget /bin/wget ADD libtinfo.so.5 /usr/lib/libtinfo.so.5 ADD libncurses.so.5 /usr/lib/libncurses.so.5
说明:添加了unzip、zip、wget、telnet、vi等命令,其中unzip命令是必须的,用于解压补丁或解压缩静态资源文件,其他命令便于日常运维时分析问题
需要在装有docker服务的机器上(如k8snode节点)构建镜像:
# docker build -t 镜像地址:镜像版本 Dockerfile路径
制作好镜像后,如果有镜像仓库,可以修改tag后推送镜像仓库。
# docker tag 镜像地址:镜像版本 镜像仓库地址/openresty:镜像版本 # docker login -u 用户名 镜像仓库地址 # docker push 镜像仓库地址/openresty:镜像版本
如果没有镜像仓库,则需要将该镜像导出并导入到所有k8snode节点上
# docker save 镜像地址:镜像版本 > 镜像文件名.tar 将镜像拷贝到其他k8snode节点上后 # docker load -i 镜像文件名.tar
4.2 配置openresty容器服务
(1)配置configMap
将nginx.conf、mkdir.lua、rm.lua、mv.lua、unzip.lua、upload.lua、cp.lua文件通过configMap方式挂载到容器中去
(2)配置加载configMap
(3)配置持久化存储,用于上传补丁包至补丁仓库、更新应用仓库、更新静态资源
(4)配置clusterIP集群内部访问
(5)检测服务信息
启动openresty容器服务后,可登录容器检查信息,查看nginx的编译模块信息: /usr/local/openresty/nginx/sbin/nginx -V
查看挂载到容器的configMap文件内容
查看nfs挂载的补丁仓库、应用仓库、静态资源目录
到mc容器去访问openresty地址检测连通性
4.3 MC配置修改
与上文修改mc配置一样,需要将openresty的地址修改为容器内部访问地址
上传补丁测试,查看日志:
相关附件下载:
更新日期:2024-08-12
使用OpenResty实现苍穹补丁更新
本文2024-09-23 01:12:44发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144490.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf