diff --git a/docker-builds/powerjob/Dockerfile b/docker-builds/powerjob/Dockerfile new file mode 100644 index 0000000..e69de29 diff --git a/docker-builds/powerjob/kingbase-8.6.0.jar b/docker-builds/powerjob/kingbase-8.6.0.jar new file mode 100644 index 0000000..875c5af Binary files /dev/null and b/docker-builds/powerjob/kingbase-8.6.0.jar differ diff --git a/java开发手册.docx b/java开发手册.docx new file mode 100644 index 0000000..b4d5b5a Binary files /dev/null and b/java开发手册.docx differ diff --git a/~$va开放手册.docx b/~$va开放手册.docx new file mode 100644 index 0000000..fcd42e3 Binary files /dev/null and b/~$va开放手册.docx differ diff --git a/宝策/docker_es.sh b/宝策/docker_es.sh new file mode 100644 index 0000000..32e24f1 --- /dev/null +++ b/宝策/docker_es.sh @@ -0,0 +1,222 @@ +#!/bin/bash +# 定义变量 +CONTAINER_NAME="elasticsearch" +IMAGE_NAME="elasticsearch:7.17.28" # 镜像版本 +DATA_DIR="/docker-data/elasticsearch/data" # 数据目录 +CONFIG_DIR="/docker-data/elasticsearch/config" # 配置目录 +LOGS_DIR="/docker-data/elasticsearch/logs" # 日志目录 +HTTP_PORT=9200 # HTTP端口 +TRANSPORT_PORT=9300 # 内部通信端口 +CLUSTER_NAME="es-single-cluster" # 集群名称 +NODE_NAME="single-node" # 节点名称 +ES_JAVA_OPTS="-Xms1g -Xmx1g" # JVM内存(根据主机内存调整) + +# 显示帮助信息 +show_help() { + echo "使用方法: $0 [操作类型]" + echo "操作类型:" + echo " deploy - 部署并启动单机模式Elasticsearch" + echo " remove - 停止并删除容器及数据目录" + echo " logs - 查看容器日志" + echo " status - 查看容器状态" + echo " help - 显示帮助信息" +} + +# 准备环境(创建目录和配置文件) +prepare_env() { + # 创建数据、配置、日志目录并授权 + for dir in "$DATA_DIR" "$CONFIG_DIR" "$LOGS_DIR"; do + if [ ! -d "$dir" ]; then + echo "创建目录: $dir" + mkdir -p "$dir" + fi + chown -R 1000:1000 "$dir" # 匹配容器内用户UID/GID + chmod 755 "$dir" + done + + # 生成单机模式配置文件(若不存在) + if [ ! -f "$CONFIG_DIR/elasticsearch.yml" ]; then + echo "生成单机模式配置文件: $CONFIG_DIR/elasticsearch.yml" + cat > "$CONFIG_DIR/elasticsearch.yml" << EOF +cluster.name: es-single-cluster +node.name: single-node +network.host: 0.0.0.0 +http.port: 9200 +transport.port: 9300 +discovery.type: single-node # 单机模式核心配置(必须保留) +# 以下行必须删除或注释掉(与single-node冲突) +# cluster.initial_master_nodes: ["single-node"] +xpack.security.enabled: false +http.cors.enabled: true +http.cors.allow-origin: "*" +bootstrap.memory_lock: true +ingest.geoip.downloader.enabled: false +EOF + fi + + # 配置JVM参数(若不存在) + if [ ! -f "$CONFIG_DIR/jvm.options" ]; then + echo "生成JVM配置文件: $CONFIG_DIR/jvm.options" + # 修正后代码(拆分参数为两行) + cat > "$CONFIG_DIR/jvm.options" << EOF +-Xms1g +-Xmx1g +# 保留其他默认配置(如下) +-XX:+UseG1GC +-XX:MaxGCPauseMillis=50 +-XX:+HeapDumpOnOutOfMemoryError +8-13:-XX:+UseConcMarkSweepGC +8-13:-XX:CMSInitiatingOccupancyFraction=75 +8-13:-XX:+UseCMSInitiatingOccupancyOnly +14-:-XX:+UseG1GC +-XX:+HeapDumpOnOutOfMemoryError +9-:-XX:+ExitOnOutOfMemoryError +-XX:HeapDumpPath=data +-XX:ErrorFile=logs/hs_err_pid%p.log +8:-XX:+PrintGCDetails +8:-XX:+PrintGCDateStamps +8:-XX:+PrintTenuringDistribution +8:-XX:+PrintGCApplicationStoppedTime +8:-Xloggc:logs/gc.log +8:-XX:+UseGCLogFileRotation +8:-XX:NumberOfGCLogFiles=32 +8:-XX:GCLogFileSize=64m +# JDK 9+ GC logging +9-:-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m +EOF + fi +} + +# 检查系统配置(解决vm.max_map_count问题) +check_sys_config() { + current_map_count=$(sysctl -n vm.max_map_count) + if [ $current_map_count -lt 262144 ]; then + echo "检测到vm.max_map_count值不足,需要调整..." + if [ "$(id -u)" -ne 0 ]; then + echo "请使用sudo权限运行脚本,或手动执行:" + echo "sudo sysctl -w vm.max_map_count=262144" + echo "并在/etc/sysctl.conf中添加:vm.max_map_count=262144" + exit 1 + fi + # 临时调整 + sysctl -w vm.max_map_count=262144 + # 永久生效 + if ! grep -q "vm.max_map_count=262144" /etc/sysctl.conf; then + echo "vm.max_map_count=262144" >> /etc/sysctl.conf + fi + fi +} + +# 部署启动 +deploy_es() { + check_sys_config # 先检查系统配置 + prepare_env # 准备目录和配置 + + # 停止并删除现有容器 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止并删除现有容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME + docker rm $CONTAINER_NAME + fi + + # 启动单机模式容器 + echo "启动Elasticsearch单机模式..." + docker run -d --privileged \ + --name $CONTAINER_NAME \ + --restart always \ + --ulimit nofile=65536:65536 \ + --ulimit nproc=4096:4096 \ + --ulimit memlock=-1:-1 \ + -p $HTTP_PORT:9200 \ + -p $TRANSPORT_PORT:9300 \ + -v $DATA_DIR:/usr/share/elasticsearch/data \ + -v $CONFIG_DIR/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ + -v $LOGS_DIR:/usr/share/elasticsearch/logs \ + -e TZ=Asia/Shanghai \ + $IMAGE_NAME + + # 检查启动状态 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then + echo "Elasticsearch单机模式启动成功!" + echo "访问地址: http://localhost:$HTTP_PORT" + echo "集群名称: $CLUSTER_NAME" + echo "JVM配置: $ES_JAVA_OPTS" + else + echo "启动失败,请查看日志: ./$0 logs" + docker logs $CONTAINER_NAME + fi +} + +# 移除容器和数据 +remove_es() { + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME + echo "删除容器: $CONTAINER_NAME" + docker rm $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi + + # 询问是否删除数据目录 + for dir in "$DATA_DIR" "$CONFIG_DIR" "$LOGS_DIR"; do + if [ -d "$dir" ]; then + read -p "是否删除目录 $dir? (y/n) " confirm + if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then + echo "删除目录: $dir" + rm -rf "$dir" + else + echo "保留目录: $dir" + fi + fi + done +} + +# 查看日志 +show_logs() { + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "查看Elasticsearch日志(按Ctrl+C退出)..." + docker logs -f $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 查看状态 +show_status() { + echo "容器状态:" + docker ps -f name=$CONTAINER_NAME --format "表格:{{.Names}} {{.Status}} {{.Ports}}" + if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then + echo "服务健康检查:" + curl -s "http://localhost:$HTTP_PORT/_cluster/health" | jq . + fi +} + +# 主逻辑 +if [ $# -ne 1 ]; then + show_help + exit 1 +fi + +case "$1" in + deploy) + deploy_es + ;; + remove) + remove_es + ;; + logs) + show_logs + ;; + status) + show_status + ;; + help) + show_help + ;; + *) + echo "无效操作: $1" + show_help + exit 1 + ;; +esac \ No newline at end of file diff --git a/宝策/docker_install.sh b/宝策/docker_install.sh new file mode 100644 index 0000000..bf459d7 --- /dev/null +++ b/宝策/docker_install.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +# 定义颜色变量,用于输出提示信息 +GREEN="\033[32m" +RED="\033[31m" +NC="\033[0m" # 重置颜色 + +# 1. 解压 docker 压缩包 +echo -e "${GREEN}开始解压 docker-28.4.0.tgz...${NC}" +if tar -xf docker-28.4.0.tgz; then + echo -e "${GREEN}压缩包解压成功${NC}" +else + echo -e "${RED}压缩包解压失败,请检查文件是否存在或权限是否足够${NC}" + exit 1 +fi + +# 2. 移动 docker 二进制文件到 /usr/bin +echo -e "${GREEN}开始移动 docker 文件到 /usr/bin...${NC}" +if mv docker/* /usr/bin/; then + echo -e "${GREEN}文件移动成功${NC}" +else + echo -e "${RED}文件移动失败,请检查 docker 目录是否存在或权限是否足够${NC}" + exit 1 +fi + +# 3. 创建 docker.service 服务文件 +echo -e "${GREEN}开始创建 docker 服务文件...${NC}" +SERVICE_FILE="/usr/lib/systemd/system/docker.service" +# 使用 cat 重定向写入内容,避免使用 vi 交互操作 +cat > "$SERVICE_FILE" << 'EOF' +[Unit] +Description=Docker Application Container Engine +Documentation=https://docs.docker.com +After=network-online.target firewalld.service +Wants=network-online.target + +[Service] +Type=notify +#ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1 +ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1:5000 --insecure-registry=docker.tanuki.vip +ExecReload=/bin/kill -s HUP $MAINPID +LimitNOFILE=infinity +LimitNPROC=infinity +LimitCORE=infinity +#TasksMax=infinity +TimeoutStartSec=0 +Delegate=yes +KillMode=process +Restart=on-failure +StartLimitBurst=3 +StartLimitInterval=60s + +[Install] +WantedBy=multi-user.target +EOF + +# 检查服务文件是否创建成功 +if [ -f "$SERVICE_FILE" ]; then + echo -e "${GREEN}docker.service 服务文件创建成功${NC}" +else + echo -e "${RED}docker.service 服务文件创建失败${NC}" + exit 1 +fi + +# 4. 重新加载 systemd 配置 +echo -e "${GREEN}重新加载 systemd 配置...${NC}" +if systemctl daemon-reload; then + echo -e "${GREEN}systemd 配置重载成功${NC}" +else + echo -e "${RED}systemd 配置重载失败${NC}" + exit 1 +fi + +# 5. 启动 docker 服务 +echo -e "${GREEN}启动 docker 服务...${NC}" +if systemctl start docker; then + echo -e "${GREEN}docker 服务启动成功${NC}" +else + echo -e "${RED}docker 服务启动失败${NC}" + exit 1 +fi + +# 6. 设置 docker 开机自启 +echo -e "${GREEN}设置 docker 开机自启...${NC}" +if systemctl enable docker; then + echo -e "${GREEN}docker 开机自启设置成功${NC}" +else + echo -e "${RED}docker 开机自启设置失败${NC}" + exit 1 +fi + +# 7. 查看 docker 服务状态 +echo -e "${GREEN}查看 docker 服务状态...${NC}" +systemctl status docker + +echo -e "\n${GREEN}所有操作执行完成!${NC}" \ No newline at end of file diff --git a/宝策/docker_kingbase8.sh b/宝策/docker_kingbase8.sh new file mode 100644 index 0000000..3ad1064 --- /dev/null +++ b/宝策/docker_kingbase8.sh @@ -0,0 +1,157 @@ +#!/bin/bash + +# Kingbase容器名称 +CONTAINER_NAME="kingbase8" +# Kingbase镜像版本 +KINGBASE_VERSION="v1" +# 镜像名称 +IMAGE_NAME="127.0.0.1:5000/kingbase8:${KINGBASE_VERSION}" +# 映射端口(主机:容器) +PORT="54321:54321" +# 网络配置 +NETWORK="scm-net" +# 容器IP +CONTAINER_IP="172.20.0.4" +# 环境变量配置 +TZ="Asia/Shanghai" +NEED_START="yes" +DB_USER="itc_dne" +DB_PASSWORD="itc_dne" +DB_MODE="oracle" +# 数据存储路径 +DATA_PATH="/docker-data/kingbase/data" + +# 创建目录并设置权限函数 +create_dirs() { + # 创建数据目录并设置权限 + if [ ! -d "$DATA_PATH" ]; then + mkdir -p "$DATA_PATH" + echo "创建数据目录: $DATA_PATH" + chmod -R 777 "$DATA_PATH" + echo "设置数据目录权限: $DATA_PATH" + fi +} + +# 部署Kingbase +deploy() { + if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then + echo "Kingbase容器 $CONTAINER_NAME 已存在并运行中" + return 1 + fi + + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "发现已停止的Kingbase容器,正在启动..." + docker start $CONTAINER_NAME + return 0 + fi + + echo "开始部署Kingbase容器..." + create_dirs + + docker run -d --privileged --restart always \ + --net=$NETWORK --ip=$CONTAINER_IP \ + -p $PORT \ + --name $CONTAINER_NAME \ + -e TZ=$TZ -e NEED_START=$NEED_START \ + -e DB_USER=$DB_USER -e DB_PASSWORD=$DB_PASSWORD -e DB_MODE=$DB_MODE \ + -v $DATA_PATH:/home/kingbase/userdata/data \ + $IMAGE_NAME + + if [ $? -eq 0 ]; then + echo "Kingbase容器部署成功!" + echo "容器名称: $CONTAINER_NAME" + echo "映射端口: $PORT" + else + echo "Kingbase容器部署失败!" + fi +} + +# 查看日志 +logs() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "Kingbase容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "查看Kingbase容器日志 (按Ctrl+C退出)..." + docker logs -f --tail 200 $CONTAINER_NAME +} + +# 重启容器 +restart() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "Kingbase容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "正在重启Kingbase容器..." + docker restart $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "Kingbase容器重启成功!" + else + echo "Kingbase容器重启失败!" + fi +} + +# 删除容器 +remove() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "Kingbase容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "警告:此操作将删除Kingbase容器,但数据目录会保留" + read -p "确定要删除吗?(y/n) " confirm + if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then + echo "取消删除操作" + return 0 + fi + + echo "正在停止并删除Kingbase容器..." + docker stop $CONTAINER_NAME + docker rm $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "Kingbase容器删除成功!" + echo "数据保留在: $DATA_PATH" + else + echo "Kingbase容器删除失败!" + fi +} + +# 显示帮助 +show_help() { + echo "Kingbase容器管理脚本" + echo "用法: $0 [命令]" + echo "命令列表:" + echo " deploy - 部署并启动Kingbase容器" + echo " logs - 查看Kingbase容器日志" + echo " restart - 重启Kingbase容器" + echo " remove - 删除Kingbase容器(保留数据)" + echo " help - 显示帮助信息" +} + +# 主逻辑 +case "$1" in + deploy) + deploy + ;; + logs) + logs + ;; + restart) + restart + ;; + remove) + remove + ;; + help) + show_help + ;; + *) + echo "未知命令: $1" + show_help + exit 1 + ;; +esac \ No newline at end of file diff --git a/宝策/docker_kkfileview.sh b/宝策/docker_kkfileview.sh new file mode 100644 index 0000000..6411f78 --- /dev/null +++ b/宝策/docker_kkfileview.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +# KKFileView容器名称 +CONTAINER_NAME="kkfileview" +# KKFileView版本 +KK_VERSION="4.4.0" +# 映射端口(主机:容器) +PORT="8012" +# 数据存储路径 +CONF_PATH="/docker-data/kkfileview/conf" + +# 镜像地址 +IMAGE="docker.tanuki.vip/kkfileview:${KK_VERSION}" + +# 创建目录并设置权限函数 +create_dirs() { + # 创建数据目录并设置权限 + if [ ! -d "$CONF_PATH" ]; then + mkdir -p "$CONF_PATH" + echo "创建数据目录: $CONF_PATH" + chmod -R 777 "$CONF_PATH" + echo "设置数据目录权限: $CONF_PATH" + fi +} + +# 部署KKFileView +deploy() { + if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then + echo "KKFileView容器 $CONTAINER_NAME 已存在并运行中" + return 1 + fi + + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "发现已停止的KKFileView容器,正在启动..." + docker start $CONTAINER_NAME + return 0 + fi + + echo "开始部署KKFileView容器..." + create_dirs + docker run -d --restart always --name $CONTAINER_NAME\ + -p $PORT:8012 \ + -v $CONF_PATH/application.properties:/opt/kkFileView-4.4.0/config/application.properties \ + $IMAGE + + if [ $? -eq 0 ]; then + echo "KKFileView容器部署成功!" + echo "容器名称: $CONTAINER_NAME" + echo "映射端口: $PORT" + else + echo "KKFileView容器部署失败!" + fi +} + +# 查看日志 +logs() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "KKFileView容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "查看KKFileView容器日志 (按Ctrl+C退出)..." + docker logs -f --tail 200 $CONTAINER_NAME +} + +# 重启容器 +restart() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "KKFileView容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "正在重启KKFileView容器..." + docker restart $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "KKFileView容器重启成功!" + else + echo "KKFileView容器重启失败!" + fi +} + +# 删除容器 +remove() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "KKFileView容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "警告:此操作将删除KKFileView容器" + read -p "确定要删除吗?(y/n) " confirm + if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then + echo "取消删除操作" + return 0 + fi + + echo "正在停止并删除KKFileView容器..." + docker stop $CONTAINER_NAME + docker rm $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "KKFileView容器删除成功!" + else + echo "KKFileView容器删除失败!" + fi +} + +# 显示帮助 +show_help() { + echo "KKFileView容器管理脚本" + echo "用法: $0 [命令]" + echo "命令列表:" + echo " deploy - 部署并启动KKFileView容器" + echo " logs - 查看KKFileView容器日志" + echo " restart - 重启KKFileView容器" + echo " remove - 删除KKFileView容器" + echo " help - 显示帮助信息" +} + +# 主逻辑 +case "$1" in + deploy) + deploy + ;; + logs) + logs + ;; + restart) + restart + ;; + remove) + remove + ;; + help) + show_help + ;; + *) + echo "未知命令: $1" + show_help + exit 1 + ;; +esac \ No newline at end of file diff --git a/宝策/docker_minio.sh b/宝策/docker_minio.sh new file mode 100644 index 0000000..9d1ff0c --- /dev/null +++ b/宝策/docker_minio.sh @@ -0,0 +1,159 @@ +#!/bin/bash + +# MinIO容器名称 +CONTAINER_NAME="minio" +# MinIO镜像版本 +MINIO_VERSION="RELEASE.2025-07-23T15-54-02Z" +# 映射端口(API:控制台) +PORT_API="9000" +PORT_CONSOLE="9001" +# 环境变量配置 +MINIO_ROOT_USER="admin" +MINIO_ROOT_PASSWORD="Pcitc@123" +MINIO_CONSOLE_ACKNOWLEDGE_AGPL="yes" +# 网络配置 +NETWORK="scm-net" +# 容器IP +CONTAINER_IP="172.20.0.3" +# 数据存储路径 +DATA_PATH="/docker-data/minio/data" + +# 创建目录并设置权限函数 +create_dirs() { + # 创建数据目录并设置权限 + if [ ! -d "$DATA_PATH" ]; then + mkdir -p "$DATA_PATH" + echo "创建数据目录: $DATA_PATH" + chmod -R 777 "$DATA_PATH" + echo "设置数据目录权限: $DATA_PATH" + fi + + +} + +# 部署MinIO +deploy() { + if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then + echo "MinIO容器 $CONTAINER_NAME 已存在并运行中" + return 1 + fi + + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "发现已停止的MinIO容器,正在启动..." + docker start $CONTAINER_NAME + return 0 + fi + + echo "开始部署MinIO容器..." + create_dirs + + docker run -d --restart always \ + --net=$NETWORK --ip=$CONTAINER_IP \ + -p $PORT_API:9000 \ + -p $PORT_CONSOLE:9001 \ + --name $CONTAINER_NAME \ + -e "MINIO_ROOT_USER=$MINIO_ROOT_USER" \ + -e "MINIO_ROOT_PASSWORD=$MINIO_ROOT_PASSWORD" \ + -e "MINIO_CONSOLE_ACKNOWLEDGE-AGPL=yes" \ + -v $DATA_PATH:/data \ + minio/minio:$MINIO_VERSION server /data --console-address ":9001" + + if [ $? -eq 0 ]; then + echo "MinIO容器部署成功!" + echo "容器名称: $CONTAINER_NAME" + echo "API端口映射: $PORT_API" + echo "控制台端口映射: $PORT_CONSOLE" + else + echo "MinIO容器部署失败!" + fi +} + +# 查看日志 +logs() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "MinIO容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "查看MinIO容器日志 (按Ctrl+C退出)..." + docker logs -f --tail 200 $CONTAINER_NAME +} + +# 重启容器 +restart() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "MinIO容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "正在重启MinIO容器..." + docker restart $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "MinIO容器重启成功!" + else + echo "MinIO容器重启失败!" + fi +} + +# 删除容器 +remove() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "MinIO容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "警告:此操作将删除MinIO容器,但数据目录会保留" + read -p "确定要删除吗?(y/n) " confirm + if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then + echo "取消删除操作" + return 0 + fi + + echo "正在停止并删除MinIO容器..." + docker stop $CONTAINER_NAME + docker rm $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "MinIO容器删除成功!" + echo "数据保留在: $DATA_PATH" + else + echo "MinIO容器删除失败!" + fi +} + +# 显示帮助 +show_help() { + echo "MinIO容器管理脚本" + echo "用法: $0 [命令]" + echo "命令列表:" + echo " deploy - 部署并启动MinIO容器" + echo " logs - 查看MinIO容器日志" + echo " restart - 重启MinIO容器" + echo " remove - 删除MinIO容器(保留数据)" + echo " help - 显示帮助信息" +} + +# 主逻辑 +case "$1" in + deploy) + deploy + ;; + logs) + logs + ;; + restart) + restart + ;; + remove) + remove + ;; + help) + show_help + ;; + *) + echo "未知命令: $1" + show_help + exit 1 + ;; +esac \ No newline at end of file diff --git a/宝策/docker_nacos.sh b/宝策/docker_nacos.sh new file mode 100644 index 0000000..62666c9 --- /dev/null +++ b/宝策/docker_nacos.sh @@ -0,0 +1,309 @@ +#!/bin/bash +# 脚本功能:不依赖docker-compose,使用docker命令管理nacos服务 + +# 定义变量 +IMAGE="docker.tanuki.vip/nacos-server-kingbase" +IMAGE_VERSION="2.3.0" +FULL_IMAGE="${IMAGE}:${IMAGE_VERSION}" # 合并镜像地址和版本 +CONTAINER_NAME="nacos-server" +CONFIG_DIR="/docker-data/nacos/conf" # 配置文件目录 +HOST_PORT="8848" +CONTAINER_PORT="8848" + +# 环境变量(处理特殊字符,使用单引号包裹) +ENV_VARS=( + 'MODE=standalone' +) + +# 显示使用帮助 +usage() { + echo "用法: $0 [命令]" + echo "命令列表:" + echo " deploy - 部署并启动服务(如果镜像不存在会拉取)" + echo " start - 启动服务(容器必须已存在)" + echo " stop - 停止服务" + echo " restart - 重启服务" + echo " status - 查看服务状态" + echo " logs - 查看服务日志" + echo " remove - 删除容器(停止状态下)" + echo " pull - 拉取最新镜像" + echo " help - 显示帮助信息" + exit 1 +} + +# 检查docker是否安装 +check_docker() { + if ! command -v docker &> /dev/null; then + echo "错误: 未安装docker,请先安装" + exit 1 + fi +} + +# 检查容器是否存在 +container_exists() { + docker inspect "$CONTAINER_NAME" &> /dev/null + return $? +} + +# 检查容器是否运行 +container_running() { + docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null | grep -q "true" + return $? +} + +# 拉取镜像 +pull_image() { + check_docker + echo "拉取镜像 $FULL_IMAGE ..." + if docker pull "$FULL_IMAGE"; then + echo "镜像拉取成功" + else + echo "错误: 镜像拉取失败" + exit 1 + fi +} + +# 部署并启动服务(如果容器不存在则创建,已存在则启动) +deploy_service() { + check_docker + + # 检查数据目录和配置目录是否存在,不存在则创建 + + if [ ! -d "$CONFIG_DIR" ]; then + echo "创建配置目录: $CONFIG_DIR" + mkdir -p "$CONFIG_DIR" + chmod 777 "$CONFIG_DIR" + fi + + # 生成单机模式配置文件(若不存在) + if [ ! -f "$CONFIG_DIR/application.properties" ]; then + echo "生成配置文件: $CONFIG_DIR/application.properties" + cat > "$CONFIG_DIR/application.properties" << EOF +#server.port=8848 +spring.datasource.platform=kingbase8 +db.type=kingbase8 +db.driverClassName=com.kingbase8.Driver +db.pool.config.driverClassName=com.kingbase8.Driver + +db.num=1 +db.url.0=jdbc:kingbase8://10.10.2.102:54321/itc?currentSchema=nacos_sit&socketTimeout=600000&queryTimeout=600 +db.user=itc_dne +db.password=itc_dne + +# 已配置的驱动(保留) +spring.datasource.hikari.auto-commit=false +# 增加事务超时(全局设置) +spring.transaction.default-timeout=6000 +# 连接池最大连接数 +spring.datasource.hikari.maximum-pool-size=20 +# 连接池最小空闲连接数 +spring.datasource.hikari.minimum-idle=10 +# 连接最大存活时间 +spring.datasource.hikari.max-lifetime=1800000 +# 验证连接是否有效 +spring.datasource.hikari.connection-test-query=SELECT 1 +# 等待连接池分配连接的最大时长 +spring.datasource.hikari.connection-timeout=60000 +# 设置事务隔离级别为READ_COMMITTED +spring.datasource.hikari.transaction-isolation=TRANSACTION_READ_COMMITTED +# 传递 JDBC 驱动属性(设置 queryTimeout) +spring.datasource.hikari.connection-properties=queryTimeout=6000;socketTimeout=600000 +# 验证连接的查询超时(单独设置,单位:秒) +spring.datasource.hikari.validation-query-timeout=3000 + + +# 开启认证功能 +nacos.core.auth.enabled=true +nacos.core.auth.username=nacos +nacos.core.auth.password=Lng@123 + +# 配置 JWT 密钥(必须自定义,长度至少32位) +nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789 +# 关闭用户代理白名单(增强安全性) +nacos.core.auth.enable.userAgentAuthWhite=false +# 配置服务端身份识别(可选,用于集群环境) +nacos.core.auth.server.identity.key=serverIdentity +nacos.core.auth.server.identity.value=security +nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/** +### worked when nacos.core.auth.system.type=nacos +### The token expiration in seconds: +nacos.core.auth.plugin.nacos.token.cache.enable=false +nacos.core.auth.plugin.nacos.token.expire.seconds=18000 +nacos.config.push.maxRetryTime=50 +nacos.cmdb.dumpTaskInterval=3600 +nacos.cmdb.eventTaskInterval=10 +EOF + fi + + + if container_exists; then + echo "容器 $CONTAINER_NAME 已存在,尝试启动..." + start_service + return + fi + + # 检查镜像是否存在,不存在则拉取 + if ! docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "$FULL_IMAGE"; then + echo "本地不存在镜像 $FULL_IMAGE,开始拉取..." + pull_image || exit 1 + fi + + echo "开始部署 $CONTAINER_NAME 服务..." + + docker run -d --restart always --name nacos-server \ + -p 8848:8848 -p 9848:9848 -p 9849:9849 \ + -e MODE=standalone \ + -v $CONFIG_DIR/application.properties:/home/nacos/conf/application.properties \ + $FULL_IMAGE + + if [ $? -eq 0 ]; then + echo "nacos容器部署成功!" + echo "容器名称: $CONTAINER_NAME" + echo "映射端口: 8848 9848 9849" + docker network connect --ip 172.20.0.5 scm-net $CONTAINER_NAME + else + echo "Redis容器部署失败!" + fi +} + +# 启动服务 +start_service() { + check_docker + + if ! container_exists; then + echo "错误: 容器 $CONTAINER_NAME 不存在,请先执行 deploy 命令" + exit 1 + fi + + if container_running; then + echo "服务 $CONTAINER_NAME 已在运行中" + status_service + return + fi + + echo "启动 $CONTAINER_NAME 服务..." + docker start "$CONTAINER_NAME" + status_service +} + +# 停止服务 +stop_service() { + check_docker + + if ! container_exists; then + echo "错误: 容器 $CONTAINER_NAME 不存在" + exit 1 + fi + + if ! container_running; then + echo "服务 $CONTAINER_NAME 已停止" + status_service + return + fi + + echo "停止 $CONTAINER_NAME 服务..." + docker stop "$CONTAINER_NAME" + status_service +} + +# 重启服务 +restart_service() { + check_docker + + if ! container_exists; then + echo "错误: 容器 $CONTAINER_NAME 不存在,请先执行 deploy 命令" + exit 1 + fi + + echo "重启 $CONTAINER_NAME 服务..." + docker restart "$CONTAINER_NAME" + status_service +} + +# 查看服务状态 +status_service() { + check_docker + + if ! container_exists; then + echo "容器 $CONTAINER_NAME 不存在" + return + fi + + echo "$CONTAINER_NAME 服务状态:" + docker ps -f "name=$CONTAINER_NAME" --format "ID: {{.ID}}\n名称: {{.Names}}\n镜像: {{.Image}}\n状态: {{.Status}}\n端口: {{.Ports}}" +} + +# 查看服务日志 +logs_service() { + check_docker + + if ! container_exists; then + echo "错误: 容器 $CONTAINER_NAME 不存在" + exit 1 + fi + + echo "查看 $CONTAINER_NAME 服务日志 (按Ctrl+C退出)..." + docker logs -f --tail 100 "$CONTAINER_NAME" +} + +# 删除容器(需先停止) +remove_service() { + check_docker + + if ! container_exists; then + echo "错误: 容器 $CONTAINER_NAME 不存在" + exit 1 + fi + + if container_running; then + echo "错误: 容器 $CONTAINER_NAME 正在运行,请先停止" + exit 1 + fi + + echo "删除 $CONTAINER_NAME 容器..." + docker rm "$CONTAINER_NAME" + if [ $? -eq 0 ]; then + echo "容器 $CONTAINER_NAME 已删除" + else + echo "删除容器失败" + fi +} + +# 主逻辑 +if [ $# -eq 0 ]; then + usage +fi + +case "$1" in + deploy) + deploy_service + ;; + start) + start_service + ;; + stop) + stop_service + ;; + restart) + restart_service + ;; + status) + status_service + ;; + logs) + logs_service + ;; + remove) + remove_service + ;; + pull) + pull_image + ;; + help) + usage + ;; + *) + echo "错误: 未知命令 '$1'" + usage + ;; +esac \ No newline at end of file diff --git a/宝策/docker_redis.sh b/宝策/docker_redis.sh new file mode 100644 index 0000000..f43c07c --- /dev/null +++ b/宝策/docker_redis.sh @@ -0,0 +1,134 @@ +#!/bin/bash + +# Redis容器名称 +CONTAINER_NAME="redis" +# Redis版本 +REDIS_VERSION="7.0.2" +# 映射端口(主机:容器) +PORT="6379:6379" +# 密码 +REDIS_PASSWORD="tdjj2HH0fva^2R" +# 网络配置 +NETWORK="scm-net" +# 容器IP +CONTAINER_IP="172.20.0.2" + +# 部署Redis +deploy() { + if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then + echo "Redis容器 $CONTAINER_NAME 已存在并运行中" + return 1 + fi + + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "发现已停止的Redis容器,正在启动..." + docker start $CONTAINER_NAME + return 0 + fi + + echo "开始部署Redis容器..." + + docker run -itd --restart always \ + --net=$NETWORK --ip=$CONTAINER_IP \ + -p $PORT \ + --name $CONTAINER_NAME \ + redis:$REDIS_VERSION \ + --requirepass $REDIS_PASSWORD + + if [ $? -eq 0 ]; then + echo "Redis容器部署成功!" + echo "容器名称: $CONTAINER_NAME" + echo "映射端口: $PORT" + else + echo "Redis容器部署失败!" + fi +} + +# 查看日志 +logs() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "Redis容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "查看Redis容器日志 (按Ctrl+C退出)..." + docker logs -f --tail 200 $CONTAINER_NAME +} + +# 重启容器 +restart() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "Redis容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "正在重启Redis容器..." + docker restart $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "Redis容器重启成功!" + else + echo "Redis容器重启失败!" + fi +} + +# 删除容器 +remove() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "Redis容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "警告:此操作将删除Redis容器" + read -p "确定要删除吗?(y/n) " confirm + if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then + echo "取消删除操作" + return 0 + fi + + echo "正在停止并删除Redis容器..." + docker stop $CONTAINER_NAME + docker rm $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "Redis容器删除成功!" + else + echo "Redis容器删除失败!" + fi +} + +# 显示帮助 +show_help() { + echo "Redis容器管理脚本" + echo "用法: $0 [命令]" + echo "命令列表:" + echo " deploy - 部署并启动Redis容器" + echo " logs - 查看Redis容器日志" + echo " restart - 重启Redis容器" + echo " remove - 删除Redis容器" + echo " help - 显示帮助信息" +} + +# 主逻辑 +case "$1" in + deploy) + deploy + ;; + logs) + logs + ;; + restart) + restart + ;; + remove) + remove + ;; + help) + show_help + ;; + *) + echo "未知命令: $1" + show_help + exit 1 + ;; +esac \ No newline at end of file diff --git a/宝策/docker_registry.sh b/宝策/docker_registry.sh new file mode 100644 index 0000000..e5cf08b --- /dev/null +++ b/宝策/docker_registry.sh @@ -0,0 +1,169 @@ +#!/bin/bash + +# Docker Registry容器名称 +CONTAINER_NAME="docker-registry" +# Registry版本 +REGISTRY_VERSION="2" +# 映射端口 +PORT="5000" +# 数据存储路径 +DATA_PATH="/docker-data/registry/data" +# 日志路径 +LOG_PATH="/docker-data/registry/logs" +# 认证配置路径 +AUTH_PATH="/docker/registry/auth" +# admin Docker@123 +# htpasswd -Bbc "/docker/registry/auth/htpasswd" "admin" "Docker@123" + +# 创建目录并设置权限函数 +create_dirs() { + # 创建数据目录并设置权限 + if [ ! -d "$DATA_PATH" ]; then + mkdir -p "$DATA_PATH" + echo "创建数据目录: $DATA_PATH" + chmod -R 777 "$DATA_PATH" + echo "设置数据目录权限: $DATA_PATH" + fi + + # 创建日志目录并设置权限 + if [ ! -d "$LOG_PATH" ]; then + mkdir -p "$LOG_PATH" + echo "创建日志目录: $LOG_PATH" + chmod -R 777 "$LOG_PATH" + echo "设置日志目录权限: $LOG_PATH" + fi + + # 创建日志目录并设置权限 + if [ ! -d "$AUTH_PATH" ]; then + mkdir -p "$AUTH_PATH" + echo "创建日志目录: $AUTH_PATH" + chmod -R 777 "$AUTH_PATH" + echo "设置日志目录权限: $AUTH_PATH" + fi +} + +# 部署Registry +deploy() { + if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then + echo "Registry容器 $CONTAINER_NAME 已存在并运行中" + return 1 + fi + + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "发现已停止的Registry容器,正在启动..." + docker start $CONTAINER_NAME + return 0 + fi + + echo "开始部署Registry容器..." + create_dirs + + docker run -d --restart always \ + -p $PORT:5000 \ + -v $DATA_PATH:/var/lib/registry \ + -v $LOG_PATH:/var/log/registry \ + -v $AUTH_PATH:/auth \ + -e "REGISTRY_AUTH=htpasswd" \ + -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ + -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \ + --name $CONTAINER_NAME registry:$REGISTRY_VERSION + + if [ $? -eq 0 ]; then + echo "Registry容器部署成功!" + echo "容器名称: $CONTAINER_NAME" + echo "访问地址: http://localhost:$PORT" + else + echo "Registry容器部署失败!" + fi +} + +# 查看日志 +logs() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "Registry容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "查看Registry容器日志 (按Ctrl+C退出)..." + docker logs -f --tail 200 $CONTAINER_NAME +} + +# 重启容器 +restart() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "Registry容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "正在重启Registry容器..." + docker restart $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "Registry容器重启成功!" + else + echo "Registry容器重启失败!" + fi +} + +# 删除容器 +remove() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "Registry容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "警告:此操作将删除Registry容器,但数据目录会保留" + read -p "确定要删除吗?(y/n) " confirm + if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then + echo "取消删除操作" + return 0 + fi + + echo "正在停止并删除Registry容器..." + docker stop $CONTAINER_NAME + docker rm $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "Registry容器删除成功!" + echo "数据保留在: $DATA_PATH" + echo "日志保留在: $LOG_PATH" + else + echo "Registry容器删除失败!" + fi +} + +# 显示帮助 +show_help() { + echo "Docker Registry容器管理脚本" + echo "用法: $0 [命令]" + echo "命令列表:" + echo " deploy - 部署并启动Registry容器" + echo " logs - 查看Registry容器日志" + echo " restart - 重启Registry容器" + echo " remove - 删除Registry容器(保留数据和日志)" + echo " help - 显示帮助信息" +} + +# 主逻辑 +case "$1" in + deploy) + deploy + ;; + logs) + logs + ;; + restart) + restart + ;; + remove) + remove + ;; + help) + show_help + ;; + *) + echo "未知命令: $1" + show_help + exit 1 + ;; +esac \ No newline at end of file diff --git a/宝策/docker_seata.sh b/宝策/docker_seata.sh new file mode 100644 index 0000000..8da1277 --- /dev/null +++ b/宝策/docker_seata.sh @@ -0,0 +1,199 @@ +#!/bin/bash + +# 定义变量 +CONTAINER_NAME="seata-server" +IMAGE_NAME="docker.tanuki.vip/seata-server-kingbase:2.3.0" # Seata 镜像及版本 +CONFIG_DIR="/docker-data/seata/conf" # 配置文件目录 +SEATA_IP="10.10.2.102" +PORT=8091 # Seata 服务端口 +NACOS_ADDR="10.10.2.102:8848" + +# 显示帮助信息 +show_help() { + echo "使用方法: $0 [操作类型]" + echo "操作类型:" + echo " deploy - 部署并启动Seata容器" + echo " remove - 停止并删除Seata容器及数据/配置目录" + echo " logs - 查看Seata容器日志" + echo " help - 显示帮助信息" +} + +# 部署功能 +deploy_seata() { + + if [ ! -d "$CONFIG_DIR" ]; then + echo "创建配置目录: $CONFIG_DIR" + mkdir -p "$CONFIG_DIR" + chmod 777 "$CONFIG_DIR" + fi + + # 生成单机模式配置文件(若不存在) + if [ ! -f "$CONFIG_DIR/application.yml" ]; then + echo "生成配置文件: $CONFIG_DIR/application.yml" + cat > "$CONFIG_DIR/application.yml" << EOF +server: + port: 7091 + +spring: + application: + name: seata-server + +logging: + config: classpath:logback-spring.xml + file: + path: ${log.home:${user.home}/logs/seata} + extend: + logstash-appender: + destination: 127.0.0.1:4560 + kafka-appender: + bootstrap-servers: 127.0.0.1:9092 + topic: logback_to_logstash + +console: + user: + username: seata + password: seata +seata: + config: + type: nacos + nacos: + server-addr: 10.10.2.102:8848 # Nacos 服务器地址 + namespace: "ITC-MS" # Nacos 命名空间 ID + group: DNE # Nacos 配置组 + username: nacos # Nacos 用户名 + password: Lng@123 # Nacos 密码 + data-id: seataServer-sv.properties + registry: + type: nacos + nacos: + application: seata-server # Seata 服务在 Nacos 中的名称 + server-addr: 10.10.2.102:8848 # Nacos 服务器地址 + namespace: "DNE-MS-SIT" # Nacos 命名空间 ID + group: DNE + cluster: default # Seata 集群名称 + username: nacos # Nacos 用户名 + password: Lng@123 # Nacos 密码 + store: + mode: db # 存储模式,支持 file/db/redis + db: + driver-class-name: com.kingbase8.Driver + url: jdbc:kingbase8://10.10.2.102:54321/itc?currentSchema=seata_sit + user: itc_dne + password: itc_dne + # server: + # service-port: 8091 #If not configured, the default is '${server.port} + 1000' + security: + secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017 + tokenValidityInMilliseconds: 1800000 + csrf-ignore-urls: /metadata/v1/** + ignore: + urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login,/version.json,/health,/error,/vgroup/v1/** +EOF + fi + + # 检查容器是否已存在,存在则停止并删除 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止并删除现有容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME + docker rm $CONTAINER_NAME + fi + + # 启动 Seata 容器 + #docker run --name seata-server -p 8091:8091 -p 7091:7091 -e SEATA_IP=10.4.126.114 -v "E:/docker-data/seata-server/config:/seata-server/resources" seata-server-arm64:2.3.0-kingbase8 + echo "启动 Seata 容器..." + docker run -d \ + --name $CONTAINER_NAME \ + --restart always \ + -p $PORT:8091 \ + -p 7091:7091 \ + -e SEATA_IP=$SEATA_IP \ + -v $CONFIG_DIR/application.yml:/seata-server/resources/application.yml \ + $IMAGE_NAME + + # 检查容器启动状态 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then + echo "Seata 容器启动成功!" + echo "容器名称: $CONTAINER_NAME" + echo "开放端口: 7091 8091" + echo "服务访问地址: http://localhost:$PORT" + else + echo "Seata 容器启动失败,请检查日志获取详细信息。" + docker logs $CONTAINER_NAME + fi +} + +# 删除功能 +remove_seata() { + # 检查容器是否存在 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME + + echo "删除容器: $CONTAINER_NAME" + docker rm $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi + + # 检查数据目录是否存在 + if [ -d "$DATA_DIR" ]; then + read -p "是否删除数据目录 $DATA_DIR? (y/n) " confirm + if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then + echo "删除数据目录: $DATA_DIR" + rm -rf "$DATA_DIR" + else + echo "保留数据目录: $DATA_DIR" + fi + else + echo "数据目录 $DATA_DIR 不存在" + fi + + # 检查配置目录是否存在 + if [ -d "$CONFIG_DIR" ]; then + read -p "是否删除配置目录 $CONFIG_DIR? (y/n) " confirm + if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then + echo "删除配置目录: $CONFIG_DIR" + rm -rf "$CONFIG_DIR" + else + echo "保留配置目录: $CONFIG_DIR" + fi + else + echo "配置目录 $CONFIG_DIR 不存在" + fi +} + +# 日志功能 +show_logs() { + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..." + docker logs -f --tail 100 $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 主逻辑 +if [ $# -ne 1 ]; then + show_help + exit 1 +fi + +case "$1" in + deploy) + deploy_seata + ;; + remove) + remove_seata + ;; + logs) + show_logs + ;; + help) + show_help + ;; + *) + echo "无效的操作类型: $1" + show_help + exit 1 + ;; +esac \ No newline at end of file diff --git a/宝策/docker_skywalking-oap.sh b/宝策/docker_skywalking-oap.sh new file mode 100644 index 0000000..baeedc2 --- /dev/null +++ b/宝策/docker_skywalking-oap.sh @@ -0,0 +1,161 @@ +#!/bin/bash + +# 定义变量 +CONTAINER_NAME="skywalkingwalking-oap-server" +IMAGE_NAME="apache/skywalking-oap-server:9.4.0" # SkyWalking OAP 镜像及版本 +DATA_DIR="/docker-data/skywalking/data" # 数据存储目录 +LOGS_DIR="/docker-data/skywalking/logs" # 日志目录 +PORT=12800 # OAP gRPC 端口 +PORT1=11800 # OAP REST 端口 +NETWORK_NAME="scm-net" +SW_IP="10.10.2.102" # 固定IP +ES_HOST="10.10.2.102" # 关联的Elasticsearch容器名称 +ES_PORT=9200 # Elasticsearch端口 +SW_STORAGE="elasticsearch7" # 存储类型(对应ES 7.x版本) + +# 显示帮助信息 +show_help() { + echo "使用方法: $0 [操作类型]" + echo "操作类型:" + echo " deploy - 部署并启动SkyWalking OAP Server容器" + echo " remove - 停止并删除SkyWalking OAP Server容器及数据/配置/日志目录" + echo " logs - 查看SkyWalking OAP Server容器日志" + echo " help - 显示帮助信息" +} + +# 部署功能 +deploy_skywalking() { + # 检查数据、配置、日志目录是否存在,不存在则创建 + for dir in "$DATA_DIR" "$LOGS_DIR"; do + if [ ! -d "$dir" ]; then + echo "创建目录: $dir" + mkdir -p "$dir" + chmod 777 "$dir" # 确保容器内用户可访问 + fi + done + + + # 检查容器是否已存在,存在则停止并删除 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止并删除现有容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME + docker rm $CONTAINER_NAME + fi + + # 启动SkyWalking OAP Server容器 + echo "启动SkyWalking OAP Server容器..." + docker run -d --privileged --name $CONTAINER_NAME --restart always \ + -p $PORT:12800 -p $PORT1:11800 -p 1234:1234 \ + -v $DATA_DIR:/skywalking/data \ + -v $LOGS_DIR:/skywalking/logs \ + -e TZ=Asia/Shanghai \ + -e "SW_STORAGE=elasticsearch" \ + -e "SW_STORAGE_ES_CLUSTER_NODES=$ES_HOST:$ES_PORT" \ + -e "SW_ES_VERSION=7" \ + -e "SW_STORAGE_ES_USE_HIGH_LEVEL_CLIENT=true" \ + $IMAGE_NAME + + # 检查容器启动状态 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then + echo "SkyWalking OAP Server容器启动成功!" + echo "容器名称: $CONTAINER_NAME" + echo "数据目录: $DATA_DIR" + echo "日志目录: $LOGS_DIR" + echo "gRPC端口: $PORT" + echo "REST端口: $PORT1" + echo "关联Elasticsearch: $ES_HOST:$ES_PORT" + echo "存储类型: $SW_STORAGE" + else + echo "SkyWalking OAP Server容器启动失败,请检查日志获取详细信息。" + docker logs $CONTAINER_NAME + fi +} + +# 删除功能 +remove_skywalking() { + # 检查容器是否存在 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME + + echo "删除容器: $CONTAINER_NAME" + docker rm $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi + + # 检查数据目录是否存在 + if [ -d "$DATA_DIR" ]; then + read -p "是否删除数据目录 $DATA_DIR? (y/n) " confirm + if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then + echo "删除数据目录: $DATA_DIR" + rm -rf "$DATA_DIR" + else + echo "保留数据目录: $DATA_DIR" + fi + else + echo "数据目录 $DATA_DIR 不存在" + fi + + # 检查配置目录是否存在 + if [ -d "$CONFIG_DIR" ]; then + read -p "是否删除配置目录 $CONFIG_DIR? (y/n) " confirm + if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then + echo "删除配置目录: $CONFIG_DIR" + rm -rf "$CONFIG_DIR" + else + echo "保留配置目录: $CONFIG_DIR" + fi + else + echo "配置目录 $CONFIG_DIR 不存在" + fi + + # 检查日志目录是否存在 + if [ -d "$LOGS_DIR" ]; then + read -p "是否删除日志目录 $LOGS_DIR? (y/n) " confirm + if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then + echo "删除日志目录: $LOGS_DIR" + rm -rf "$LOGS_DIR" + else + echo "保留日志目录: $LOGS_DIR" + fi + else + echo "日志目录 $LOGS_DIR 不存在" + fi +} + +# 日志功能 +show_logs() { + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..." + docker logs -f $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 主逻辑 +if [ $# -ne 1 ]; then + show_help + exit 1 +fi + +case "$1" in + deploy) + deploy_skywalking + ;; + remove) + remove_skywalking + ;; + logs) + show_logs + ;; + help) + show_help + ;; + *) + echo "无效的操作类型: $1" + show_help + exit 1 + ;; +esac \ No newline at end of file diff --git a/宝策/docker_skywalking-ui.sh b/宝策/docker_skywalking-ui.sh new file mode 100644 index 0000000..90bc6e6 --- /dev/null +++ b/宝策/docker_skywalking-ui.sh @@ -0,0 +1,123 @@ +#!/bin/bash + +# 定义变量 +CONTAINER_NAME="skywalking-ui" +IMAGE_NAME="apache/skywalking-ui:9.4.0" # SkyWalking UI 镜像及版本 +LOGS_DIR="/docker-data/skywalking/ui/logs" # 日志目录 +PORT=9601 # UI 访问端口 +NETWORK_NAME="scm-net" +UI_IP="10.10.2.102" # 固定IP,与ES、OAP在同一网段 +OAP_HOST="10.10.2.102" # 关联的OAP服务器IP +OAP_PORT=12800 # OAP gRPC端口 + +# 显示帮助信息 +show_help() { + echo "使用方法: $0 [操作类型]" + echo "操作类型:" + echo " deploy - 部署并启动SkyWalking UI容器" + echo " remove - 停止并删除SkyWalking UI容器及日志目录" + echo " logs - 查看SkyWalking UI容器日志" + echo " help - 显示帮助信息" +} + +# 部署功能 +deploy_skywalking_ui() { + # 检查日志目录是否存在,不存在则创建 + if [ ! -d "$LOGS_DIR" ]; then + echo "创建日志目录: $LOGS_DIR" + mkdir -p "$LOGS_DIR" + chmod 777 "$LOGS_DIR" # 确保容器内用户可访问 + fi + + # 检查容器是否已存在,存在则停止并删除 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止并删除现有容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME + docker rm $CONTAINER_NAME + fi + + # 启动SkyWalking UI容器 + echo "启动SkyWalking UI容器..." + docker run -d --privileged --name $CONTAINER_NAME --restart always \ + -p $PORT:8080 \ + -v $LOGS_DIR:/skywalking/ui/logs \ + -e TZ=Asia/Shanghai \ + -e "SW_OAP_ADDRESS=http://$OAP_HOST:$OAP_PORT" \ + $IMAGE_NAME + + # 检查容器启动状态 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then + echo "SkyWalking UI容器启动成功!" + echo "容器名称: $CONTAINER_NAME" + echo "日志目录: $LOGS_DIR" + echo "访问端口: $PORT" + echo "关联OAP服务器: $OAP_HOST:$OAP_PORT" + echo "访问地址: http://localhost:$PORT" + else + echo "SkyWalking UI容器启动失败,请检查日志获取详细信息。" + docker logs $CONTAINER_NAME + fi +} + +# 删除功能 +remove_skywalking_ui() { + # 检查容器是否存在 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME + + echo "删除容器: $CONTAINER_NAME" + docker rm $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi + + # 检查日志目录是否存在 + if [ -d "$LOGS_DIR" ]; then + read -p "是否删除日志目录 $LOGS_DIR? (y/n) " confirm + if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then + echo "删除日志目录: $LOGS_DIR" + rm -rf "$LOGS_DIR" + else + echo "保留日志目录: $LOGS_DIR" + fi + else + echo "日志目录 $LOGS_DIR 不存在" + fi +} + +# 日志功能 +show_logs() { + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..." + docker logs -f $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 主逻辑 +if [ $# -ne 1 ]; then + show_help + exit 1 +fi + +case "$1" in + deploy) + deploy_skywalking_ui + ;; + remove) + remove_skywalking_ui + ;; + logs) + show_logs + ;; + help) + show_help + ;; + *) + echo "无效的操作类型: $1" + show_help + exit 1 + ;; +esac \ No newline at end of file diff --git a/宝策/docker_xxl-job.sh b/宝策/docker_xxl-job.sh new file mode 100644 index 0000000..3fe323f --- /dev/null +++ b/宝策/docker_xxl-job.sh @@ -0,0 +1,147 @@ +#!/bin/bash + +# XXL-Job容器名称 +CONTAINER_NAME="xxl-job-server" +# XXL-Job镜像版本 +XXL_JOB_VERSION="2.4.0" +# 镜像地址 +IMAGE_URL="docker.tanuki.vip/xxl-job-admin-kingbase:${XXL_JOB_VERSION}" +# 映射端口(宿主:容器) +PORT="9600" +# 环境变量配置 +DB_URL="jdbc:kingbase8://10.10.2.102:54321/itc?currentSchema=xxl_job&useUnicode=true&characterEncoding=UTF-8" +DB_USERNAME="itc_dne" +DB_PASSWORD="itc_dne" +DB_DRIVER="com.kingbase8.Driver" + +# 创建目录并设置权限函数(如需数据持久化可添加) +create_dirs() { + # 示例:如需挂载配置目录可在此添加 + # if [ ! -d "$CONFIG_PATH" ]; then + # mkdir -p "$CONFIG_PATH" + # echo "创建配置目录: $CONFIG_PATH" + # chmod -R 777 "$CONFIG_PATH" + # echo "设置配置目录权限: $CONFIG_PATH" + # fi + return 0 +} + +# 部署XXL-Job +deploy() { + if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then + echo "XXL-Job容器 $CONTAINER_NAME 已存在并运行中" + return 1 + fi + + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "发现已停止的XXL-Job容器,正在启动..." + docker start $CONTAINER_NAME + return 0 + fi + + echo "开始部署XXL-Job容器..." + create_dirs + + docker run -d --restart always \ + -p $PORT:8080 \ + --name $CONTAINER_NAME \ + -e "PARAMS=--spring.datasource.url=$DB_URL --spring.datasource.username=$DB_USERNAME --spring.datasource.password=$DB_PASSWORD --spring.datasource.driver-class-name=$DB_DRIVER" \ + $IMAGE_URL + + if [ $? -eq 0 ]; then + echo "XXL-Job容器部署成功!" + echo "容器名称: $CONTAINER_NAME" + echo "端口映射: $PORT" + else + echo "XXL-Job容器部署失败!" + fi +} + +# 查看日志 +logs() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "XXL-Job容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "查看XXL-Job容器日志 (按Ctrl+C退出)..." + docker logs -f --tail 200 $CONTAINER_NAME +} + +# 重启容器 +restart() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "XXL-Job容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "正在重启XXL-Job容器..." + docker restart $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "XXL-Job容器重启成功!" + else + echo "XXL-Job容器重启失败!" + fi +} + +# 删除容器 +remove() { + if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "XXL-Job容器 $CONTAINER_NAME 不存在" + return 1 + fi + + echo "警告:此操作将删除XXL-Job容器" + read -p "确定要删除吗?(y/n) " confirm + if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then + echo "取消删除操作" + return 0 + fi + + echo "正在停止并删除XXL-Job容器..." + docker stop $CONTAINER_NAME + docker rm $CONTAINER_NAME + + if [ $? -eq 0 ]; then + echo "XXL-Job容器删除成功!" + else + echo "XXL-Job容器删除失败!" + fi +} + +# 显示帮助 +show_help() { + echo "XXL-Job容器管理脚本" + echo "用法: $0 [命令]" + echo "命令列表:" + echo " deploy - 部署并启动XXL-Job容器" + echo " logs - 查看XXL-Job容器日志" + echo " restart - 重启XXL-Job容器" + echo " remove - 删除XXL-Job容器" + echo " help - 显示帮助信息" +} + +# 主逻辑 +case "$1" in + deploy) + deploy + ;; + logs) + logs + ;; + restart) + restart + ;; + remove) + remove + ;; + help) + show_help + ;; + *) + echo "未知命令: $1" + show_help + exit 1 + ;; +esac \ No newline at end of file diff --git a/宝策/projects/docker-facade.sh b/宝策/projects/docker-facade.sh new file mode 100644 index 0000000..21927af --- /dev/null +++ b/宝策/projects/docker-facade.sh @@ -0,0 +1,138 @@ +#!/bin/bash + +# 定义变量 +CONTAINER_NAME="itc-ms-facade-service" +IMAGE_NAME="127.0.0.1:5000/itc-ms-facade-service" +IMAGE_VERSION="2025-09-29-0805" +IMAGE_FULL="$IMAGE_NAME:$IMAGE_VERSION" +PORT=9507 # 服务暴露端口 +DEBUG_PORT=9508 # 服务暴露端口 +DISCOVERY_IP="10.10.2.102" +SKYWALKING_SERVER="10.10.2.102:11800" + +NACOS_ADDR="10.10.2.102:8848" +NACOS_USER="nacos" +NACOS_PWD="Lng@123" +ENV_APP_PRO_FILE="local" +file="$CONTAINER_NAME-version.txt" + +# 检查文件是否存在(假设 $file 是目标文件变量,已在别处定义) +if [ ! -f "$file" ]; then + echo "文件 $file 不存在" + touch "$file" # 变量加引号,处理含空格的文件名 + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" +else + # 检查参数数量(建议移到脚本开头统一检查) + if [ $# -eq 2 ]; then + IMAGE_FULL="$IMAGE_NAME:$2" + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" + else + # 修正赋值语法:等号两侧无空格 + last_version=$(tail -n 1 "$file") + IMAGE_FULL="$last_version" + # 建议添加对 $IMAGE_FULL 的后续处理(如使用该变量) + fi +fi + +# 显示帮助信息 +show_help() { + echo "使用方法: $0 [操作类型]" + echo "操作类型:" + echo " deploy - 部署并启动服务容器" + echo " remove - 停止并删除容器及数据/日志目录" + echo " logs - 查看容器日志" + echo " help - 显示帮助信息" +} + + + +# 部署服务 +deploy_service() { + echo "部署镜像【$IMAGE_FULL】" + # 检查容器是否已存在,存在则停止并删除 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止并删除现有容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + docker rm $CONTAINER_NAME >/dev/null + fi + + # 启动服务容器 + echo "启动服务容器..." + + docker run -d --privileged --restart always --name $CONTAINER_NAME \ + -p $PORT:8097 -p $DEBUG_PORT:5005 \ + -e SKYWALKING_SERVER=$SKYWALKING_SERVER \ + -e ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE \ + -e SPRING_CLOUD_CLIENT_IP_ADDRESS=$DISCOVERY_IP \ + -e SPRING_CLOUD_NACOS_DISCOVERY_IP=$DISCOVERY_IP \ + -e SPRING_CLOUD_NACOS_DISCOVERY_PORT=$PORT \ + -e SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR=$NACOS_ADDR \ + -e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=$NACOS_ADDR \ + -e SPRING_CLOUD_NACOS_CONFIG_USERNAME=$NACOS_USER \ + -e SPRING_CLOUD_NACOS_CONFIG_PASSWORD=$NACOS_PWD \ + $IMAGE_FULL + + # 检查启动状态 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then + echo "服务启动成功!" + echo "容器名称: $CONTAINER_NAME" + echo "访问地址: http://localhost:$PORT" + echo "环境变量: ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE" + else + echo "服务启动失败,日志如下:" + docker logs $CONTAINER_NAME + exit 1 + fi +} + +# 删除服务 +remove_service() { + # 检查容器是否存在 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + + echo "删除容器: $CONTAINER_NAME" + docker rm $CONTAINER_NAME >/dev/null + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 查看日志 +show_logs() { + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..." + docker logs -f $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 主逻辑 +if [ $# -lt 1 ]; then + show_help + exit 1 +fi + +case "$1" in + deploy) + deploy_service + ;; + remove) + remove_service + ;; + logs) + show_logs + ;; + help) + show_help + ;; + *) + echo "无效的操作类型: $1" + show_help + exit 1 + ;; +esac diff --git a/宝策/projects/docker-gateway.sh b/宝策/projects/docker-gateway.sh new file mode 100644 index 0000000..b6ce2d1 --- /dev/null +++ b/宝策/projects/docker-gateway.sh @@ -0,0 +1,138 @@ +#!/bin/bash + +# 定义变量 +CONTAINER_NAME="itc-ms-gateway" +IMAGE_NAME="127.0.0.1:5000/itc-ms-gateway" +IMAGE_VERSION="2025-09-15-0353" +IMAGE_FULL="$IMAGE_NAME:$IMAGE_VERSION" +PORT=9500 # 服务暴露端口 +DEBUG_PORT=9501 # 服务暴露端口 +DISCOVERY_IP="10.10.2.102" +NACOS_ADDR="10.10.2.102:8848" +NACOS_USER="nacos" +NACOS_PWD="Lng@123" +# 环境变量配置 +ENV_APP_PRO_FILE="local" + +file="$CONTAINER_NAME-version.txt" + +# 检查文件是否存在(假设 $file 是目标文件变量,已在别处定义) +if [ ! -f "$file" ]; then + echo "文件 $file 不存在" + touch "$file" # 变量加引号,处理含空格的文件名 + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" +else + # 检查参数数量(建议移到脚本开头统一检查) + if [ $# -eq 2 ]; then + IMAGE_FULL="$IMAGE_NAME:$2" + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" + else + # 修正赋值语法:等号两侧无空格 + last_version=$(tail -n 1 "$file") + IMAGE_FULL="$last_version" + # 建议添加对 $IMAGE_FULL 的后续处理(如使用该变量) + fi +fi + +# 显示帮助信息 +show_help() { + echo "使用方法: $0 [操作类型]" + echo "操作类型:" + echo " deploy - 部署并启动服务容器" + echo " remove - 停止并删除容器及数据/日志目录" + echo " logs - 查看容器日志" + echo " help - 显示帮助信息" +} + + + +# 部署服务 +deploy_service() { + echo "部署镜像【$IMAGE_FULL】" + # 检查容器是否已存在,存在则停止并删除 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止并删除现有容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + docker rm $CONTAINER_NAME >/dev/null + fi + + # 启动服务容器 + echo "启动服务容器..." + + docker run -d --privileged --restart always --name itc-ms-gateway \ + -p $PORT:8090 \ + -p $DEBUG_PORT:5005 \ + -e ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE \ + -e SPRING_CLOUD_CLIENT_IP_ADDRESS=$DISCOVERY_IP \ + -e SPRING_CLOUD_NACOS_DISCOVERY_IP=$DISCOVERY_IP \ + -e SPRING_CLOUD_NACOS_DISCOVERY_PORT=$PORT \ + -e SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR=$NACOS_ADDR \ + -e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=$NACOS_ADDR \ + -e SPRING_CLOUD_NACOS_CONFIG_USERNAME=$NACOS_USER \ + -e SPRING_CLOUD_NACOS_CONFIG_PASSWORD=$NACOS_PWD \ + $IMAGE_FULL + + # 检查启动状态 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then + echo "服务启动成功!" + echo "容器名称: $CONTAINER_NAME" + echo "访问地址: http://$DISCOVERY_IP:$PORT" + echo "环境变量: ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE" + else + echo "服务启动失败,日志如下:" + docker logs $CONTAINER_NAME + exit 1 + fi +} + +# 删除服务 +remove_service() { + # 检查容器是否存在 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + + echo "删除容器: $CONTAINER_NAME" + docker rm $CONTAINER_NAME >/dev/null + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 查看日志 +show_logs() { + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..." + docker logs -f $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 主逻辑 +if [ $# -lt 1 ]; then + show_help + exit 1 +fi + +case "$1" in + deploy) + deploy_service + ;; + remove) + remove_service + ;; + logs) + show_logs + ;; + help) + show_help + ;; + *) + echo "无效的操作类型: $1" + show_help + exit 1 + ;; +esac diff --git a/宝策/projects/docker-system.sh b/宝策/projects/docker-system.sh new file mode 100644 index 0000000..2fd22fd --- /dev/null +++ b/宝策/projects/docker-system.sh @@ -0,0 +1,139 @@ +#!/bin/bash + +# 定义变量 +CONTAINER_NAME="itc-ms-system" +IMAGE_NAME="127.0.0.1:5000/itc-ms-system" +IMAGE_VERSION="2025-09-29-0843" +IMAGE_FULL="$IMAGE_NAME:$IMAGE_VERSION" + +PORT=9509 # 服务暴露端口 +DEBUG_PORT=9510 # 服务暴露端口 +DISCOVERY_IP="10.10.2.102" +SKYWALKING_SERVER="10.10.2.102:11800" + +NACOS_ADDR="10.10.2.102:8848" +NACOS_USER="nacos" +NACOS_PWD="Lng@123" +ENV_APP_PRO_FILE="local" +file="$CONTAINER_NAME-version.txt" + +# 检查文件是否存在(假设 $file 是目标文件变量,已在别处定义) +if [ ! -f "$file" ]; then + echo "文件 $file 不存在" + touch "$file" # 变量加引号,处理含空格的文件名 + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" +else + # 检查参数数量(建议移到脚本开头统一检查) + if [ $# -eq 2 ]; then + IMAGE_FULL="$IMAGE_NAME:$2" + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" + else + # 修正赋值语法:等号两侧无空格 + last_version=$(tail -n 1 "$file") + IMAGE_FULL="$last_version" + # 建议添加对 $IMAGE_FULL 的后续处理(如使用该变量) + fi +fi + +# 显示帮助信息 +show_help() { + echo "使用方法: $0 [操作类型]" + echo "操作类型:" + echo " deploy - 部署并启动服务容器" + echo " remove - 停止并删除容器及数据/日志目录" + echo " logs - 查看容器日志" + echo " help - 显示帮助信息" +} + + + +# 部署服务 +deploy_service() { + echo "部署镜像【$IMAGE_FULL】" + # 检查容器是否已存在,存在则停止并删除 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止并删除现有容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + docker rm $CONTAINER_NAME >/dev/null + fi + + # 启动服务容器 + echo "启动服务容器..." + + docker run -d --privileged --restart always --name $CONTAINER_NAME \ + -p $PORT:8091 -p $DEBUG_PORT:5005 \ + -e SKYWALKING_SERVER=$SKYWALKING_SERVER \ + -e ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE \ + -e SPRING_CLOUD_CLIENT_IP_ADDRESS=$DISCOVERY_IP \ + -e SPRING_CLOUD_NACOS_DISCOVERY_IP=$DISCOVERY_IP \ + -e SPRING_CLOUD_NACOS_DISCOVERY_PORT=$PORT \ + -e SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR=$NACOS_ADDR \ + -e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=$NACOS_ADDR \ + -e SPRING_CLOUD_NACOS_CONFIG_USERNAME=$NACOS_USER \ + -e SPRING_CLOUD_NACOS_CONFIG_PASSWORD=$NACOS_PWD \ + $IMAGE_FULL + + # 检查启动状态 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then + echo "服务启动成功!" + echo "容器名称: $CONTAINER_NAME" + echo "访问地址: http://localhost:$PORT" + echo "环境变量: ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE" + else + echo "服务启动失败,日志如下:" + docker logs $CONTAINER_NAME + exit 1 + fi +} + +# 删除服务 +remove_service() { + # 检查容器是否存在 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + + echo "删除容器: $CONTAINER_NAME" + docker rm $CONTAINER_NAME >/dev/null + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 查看日志 +show_logs() { + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..." + docker logs -f --tail 200 $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 主逻辑 +if [ $# -lt 1 ]; then + show_help + exit 1 +fi + +case "$1" in + deploy) + deploy_service + ;; + remove) + remove_service + ;; + logs) + show_logs + ;; + help) + show_help + ;; + *) + echo "无效的操作类型: $1" + show_help + exit 1 + ;; +esac diff --git a/宝策/projects/docker-user.sh b/宝策/projects/docker-user.sh new file mode 100644 index 0000000..8ba4d0f --- /dev/null +++ b/宝策/projects/docker-user.sh @@ -0,0 +1,137 @@ +#!/bin/bash + +# 定义变量 +CONTAINER_NAME="itc-ms-user" +IMAGE_NAME="127.0.0.1:5000/itc-ms-user" +IMAGE_VERSION="2025-09-08-0929" +IMAGE_FULL="$IMAGE_NAME:$IMAGE_VERSION" +PORT=9503 # 服务暴露端口 +DEBUG_PORT=9504 # 服务暴露端口 +DISCOVERY_IP="10.10.2.102" +NACOS_ADDR="10.10.2.102:8848" +NACOS_USER="nacos" +SKYWALKING_SERVER="10.10.2.102:11800" +NACOS_PWD="Lng@123" +ENV_APP_PRO_FILE="local" +file="$CONTAINER_NAME-version.txt" + +# 检查文件是否存在(假设 $file 是目标文件变量,已在别处定义) +if [ ! -f "$file" ]; then + echo "文件 $file 不存在" + touch "$file" # 变量加引号,处理含空格的文件名 + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" +else + # 检查参数数量(建议移到脚本开头统一检查) + if [ $# -eq 2 ]; then + IMAGE_FULL="$IMAGE_NAME:$2" + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" + else + # 修正赋值语法:等号两侧无空格 + last_version=$(tail -n 1 "$file") + IMAGE_FULL="$last_version" + # 建议添加对 $IMAGE_FULL 的后续处理(如使用该变量) + fi +fi + +# 显示帮助信息 +show_help() { + echo "使用方法: $0 [操作类型]" + echo "操作类型:" + echo " deploy - 部署并启动服务容器" + echo " remove - 停止并删除容器及数据/日志目录" + echo " logs - 查看容器日志" + echo " help - 显示帮助信息" +} + + + +# 部署服务 +deploy_service() { + echo "部署镜像【$IMAGE_FULL】" + # 检查容器是否已存在,存在则停止并删除 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止并删除现有容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + docker rm $CONTAINER_NAME >/dev/null + fi + + # 启动服务容器 + echo "启动服务容器..." + + docker run -d --privileged --restart always --name $CONTAINER_NAME \ + -p $PORT:8092 -p $DEBUG_PORT:5005 \ + -e SKYWALKING_SERVER=$SKYWALKING_SERVER \ + -e ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE \ + -e SPRING_CLOUD_CLIENT_IP_ADDRESS=$DISCOVERY_IP \ + -e SPRING_CLOUD_NACOS_DISCOVERY_IP=$DISCOVERY_IP \ + -e SPRING_CLOUD_NACOS_DISCOVERY_PORT=$PORT \ + -e SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR=$NACOS_ADDR \ + -e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=$NACOS_ADDR \ + -e SPRING_CLOUD_NACOS_CONFIG_USERNAME=$NACOS_USER \ + -e SPRING_CLOUD_NACOS_CONFIG_PASSWORD=$NACOS_PWD \ + $IMAGE_FULL + + # 检查启动状态 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then + echo "服务启动成功!" + echo "容器名称: $CONTAINER_NAME" + echo "访问地址: http://localhost:$PORT" + echo "环境变量: ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE" + else + echo "服务启动失败,日志如下:" + docker logs $CONTAINER_NAME + exit 1 + fi +} + +# 删除服务 +remove_service() { + # 检查容器是否存在 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + + echo "删除容器: $CONTAINER_NAME" + docker rm $CONTAINER_NAME >/dev/null + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 查看日志 +show_logs() { + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..." + docker logs -f $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 主逻辑 +if [ $# -lt 1 ]; then + show_help + exit 1 +fi + +case "$1" in + deploy) + deploy_service + ;; + remove) + remove_service + ;; + logs) + show_logs + ;; + help) + show_help + ;; + *) + echo "无效的操作类型: $1" + show_help + exit 1 + ;; +esac diff --git a/宝策/projects/docker-web.sh b/宝策/projects/docker-web.sh new file mode 100644 index 0000000..26989bf --- /dev/null +++ b/宝策/projects/docker-web.sh @@ -0,0 +1,305 @@ +#!/bin/bash + +# 定义变量 +CONTAINER_NAME="itc-web" +IMAGE_NAME="127.0.0.1:5000/itc-web" +IMAGE_VERSION="1.0.0" +IMAGE_FULL="$IMAGE_NAME:$IMAGE_VERSION" +PORT=9502 # 服务暴露端口 +file="$CONTAINER_NAME-version.txt" +CONF_PATH="/docker-data/itc-web/conf" + +# 检查文件是否存在(假设 $file 是目标文件变量,已在别处定义) +if [ ! -f "$file" ]; then + echo "文件 $file 不存在" + touch "$file" # 变量加引号,处理含空格的文件名 + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" +else + # 检查参数数量(建议移到脚本开头统一检查) + if [ $# -eq 2 ]; then + IMAGE_FULL="$IMAGE_NAME:$2" + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" + else + # 修正赋值语法:等号两侧无空格 + last_version=$(tail -n 1 "$file") + IMAGE_FULL="$last_version" + # 建议添加对 $IMAGE_FULL 的后续处理(如使用该变量) + fi +fi + +# 显示帮助信息 +show_help() { + echo "使用方法: $0 [操作类型]" + echo "操作类型:" + echo " deploy - 部署并启动服务容器" + echo " remove - 停止并删除容器及数据/日志目录" + echo " logs - 查看容器日志" + echo " help - 显示帮助信息" +} + +# 创建目录并设置权限函数 +create_dirs() { + # 创建数据目录并设置权限 + if [ ! -d "$CONF_PATH" ]; then + mkdir -p "$CONF_PATH" + echo "创建数据目录: $CONF_PATH" + chmod -R 777 "$CONF_PATH" + echo "设置数据目录权限: $CONF_PATH" + fi + + # 生成单机模式配置文件(若不存在) + if [ ! -f "$CONF_PATH/nginx.conf" ]; then + echo "生成配置文件: $CONF_PATH/nginx.conf" + cat > "$CONF_PATH/nginx.conf" << EOF +#user nobody; + +# 工作进程数:自动匹配CPU核心数(比固定值更灵活) +worker_processes 4; + +# 错误日志:开启并按级别分离(方便问题定位) +error_log /var/log/nginx/error.log notice; +pid /run/nginx.pid; + +# 全局资源限制(避免文件描述符不足) +worker_rlimit_nofile 65535; + +events { + # 每个工作进程最大连接数(结合系统ulimit调整) + worker_connections 8192; + # 高效事件模型(Linux推荐epoll,FreeBSD用kqueue) + use epoll; + # 一次性接受所有新连接(提高连接处理效率) + multi_accept on; +} + + +http { + include mime.types; + default_type application/octet-stream; + + # 日志格式优化:增加响应时间和 upstream 信息(便于性能分析) + log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" ' + '\$status $body_bytes_sent "\$http_referer" ' + '"\$http_user_agent" "\$http_x_forwarded_for" ' + '\$request_time \$upstream_response_time'; + # 访问日志:开启(生产环境可按需关闭或调整路径) + access_log /var/log/nginx/access.log main; + + # 高效文件传输 + sendfile on; + # 静态文件传输优化(配合sendfile使用,减少TCP包数量) + tcp_nopush on; + # 动态内容优化(减少网络延迟) + tcp_nodelay on; + + # 长连接设置 + keepalive_timeout 65; # 连接超时时间 + keepalive_requests 1000; # 每个连接最大请求数(防止长连接占用) + keepalive_disable msie6; # 对老旧IE禁用长连接 + + # 客户端请求限制(防攻击) + client_max_body_size 100m; # 缩小上传限制(1024m过大,按需调整) + client_body_buffer_size 1m; # 客户端请求体缓冲区(原1024k保留,单位统一) + client_body_timeout 120s; # 客户端发送请求体超时 + client_header_timeout 120s; # 客户端发送请求头超时 + + + # Gzip压缩优化 + gzip on; + gzip_min_length 1k; # 最小压缩尺寸 + gzip_comp_level 5; # 压缩级别(平衡CPU和带宽) + gzip_types + text/plain text/css text/xml application/json application/javascript application/x-javascript text/javascript application/xml application/xml+rss text/rss; # 明确需要压缩的类型 + gzip_disable "MSIE [1-6]\."; # 禁用老旧IE压缩 + gzip_vary on; # 告诉代理服务器缓存压缩和非压缩版本 + gzip_buffers 16 8k; # 压缩缓冲区(默认值优化) + gzip_http_version 1.1; # 仅对HTTP/1.1及以上启用(避免兼容问题) + gzip_proxied any; # 对代理请求也启用压缩 + + # 隐藏nginx版本号(安全加固) + server_tokens off; + + # 通用安全响应头(全局生效) + add_header X-Frame-Options "SAMEORIGIN"; # 防止点击劫持 + add_header X-XSS-Protection "1; mode=block"; # 防XSS攻击 + add_header X-Content-Type-Options "nosniff"; # 防止MIME类型嗅探 + + # 反向代理配置 http://10.4.126.112:23000 + upstream upstream_name{ + server 10.10.2.102:9500; + keepalive 32; # 长连接池大小,减少连接建立开销 + keepalive_timeout 60s; + keepalive_requests 1000; + } + + # 虚拟主机配置 + server { + listen 8080; + listen [::]:8080; + # 建议替换为实际域名(如example.com),避免用localhost + #server_name 10.4.126.116; + + # 网站根目录 + root /usr/share/nginx/html; + # 默认索引文件 + index index.html; + + # API接口代理配置(优化版) + location ^~/api/ { + # 代理目标地址 + proxy_pass http://upstream_name/; + + # 增强头信息转发 + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + + gzip off; # 禁用该接口的 gzip 压缩 + proxy_set_header Accept-Encoding ""; # 清除传给后端的 Accept-Encoding 头 + + # 超时设置(API专用,可根据业务调整) + proxy_connect_timeout 300s; + proxy_send_timeout 300s; + proxy_read_timeout 300s; + + + } + + location ^~/preview/ { + # 代理目标地址 + proxy_pass http://10.10.2.102:8012/preview/; + + # 增强头信息转发 + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + + gzip off; # 禁用该接口的 gzip 压缩 + proxy_set_header Accept-Encoding ""; # 清除传给后端的 Accept-Encoding 头 + + # 超时设置(API专用,可根据业务调整) + proxy_connect_timeout 300s; + proxy_send_timeout 300s; + proxy_read_timeout 300s; + } + + # 主路径匹配 + location / { + try_files \$uri \$uri/ /index.html; # 适合SPA应用(如Vue/React) + # 缓存控制:动态内容不缓存 + add_header Cache-Control "no-cache, no-store, must-revalidate"; + add_header Pragma "no-cache"; + add_header Expires "0"; + } + + # 静态资源缓存优化(比原配置更精细) + location ~* \.(gif|jpg|jpeg|png|ico|svg|js|css|json|txt)\$ { + # 缓存1天(可根据资源更新频率调整,如图片可设30d) + expires 1d; + add_header Cache-Control "public, max-age=86400"; + } + + # 错误页面配置 + error_page 500 502 503 504 /50x.html; + location = /50x.html { + # 显式指定root(避免继承外层可能的变更) + root /usr/share/nginx/html; + } + + # 禁止访问隐藏文件(如.git .env等) + location ~ /\. { + deny all; + access_log off; + log_not_found off; + } + } +} +EOF + fi + + +} + +# 部署服务 +deploy_service() { + echo "部署镜像【$IMAGE_FULL】" + # 检查容器是否已存在,存在则停止并删除 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止并删除现有容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + docker rm $CONTAINER_NAME >/dev/null + fi + + # 启动服务容器 + echo "启动服务容器..." + + create_dirs + + docker run -d --privileged --restart always --name $CONTAINER_NAME \ + -p $PORT:8080 \ + -v $CONF_PATH/nginx.conf:/etc/nginx/nginx.conf \ + $IMAGE_FULL + + # 检查启动状态 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then + echo "服务启动成功!" + echo "容器名称: $CONTAINER_NAME" + echo "访问地址: http://localhost:$PORT" + else + echo "服务启动失败,日志如下:" + docker logs $CONTAINER_NAME + exit 1 + fi +} + +# 删除服务 +remove_service() { + # 检查容器是否存在 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + + echo "删除容器: $CONTAINER_NAME" + docker rm $CONTAINER_NAME >/dev/null + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 查看日志 +show_logs() { + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..." + docker logs -f $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 主逻辑 +if [ $# -lt 1 ]; then + show_help + exit 1 +fi + +case "$1" in + deploy) + deploy_service + ;; + remove) + remove_service + ;; + logs) + show_logs + ;; + help) + show_help + ;; + *) + echo "无效的操作类型: $1" + show_help + exit 1 + ;; +esac diff --git a/宝策/projects/docker-workflow.sh b/宝策/projects/docker-workflow.sh new file mode 100644 index 0000000..d21836f --- /dev/null +++ b/宝策/projects/docker-workflow.sh @@ -0,0 +1,137 @@ +#!/bin/bash + +# 定义变量 +CONTAINER_NAME="itc-ms-workflow-service" +IMAGE_NAME="127.0.0.1:5000/itc-ms-workflow-service" +IMAGE_VERSION="2025-09-08-0932" +IMAGE_FULL="$IMAGE_NAME:$IMAGE_VERSION" +PORT=9505 # 服务暴露端口 +DEBUG_PORT=9506 # 服务暴露端口 +DISCOVERY_IP="10.10.2.102" +NACOS_ADDR="10.10.2.102:8848" +NACOS_USER="nacos" +SKYWALKING_SERVER="10.10.2.102:11800" +NACOS_PWD="Lng@123" +ENV_APP_PRO_FILE="local" +file="$CONTAINER_NAME-version.txt" + +# 检查文件是否存在(假设 $file 是目标文件变量,已在别处定义) +if [ ! -f "$file" ]; then + echo "文件 $file 不存在" + touch "$file" # 变量加引号,处理含空格的文件名 + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" +else + # 检查参数数量(建议移到脚本开头统一检查) + if [ $# -eq 2 ]; then + IMAGE_FULL="$IMAGE_NAME:$2" + echo "$IMAGE_FULL" >> "$file" + echo "记录版本【$IMAGE_FULL】到 $file" + else + # 修正赋值语法:等号两侧无空格 + last_version=$(tail -n 1 "$file") + IMAGE_FULL="$last_version" + # 建议添加对 $IMAGE_FULL 的后续处理(如使用该变量) + fi +fi + +# 显示帮助信息 +show_help() { + echo "使用方法: $0 [操作类型]" + echo "操作类型:" + echo " deploy - 部署并启动服务容器" + echo " remove - 停止并删除容器及数据/日志目录" + echo " logs - 查看容器日志" + echo " help - 显示帮助信息" +} + + + +# 部署服务 +deploy_service() { + echo "部署镜像【$IMAGE_FULL】" + # 检查容器是否已存在,存在则停止并删除 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止并删除现有容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + docker rm $CONTAINER_NAME >/dev/null + fi + + # 启动服务容器 + echo "启动服务容器..." + + docker run -d --privileged --restart always --name $CONTAINER_NAME \ + -p $PORT:8092 -p $DEBUG_PORT:5005 \ + -e SKYWALKING_SERVER=$SKYWALKING_SERVER \ + -e ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE \ + -e SPRING_CLOUD_CLIENT_IP_ADDRESS=$DISCOVERY_IP \ + -e SPRING_CLOUD_NACOS_DISCOVERY_IP=$DISCOVERY_IP \ + -e SPRING_CLOUD_NACOS_DISCOVERY_PORT=$PORT \ + -e SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR=$NACOS_ADDR \ + -e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=$NACOS_ADDR \ + -e SPRING_CLOUD_NACOS_CONFIG_USERNAME=$NACOS_USER \ + -e SPRING_CLOUD_NACOS_CONFIG_PASSWORD=$NACOS_PWD \ + $IMAGE_FULL + + # 检查启动状态 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then + echo "服务启动成功!" + echo "容器名称: $CONTAINER_NAME" + echo "访问地址: http://localhost:$PORT" + echo "环境变量: ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE" + else + echo "服务启动失败,日志如下:" + docker logs $CONTAINER_NAME + exit 1 + fi +} + +# 删除服务 +remove_service() { + # 检查容器是否存在 + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "停止容器: $CONTAINER_NAME" + docker stop $CONTAINER_NAME >/dev/null + + echo "删除容器: $CONTAINER_NAME" + docker rm $CONTAINER_NAME >/dev/null + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 查看日志 +show_logs() { + if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..." + docker logs -f $CONTAINER_NAME + else + echo "容器 $CONTAINER_NAME 不存在" + fi +} + +# 主逻辑 +if [ $# -lt 1 ]; then + show_help + exit 1 +fi + +case "$1" in + deploy) + deploy_service + ;; + remove) + remove_service + ;; + logs) + show_logs + ;; + help) + show_help + ;; + *) + echo "无效的操作类型: $1" + show_help + exit 1 + ;; +esac diff --git a/宝策/projects/nginx.conf b/宝策/projects/nginx.conf new file mode 100644 index 0000000..85982a1 --- /dev/null +++ b/宝策/projects/nginx.conf @@ -0,0 +1,161 @@ +#user nobody; + +# 工作进程数:自动匹配CPU核心数(比固定值更灵活) +worker_processes auto; +# 绑定CPU核心(减少进程切换开销,0,1,2,3对应4核CPU) +worker_cpu_affinity 0001 0010 0100 1000; + +# 错误日志:开启并按级别分离(方便问题定位) +error_log /var/log/nginx/error.log notice; +pid /run/nginx.pid; + +# 全局资源限制(避免文件描述符不足) +worker_rlimit_nofile 65535; + +events { + # 每个工作进程最大连接数(结合系统ulimit调整) + worker_connections 8192; + # 高效事件模型(Linux推荐epoll,FreeBSD用kqueue) + use epoll; + # 一次性接受所有新连接(提高连接处理效率) + multi_accept on; +} + + +http { + include mime.types; + default_type application/octet-stream; + + # 日志格式优化:增加响应时间和 upstream 信息(便于性能分析) + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for" ' + '$request_time $upstream_response_time'; + # 访问日志:开启(生产环境可按需关闭或调整路径) + access_log /var/log/nginx/access.log main; + + # 高效文件传输 + sendfile on; + # 静态文件传输优化(配合sendfile使用,减少TCP包数量) + tcp_nopush on; + # 动态内容优化(减少网络延迟) + tcp_nodelay on; + + # 长连接设置 + keepalive_timeout 65; # 连接超时时间 + keepalive_requests 1000; # 每个连接最大请求数(防止长连接占用) + keepalive_disable msie6; # 对老旧IE禁用长连接 + + # 客户端请求限制(防攻击) + client_max_body_size 100m; # 缩小上传限制(1024m过大,按需调整) + client_body_buffer_size 1m; # 客户端请求体缓冲区(原1024k保留,单位统一) + client_body_timeout 120s; # 客户端发送请求体超时 + client_header_timeout 120s; # 客户端发送请求头超时 + + + # Gzip压缩优化 + gzip on; + gzip_min_length 1k; # 最小压缩尺寸 + gzip_comp_level 5; # 压缩级别(平衡CPU和带宽) + gzip_types + text/plain text/css text/xml application/json application/javascript application/x-javascript text/javascript application/xml application/xml+rss text/rss; # 明确需要压缩的类型 + gzip_disable "MSIE [1-6]\."; # 禁用老旧IE压缩 + gzip_vary on; # 告诉代理服务器缓存压缩和非压缩版本 + gzip_buffers 16 8k; # 压缩缓冲区(默认值优化) + gzip_http_version 1.1; # 仅对HTTP/1.1及以上启用(避免兼容问题) + gzip_proxied any; # 对代理请求也启用压缩 + + # 隐藏nginx版本号(安全加固) + server_tokens off; + + # 通用安全响应头(全局生效) + add_header X-Frame-Options "SAMEORIGIN"; # 防止点击劫持 + add_header X-XSS-Protection "1; mode=block"; # 防XSS攻击 + add_header X-Content-Type-Options "nosniff"; # 防止MIME类型嗅探 + + upstream upstream_name{ + server 10.10.2.102:9500; + keepalive 32; # 长连接池大小,减少连接建立开销 + keepalive_timeout 60s; + keepalive_requests 1000; + } + + # 虚拟主机配置 + server { + listen 8080; + listen [::]:8080; + # 建议替换为实际域名(如example.com),避免用localhost + #server_name 10.4.126.116; + + # 网站根目录 + root /usr/share/nginx/html; + # 默认索引文件 + index index.html; + + # API接口代理配置(优化版) + location ^~/api/ { + # 代理目标地址 + proxy_pass http://upstream_name/; + + # 增强头信息转发 + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + gzip off; # 禁用该接口的 gzip 压缩 + proxy_set_header Accept-Encoding ""; # 清除传给后端的 Accept-Encoding 头 + + # 超时设置(API专用,可根据业务调整) + proxy_connect_timeout 300s; + proxy_send_timeout 300s; + proxy_read_timeout 300s; + } + + location ^~/preview/ { + # 代理目标地址 + proxy_pass http://10.10.2.102:8012/preview/; + + # 增强头信息转发 + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + gzip off; # 禁用该接口的 gzip 压缩 + proxy_set_header Accept-Encoding ""; # 清除传给后端的 Accept-Encoding 头 + + # 超时设置(API专用,可根据业务调整) + proxy_connect_timeout 300s; + proxy_send_timeout 300s; + proxy_read_timeout 300s; + } + + # 主路径匹配 + location / { + try_files $uri $uri/ /index.html; # 适合SPA应用(如Vue/React) + # 缓存控制:动态内容不缓存 + add_header Cache-Control "no-cache, no-store, must-revalidate"; + add_header Pragma "no-cache"; + add_header Expires "0"; + } + + # 静态资源缓存优化(比原配置更精细) + location ~* \.(gif|jpg|jpeg|png|ico|svg|js|css|json|txt)$ { + # 缓存1天(可根据资源更新频率调整,如图片可设30d) + expires 1d; + add_header Cache-Control "public, max-age=86400"; + } + + # 错误页面配置 + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + # 禁止访问隐藏文件(如.git .env等) + location ~ /\. { + deny all; + access_log off; + log_not_found off; + } + } +} \ No newline at end of file diff --git a/宝策/宝策部署记录.md b/宝策/宝策部署记录.md new file mode 100644 index 0000000..54202ed --- /dev/null +++ b/宝策/宝策部署记录.md @@ -0,0 +1,23 @@ +# 中间件记录 +| 服务名 | 端口 | 备注 | +| ---- | :----: | ---- | +| kingbase8 | 54321 | 人大金仓数据库 +| redis | 6379 | 缓存数据库 +| skywalking-ui | 9601 | 日志监控web +| skywalkingwalking-oap-server | 12800、11800 | 日志拦截 +| elasticsearch | 9200、9300 | 日志存储 +| minio | 9000、9001 | 文件存储 账号:admin/Pcitc@123 +| kkfileview | 8012 | 文件预览 +| nacos-server | 8848、9848、9849 | 注册中心 账号:nacos/Lng@123 +| seata-server | 8091、7091 | 分布式事务 +| xxl-job-server | 9600 | xxl-job 调度中心 +---------- +# 应用记录 +| 服务名 | 端口 | +| ---- | :----: | +| itc-ms-gateway | 9500 | +| itc-web | 9502 | +| itc-ms-user | 9503 | +| itc-ms-workflow-service | 9505 | +| itc-ms-facade-service | 9507 | +| itc-ms-system | 9509 | diff --git a/宝策开发环境安装记录.txt b/宝策开发环境安装记录.txt new file mode 100644 index 0000000..980ff31 --- /dev/null +++ b/宝策开发环境安装记录.txt @@ -0,0 +1,35 @@ +##docker 自定义网络 +docker network create --subnet=172.20.0.0/16 --gateway=172.20.0.1 scm-net + +##安装 redis +docker run -itd --restart always --net=scm-net --ip=172.20.0.2 --name redis -p 6379:6379 redis:7.0.2 --requirepass tdjj2HH0fva^2R + +连接 + +##安装 minio +docker run -d --restart always --net=scm-net --ip=172.20.0.3 \ + --name minio \ + -p 9000:9000 \ + -p 9001:9001 \ + -e "MINIO_ROOT_USER=admin" \ + -e "MINIO_ROOT_PASSWORD=Pcitc@123" \ + -e "MINIO_CONSOLE_ACKNOWLEDGE-AGPL=yes" \ + -v /docker-data/minio/data:/data \ + minio/minio:RELEASE.2025-07-23T15-54-02Z server /data --console-address ":9001" + +# kingbase8 启动命令 +docker run -d --privileged --restart always --net=scm-net --ip=172.20.0.4 -p 54321:54321 \ + --name kingbase8 \ + -e TZ=Asia/Shanghai -e NEED_START=yes \ + -e DB_USER=itc_dne -e DB_PASSWORD=itc_dne -e DB_MODE=oracle \ + -v /docker-data/kingbase/data:/home/kingbase/userdata/data \ + kingbase-v8:v1 + +docker network connect --ip 172.20.0.4 scm-net $CONTAINER_NAME + +docker run -d --net=scm-net --ip=172.20.0.8 ^ +--name seata-server -p 8091:8091 -p 7091:7091 ^ +-e SEATA_IP=172.19.3.230 ^ +-v "E:/docker-data/seata-server/config/application.yml:/seata-server/resources/application.yml" ^ +seata-server:2.3.0-kingbase8 + diff --git a/超聚变服务器 Whitley平台 CentOS 8.X 安装案例 01.docx b/超聚变服务器 Whitley平台 CentOS 8.X 安装案例 01.docx new file mode 100644 index 0000000..247b4f2 Binary files /dev/null and b/超聚变服务器 Whitley平台 CentOS 8.X 安装案例 01.docx differ