OcsNG基于debian一键部署脚本

🤔 为什么有了GLPI还要部署OCS-NG?

核心问题:数据收集的风险

GLPI直接收集的问题:

  • Agent直接向GLPI报告数据时,任何收集异常都会直接影响资产数据库
  • 网络问题、Agent故障可能导致重复资产、错误数据、资产丢失
  • 无法对收集的数据进行预处理和验证

OCS-NG作为中间层的价值:

传统方式:终端Agent → GLPI → 资产数据库 (有风险)
推荐方式:终端Agent → OCS-NG → 数据验证 → GLPI → 资产数据库 (安全)

实际场景举例

场景1:网络异常

  • 没有OCS-NG:Agent因网络问题重复提交 → GLPI创建重复资产
  • 有OCS-NG:Agent重复提交到OCS-NG → OCS-NG去重后同步到GLPI

场景2:Agent故障

  • 没有OCS-NG:Agent报告错误硬件信息 → GLPI资产数据被污染
  • 有OCS-NG:错误数据进入OCS-NG → 管理员发现异常 → 修正后同步到GLPI

场景3:批量部署

  • 没有OCS-NG:1000台设备同时向GLPI报告 → GLPI压力过大
  • 有OCS-NG:1000台设备向OCS-NG报告 → 分批同步到GLPI → 系统稳定

🚀 OCS-NG脚本部署

1. 环境准备

# 系统要求
- Debian 12 / Ubuntu 22.04
- 最小4GB内存,8GB推荐
- 50GB硬盘空间# 网络规划
OCS-NG服务器:192.168.1.100
GLPI服务器:  192.168.1.101

2. 脚本部署步骤

第一步:下载并执行安装脚本
# 使用项目中提供的脚本
chmod +x install_ocs_inventory_debian12.sh# 以root权限执行
sudo ./install_ocs_inventory_debian12.sh
第二步:安装过程中的关键选择
# 1. 环境清理(推荐选择Y)
是否执行完整清理?(y/N): y# 2. 数据库配置
数据库名称 [ocsweb]: ocsweb
数据库用户名 [ocs]: ocs_user
数据库密码: [设置强密码]# 3. 性能优化(推荐选择Y)
是否应用性能优化配置?(推荐) (Y/n): Y# 4. 安全配置(推荐选择Y)
是否应用安全加固配置?(推荐) (Y/n): Y
第三步:验证安装
# 检查服务状态
systemctl status apache2
systemctl status mariadb# 访问Web界面
浏览器打开:http://192.168.1.100/ocsreports
默认用户名:admin
默认密码:admin

📋 OCS-NG安装检查清单

✅ 安装前准备 (Pre-Installation Checklist)

步骤 1:环境准备
  • 下载并运行 install_ocs_inventory_debian12.sh
  • 确认脚本执行完成,显示 “环境准备完成!”
  • 记录显示的 MySQL Root 密码
  • 保存 OCS-NG安装路径配置清单.md 到本地
步骤 2:服务状态检查
# 检查服务状态
systemctl status apache2    # 应显示 active (running)
systemctl status mariadb    # 应显示 active (running)# 检查端口监听
netstat -tuln | grep :80    # Apache 端口
netstat -tuln | grep :3306  # MySQL 端口
  • Apache 服务正常运行
  • MariaDB 服务正常运行
  • 端口 80 和 3306 正常监听
步骤 3:数据库连接测试
# 测试 OCS 数据库连接
mysql -u ocs -p'OcsPass123!' ocsweb -e "SELECT 1;"
  • 数据库连接测试成功

🔧 OCS Server 安装 (Server Installation)

步骤 4:启动 Server 安装
cd /tmp/ocs_installation/OCSInventory-Server
./setup.sh
步骤 5:安装过程问答 (复制粘贴使用)

Apache 配置询问

问题答案
Where is Apache daemon binary?/usr/sbin/apache2
Where is Apache main configuration file?/etc/apache2/apache2.conf
Where is Apache modules directory?/usr/lib/apache2/modules
What is Apache daemon running user?www-data
What is Apache daemon running group?www-data
Where is Apache Include configuration directory?/etc/apache2/conf-available
  • Apache 路径配置完成

Perl 配置询问

问题答案
Where is Perl interpreter?/usr/bin/perl
Do you wish to continue installing OCS Inventory NG Server?y
Where to copy Communication server files?/usr/share/ocsinventory-reports
Where to copy Administration console files?/usr/share/ocsinventory-reports
Do you allow Setup to create these directories?y
  • Perl 配置完成

数据库配置询问

问题答案
Database server address?localhost
Database server port?3306
Database name?ocsweb
Database user?ocs
Database user password?OcsPass123!
  • 数据库配置完成

服务组件询问

问题答案
Do you wish to setup Communication server on this computer?y
Do you wish to setup Administration server on this computer?y
Do you wish to setup Rest API server on this computer?y
Do you wish to setup a new database server?n
Do you wish to update Communication server on this computer?n
  • 服务组件配置完成
  • Server 安装脚本执行完成

🌐 OCS Reports 安装 (Web Interface Installation)

步骤 6:复制 Reports 文件
cd /tmp/ocs_installation/OCSInventory-ocsreports
cp -r . /usr/share/ocsinventory-reports/
ln -sf /usr/share/ocsinventory-reports /var/www/html/ocsreports
  • Reports 文件复制完成
  • Apache 符号链接创建完成
步骤 7:重启服务
systemctl restart apache2
systemctl restart mariadb
  • 服务重启完成

🔗 Web 界面配置 (Web Configuration)

步骤 8:访问 Web 安装界面
  • 访问地址:http://192.168.1.100/ocsreports/
  • Web 界面可正常访问
步骤 9:数据库配置

在 Web 界面中填入以下信息:

配置项
MySQL serverlocalhost
MySQL userocs
MySQL passwordOcsPass123!
Name of Databaseocsweb
MySQL Port3306
  • 数据库连接测试成功
  • 数据库表结构创建完成
步骤 10:完成安装
  • Web 安装向导完成
  • 显示 “Installation is complete” 或类似成功信息

🔐 安装后安全配置 (Post-Installation Security)

步骤 11:删除安装文件
rm -f /usr/share/ocsinventory-reports/install.php
  • install.php 文件已删除
步骤 12:登录测试
  • 访问:http://192.168.1.100/ocsreports/
  • 用户名:admin
  • 密码:admin
  • 成功登录 OCS 管理界面
步骤 13:更改默认密码
  • 进入用户管理
  • 修改 admin 用户密码
  • 默认密码已更改

✅ 安装验证 (Installation Verification)

步骤 14:功能验证
# 检查 Apache 配置
apache2ctl configtest# 检查数据库表
mysql -u ocs -p'OcsPass123!' ocsweb -e "SHOW TABLES;"# 检查 Web 服务
curl -I http://localhost/ocsreports/# 检查日志
tail -f /var/log/apache2/ocs_error.log
  • Apache 配置语法正确
  • 数据库表创建成功
  • Web 服务响应正常
  • 无严重错误日志

🔄 备份和维护 (Backup & Maintenance)

步骤 15:验证自动备份
# 检查备份脚本
ls -la /usr/local/bin/ocs-backup.sh# 检查定时任务
cat /etc/cron.d/ocs-backup# 手动执行一次备份测试
/usr/local/bin/ocs-backup.sh# 检查备份结果
ls -la /var/backups/ocs/
  • 备份脚本存在且可执行
  • 定时任务配置正确
  • 手动备份测试成功
  • 备份文件生成正常

📊 安装完成总结

✅ 系统状态概览
  • Web 界面:http://192.168.1.100/ocsreports/ ✅
  • 管理员登录:admin/[新密码] ✅
  • 数据库:ocsweb ✅
  • 自动备份:每日 2:00AM ✅
  • 性能优化:已配置 ✅
  • 安全加固:已应用 ✅
📁 重要文件位置
配置信息: /root/ocs_db_info.txt
MySQL 密码: /root/.my.cnf
备份脚本: /usr/local/bin/ocs-backup.sh
日志文件: /var/log/apache2/ocs_*.log
数据目录: /var/lib/ocsinventory-reports/
🎯 下一步建议
  1. 客户端部署:下载并部署 OCS Agent 到需要监控的计算机
  2. 网络发现:配置 IP 网段发现
  3. 定制化:根据需要配置标签、分组等
  4. 监控告警:配置日志监控和告警
  5. SSL 证书:配置正式的 SSL 证书
  6. 注意事项: Aget客户端提交数据服务端无法接收,是perl的处理结果写入数据的配置文件异常,请修改如下路径的数据库部分密码与数据库密码一致:
vim /etc/apache2/conf-available/z-ocsinventory-server.conf
vim /etc/apache2/conf-available/zz-ocsinventory-restapi.conf
  1. 客户端封装 : OcsNG Agent可以单独封装(将服务器参数等直接写入到客户端中,域控等可以直接部署),并且按特定的参数运行提交数据(如静默后台运行/通过域控管理员安装等),文章资源附件有封装工具和安装包及使用说明,欢迎下载使用,如有问题,随时加入Q群1097440406交流
    在这里插入图片描述

🔗 GLPI连接OCS-NG配置

1. 在GLPI服务器上安装OCS-NG插件

# 下载并安装插件
cd /var/www/html/glpi/plugins/
wget https://github.com/pluginsGLPI/ocsinventoryng/releases/latest/download/ocsinventoryng.tar.gz
tar -xzf ocsinventoryng.tar.gz
chown -R www-data:www-data ocsinventoryng/

2. 配置数据库连接权限

在OCS-NG服务器上执行:

# 登录MySQL
mysql -u root -p# 创建GLPI连接用户
CREATE USER 'ocs_glpi_user'@'192.168.1.101' IDENTIFIED BY 'secure_password_123';
CREATE USER 'ocs_glpi_user'@'192.168.1.%' IDENTIFIED BY 'secure_password_123';# 授予权限
GRANT SELECT ON ocsweb.* TO 'ocs_glpi_user'@'192.168.1.101';
GRANT SELECT ON ocsweb.* TO 'ocs_glpi_user'@'192.168.1.%';
GRANT INSERT, UPDATE ON ocsweb.locks TO 'ocs_glpi_user'@'192.168.1.101';
GRANT INSERT, UPDATE ON ocsweb.locks TO 'ocs_glpi_user'@'192.168.1.%';
FLUSH PRIVILEGES;
# 配置远程访问
vim /etc/mysql/mariadb.conf.d/50-server.cnf
# 修改:bind-address = 0.0.0.0# 重启MariaDB
systemctl restart mariadb

3. 在GLPI中配置OCS-NG连接

  1. 启用插件

    GLPI → 设置 → 插件 → OCS Inventory NG → 安装 → 启用
    
  2. 配置连接

    设置 → 插件 → OCS Inventory NG → 配置添加OCSNG服务器:
    - 服务器名称:OCS-NG主服务器
    - 数据库主机:192.168.1.100
    - 数据库名:ocsweb
    - 数据库用户:ocs_glpi_user
    - 数据库密码:secure_password_123
    
  3. 测试连接

    点击"测试连接"按钮,确保连接成功
    

4. 配置同步规则

工具 → OCS-NG → 导入规则推荐设置:
- 自动导入新计算机:✓
- 自动同步现有计算机:✗ (建议手动)
- 自动删除过期计算机:✗ (建议手动)
- 同步间隔:每天

📊 数据同步管理

手动同步(推荐)

工具 → OCS-NG → 同步计算机
- 选择要同步的设备
- 点击"同步"按钮
- 确认同步结果

自动同步监控

# 创建监控脚本
cat > /usr/local/bin/check_ocs_sync.sh << 'EOF'
#!/bin/bash
# 检查OCS-NG到GLPI的同步状态# 检查OCS-NG中的设备数量
OCS_COUNT=$(mysql -h 192.168.1.100 -u ocs_glpi_user -p'secure_password_123' ocsweb -se "SELECT COUNT(*) FROM hardware WHERE lastcome > DATE_SUB(NOW(), INTERVAL 7 DAY)")# 检查GLPI中的设备数量
GLPI_COUNT=$(mysql -u glpi_user -p'glpi_password' glpi -se "SELECT COUNT(*) FROM glpi_computers WHERE is_deleted = 0")echo "OCS-NG设备数量: $OCS_COUNT"
echo "GLPI设备数量: $GLPI_COUNT"# 如果差异过大,发送告警
DIFF=$((OCS_COUNT - GLPI_COUNT))
if [ $DIFF -gt 10 ] || [ $DIFF -lt -10 ]; thenecho "警告:设备数量差异过大,请检查同步状态"
fi
EOFchmod +x /usr/local/bin/check_ocs_sync.sh# 设置定时检查
echo "0 8 * * * root /usr/local/bin/check_ocs_sync.sh" >> /etc/crontab

🛡️ 最佳实践

1. 数据保护策略

# 定期备份OCS-NG数据
mysqldump --single-transaction ocsweb > /var/backups/ocsweb_$(date +%Y%m%d).sql# 监控同步状态
# 建议人工审核重要的同步操作

2. 同步建议

  • 新设备:可以自动同步
  • 设备更新:建议手动确认后同步
  • 设备删除:必须人工审核

3. 故障处理

# 常见问题检查
# 1. 检查网络连接
ping 192.168.1.100# 2. 检查数据库连接
mysql -h 192.168.1.100 -u ocs_glpi_user -p ocsweb# 3. 检查服务状态
systemctl status apache2
systemctl status mariadb# 4. 查看日志
tail -f /var/log/apache2/error.log
tail -f /var/log/mysql/error.log

💡 总结

为什么需要OCS-NG?

  • 🛡️ 保护GLPI资产数据不被收集异常污染
  • 🔄 提供可控的数据同步机制
  • 📊 支持数据验证和清洗
  • 🚀 提高系统整体稳定性

部署价值:

  • 一次部署,长期受益
  • 降低资产数据管理风险
  • 提高数据质量和系统可靠性

使用OCS-NG作为中间层,您可以安心收集资产数据,不用担心异常情况影响GLPI的生产数据。

#!/bin/bash# OCS Inventory NG 环境准备脚本
# 适用于 Debian 12 最小安装
# 自动安装所有依赖环境,下载 OCS-NG 安装包set -e# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color# 日志函数
log_info() {echo -e "${GREEN}[INFO]${NC} $1"
}log_warning() {echo -e "${YELLOW}[WARNING]${NC} $1"
}log_error() {echo -e "${RED}[ERROR]${NC} $1"
}log_step() {echo -e "${BLUE}[STEP]${NC} $1"
}# 检查是否以root权限运行
check_root() {if [[ $EUID -ne 0 ]]; thenlog_error "此脚本必须以root权限运行"exit 1fi
}# 检查Debian版本
check_debian_version() {log_step "检查Debian版本..."if ! grep -q "ID=debian" /etc/os-release; thenlog_error "此脚本仅支持Debian系统"exit 1fiVERSION_ID=$(grep -o 'VERSION_ID="[0-9]*"' /etc/os-release | cut -d'"' -f2)if [[ "$VERSION_ID" != "12" ]]; thenlog_warning "检测到Debian $VERSION_ID,脚本针对Debian 12优化"elselog_info "检测到Debian 12,版本匹配"fi
}# 配置中国软件源
configure_china_mirrors() {log_step "配置中国软件源..."# 备份原始sources.listif [[ ! -f /etc/apt/sources.list.bak ]]; thencp /etc/apt/sources.list /etc/apt/sources.list.baklog_info "已备份原始sources.list"fi# 配置清华大学镜像源cat > /etc/apt/sources.list << 'EOF'
# 清华大学镜像源
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
EOFlog_info "已配置清华大学镜像源"
}# 完整环境清理
perform_complete_cleanup() {log_step "执行完整环境清理..."# 停止所有相关服务log_info "停止相关服务..."local services=("apache2" "apache-htcacheclean" "mariadb" "mysql" "httpd")for service in "${services[@]}"; doif systemctl is-active --quiet "$service" 2>/dev/null; thenlog_info "停止服务: $service"systemctl stop "$service" 2>/dev/null || truesystemctl disable "$service" 2>/dev/null || truefidone# 卸载所有相关软件包log_info "卸载相关软件包..."apt remove --purge -y \ocsinventory-* \apache2* \mariadb-* mysql-* \php* \libapache2-mod-* \perl-* libperl* \2>/dev/null || true# 清理配置目录log_info "清理配置和数据目录..."local dirs_to_remove=("/etc/apache2""/etc/mysql""/etc/mariadb""/var/lib/mysql""/var/lib/mariadb""/var/log/mysql""/var/log/mariadb""/var/log/apache2""/etc/php""/var/lib/php""/usr/share/ocsinventory-reports""/var/lib/ocsinventory-reports""/etc/ocsinventory-server""/var/www/html""/tmp/ocs_*")for dir in "${dirs_to_remove[@]}"; doif [[ -d "$dir" ]]; thenlog_info "删除目录: $dir"rm -rf "$dir" 2>/dev/null || truefidone# 最终清理apt autoremove -y 2>/dev/null || trueapt autoclean 2>/dev/null || truesystemctl daemon-reload 2>/dev/null || truelog_info "环境清理完成"
}# 更新系统
update_system() {log_step "更新系统..."apt updateapt upgrade -ylog_info "系统更新完成"
}# 安装基础工具
install_basic_tools() {log_step "安装基础工具..."apt install -y \wget \curl \gnupg \lsb-release \ca-certificates \apt-transport-https \software-properties-common \unzip \git \openssl \tar \build-essential \cpanminus \composerlog_info "基础工具安装完成"
}# 安装MariaDB
install_mariadb() {log_step "安装MariaDB数据库..."# 预配置MariaDB(避免交互式提示)echo "mariadb-server mysql-server/root_password password " | debconf-set-selectionsecho "mariadb-server mysql-server/root_password_again password " | debconf-set-selections# 安装MariaDBapt install -y mariadb-server mariadb-client# 启动服务systemctl start mariadbsystemctl enable mariadb# 生成随机密码并配置MYSQL_ROOT_PASSWORD=$(openssl rand -base64 32)# 安全配置mysql -e "UPDATE mysql.user SET authentication_string = PASSWORD('$MYSQL_ROOT_PASSWORD') WHERE User = 'root';" 2>/dev/null || truemysql -e "UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root';" 2>/dev/null || truemysql -e "DELETE FROM mysql.user WHERE User='';"mysql -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"mysql -e "DROP DATABASE IF EXISTS test;"mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';"mysql -e "FLUSH PRIVILEGES;"# 保存密码cat > /root/.my.cnf << EOF
[client]
user = root
password = $MYSQL_ROOT_PASSWORD
EOFchmod 600 /root/.my.cnf# 将密码存储为全局变量供后续使用export MYSQL_ROOT_PASSWORDlog_info "MariaDB安装完成,密码已保存到 /root/.my.cnf"log_info "MySQL Root密码: $MYSQL_ROOT_PASSWORD"
}# 安装Apache
install_apache() {log_step "安装Apache Web服务器..."# 安装Apache和模块apt install -y \apache2 \apache2-utils \apache2-dev \libapache2-mod-perl2 \libapache2-mod-php# 启用必要模块a2enmod rewritea2enmod ssla2enmod perla2enmod php8.2# 启动服务systemctl start apache2systemctl enable apache2# 创建基本Web目录mkdir -p /var/www/htmlchown -R www-data:www-data /var/www/htmllog_info "Apache安装完成"
}# 安装PHP
install_php() {log_step "安装PHP及扩展..."apt install -y \php \php-cli \php-common \php-mysql \php-gd \php-zip \php-xml \php-mbstring \php-curl \php-soap \php-ldap \php-imap \php-snmp \php-intl \php-json \php-opcache# 配置PHPlocal php_ini="/etc/php/8.2/apache2/php.ini"if [[ -f "$php_ini" ]]; then# 备份原配置cp "$php_ini" "$php_ini.bak"# 应用OCS优化配置sed -i 's/memory_limit = .*/memory_limit = 512M/' "$php_ini"sed -i 's/max_execution_time = .*/max_execution_time = 300/' "$php_ini"sed -i 's/upload_max_filesize = .*/upload_max_filesize = 300M/' "$php_ini"sed -i 's/post_max_size = .*/post_max_size = 300M/' "$php_ini"sed -i 's/;date.timezone =.*/date.timezone = Asia\/Shanghai/' "$php_ini"filog_info "PHP安装完成"
}# 安装Perl模块
install_perl_modules() {log_step "安装Perl及模块..."# 安装Perl基础包apt install -y \perl \perl-base \perl-modules-5.36 \libperl-dev# 安装OCS必需的Perl模块apt install -y \libxml-simple-perl \libdbi-perl \libdbd-mysql-perl \libapache-dbi-perl \libnet-ip-perl \libsoap-lite-perl \libarchive-zip-perl \libio-compress-perl \libmojolicious-perl \libplack-perl \libswitch-perl \libxml-entities-perl \libipc-run-perl \libproc-daemon-perl \libproc-pid-file-perl \libuniversal-require-perl# 使用cpan安装部分模块log_info "安装额外的Perl模块..."cpan -i Apache::DBI XML::Entities 2>/dev/null || truelog_info "Perl模块安装完成"
}# 配置数据库
setup_database() {log_step "配置数据库..."# 创建OCS数据库和用户local db_name="ocsweb"local db_user="ocs"local db_password="OcsPass123!"mysql << EOF
CREATE DATABASE IF NOT EXISTS $db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '$db_user'@'localhost' IDENTIFIED BY '$db_password';
GRANT ALL PRIVILEGES ON $db_name.* TO '$db_user'@'localhost';
FLUSH PRIVILEGES;
EOF# 保存数据库信息cat > /root/ocs_db_info.txt << EOF
=== OCS Inventory 数据库信息 ===
数据库名: $db_name
用户名: $db_user
密码: $db_password
主机: localhost
端口: 3306
创建时间: $(date)=== MySQL Root 密码 ===
MySQL Root密码: ${MYSQL_ROOT_PASSWORD:-请查看 /root/.my.cnf}
配置文件: /root/.my.cnf=== 远程访问配置 ===
GLPI服务器可使用以下信息远程连接:
- 主机: OCS服务器IP地址
- 端口: 3306
- 数据库: $db_name  
- 用户名: ocs (仅限SELECT权限)
- 密码: $db_password
EOFchmod 600 /root/ocs_db_info.txtlog_info "数据库配置完成"log_info "OCS数据库密码: $db_password"
}# 下载OCS-NG安装包并安装Composer依赖
download_ocs_packages() {log_step "下载OCS Inventory NG安装包..."# 创建下载目录local download_dir="/tmp/ocs_installation"mkdir -p "$download_dir"cd "$download_dir"log_info "正在下载OCS Inventory NG最新版本..."# 下载OCS Server组件log_info "下载OCS Server组件..."if ! git clone --depth 1 https://github.com/OCSInventory-NG/OCSInventory-Server.git; thenlog_error "下载OCS Server失败,请检查网络连接"exit 1fi# 下载OCS Reports组件log_info "下载OCS Reports组件..."if ! git clone --depth 1 https://github.com/OCSInventory-NG/OCSInventory-ocsreports.git; thenlog_error "下载OCS Reports失败,请检查网络连接"exit 1fi# 下载OCS Agent(可选)log_info "下载OCS Agent组件..."git clone --depth 1 https://github.com/OCSInventory-NG/UnixAgent.git 2>/dev/null || log_warning "OCS Agent下载失败(可选组件)"# 安装OCS Reports的Composer依赖log_step "安装OCS Reports的Composer依赖..."if [[ -d "OCSInventory-ocsreports" ]]; thencd OCSInventory-ocsreports# 检查composer.json文件是否存在if [[ -f "composer.json" ]]; thenlog_info "发现composer.json,正在安装PHP依赖..."# 使用--no-dev避免安装开发依赖,--optimize-autoloader优化自动加载if composer install --no-dev --optimize-autoloader --no-interaction; thenlog_info "✓ Composer依赖安装成功"elselog_warning "✗ Composer依赖安装失败,可能需要手动安装"fielselog_info "未找到composer.json文件,跳过Composer依赖安装"ficd "$download_dir"fi# 设置正确的权限chown -R root:root "$download_dir"chmod -R 755 "$download_dir"log_info "OCS Inventory NG安装包下载完成"echo "下载位置: $download_dir"
}# 创建安装指导文档
create_installation_guide() {log_step "创建安装指导文档..."cat > /root/ocs_installation_guide.txt << 'EOF'
=== OCS Inventory NG 手动安装指导 ===📁 安装文件位置:/tmp/ocs_installation/🔧 安装步骤:1. 安装OCS Server组件:cd /tmp/ocs_installation/OCSInventory-Server./setup.sh2. 安装OCS Reports组件:cd /tmp/ocs_installation/OCSInventory-ocsreports# 复制文件到Web目录cp -r . /usr/share/ocsinventory-reports/# 注意:必要目录和权限已自动配置# 注意:Composer依赖已自动安装# 创建Apache配置符号链接ln -sf /usr/share/ocsinventory-reports /var/www/html/ocsreports3. 配置Apache虚拟主机(可选):# 已在环境准备中自动配置4. 访问Web界面完成配置:http://your-server-ip/ocsreports/使用以下数据库信息:- 数据库: ocsweb- 用户名: ocs- 密码: OcsPass123!- 主机: localhost5. 默认登录信息:- 用户名: admin- 密码: admin✅ 自动完成的配置:
- Composer依赖已自动安装
- 目录权限已自动设置
- MariaDB性能优化已配置
- Apache性能优化已启用
- PHP OPCache已优化
- 自动备份脚本已创建 (/usr/local/bin/ocs-backup.sh)
- 定时备份任务已配置 (每日2:00AM)
- 日志轮转已配置⚠️ 重要提示:
- 安装完成后请立即更改admin密码
- 删除install.php文件确保安全
- 配置防火墙允许80和443端口
- 数据库已配置远程访问 (bind-address = 0.0.0.0)📄 相关文件:
- 数据库信息: /root/ocs_db_info.txt
- MySQL配置: /root/.my.cnf
- 备份脚本: /usr/local/bin/ocs-backup.sh
- 性能配置: /etc/mysql/mariadb.conf.d/99-ocs-optimization.cnf
EOFlog_info "安装指导文档创建完成: /root/ocs_installation_guide.txt"
}# 配置Apache基础设置
configure_apache_basics() {log_step "配置Apache基础设置..."# 创建基础配置cat > /etc/apache2/sites-available/ocs.conf << 'EOF'
<VirtualHost *:80>ServerAdmin admin@localhostDocumentRoot /var/www/html# OCS Reports别名Alias /ocsreports /usr/share/ocsinventory-reports<Directory "/usr/share/ocsinventory-reports">Options -Indexes +FollowSymLinksAllowOverride AllRequire all granted</Directory># 日志配置ErrorLog ${APACHE_LOG_DIR}/ocs_error.logCustomLog ${APACHE_LOG_DIR}/ocs_access.log combined
</VirtualHost>
EOF# 启用站点a2ensite ocsa2dissite 000-default# 重启Apachesystemctl restart apache2log_info "Apache基础配置完成"
}# 自动权限配置和优化设置
configure_automatic_optimizations() {log_step "配置自动权限和优化设置..."# 1. 创建OCS必要目录并设置权限log_info "创建OCS目录结构和权限..."# 创建主要目录mkdir -p /usr/share/ocsinventory-reportsmkdir -p /var/lib/ocsinventory-reports/{download,ipd,snmp,scripts,logs}mkdir -p /var/log/ocsinventory-servermkdir -p /etc/ocsinventory# 设置正确的所有者和权限chown -R www-data:www-data /usr/share/ocsinventory-reportschown -R www-data:www-data /var/lib/ocsinventory-reportschown -R www-data:www-data /var/log/ocsinventory-serverchown -R root:www-data /etc/ocsinventorychmod -R 755 /usr/share/ocsinventory-reportschmod -R 750 /var/lib/ocsinventory-reportschmod -R 755 /var/log/ocsinventory-serverchmod -R 750 /etc/ocsinventory# 2. 配置MariaDB性能优化log_info "配置MariaDB性能优化..."cat > /etc/mysql/mariadb.conf.d/99-ocs-optimization.cnf << 'EOF'
# OCS Inventory NG MariaDB Optimization
[mysqld]# 基础设置
default_storage_engine = InnoDB
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci# 连接设置
max_connections = 200
max_user_connections = 190
thread_cache_size = 8
table_open_cache = 2048# InnoDB设置
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1# 临时表
tmp_table_size = 64M
max_heap_table_size = 64M# 日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2# 安全
local_infile = 0
bind-address = 0.0.0.0
EOF# 3. 配置Apache性能优化log_info "配置Apache性能优化..."cat > /etc/apache2/conf-available/ocs-performance.conf << 'EOF'
# OCS Inventory NG Performance Optimization# 启用压缩
<IfModule mod_deflate.c>AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/jsonAddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xmlAddOutputFilterByType DEFLATE image/svg+xml
</IfModule># 浏览器缓存
<IfModule mod_expires.c>ExpiresActive OnExpiresByType text/css "access plus 1 month"ExpiresByType application/javascript "access plus 1 month"ExpiresByType image/png "access plus 1 month"ExpiresByType image/jpg "access plus 1 month"ExpiresByType image/jpeg "access plus 1 month"ExpiresByType image/gif "access plus 1 month"ExpiresByType text/html "access plus 1 hour"
</IfModule># 安全头部
<IfModule mod_headers.c>Header always set X-Content-Type-Options nosniffHeader always set X-Frame-Options SAMEORIGINHeader always set X-XSS-Protection "1; mode=block"Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule># 隐藏Apache版本
ServerTokens Prod
ServerSignature Off
EOF# 启用Apache模块和配置a2enmod expiresa2enmod headersa2enmod deflatea2enconf ocs-performance# 4. 配置PHP性能优化log_info "应用PHP额外优化配置..."local php_ini="/etc/php/8.2/apache2/php.ini"if [[ -f "$php_ini" ]]; then# 添加额外的PHP优化配置cat >> "$php_ini" << 'EOF'; OCS Inventory NG 额外优化配置
; 会话设置
session.gc_maxlifetime = 3600
session.cookie_lifetime = 0; 安全设置
expose_php = Off
allow_url_fopen = Off
allow_url_include = Off; 性能设置
realpath_cache_size = 4096K
realpath_cache_ttl = 600; OPCache设置
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 2
opcache.validate_timestamps = 1
EOFfi# 5. 创建自动备份脚本log_info "创建自动备份脚本..."cat > /usr/local/bin/ocs-backup.sh << 'EOF'
#!/bin/bash
# OCS Inventory NG 自动备份脚本BACKUP_DIR="/var/backups/ocs"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="ocsweb"# 创建备份目录
mkdir -p "$BACKUP_DIR"# 数据库备份
echo "开始数据库备份..."
mysqldump --single-transaction --routines --triggers "$DB_NAME" | gzip > "$BACKUP_DIR/ocs_db_$DATE.sql.gz"# 配置文件备份
echo "开始配置文件备份..."
tar -czf "$BACKUP_DIR/ocs_config_$DATE.tar.gz" \/etc/apache2 \/etc/mysql \/usr/share/ocsinventory-reports \/var/lib/ocsinventory-reports \2>/dev/null# 保留最近7天的备份
find "$BACKUP_DIR" -name "ocs_*" -mtime +7 -deleteecho "备份完成: $DATE"
EOFchmod +x /usr/local/bin/ocs-backup.sh# 6. 创建cron定时任务log_info "配置定时备份任务..."cat > /etc/cron.d/ocs-backup << 'EOF'
# OCS Inventory NG 每日备份
0 2 * * * root /usr/local/bin/ocs-backup.sh >> /var/log/ocs-backup.log 2>&1
EOF# 7. 配置logrotatelog_info "配置日志轮转..."cat > /etc/logrotate.d/ocs-inventory << 'EOF'
/var/log/apache2/ocs_*.log {dailymissingokrotate 52compressdelaycompressnotifemptycreate 644 www-data admpostrotatesystemctl reload apache2 > /dev/null 2>&1 || trueendscript
}/var/log/ocsinventory-server/*.log {dailymissingokrotate 30compressdelaycompressnotifemptycreate 644 www-data adm
}
EOFlog_info "自动权限和优化配置完成"
}# 重启服务
restart_services() {log_step "重启相关服务应用所有配置..."# 重启MariaDB加载新配置log_info "重启MariaDB服务..."if systemctl restart mariadb; thenlog_info "✓ MariaDB服务重启成功"elselog_error "✗ MariaDB服务重启失败"fi# 重启Apache加载新配置和模块log_info "重启Apache服务..."if systemctl restart apache2; thenlog_info "✓ Apache服务重启成功"elselog_error "✗ Apache服务重启失败"fi# 等待服务完全启动sleep 3log_info "服务重启完成,所有配置已生效"
}# 最终检查
final_check() {log_step "执行最终检查..."# 检查服务状态local services=("mariadb" "apache2")for service in "${services[@]}"; doif systemctl is-active --quiet "$service"; thenlog_info "✓ $service 服务运行正常"elselog_error "✗ $service 服务异常"fidone# 检查端口监听if netstat -tuln | grep -q ":80 "; thenlog_info "✓ Apache监听端口80正常"elselog_warning "✗ Apache端口80未监听"fiif netstat -tuln | grep -q ":3306 "; thenlog_info "✓ MariaDB监听端口3306正常"elselog_warning "✗ MariaDB端口3306未监听"fi# 检查PHPif php -v >/dev/null 2>&1; thenlog_info "✓ PHP安装正常"elselog_error "✗ PHP安装异常"fi# 检查Perlif perl -v >/dev/null 2>&1; thenlog_info "✓ Perl安装正常"elselog_error "✗ Perl安装异常"filog_info "最终检查完成"
}# 显示完成信息
show_completion_info() {local server_ip=$(hostname -I | awk '{print $1}')echoecho "========================================"echo "🎉 OCS Inventory NG 环境准备完成!"echo "========================================"echoecho "📋 环境信息:"echo "  - ✅ MariaDB 10.x 已安装并配置"echo "  - ✅ Apache 2.4 已安装并配置"echo "  - ✅ PHP 8.2 及扩展已安装"echo "  - ✅ Perl 及必要模块已安装"echo "  - ✅ OCS数据库已创建"echoecho "📦 安装文件已准备:"echo "  - OCS Server: /tmp/ocs_installation/OCSInventory-Server/"echo "  - OCS Reports: /tmp/ocs_installation/OCSInventory-ocsreports/"echo "  - ✅ Composer依赖已自动安装"echoecho "🔐 重要信息:"echo "  - MySQL root密码: ${MYSQL_ROOT_PASSWORD:-查看 /root/.my.cnf}"echo "  - OCS数据库信息: 查看 /root/ocs_db_info.txt"echo "  - 安装指导: 查看 /root/ocs_installation_guide.txt"echoecho "🚀 下一步操作:"echo "  1. 阅读安装指导: cat /root/ocs_installation_guide.txt"echo "  2. 进入Server目录: cd /tmp/ocs_installation/OCSInventory-Server"echo "  3. 运行安装脚本: ./setup.sh"echo "  4. 按照指导完成Reports组件安装"echo "  5. 访问 http://$server_ip/ocsreports 完成Web配置"echoecho "⚡ 自动优化配置:"echo "  - ✅ MariaDB性能优化已配置"echo "  - ✅ Apache性能优化已启用"echo "  - ✅ PHP OPCache已优化"echo "  - ✅ 目录权限已自动设置"echo "  - ✅ 自动备份脚本已创建 (/usr/local/bin/ocs-backup.sh)"echo "  - ✅ 定时备份任务已配置 (每日2:00AM)"echo "  - ✅ 日志轮转已配置"echoecho "📁 重要目录:"echo "  - OCS主目录: /usr/share/ocsinventory-reports"echo "  - 数据目录: /var/lib/ocsinventory-reports"echo "  - 日志目录: /var/log/ocsinventory-server"echo "  - 备份目录: /var/backups/ocs"echoecho "⚠️  安全提醒:"echo "  - 请立即更改默认admin密码"echo "  - 安装完成后删除install.php文件"echo "  - 配置防火墙和SSL证书"echo "  - 数据库已配置远程访问 (bind-address = 0.0.0.0)"echoecho "========================================="
}# 主函数
main() {echo "========================================"echo "🔧 OCS Inventory NG 环境准备脚本"echo "适用于 Debian 12"echo "========================================"echocheck_rootcheck_debian_version# 询问是否继续echo "此脚本将:"echo "1. 清理现有Web/数据库环境"echo "2. 安装MariaDB、Apache、PHP、Perl"echo "3. 配置OCS数据库"echo "4. 下载OCS-NG安装包"echo "5. 提供详细的安装指导"echoread -p "是否继续?(y/N): " -n 1 -rechoif [[ ! $REPLY =~ ^[Yy]$ ]]; thenlog_info "安装已取消"exit 0fi# 执行安装步骤configure_china_mirrorsupdate_system# 询问是否清理环境echolog_warning "检测到可能存在的旧环境,是否执行完整清理?"read -p "清理环境?(推荐) (Y/n): " -n 1 -rechoif [[ ! $REPLY =~ ^[Nn]$ ]]; thenperform_complete_cleanupfiinstall_basic_toolsinstall_mariadbinstall_apacheinstall_phpinstall_perl_modulessetup_databaseconfigure_apache_basicsconfigure_automatic_optimizationsdownload_ocs_packagescreate_installation_guiderestart_servicesfinal_checkshow_completion_infoecholog_info "环境准备完成!请按照指导文档完成OCS-NG安装。"
}# 错误处理
trap 'log_error "脚本在第$LINENO行执行失败"' ERR# 脚本入口
main "$@" 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914329.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

001_Claude开发者指南介绍

Claude开发者指南介绍 目录 Claude简介Claude 4 模型开始使用核心功能支持资源 Claude简介 Claude 是由 Anthropic 构建的高性能、可信赖和智能的 AI 平台。Claude 具备出色的语言、推理、分析和编程能力&#xff0c;可以帮助您解决各种复杂任务。 想要与 Claude 聊天吗&a…

004_Claude功能特性与API使用

Claude功能特性与API使用 目录 API 基础使用核心功能特性高级功能开发工具平台支持 API 基础使用 快速开始 通过 Anthropic Console 获取 API 访问权限&#xff1a; 在 console.anthropic.com/account/keys 生成 API 密钥使用 Workbench 在浏览器中测试 API 认证方式 H…

ReAct论文解读(1)—什么是ReAct?

什么是ReAct&#xff1f; 在大语言模型&#xff08;LLM&#xff09;领域中&#xff0c;ReAct 指的是一种结合了推理&#xff08;Reasoning&#xff09; 和行动&#xff08;Acting&#xff09; 的提示方法&#xff0c;全称是 “ReAct: Synergizing Reasoning and Acting in Lan…

【云服务器安全相关】服务器防火墙常见系统日志信息说明

目录✅ 一、防火墙日志是做什么的&#xff1f;&#x1f6e0;️ 二、常见防火墙日志信息及说明&#x1f9ea; 三、典型日志示例解析1. 被阻断的访问&#xff08;DROP&#xff09;2. 被允许的访问&#xff08;ACCEPT&#xff09;3. 被拒绝的端口访问4. 可疑端口扫描行为&#x1f…

011_视觉能力与图像处理

视觉能力与图像处理 目录 视觉能力概述支持的图像格式图像上传方式使用限制最佳实践应用场景API使用示例视觉能力概述 多模态交互 Claude 3 系列模型具备强大的视觉理解能力,可以分析和理解图像内容,实现真正的多模态AI交互。这种能力使Claude能够: 图像内容分析:理解图…

ansible自动化部署考试系统前后端分离项目

1. ✅ansible编写剧本步骤1️⃣创建roles目录结构2️⃣在group_vars/all/main.yml中定义变量列表3️⃣在tasks目录下编写tasks任务4️⃣在files目录下准备部署文件5️⃣在templates目录下创建j2模板文件6️⃣在handlers目录下编写handlers7️⃣在roles目录下编写主playbook8️⃣…

【AI论文】GLM-4.1V-Thinking:迈向具备可扩展强化学习的通用多模态推理

摘要&#xff1a;我们推出GLM-4.1V-Thinking&#xff0c;这是一款旨在推动通用多模态推理发展的视觉语言模型&#xff08;VLM&#xff09;。在本报告中&#xff0c;我们分享了在以推理为核心的训练框架开发过程中的关键发现。我们首先通过大规模预训练开发了一个具备显著潜力的…

Linux进程通信——匿名管道

目录 1、进程间通信基础概念 2、管道的工作原理 2.1 什么是管道文件 3、匿名管道的创建与使用 3.1、pipe 系统调用 3.2 父进程调用 fork() 创建子进程 3.3. 父子进程的文件描述符共享 3.4. 关闭不必要的文件描述符 3.5 父子进程通过管道进行通信 父子进程通信的具体例…

sql:sql在office中的应用有哪些?

在Office软件套件中&#xff0c;主要是Access和Excel会用到SQL&#xff08;结构化查询语言&#xff09;&#xff0c;以下是它们在这两款软件中的具体应用&#xff1a; 在Access中的应用 创建和管理数据库对象&#xff1a; 创建表&#xff1a;使用CREATE TABLE语句可以创建新的数…

零基础完全理解视觉语言模型(VLM):从理论到代码实践

本文是《从LLM到VLM&#xff1a;视觉语言模型的核心技术与Python实现》的姊妹篇&#xff0c;主要面向零基础的读者&#xff0c;希望用更通俗易懂的语言带领大家入门VLM。本教程的完整代码可以在GitHub上找到&#xff0c;如果你有任何问题或建议&#xff0c;欢迎交流讨论。 写在…

数据结构 Map和Set

文章目录&#x1f4d5;1. 二叉搜索树✏️1.1 查找操作✏️1.2 插入操作✏️1.3 删除操作&#x1f4d5;2. Map的使用✏️2.1 Map的常用方法✏️2.2 TreeMap和HashMap的区别✏️2.3 HashMap的底层实现&#x1f4d5;3. Set的使用✏️3.1 Set的常用方法✏️3.2 TreeSet和HashSet的区…

树莓派5-系统 Debian 12 开启VNC远程访问踩坑记录

简单记录一下踩坑&#xff0c;安装vnc远程访问服务并设置开机自启1.查看系统版本&#xff0c;我这里的系统版本是 12cat /etc/os-release2.安装VNC服务sudo apt install realvnc-vnc-server realvnc-vnc-viewer -y3.创建服务单元文件&#xff1a;sudo nano /etc/systemd/system…

TASK2 夏令营:用AI做带货视频评论分析

TASK2 夏令营&#xff1a;用AI做带货视频评论分析**电商评论洞察赛题&#xff1a;从Baseline到LLM进阶优化学习笔记**一、 赛题核心解读1.1. 任务链条与目标1.2. 关键挑战与评分机制二、 Baseline方案回顾与瓶颈分析2.1. Baseline技术栈2.2. 核心瓶颈三、 进阶优化策略&#xf…

Docker:安装命令笔记

目录 零、安装&#xff1a;略 一、镜像 1.0、获取镜像&#xff1a; 1.1、查看镜像&#xff1a; 1.2、删除镜像&#xff1a; 二、容器 2.0、创建并启动容器 2.1、tomcat和jdk9的“创建并启动容器”的命令 2.2、容器操作 2.3、容器日志操作 零、安装&#xff1a;略 略 …

Python七彩花朵

系列文章 序号直达链接Tkinter1Python李峋同款可写字版跳动的爱心2Python跳动的双爱心3Python蓝色跳动的爱心4Python动漫烟花5Python粒子烟花Turtle1Python满屏飘字2Python蓝色流星雨3Python金色流星雨4Python漂浮爱心5Python爱心光波①6Python爱心光波②7Python满天繁星8Pytho…

【保姆级图文详解】MCP架构(客户端-服务端)、三种方式使用MCP服务、Spring AI MCP客户端和服务端开发、MCP部署方案、MCP安全性

文章目录前言一、MCP(model context protocol)1.1、概念描述1.2、MCP作用与意义1.3、MCP架构二、使用MCP(model context protocol)2.1、云平台使用MCP2.2、软件客户端使用MCP2.3、Spring AI程序中使用MCP三、Spring AI MCP(model context protocol)开发过程3.1、MCP服务端开发3…

Linux的 iproute2 配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge)笔记250713

Linux的 iproute2 配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge&#xff09;笔记250713 在 Linux 中使用 iproute2 工具集配置网络是现代且推荐的方法&#xff0c;它取代了旧的 ifconfig、route、brctl、vconfig 等命令。iproute2 提供了统一的接口 ip …

当信任上链解码区块链溯源系统开发逻辑与产业变革

当信任上链&#xff1a;解码区块链溯源系统的开发逻辑与产业变革在上海某高端超市的进口水果区&#xff0c;消费者王女士拿起一盒车厘子&#xff0c;用手机扫描包装上的二维码&#xff0c;屏幕立刻弹出一串动态信息&#xff1a;智利瓦尔帕莱索港口的装船时间、海关清关的具体日…

可视化DIY小程序工具!开源拖拽式源码系统,自由搭建,完整的源代码包分享

温馨提示&#xff1a;文末有资源获取方式传统的小程序开发对技术要求较高&#xff0c;这使得许多非技术人员望而却步。可视化DIY小程序工具应运而生&#xff0c;它通过拖拽式操作和开源代码系统&#xff0c;极大地降低了开发门槛&#xff0c;让更多人能够快速构建个性化小程序。…

【MLLM】多模态理解GLM-4.1V-Thinking模型

note GLM-4.1V-Thinking模型引入 课程采样强化学习&#xff08;RLCS, Reinforcement Learning with Curriculum Sampling&#xff09; 策略&#xff0c;在多个复杂推理任务中实现能力突破&#xff0c;整体性能达到 10B 级别视觉语言模型的领先水平。GLM-4.1V-9B-Thinking 通过…