当前位置: 首页 > news >正文

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.xdnf.cn/news/1101457.html

相关文章:

  • 老系统改造增加初始化,自动化数据源配置(tomcat+jsp+springmvc)
  • JVM--监控和故障处理工具
  • 正义的算法迷宫—人工智能重构司法体系的技术悖论与文明试炼
  • 区块链应用场景深度解读:从金融革命到社会治理的全方位革新
  • spark3 streaming 读kafka写es
  • 使用浏览器inspect调试wx小程序
  • 【HTML】俄罗斯方块(精美版)
  • AI产品经理面试宝典第7天:核心算法面试题-上
  • GPT3/chatGPT/T5/PaLM/LLaMA/GLM主流大语言模型的原理和差异
  • flutter redux状态管理
  • 文章发布易优CMS(Eyoucms)网站技巧
  • oracle
  • 【InnoDB存储引擎4】行结构
  • PDF转图片
  • 2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛-B题 疾病的预测与大数据分析
  • 滑动窗口-3.无重复字符的最长子串-力扣(LeetCode)
  • 使用Python和AkShare轻松获取新闻联播文字稿:从数据获取到文本挖掘
  • vue3+ts div自由拖拽改变元素宽度
  • C++——构造函数的补充:初始化列表
  • UML 与 SysML 图表对比全解析:软件工程 vs 系统工程建模语言
  • ContextMenu的Item如何绑定命令
  • “28项评测23项SOTA——GLM-4.1V-9B-Thinking本地部署教程:10B级视觉语言模型的性能天花板!
  • 【AI大模型】BERT微调文本分类任务实战
  • 拼数(字符串排序)
  • 力扣面试150(29/100)
  • 问题 C: 为美好的世界献上爆炎(博弈论)
  • 如何在 Windows 10 上安装设置 Apache Kafka
  • 聊聊AI大模型的上下文工程(Context Engineering)
  • 你见过的最差的程序员是怎样的?
  • Redis底层数据结构