v8运维知识
udc应用推送
# 在开发环境中:
cd /home/app
sh image.sh
# 此时输入镜像名称 kube的yaml文件中具体镜像名称
# 例如:10.242.56.29/seeyon-dev/xxx-1.0.0
# 2、在搭建环境、生产环境 中执行
cd /home/app
sh push-image.sh
# 输入镜像包名称 xxx.tar
# 输入命名空间
研发补丁包前端包
# 解压后是 portal文件夹,meta.properties,patch.properties 为前端包
wget 'https:xxxx'
mv xxxx(链接wget出来的文件) v8.zip
unzip v8.zip
cd portal/frontend/content/
开发:
for i in `ls` ; do obsutil cp -r -f --flat $i/ obs://obs-zjjt-jttyoa-dev-0001/$i ;done
搭建:
for i in `ls` ; do obsutil cp -r -f --flat $i/ obs://obs-zjjt-jttioa-pre-public/$i ;done
预生产:
for i in `ls` ; do obsutil cp -r -f --flat $i/ obs://obs-zjjt-jttioa-pre02-public/$i ;done
研发补丁包组件包
# 解压后为 fe_comp文件夹、log.txt 的,为前端组件包
wget 'https:xxxx'
mv xxxx(链接wget出来的文件) v8.zip
unzip v8.zip
cd fe_comp
开发:
obsutil cp -r -f --flat web/libs/ obs://obs-zjjt-jttyoa-dev-0001/libs/
搭建:
obsutil cp -r -f --flat web/libs/ obs://obs-zjjt-jttioa-pre-public/libs/
预生产:
obsutil cp -r -f --flat web/libs/ obs://obs-zjjt-jttioa-pre02-public/libs/
研发补丁包镜像部署
# wget下载研发补丁包 解压后为 tar的,为后端镜像包
wget https://seeyon-product-private.oss-cn-beijing.aliyuncs.com/a9c-install-history/V5.0.3_20250918/arm/tomcat/udc-arm-5.3.292.zip?OSSAccessKeyId=TMP.3KpYMgJVkvpM2Geykx8eeZPFptmvMBEByF1wertxEeUJxSthL2rCvDV7k3PFDxJtpyr35VntNaLx9yKM3qZpnqpAaQVniC&Expires=1758551942&Signature=pJKZzy0IKhYPRbfaXoECu5bc7mU%3D
# 解压
unzip xxx.zip
# load研发docker包
docker load -i edoc335172694483814428.tar
# 改研发包docker标签
docker tag seeyonv8-registry-vpc.cn-beijing.cr.aliyuncs.com/xinchuang_arm/edoc335172694483814428:5.3.761 10.241.62.88/seeyon-oa/edoc335172694483814428:5.3.761
# push研发包到对应环境docker仓库
docker push 10.241.62.88/seeyon-oa/edoc335172694483814428:5.3.761
# 重启对应微服务,改镜像版本
#比如
docker load -i bpm.tar
#开发:
docker tag seeyonv8-registry-vpc.cn-beijing.cr.aliyuncs.com/xinchuang_arm/bpm:5.3.296 10.242.56.29/seeyon-dev/bpm:5.3.296
docker push 10.242.56.29/seeyon-dev/bpm:5.3.296
#在kuborad上将镜像替换
#搭建:
docker tag seeyonv8-registry-vpc.cn-beijing.cr.aliyuncs.com/xinchuang_arm/bpm:5.3.296 10.241.64.92/seeyon-wsc/bpm:5.3.296
docker push 10.241.64.92/seeyon-wsc/bpm:5.3.296
在kuborad上将镜像替换
#预生产:
docker tag seeyonv8-registry-vpc.cn-beijing.cr.aliyuncs.com/xinchuang_arm/bpm:5.3.296 10.241.64.92/seeyon-pre/bpm:5.3.296
docker push 10.241.64.92/seeyon-pre/bpm:5.3.296
#在kuborad上将镜像替换
#生产:
#预生产:
docker tag seeyonv8-registry-vpc.cn-beijing.cr.aliyuncs.com/xinchuang_arm/bpm:5.3.296 10.241.62.88/seeyon-oa/bpm:5.3.296
docker push 10.241.62.88/seeyon-oa/bpm:5.3.296
#在kuborad上将镜像替换
脚本
推送udc脚本内容
image.sh
#!/bin/bash
read -p '请输入镜像名称:' IMAGE
docker pull $IMAGE
if [ $? -eq 0 ]; then
echo "pull success"
else
echo "pull fail"
exit 1
fi
tar_name=$(echo $IMAGE | awk -F':' '{print $2}' | awk -F'-' '{print $1}').tar
docker save -o $tar_name $IMAGE
if [ $? -eq 0 ]; then
echo "success"
else
echo "fail"
fi
chmod 777 $tar_name
mv $tar_name /home/app
ls /home/app/$tar_name
if [ $? -eq 0 ]; then
echo "镜像已保存到/home/app"
else
echo "无$tar_name"
fi
obsutil cp -r -f /home/app/$tar_name obs://obs-zjjt-jttyoa-dev-0001/udctuisong/
push-image.sh
#!/bin/bash
# 输入镜像包名称
read -p "请输入镜像包名称(xxx.tar):" tar_name
#拉取镜像
cd /home/app/
obsutil cp -r -f obs://obs-zjjt-jttyoa-dev-0001/udctuisong/$tar_name ./
# 检查文件是否存在
if [ ! -f "$tar_name" ]; then
echo "错误:文件 $tar_name 不存在!"
exit 1
fi
# 加载镜像并获取完整镜像名称
echo "正在加载镜像..."
load_output=$(docker load -i "$tar_name")
if [ $? -ne 0 ]; then
echo "镜像加载失败!"
exit 1
fi
full_image_name=$(echo "$load_output" | awk '{print $3}')
if [ -z "$full_image_name" ]; then
echo "无法获取镜像名称!"
exit 1
fi
# 从tar文件名提取基本名称(去除.tar)
base_name=$(basename "$tar_name" .tar)
# 从完整镜像名称中匹配源tag
src_tag_name=$(echo "$full_image_name" | grep -o "$base_name[^:]*")
if [ -z "$src_tag_name" ]; then
echo "无法从镜像名称中提取tag部分!"
exit 1
fi
echo "加载的镜像tag是: $src_tag_name"
# 构建目标tag名称
dest_tag_name="10.241.62.88/seeyon-oa/dyapp:$src_tag_name"
echo "目标镜像地址: $dest_tag_name"
# 重新打tag
echo "正在重新打tag..."
docker tag "$full_image_name" "$dest_tag_name"
if [ $? -ne 0 ]; then
echo "打tag失败!"
exit 1
fi
# 推送镜像
echo "正在推送镜像..."
docker push "$dest_tag_name"
if [ $? -eq 0 ]; then
echo "$dest_tag_name 推送成功"
else
echo "镜像推送失败!"
exit 1
fi
echo "操作完成"
应用调优
1、去掉-Xmn4G,给收集器自由分配的空间【公文】
2、去掉-Xdebug -Xnoagent -Djava.compiler=NONE 【提升性能,生产所有应用,注意修改会引起服务重启】
3、去掉-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 【提升性能,生产所有应用,注意修改会引起服务重启】
4、增加-XX:G1HeapRegionSize=16M,当前堆够大,增加该参数降低大对象分配问题与gc压力【公文】
5、-XX:+PrintGCTimeStamps 改为 -XX:+PrintGCDateStamps,gc日志记录具体时间【生产所有应用,注意修改会引起服务重启】
GitLab
数据库和仓库位置分析
基于您提供的 Docker 命令,以下是关键存储位置:
| 容器内路径 | 宿主机挂载路径 | 用途说明 |
|---|---|---|
/etc/gitlab | /data/gitlab/etc | GitLab 配置文件(包括 gitlab.rb) |
/var/log/gitlab | /data/gitlab/log | 日志文件 |
/var/opt/gitlab | /data/gitlab/opt | 核心数据存储区 |
├── postgresql/data | /data/gitlab/opt/postgresql/data | 数据库文件(PostgreSQL) |
└── git-data/repositories | /data/gitlab/opt/git-data/repositories | 代码仓库(按哈希存储) |
如何检索和获取对应项目的代码文件?
1. 找到对应项目的仓库路径
在GitLab中,每个项目的代码仓库按照一定的哈希规则存储在/var/opt/gitlab/git-data/repositories下。路径规则为:
@hashed/{a}/{b}/{project_id}-{project_path}.git
其中:
a是项目ID(十六进制)的前一位(取模后的值)b是项目ID(十六进制)的后一位(取模后的值)project_id是项目的数字IDproject_path是项目的路径(例如:group/project)
例如,如果项目ID为123,路径为mygroup/myproject,则仓库路径可能为:
@hashed/7b/9b/123-mygroup/myproject.git
2. 如何知道项目ID和路径?
您可以通过以下方式获取:
在容器内执行:
gitlab-rails runner "Project.all.each { |p| puts \"ID: #{p.id}, Path: #{p.path}, Full Path: #{p.full_path}, Storage: #{p.repository_storage}\" }"
这将列出所有项目的ID、路径(相对于命名空间的路径)、完整路径(包括命名空间)和存储位置。
3. 如何访问项目代码?
一旦您知道了项目的仓库路径(例如/var/opt/gitlab/git-data/repositories/@hashed/7b/9b/123-mygroup/myproject.git),您可以通过Git命令来访问:
在容器内,您可以使用git clone或git log等命令来查看:
# 进入项目仓库
cd /var/opt/gitlab/git-data/repositories/@hashed/7b/9b/123-mygroup/myproject.git
# 克隆项目到临时目录(如果需要)
git clone /var/opt/gitlab/git-data/repositories/@hashed/7b/9b/123-mygroup/myproject.git /tmp/myproject
# 查看项目内容
ls -la /tmp/myproject
4. 如果无法进入容器(在宿主机上操作)
由于仓库挂载在宿主机上,您可以直接在宿主机上访问:
cd /data/gitlab/opt/git-data/repositories/@hashed/7b/9b/123-mygroup/myproject.git
# 或者克隆到宿主机
git clone /data/gitlab/opt/git-data/repositories/@hashed/7b/9b/123-mygroup/myproject.git
5. 如果您无法确定项目对应的仓库路径
如果您不知道项目ID和路径,可以按照以下步骤查找:
- 在宿主机上,列出
/data/gitlab/opt/git-data/repositories/@hashed目录下的所有子目录(第一层)。 - 查看每个哈希目录(如
7b)下的子目录(如9b),然后查看其中的.git目录(例如123-mygroup/myproject.git)。 - 打开
.git目录,查看里面的config文件(如果存在),里面可能会有项目的远程信息(例如GitLab的URL),这可以帮助您识别是哪个项目。
文件结构说明
仓库目录遵循Git的标准结构:
@hashed/
├── 7b/ # 第一层哈希目录(项目ID取模)
│ └── 9b/ # 第二层哈希目录(项目ID取模)
│ ├── 123-mygroup.myproject.git/ # 项目仓库(Git标准格式)
│ │ ├── HEAD
│ │ ├── objects/ # 存储实际代码(二进制压缩文件)
│ │ ├── refs/ # 分支/标签引用
│ │ └── config # 仓库配置
│ └── 456-anothergroup.anotherproject.git/ # 其他项目...
@hashed/ab/cd/project-name.git/
├── HEAD # 分支指针
├── objects/ # Git 对象存储区(核心数据)
│ ├── 01/ # 内容哈希目录
│ ├── info/ # 垃圾回收信息
│ └── pack/ # 压缩包文件
├── refs/ # 引用(分支/标签)文件
└── config # 仓库配置
假设找到目标项目路径为:
@hashed/7b/9b/123-mygroup.myproject.git完整导出项目代码:
cd /data/gitlab/opt/git-data/repositories
git clone @hashed/7b/9b/123-mygroup.myproject.git /tmp/exported_code
# 拿到本地获取文件
ls -la /data/gitlab/opt/git-data/repositories/@hashed/ | grep "项目B"
# 在宿主机上查找项目仓库(已知项目名 project-a)
find /data/gitlab/opt/git-data/repositories -path "*/project-a.git*" -name "*.zip"
# 输出示例:/data/gitlab/opt/git-data/repositories/@hashed/7b/9b/project-a.git/releases/v1.0.zip
# 进入仓库目录
cd /var/opt/gitlab/git-data/repositories/@hashed/7b/9b/project-a.git
# 提取二进制文件(必须用 git show,不能直接 cp)
git show HEAD:releases/v1.0.zip > /tmp/v1.0.zip