# V8微服务POC环境部署示例
# 适用场景
本手册适用于:
1、客户环境POC,需要看到V8微服务架构的部署效果,不需要做压力测试,只需要最小服务器配置能启动、能演示 2、V8运维新人练手环境,练习部署V8云原生微服务架构环境,用尽量低的配置部署V8所需服务并且安装启动系统
本手册仅部署开发环境,不涉及多套环境部署和推送联调(众所周知,真正的V8生产系统一般要2套)。
# 前期准备
在部署前,必须掌握以下知识:
1、系统性掌握V8平台部署的理论知识:了解部署架构、了解平台部署所需组件、了解每个组件的作用和资源测试规则、了解整体部署顺序《V8环境规划和安装部署指南 (opens new window)》 2、具备部署V8所需所有中间件和容器能力,个人已经多次反复完成相关依赖组件的部署,参考资料 《快速部署V8所需中间件参考 (opens new window)》 3、提前确定部署目标服务器信息、提前准备V8相关制品工具
# POC环境准备
POC环境资源配置推荐如下:
- 1台4C/8G/100G数据盘:部署K8S Master
- 2台16C/64G/500G数据盘(或1台32C/128G/500G数据盘):部署K8S Worker
- 1台16C/64G/500G数据盘:部署V8所有中间件(MySQL、Nacos、Redis、Kafka、Nginx、ElasticSearch、ClickHouse、Harbor、GitLab、MinIO、NFS)
# 系统参数调整
在进行安装部署前,先按照如下配置优化Linux相关系统参数:
1、(修改Linux网络参数)通过 vim /etc/sysctl.conf
命令在文件末尾添加:
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
# 非常关键:命令调整可创建的最大虚拟内存区域的数量
vm.max_map_count=262144
然后执行命令重启网络服务:
service network restart
# 如上一条命令不可用,可能是不同Linux发行版差异,尝试换一个命令重启
systemctl restart NetworkManager
2、通过 vim /etc/rc.d/rc.local
命令在文件末尾添加:
echo "30">/proc/sys/net/ipv4/tcp_fin_timeout
echo "1800">/proc/sys/net/ipv4/tcp_keepalive_time
echo "0">/proc/sys/net/ipv4/tcp_window_scaling
echo "0">/proc/sys/net/ipv4/tcp_sack
echo "0">/proc/sys/net/ipv4/tcp_timestamps
3、(修改Linux最大进程数最大文件打开数)通过 vim /etc/security/limits.conf
命令编辑此文件添加以下内容:
# open files (-n)
* soft nofile 65535
* hard nofile 65535
# max user processes (-u)
* soft nproc 65535
* hard nproc 65535
以上配置完成后,执行reboot
重启操作系统,随后通过 ulimit -a
命令检查open files是否变成65535。
4、关闭SELINUX(如未操作可能systemctl管理中间件不生效):
# 执行如下命令永久关闭SELINUX
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 重启生效
sudo reboot
5、如果是麒麟系统,并且当前环境需要安装Docker,必须卸载麒麟系统自带的podman模块,执行 yum remove podman
或 apt remove podman
即可(哪个成功就用哪个),不做本步骤,后续部署Docker应用会失败!
# 中间件部署和参数准备
# ClickHouse参数准备
ClickHouse服务自行部署(如参考 《快速部署V8所需中间件参考 (opens new window)》),部署完成需要准备V8工具初始化时需要的信息:
- ClickHouse地址
- ClickHouse数据库名称
- ClickHouse用户名
- ClickHouse密码
如使用开放平台工具部署ClickHouse,在安装完成时,会输出一段日志“部署V8时在nacos的cdp-data中关于clickhouse的配置”,取日志下面的地址、数据库名、用户名、密码填写即可。
# Nacos参数准备
Nacos服务自行部署(如参考 《快速部署V8所需中间件参考 (opens new window)》),部署完成需要准备V8工具初始化时需要的信息:
1、Nacos的HTTP访问地址,一般是 http://Nacos服务器IP:8848
。如果使用开放平台工具部署Nacos,端口在install-nacos.sh文件中已经提前设置。
2、Nacos的管理帐号密码,Nacos安装后必须通过浏览器访问 http://Nacos服务器IP:8848/nacos
,然后 nacos/nacos
登录修改成复杂密码。如果使用开放平台工具部署Nacos,密码在install-nacos.sh文件中已经提前设置。
3、命名空间不需要创建,V8工具初始化时自动完成
# Harbor镜像仓库准备
Harbor服务自行部署(如参考 《快速部署V8所需中间件参考 (opens new window)》),Harbor是在Docker容器中运行,部署完成需要准备V8工具初始化时需要的信息:
1、Harbor镜像仓库的HTTP访问地址、Harbor的管理帐号密码,如果使用开放平台工具部署Harbor,以上信息记录在工具的 doc/apps-deployment-summary.txt
中
2、准备镜像仓库名称:通过浏览器访问Harbor,手动创建一个项目名称,如 seeyon-dev
,V8工具后续需要使用
# MySQL数据源准备
MySQL服务自行部署(如参考 《快速部署V8所需中间件参考 (opens new window)》),部署完成需要准备V8工具初始化时需要的信息:
1、数据源地址:即数据库服务器IP 2、数据源端口:即数据库开放端口 3、用户名密码:需要创建数据库、表、索引等权限的帐号
如使用开放平台工具部署MySQL,端口、帐号、密码、程序路径信息记录在logs目录的script.log。
# Redis分布式缓存准备
Redis服务自行部署(如参考 《快速部署V8所需中间件参考 (opens new window)》),部署完成需要准备V8工具初始化时需要的信息:
1、Redis地址:Redis服务器IP和端口,如使用开放平台工具部署Redis,install-redis.sh安装脚本中指定了安装端口号,安装结束输出日志也有端口信息
2、密码:Redis的连接密码,如使用开放平台工具部署Redis,install-redis.sh安装脚本中指定了初始化密码,安装结束输出日志也有密码信息
# NFS安装准备
Kubernetes容器平台依赖外部存储挂载,需要准备足够的磁盘空间并安装NFS服务。 如POC环境,在中间件服务器安装NFS Server并暴露挂载路径,然后在K8S Worker节点安装NFS客户端组件。安装示例如下:
1、NFS服务器更新软件源,安装依赖:
# Debian及其衍生发行版(如Ubuntu)运行如下命令
sudo apt update && sudo apt upgrade -y
sudo apt install nfs-kernel-server -y
# RedHat体系(如CentOS)使用yum或dnf作为包管理工具
sudo yum update -y
sudo yum install nfs-utils -y
2、NFS服务器,创建共享目录。假设需要暴露的共享目录是 /data/mnt/share
:
# 创建共享目录:
sudo mkdir -p /data/mnt/share
# 设置目录权限:
sudo chmod 777 /data/mnt/share
NFS服务器:配置 NFS 共享:
# 打开/etc/exports配置文件
sudo nano /etc/exports
# 在/etc/exports配置文件中添加共享权限:注意/data/mnt/share对应NFS共享目录
/data/mnt/share *(rw,sync,no_root_squash)
# 上一步保存后,再执行如下命令,将上一步保存的信息刷新到NFS服务中,使NFS生效
sudo exportfs -a
3、NFS服务器,启动NFS服务:
# 启动 NFS 服务:
sudo systemctl start nfs-server
# 设置开机自启:
sudo systemctl enable nfs-server
#检查 NFS 服务状态:
sudo systemctl status nfs-server
4、NFS服务器,根据实际情况开启防火墙放行,确保K8S所有节点都能访问到共享目录。
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --reload
5、所有K8S Worker节点安装NFS客户端组件,安装后无需配置K8S,后续V8安装工具会自动配置Kubernetes Pod 挂载 NFS。
# Debian及其衍生发行版(如Ubuntu)运行如下命令
sudo apt update && sudo apt upgrade -y
sudo apt install nfs-common -y
# RedHat体系(如CentOS)使用yum或dnf作为包管理工具
sudo yum update -y
sudo yum install nfs-utils -y
# K8S容器平台准备
Kubernetes容器平台服务自行部署(如参考 《快速部署V8所需中间件参考 (opens new window)》),部署完成需要准备V8工具初始化时需要的信息:
1、持久化存储配置:挂载方式NFS,地址和路径对应上一章节“NFS安装准备”的信息
2、Nacos地址:对应“Nacos参数准备”章节的信息,格式为Nacos服务器IP和端口
3、K8S Maser相关信息:K8S地址、用户名、certificate-authority-data、client-certificate-data、client-key-data等信息全部通过 /root/.kube/config
配置提取:
# 在K8S Master节点执行如下命令获取相关配置信息:
more /root/.kube/config > /home/k8s.txt
cat /home/k8s.txt
参考如下输出示例信息:
server: https://192.168.0.235:6443
中的信息对应K8S地址,注意协议是HTTPS- 命名空间:自定义
user: kubernetes-admin
中的信息对应用户名certificate-authority-data
中的完整字符串对应CertificateAuthorityDataclient-certificate-data
中的完整字符串对应ClientCertificateDataclient-key-data
中的完整字符串对应ClientKeyData
# 以下信息为输出示例,仅供参考:
[root@k8s-m1 ~]# more /root/.kube/config > /home/k8s.txt
[root@k8s-m1 ~]# cat /home/k8s.txt
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCekNDQWUrZ0F3SUJBZ0lJTENuaVNFSmQzMUV3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWdGdzB5TlRBNU1EUXhNRE0zTVRCYUdBOHlNVEkxTURneE1URXdOREl4TUZvdwpGVEVUTUJFR0ExVUVBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDCkFRb0NnZ0VCQU5iamQ0VUlxOWlzakVTekxyWDF4YkhJbDdTdjhEOUlLNmNYOXorRWlTT0RBYjl4dVpyeUVPQTgKZG5yVG05REc4Y1pBVWgrOG9LaVJMeXFCR3VNeHpGeWx1NkFTdUNSeVk2dmFsRmZFVjFkNDY4czd3L2Y3bQdHFYK2NnOEpaeVpNQzFJRS83SHMKc3gxNWlGQU1vK3FaVEEwPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
server: https://192.168.0.235:6443
name: k8s-cluster
contexts:
- context:
cluster: k8s-cluster
user: kubernetes-admin
name: kubernetes-admin@k8s-cluster
current-context: kubernetes-admin@k8s-cluster
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURLekNDQWhPZ0F3SUJBZ0lJUXdTZnl1YnB6bll3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWdGdzB5TlRBNU1EUXhNRE0zTVRCYUdBOHlNVEkxTURneE1URXdOREl4TUZvdwpQREVmTUIwR0ExVUVDaE1XYTNWaVpXRmtiVHBqYkhWemRHVnlMV0ZrYldsdWN6RVpNQmNHQTFVRUF4TVFhM1ZpClpYSnVaWFJsY3kxaFpHMXBiakNDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNV0kKd0FUbmc2VGQwd3Zac09HM1ZTMEN0a2s0RFVISnJPQjM5VHE2QUxHUlJCdVlXVXRGN3dWNkZWcGVMMXNGSRQm5nZHhsVUdsU3hDd0ZPOGlBVkEKM002K2pZbnNzUllhRTZ6TFBlQkprZU91S2tsY1lXMC9hd3VOckJOemZzVlE2V1FiUXVubHd2MlZ6NGhiQkUwPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBeFlqQUJPZURwTjNUQzltdzRiZFZMUUsyU1RnTlFjbXM0SGYxT3JvQXNaRkVHNWhaClMwWHZCWG9WV2w0dld3VWphQ2I0Tk4vQ2NEVHRHNUxKa05YQUpwZ2hmUk9ZbUFvbHYyUnllUzU5dm5wZThwSzUKRzJzM2xyc0RoNkNRUGRvTnJ2MllRdER3enA1WlZsdFd2ZEt0ZVllcUJHQU1wYUVnVU9mbUVta0dRUUtvNVJnOQp2L3ZVTWx4aXFtR084OXRXay9iYnJPNEc5MWd4YmxDcEd4ZGVna1ZmQ3h5Y25qMVRvNy9leFNpT24yVGVUVEhqCk52SjBiYUxxRHpyNTZITzNSd3d1ZTIvbTVQQnczalNscEIxNUYvVTN5ZTNmeU5DbEtRN2w3VGl6TZNUUZvSjlTZDJHMWRsdUhjeEE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
# MinIO对象存储准备
MinIO服务自行部署(如参考 《快速部署V8所需中间件参考 (opens new window)》),部署完成需要准备V8工具初始化时需要的信息:
如使用工具部署MiniIO,脚本目录下document/v8-minio.txt
存放了工具自动安装的桶信息,脚本目录下document/deploy-minio.info
存放了minio的http和api访问地址及帐号密码。
- access-key-id:对象存储用户名,需要具备桶创建、读写权限
- access-key-secret:对象存储密码
- api-endpoint:对象存储HTTP访问地址
- access-endpoint:同上,对象存储HTTP访问地址
- 公共桶名称:自定义,如
seeyon-public
,无需在对象存储服务中提前创建桶,V8安装工具会自动创建 - 私有桶名称:自定义,如
seeyon-private
,无需在对象存储服务中提前创建桶,V8安装工具会自动创建 - 摆渡桶名称:自定义,如
seeyon-ferry
,无需在对象存储服务中提前创建桶,V8安装工具会自动创建
# Kafka消息中间件准备
Kafka服务自行部署(如参考 《快速部署V8所需中间件参考 (opens new window)》),部署完成需要准备V8工具初始化时需要的信息:
消息服务地址:对应Kafka服务IP和端口,如采用工具部署Kafka,通过部署脚本目录下doc/apps-deployment-summary.txt
文件查看主机IP和端口
# Gitlab准备
Gitlab服务自行部署(如参考 《快速部署V8所需中间件参考 (opens new window)》),部署完成需要准备V8工具初始化时需要的信息:
- Gitlab地址:对应Gitlab服务http访问地址
- 用户名密码:对应Gitlab管理员帐号密码
- privateTokenValue:需要管理员通过http访问Gitlab服务,头像菜单 → Preferences(或 Edit profile)→ Access Tokens(个人令牌)页面,创建Access tokens,权限勾选api、read_api即可
- 代码群组:无需修改,使用默认值
如使用开放平台工具部署Gitlab,工具目录的 doc/apps-deployment-summary.txt
文件存储了安装部署连接信息、管理员帐号密码、服务的启停维护信息
Gitlab创建Access tokens:
# ElasticSearch准备
ElasticSearch服务自行部署(如参考 《快速部署V8所需中间件参考 (opens new window)》),部署完成需要准备V8工具初始化时需要的信息:
- 搜索引擎地址:对应ES服务器IP和端口
- 用户名密码:对应ES访问帐号密码
如使用工具部署ES,记住安装结束后的输出日志“检查服务健康状态”里面的curl命令有帐号密码和连接HTTP地址。
也可以通过install-elfk.sh
安装脚本配置获取搜索引擎端口配置,通过同级目录的es-password.txt
获取ES的帐号密码。
# Nginx配置准备
Nginx服务自行部署(如参考 《快速部署V8所需中间件参考 (opens new window)》),部署完成需要准备V8工具初始化时需要的信息:
在V8安装配置阶段可以先不维护nginx.conf配置,等V8安装部署完成,再获取K8S的访问地址,配置更新nginx.conf也不迟。
在V8安装配置阶段,只需要先预设NG的访问地址,后续通过此地址能访问到V8系统。
# 其它:V8帐号密码配置
在使用V8安装工具部署应用时,需要设置系统管理员的密码,这个根据项目情况自定义即可。
# 设置信任私库Harbor
Docker 默认在从镜像仓库(Registry)拉取或推送镜像时要求 HTTPS/TLS 安全连接(即必须有合法的 SSL 证书)。
如果仓库启用了自签名证书,或者是纯 HTTP(没有 TLS),默认情况下 Docker 会因为 不安全 拒绝连接,出现类似错误:
Error response from daemon: Get "https://192.168.0.168:30280/v2/": x509: certificate signed by unknown authority
或者
http: server gave HTTP response to HTTPS client
在V8安装部署前,为防止因为拉取或推送镜像报错,需要在K8S容器运行时和V8工具所在Docker容器环境配置相关参数:
修改点一:Docker容器环境 vim /etc/docker/daemon.json
,其中insecure-registries增加 Harbor的IP和端口:比如192.168.0.168:30280
,完成配置后重启使配置生效。
修改点二:K8S Master和Worker均增加允许非安全访问配置,如果使用开放平台工具部署K8S,默认为Containerd容器运行时,containerd默认要求仓库必须是安全连接(HTTPS & 有效证书),否则会拒绝访问。为了解决非安全访问问题,需要参考如下命令:
# certs.d下创建一个专门存放 containerd 针对 192.168.100.213:30280 这个Harbor镜像仓库配置的目录
mkdir -p /etc/containerd/certs.d/192.168.100.213:30280
# 创建hosts.toml文件,定义镜像仓库的HTTP请求信息
cat > /etc/containerd/certs.d/192.168.100.213:30280/hosts.toml << 'EOF'
server = "http://192.168.100.213:30280"
[host."http://192.168.100.213:30280"]
capabilities = ["pull", "resolve", "push"]
skip_verify = true
EOF
# 运行V8安装工具
在完成中间件和K8S容器的部署和初始化准备后,进行V8应用部署:V8标准推荐使用安装工具可视化部署。
1、首先获取最新版本的出盘工具,按需下载符合当前系统架构的“安装程序”:
2、解压安装程序,再参考 《AI-COP A9 领航版 V5.0 安装部署手册(微服务) (opens new window)》 的 “3.首次使用安装工具的初始化配置” 章节进行工具的部署初始化。
3、然后浏览器访问工具,再按照手册进行初始化,POC环境可以将环境定义为“开发环境”。
4、剩下就参考部署手册和安装部署视频进行初始化即可。
5、关于部署包的自动扫描:比如要部署平台包,首先是选择合适的CPU架构以及中间件,然后是下载出盘工具中列出的所有平台包,再严格按照安装部署视频中的解压方法解压。
# V8安装完成后配置nginx.conf
V8安装完成后,到K8S Master节点,执行 kubectl -n seeyon-dev get svc
命令获取V8 webapi和openapi端口(命令中的seeyon-dev对应前面配置的空间)。
如下图示例:webapi对应30000端口,openapi对应30001端口,使用K8S Master的服务器IP加对应端口即可访问系统。
下一步是配置Nginx,让Nginx能代理到K8S的webapi和openapi:
1、备份原始nginx.conf,然后新建一个新的nginx.conf,将如下内容粘贴进去:
如下配置主要提供了82的监听端口做监控检查,并且引入了扩展文件
conf.d/*.conf
,其中V8的webapi和openapi在扩展文件中定义
user nginx;
worker_processes 4; #定义nginx子线程数,根据服务器cpu配置
error_log logs/error.log; #定义error日志输出
pid logs/nginx.pid;
events {
use epoll;
worker_connections 65535;
multi_accept on;
}
http {
#prometheusa监控参数
vhost_traffic_status_zone;
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for '
'"$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 65;
gzip on;
#最小压缩文件大小
gzip_min_length 1k;
#压缩缓冲区
gzip_buffers 32 4k;
#压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
#gzip_http_version 1.0;
#压缩等级
gzip_comp_level 6;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_types text/plain application/json application/javascript text/css application/xml text/javascript;
#选择支持vary header,可以让前端的缓存服务器缓存经过gzip压缩的页面;
gzip_vary on;
resolver 100.125.1.250;
server_names_hash_bucket_size 256;
server_tokens off;
client_max_body_size 50m;
map $http_upgrade $connection_upgrade {
#default keep-alive;
default upgrade;
#'websocket' upgrade;
'' close;
}
# 健康检查片段
server {
#listen 443 ssl default_server;
listen 82 default_server;
server_name _;
keepalive_timeout 300;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
#ssl_certificate "cert/6529988__seeyonv8.com.pem"; #替换ssl证书pem
#ssl_certificate_key "cert/6529988__seeyonv8.com.key"; #替换ssl证书key
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
#ssl_prefer_server_ciphers on;
access_log off;
location = /-/health {
return 200 'ok';
}
location / {
return 403;
}
location /metrics {
vhost_traffic_status_display;
# 接口地址 /metrics
vhost_traffic_status_display_format prometheus;
}
}
# V8 openapi、webapi配置片段
include conf.d/*.conf;
}
2、到conf.d目录下一层级新建一个维护v8的配置 vim v8.conf
,将如下内容粘贴进去并按需修改带#号注释说明部分:
# 定义V8 webapi代理信息
server {
listen 80;
server_name _;
keepalive_timeout 300;
client_header_buffer_size 128k;
large_client_header_buffers 4 8k;
proxy_buffer_size 1024k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 16 1024k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 2048k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 2048k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传
access_log logs/frontend_access.log main;
client_max_body_size 500M;
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,X-XSRF-TOKEN,Cookie,Set-Cookie,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
if ($request_method = 'OPTIONS') {
return 200;
}
location = / {
return 301 ./main/;
}
location ~ /service/ {
# 配置代理到K8S Master IP和webapi端口
proxy_pass http://10.101.68.3:30000;
rewrite ^/service/(.*)$ /$1 break;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header sy-host $host;
client_max_body_size 500M;
}
location ~ \/file\/download {
# 配置代理到MiniIO地址
proxy_pass http://10.101.68.2:9000;
}
location ~ \.(txt|bmp|png|apng|avif|gif|jpg|jpeg|jfif|pjpeg|pjp|svg|webp|ico|cur|tif|tiff|ttf|eot|woff|woff2|js|css|html|map|json)$ {
default_type text/html;
add_header Content-Disposition inline;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
# 配置空间名称
rewrite ^(.*) /seeyon-dev/$1 break;
# 配置代理到MiniIO地址
proxy_pass http://10.101.68.2:9000;
set $cache_control "max-age=2592000";
set $accept_encoding "gzip";
# 没有 hash 值的前端资源,走协商缓存
if ($uri ~ ((remoteEntry|sy-icon|seeyon-sw-register)\.js|\.html|(sy-icon|sy-icon-colorful)\.css|(sy-icon|sy-icon-colorful)\.woff|(sy-icon|sy-icon-colorful)\.woff2|(sy-icon|sy-icon-colorful)\.ttf)$) {
set $cache_control "no-cache";
# 阿里云 OSS gzip 的资源第一次请求没有 etag,只有 Last-Modified,为了拿到 etag 这里禁用上游请求的 gzip
set $accept_encoding "";
# 如果请求 upsteam 资源,需要禁用 gzip,避免生成 weak etag 导致 304 失效,
gzip off;
}
add_header Cache-Control $cache_control;
proxy_set_header Accept-Encoding $accept_encoding;
}
location ~ ^/(?!(?:service|openapi|ctp-user\/sso)/)([^/]+) {
default_type text/html;
index index.html;
add_header Content-Disposition inline;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
if ($request_filename ~* .*\.(?:htm|html)$) {
add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
}
rewrite ^/([a-zA-Z0-9\-\_]+)/?[a-zA-Z0-9\/\-\_]*$ /dev-public/$1/index.html break;
# 配置代理到MiniIO地址
proxy_pass http://10.101.68.2:9000;
}
error_page 500 502 504 503 /50x.html;
error_page 404 /404.html;
location = /404.html {
root html;
}
}
# 定义V8 openapi代理信息
server {
listen 81;
server_name _;
access_log logs/openapi_access.log main;
keepalive_timeout 300;
client_header_buffer_size 128k;
large_client_header_buffers 4 8k;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' '*';
add_header 'Access-Control-Allow-Headers' '*';
location / {
# 配置代理到K8S Master IP和openapi端口
proxy_pass http://10.101.68.3:30000;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
快速跳转
