🤔 為什么有了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 server | localhost |
MySQL user | ocs |
MySQL password | OcsPass123! |
Name of Database | ocsweb |
MySQL Port | 3306 |
- 數據庫連接測試成功
- 數據庫表結構創建完成
步驟 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/
🎯 下一步建議
- 客戶端部署:下載并部署 OCS Agent 到需要監控的計算機
- 網絡發現:配置 IP 網段發現
- 定制化:根據需要配置標簽、分組等
- 監控告警:配置日志監控和告警
- SSL 證書:配置正式的 SSL 證書
- 注意事項: Aget客戶端提交數據服務端無法接收,是perl的處理結果寫入數據的配置文件異常,請修改如下路徑的數據庫部分密碼與數據庫密碼一致:
vim /etc/apache2/conf-available/z-ocsinventory-server.conf
vim /etc/apache2/conf-available/zz-ocsinventory-restapi.conf
- 客戶端封裝 : 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連接
-
啟用插件
GLPI → 設置 → 插件 → OCS Inventory NG → 安裝 → 啟用
-
配置連接
設置 → 插件 → OCS Inventory NG → 配置添加OCSNG服務器: - 服務器名稱:OCS-NG主服務器 - 數據庫主機:192.168.1.100 - 數據庫名:ocsweb - 數據庫用戶:ocs_glpi_user - 數據庫密碼:secure_password_123
-
測試連接
點擊"測試連接"按鈕,確保連接成功
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 "$@"