Ubuntu 22.04 安装 Revive Adserver 6.0.8 指南
在 Ubuntu 22.04 LTS 服务器上以 LAMP 架构完成 Revive Adserver 6.0.8 裸机安装:依赖部署、源码获取与校验、Apache 虚拟主机、Web 安装向导 curl 逐步回放、安装后验证与维护任务配置。
Ubuntu 22.04 安装 Revive Adserver 6.0.8 指南
目标:在一台 Ubuntu 22.04 LTS 服务器上,以 LAMP(Apache + MariaDB + PHP 8.1)架构完成 Revive Adserver 6.0.8 的裸机安装,覆盖依赖部署、源码获取与完整性校验、Apache 虚拟主机、Web 安装向导的 curl 逐步回放、安装后验证与周期维护任务配置。文中全部命令均在实测环境逐条执行,输出为实测回显。选型背景见本站《Revive Adserver 介绍与选型指南》。
一、环境信息
| 项目 | 内容 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS(x86_64) |
| Web 服务 | Apache 2.4.52(apt 源 apache2,mod_php 方式) |
| PHP | 8.1.2-1ubuntu2.28 |
| 数据库 | MariaDB 10.6.23 |
| 服务器地址 | 10.89.71.2(演示用内网地址,替换为你的服务器 IP) |
| Web 端口 | 8128(演示端口,生产环境可用 80/443) |
| 安装目录 | /var/www/revive-adserver |
| 访问用主机名 | 10.89.71.2(安装时用什么主机名访问,配置文件就叫什么名字,见 7.4 与第九节) |
| Apache ServerName | revive.example.com(演示域名) |
| 实测日期 | 2026-10-29 |
💡 说明:Revive Adserver 按"访问主机名"加载配置文件——本文全程用
http://10.89.71.2:8128/访问安装,因此安装向导生成的配置文件名为var/10.89.71.2.conf.php。如果你用域名访问安装,配置文件名会是var/<域名>.conf.php,后文涉及主机名参数的地方需相应替换。
二、前置条件与规划
2.1 官方最低要求
以下要求直接取证自 6.0.8 源码 lib/OA/Upgrade/EnvironmentManager.php(安装向导的系统检查就是这个类做的):
| 检查项 | 要求 | 源码依据 |
|---|---|---|
| PHP 版本 | ≥ 8.1.0 | EnvironmentManager.php 第 82 行:$this->aInfo['PHP']['expected']['version'] = '8.1.0' |
| PHP 内存限制 | memory_limit ≥ 128M | OX_getMinimumRequiredMemory() 返回 134217728(128 MB) |
| 数据库 | MySQL 系(mysqli)或 PostgreSQL | [database] type=mysqli,检查项 expected['mysql'] = true |
| PHP 扩展 | xml、pcre、zlib、spl、json、zip、tokenizer、intl | getPHPInfo() 逐一检查 extension_loaded(),另有 mysqli 单列检查项 |
| Cookie | 浏览器需支持 Cookie | 向导依赖会话维持状态 |
2.2 硬件与网络规划
- 硬件:小型站点(日百万级以下曝光)2 核 4 GB 内存即可流畅运行;源码解压后约 115 MB,磁盘预留 2 GB(含数据库与统计日志增长);
- 网络:Web 端口对用户开放(本文 8128);MariaDB 只监听本机(Ubuntu 默认
bind-address = 127.0.0.1),不给数据库账号开远程; - 如服务器启用了 ufw 防火墙,需放行 8128 端口(
ufw allow 8128/tcp)。
2.3 账号规划
| 用途 | 账号 | 演示密码 | 说明 |
|---|---|---|---|
| MariaDB 管理账号 | root | q1w2e3r4 | 仅限本机登录,用于初始化 |
| 应用数据库账号 | admin | q1w2e3r4 | Revive 运行时读写 revive_db,授权范围限定在该库 |
| 后台管理员 | admin | q1w2e3r4admin | Web 向导中创建,密码最少 12 位(见 7.5) |
⚠️ 以上均为演示密码,正式部署必须替换为强密码。特别地,后台管理员密码少于 12 位会在向导中直接被拒绝(实测见 10.6)。
三、版本选型与安装包获取
3.1 版本选择
本文安装当前最新稳定版 v6.0.8(2026-06-25 发布)。该版本集中修复了 7 个安全漏洞(CVE-2026-50739 ~ CVE-2026-50745,取证自源码包内 CHANGELOG.md),2026-06-03 的 v6.0.7 又修复过 12 个,安全修复节奏较密,务必安装最新版而不是老版本。
3.2 下载源选择与降级实录
官方下载源为 download.revive-adserver.com(提供 Revive Adserver v6.0.8.zip / .tar.gz)。实测该源在本文环境不可用,降级过程如下:
- 直连
download.revive-adserver.com:TLS 握手阶段连接被重置; - 经 HTTP 代理访问官方下载直链(带 User-Agent 与 Referer):返回
HTTP/1.1 403 Forbidden; - 降级到 GitHub 仓库的 tag 归档包(内容与官方源码一致,均为 v6.0.8 打包):
wget -O /root/revive-gh.tar.gz https://github.com/revive-adserver/revive-adserver/archive/refs/tags/v6.0.8.tar.gz
⚠️ 官方发行包与 GitHub 源码归档有两处关键差异,直接影响后面的步骤:
差异点 官方发行包 GitHub 源码归档 lib/vendor/(Composer 依赖)内置 缺失,需手工 composer install(5.2 节)var/UPGRADE(安装向导触发标记)内置 缺失,需手工创建(5.3 节),否则向导会把你 302 回登录页(10.2 节)
3.3 完整性校验
sha256sum /root/revive-gh.tar.gz
实测输出:
aec5fc342fde111f997a7b9008672f14786dcb79c779d05a247e1ef47ec035b0 /root/revive-gh.tar.gz
ls -l /root/revive-gh.tar.gz
实测输出:
-rw-r--r-- 1 root root 15906216 Oct 29 12:49 /root/revive-gh.tar.gz
四、安装 LAMP 基础环境
4.1 安装软件包
apt-get update
apt-get install -y -qq apache2 libapache2-mod-php php8.1 php8.1-mysql php8.1-gd php8.1-xml php8.1-mbstring php8.1-zip php8.1-intl php8.1-curl mariadb-server mariadb-client unzip
apt-get install -y -qq curl
apt-get install -y -qq composer
其中 composer 仅 GitHub 源码归档路径需要(5.2 节装依赖用);使用官方发行包时可不装。
版本核验(实测回显):
apache2 -v | head -1
Server version: Apache/2.4.52 (Ubuntu)
php -v | head -1
PHP 8.1.2-1ubuntu2.28 (cli) (built: Oct 19 2026 18:54:45) (NTS)
mariadb --version
mariadb Ver 15.1 Distrib 10.6.23-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
4.2 启动并设置开机自启
systemctl enable --now apache2 mariadb
systemctl is-active apache2 mariadb
实测输出:
active
active
4.3 初始化 MariaDB root 密码
Ubuntu 打包的 MariaDB 默认让 root 走 unix_socket 认证——本机 root 用户免密直连。先用免密通道进入,再设置密码:
mysql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'q1w2e3r4';
FLUSH PRIVILEGES;
EXIT;
设置完成后用密码登录核验(实测回显):
mysql -uroot -pq1w2e3r4 -N -e "SELECT VERSION();"
10.6.23-MariaDB-0ubuntu0.22.04.1
4.4 创建业务库与专用账号
Revive 安装向导会真实用你填写的账号去连接数据库建表,所以要提前把库和账号建好(用 root 执行):
mysql -uroot -pq1w2e3r4
CREATE DATABASE revive_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'q1w2e3r4';
GRANT ALL ON revive_db.* TO 'admin'@'localhost';
FLUSH PRIVILEGES;
授权核验(实测回显,第一行的哈希即演示密码 q1w2e3r4 的密文):
mysql -uroot -pq1w2e3r4 -N -e "SHOW GRANTS FOR 'admin'@'localhost'"
GRANT USAGE ON *.* TO `admin`@`localhost` IDENTIFIED BY PASSWORD '*0971389F8E7F1AEB999104BDA7A0FA145087F348'
GRANT ALL PRIVILEGES ON `revive_db`.* TO `admin`@`localhost`
库清单核验(实测回显):
mysql -uroot -pq1w2e3r4 -N -e "SHOW DATABASES"
information_schema
mysql
performance_schema
revive_db
sys
五、部署 Revive Adserver 源码
5.1 解压源码到 /var/www/revive-adserver
GitHub 归档带一层 revive-adserver-6.0.8/ 顶层目录,用 --strip-components=1 去掉:
mkdir -p /var/www/revive-adserver
tar -xzf /root/revive-gh.tar.gz -C /var/www/revive-adserver --strip-components=1
ls -ld /var/www/revive-adserver
实测输出:
drwxrwxr-x 13 root root 4096 Oct 29 12:49 /var/www/revive-adserver
顶层内容抽验(实测回显):
ls /var/www/revive-adserver | head -14
CHANGELOG.md
COPYRIGHT.txt
LICENSE.txt
README.md
RELEASE_NOTES.txt
SECURITY.md
adclick.php
adframe.php
adimage.php
adjs.php
adlayer.php
adpopup.php
adview.php
adx.js
5.2 安装 Composer 依赖(GitHub 归档路径必做)
GitHub 归档不含 lib/vendor/,直接启动 Web 服务会 500(实测排障见 10.3)。用 apt 安装的 Composer 补齐生产依赖:
composer --version
实测输出:
Composer 2.2.6 2022-02-04 17:00:38
cd /var/www/revive-adserver
composer install --no-dev --no-interaction --no-progress
依赖被安装到 lib/vendor/(由项目根 composer.json 的 vendor-dir 指定),并会自动拷贝 tinymce、zxcvbn 等前端资产。过程中会有一条 sinergi/browser-detector 软件包被弃用(abandoned)的提示,属上游已知情况,可忽略。
核验自动加载文件就位(实测回显):
ls -l /var/www/revive-adserver/lib/vendor/autoload.php
-rw-r--r-- 1 root root 178 Oct 29 12:52 /var/www/revive-adserver/lib/vendor/autoload.php
5.3 创建安装触发标记与目录授权
两件事:补上官方包内置而 GitHub 归档缺失的 var/UPGRADE 标记;把向导要求可写的目录交给 Apache 运行用户 www-data:
touch /var/www/revive-adserver/var/UPGRADE
chown -R www-data:www-data /var/www/revive-adserver/var
chown -R www-data:www-data /var/www/revive-adserver/plugins
chown -R www-data:www-data /var/www/revive-adserver/www/images
chown -R www-data:www-data /var/www/revive-adserver/www/admin/plugins
💡 原理:安装向导启动前检查
var/UPGRADE是否存在(lib/OX/Admin/UI/Install/InstallController.php第 80 行),不存在则直接 302 重定向回后台登录页,表现为"永远进不去向导"(10.2 节);系统检查则对var/、plugins/、www/admin/plugins/、www/images/四个位置做递归可写检查,任何一处不可写都会拦住流程(10.4 节)。
六、配置 Apache 虚拟主机
创建 /etc/apache2/sites-available/revive-adserver.conf:
<VirtualHost *:8128>
ServerName revive.example.com
DocumentRoot /var/www/revive-adserver/www
<Directory /var/www/revive-adserver/www>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/revive-error.log
CustomLog ${APACHE_LOG_DIR}/revive-access.log combined
</VirtualHost>
要点:
DocumentRoot必须指向源码的www/子目录(不是源码根目录),后台入口是/admin/,投递入口是/delivery/;AllowOverride All让源码内置的.htaccess生效(var/目录靠它拒绝外部直连);- 监听端口
*:8128需确保/etc/apache2/ports.conf里有对应Listen 8128。
启用站点并重载(注意 Listen 8128 修改过 ports.conf 时需 systemctl restart apache2):
a2ensite revive-adserver
systemctl reload apache2
apache2ctl -S 2>&1 | grep 8128
实测输出:
*:8128 revive.example.com (/etc/apache2/sites-enabled/revive-adserver.conf:1)
七、运行 Web 安装向导(curl 逐步回放)
向导入口为 http://10.89.71.2:8128/admin/install.php。浏览器中按页面按钮即可;本章用 curl 逐步回放整个流程(向导状态存在会话里,curl 必须全程使用同一个 cookie jar)。表单提交采用"POST 成功 → 302 跳下一步"的模式。
7.1 第 1 步:Welcome(接受许可)
rm -f /tmp/wizard.jar
curl -s -c /tmp/wizard.jar -o /tmp/step1.html -w "GET action=welcome -> %{http_code}\n" "http://10.89.71.2:8128/admin/install.php?action=welcome"
实测输出:
GET action=welcome -> 200
页面标题与欢迎语(实测回显):
<title>Revive Adserver - Installing Revive Adserver 6.0.8</title>
<h2>Welcome to Revive Adserver 6.0.8</h2>
该页内嵌 GNU GENERAL PUBLIC LICENSE v2 全文,表单只有一个隐藏域 action=welcome 和提交按钮 continue(页面文案 "I Agree »")。提交:
curl -s -b /tmp/wizard.jar -c /tmp/wizard.jar -o /dev/null -w "POST agree -> %{http_code} loc=%{redirect_url}\n" --data-urlencode "action=welcome" --data-urlencode "continue=I Agree »" "http://10.89.71.2:8128/admin/install.php"
实测输出:
POST agree -> 302 loc=http://10.89.71.2:8128/admin/install.php?action=check
7.2 第 2 步:System check(系统检查)
curl -s -b /tmp/wizard.jar -c /tmp/wizard.jar -o /tmp/step2.html -w "GET check -> %{http_code} loc=%{redirect_url}\n" "http://10.89.71.2:8128/admin/install.php?action=check"
实测输出(检查全部通过时直接 302 进入下一步):
GET check -> 302 loc=http://10.89.71.2:8128/admin/install.php?action=database
该页按四组展示:Browser Cookies、PHP Configuration(实测 13 项 OK)、File Permissions(var/、plugins/、www/admin/plugins/、www/images/ 四处递归可写检查)、Previous version。任何一组有错误,页面会停留并给出修复命令(实测页面原文:chmod -R a+w /var/www/revive-adserver/var——生产环境更推荐按 5.3 节 chown 给 www-data,而不是 a+w 放开全局写)。若想再看一眼检查页,处理完问题后带 action=check 重新 GET 即可重跑检查。
7.3 第 3 步:Provide your database(数据库)
curl -s -b /tmp/wizard.jar -c /tmp/wizard.jar -o /tmp/step3.html -w "GET database -> %{http_code}\n" "http://10.89.71.2:8128/admin/install.php?action=database"
实测输出:
GET database -> 200
表单字段(实测抓取):
| 字段 | 填写值 | 说明 |
|---|---|---|
| dbType | mysqli | 下拉可选项仅 mysqli |
| dbHost | localhost | 数据库地址 |
| dbName | revive_db | 4.4 节创建的库 |
| dbUser / dbPassword | admin / q1w2e3r4 | 向导会真实拿它连接测试 |
| dbPort | 3306 | |
| dbTableType | INNODB | 另有 MYISAM 可选 |
| dbTablePrefix | rv_ | 表前缀,保持默认 |
提交(实测回显):
curl -s -b /tmp/wizard.jar -c /tmp/wizard.jar -o /dev/null -w "POST database -> %{http_code} loc=%{redirect_url}\n" --data-urlencode "_qf__install-db-form=1" --data-urlencode "action=database" --data-urlencode "dbType=mysqli" --data-urlencode "dbHost=localhost" --data-urlencode "dbName=revive_db" --data-urlencode "dbUser=admin" --data-urlencode "dbPassword=q1w2e3r4" --data-urlencode "dbLocal=0" --data-urlencode "dbPort=3306" --data-urlencode "dbTableType=INNODB" --data-urlencode "dbTablePrefix=rv_" --data-urlencode "save=Continue »" "http://10.89.71.2:8128/admin/install.php"
POST database -> 302 loc=http://10.89.71.2:8128/admin/install.php?action=configuration
这一步通过后,安装日志 var/install.log 已开始记录(实测回显):
Installation started 2026-10-29 13:26:32
Attempting to connect to database revive_db with user admin
Connected to database revive_db
Database settings and permissions are OK
7.4 第 4 步:管理员配置(Configuration)
curl -s -b /tmp/wizard.jar -c /tmp/wizard.jar -o /tmp/step4.html -w "GET configuration -> %{http_code}\n" "http://10.89.71.2:8128/admin/install.php?action=configuration"
实测输出:
GET configuration -> 200
表单字段(实测抓取):
| 字段 | 填写值 | 说明 |
|---|---|---|
| adminName | admin | 后台管理员用户名 |
| adminPassword / adminPassword2 | q1w2e3r4admin | 最少 12 位(见 10.6) |
| adminEmail | admin@example.com | 接收系统通知 |
| adminLanguage | en | 界面语言 |
| prefsTimezone | UTC | 时区偏好,按需选 Asia/Shanghai |
| webpathAdmin / webpathDelivery / webpathImages | 10.89.71.2/admin 等 | 自动探测(依据你访问用的主机名),保持默认 |
| storeWebDir | /var/www/revive-adserver/www/images | 素材存储目录,保持默认 |
💡 注意 webpath 自动探测的规律:你用
http://10.89.71.2:8128/访问向导,探测结果就是10.89.71.2/admin。它同时决定了配置文件名(var/10.89.71.2.conf.php)和 CLI 工具的 host 参数(第九节),所以安装时就定好用 IP 还是域名访问,之后保持一致。
提交(实测回显):
curl -s -b /tmp/wizard.jar -c /tmp/wizard.jar -o /dev/null -w "POST configuration -> %{http_code} loc=%{redirect_url}\n" --data-urlencode "_qf__install-config-form=1" --data-urlencode "action=configuration" --data-urlencode "moreFieldsShown=0" --data-urlencode "adminName=admin" --data-urlencode "adminPassword=q1w2e3r4admin" --data-urlencode "adminPassword2=q1w2e3r4admin" --data-urlencode "adminEmail=admin@example.com" --data-urlencode "adminLanguage=en" --data-urlencode "prefsTimezone=UTC" --data-urlencode "requireSSL=0" --data-urlencode "webpathAdmin=10.89.71.2/admin" --data-urlencode "webpathDelivery=10.89.71.2/delivery" --data-urlencode "webpathImages=10.89.71.2/images" --data-urlencode "webpathDeliverySSL=10.89.71.2/delivery" --data-urlencode "webpathImagesSSL=10.89.71.2/images" --data-urlencode "storeWebDir=/var/www/revive-adserver/www/images" --data-urlencode "save=Continue »" "http://10.89.71.2:8128/admin/install.php"
POST configuration -> 302 loc=http://10.89.71.2:8128/admin/install.php?action=jobs
7.5 第 5 步:执行安装任务(Performing installation tasks)
curl -s -b /tmp/wizard.jar -c /tmp/wizard.jar -o /tmp/step5.html -w "GET jobs -> %{http_code}\n" "http://10.89.71.2:8128/admin/install.php?action=jobs"
实测输出:
GET jobs -> 200
页面标题 Performing installation tasks,内嵌一个任务队列:先建核心表,再按顺序安装 10 个插件。浏览器会自动逐个执行;curl 下手工逐个请求即可。任务清单(实测抓取自页面):
install-plugin.php?status=0&plugin=openXBannerTypes
install-plugin.php?status=0&plugin=openXDeliveryLimitations
install-plugin.php?status=0&plugin=openXReports
install-plugin.php?status=0&plugin=openXDeliveryCacheStore
install-plugin.php?status=0&plugin=openXInvocationTags
install-plugin.php?status=0&plugin=openXDeliveryLog
install-plugin.php?status=0&plugin=openXVideoAds
install-plugin.php?status=0&plugin=reviveMailer
install-plugin.php?status=0&plugin=reviveMaxMindGeoIP2
install-plugin.php?status=0&plugin=apVideo
逐个执行(实测回显):
for P in openXBannerTypes openXDeliveryLimitations openXReports openXDeliveryCacheStore openXInvocationTags openXDeliveryLog openXVideoAds reviveMailer reviveMaxMindGeoIP2 apVideo; do
curl -s -b /tmp/wizard.jar -c /tmp/wizard.jar "http://10.89.71.2:8128/admin/install-plugin.php?status=0&plugin=$P" | grep -oE '"status":"[^"]*"'
done
"status":"<br \/>OK"
"status":"<br \/>OK"
"status":"<br \/>OK"
"status":"<br \/>OK"
"status":"<br \/>OK"
"status":"<br \/>OK"
"status":"<br \/>OK"
"status":"<br \/>OK"
"status":"<br \/>OK"
"status":"<br \/>OK"
10 个插件全部安装成功(含 Banner 类型、投递规则、投递缓存、调用标签、投递日志、IAB VAST、邮件、MaxMind GeoIP2 等)。
7.6 第 6 步:Finish(完成)
curl -s -b /tmp/wizard.jar -c /tmp/wizard.jar -o /tmp/step6.html -w "GET finish -> %{http_code}\n" "http://10.89.71.2:8128/admin/install.php?action=finish"
实测输出:
GET finish -> 200
finish 动作会自动完成三件事(实测核验):创建安装完成标记 var/INSTALLED;删除 var/UPGRADE 触发标记;在 var/default.conf.php 写入指向实际配置的 realConfig 指针。此后再访问 install.php 会被视为"已安装"而重定向走——向导只运行这一次。
7.7 安装日志全文
var/install.log 全文(实测回显,可看到建表、schema 版本 628、应用版本 6.0.8 与时区设置):
Installation started 2026-10-29 13:26:32
Attempting to connect to database revive_db with user admin
Connected to database revive_db
Database settings and permissions are OK
creating upgrade_action audit table
successfully created upgrade_action audit table
creating database_action audit table
successfully created database_action audit table
schema definition from cache TRUE
Installation created the core tables
Installation updated the schema version to 628
Installation updated the application version to 6.0.8
Preparing to set timezone preference...
Found timezone preference ID of 16
Found the admin account's timezone association, updating preference...
Updated the admin account timezone preference to: 'UTC'
Starting file-check for plugins...
Finished file-check for plugins
八、安装后验证
8.1 安装产物核验
ls /var/www/revive-adserver/var/
实测输出:
10.89.71.2.conf.php
INSTALLED
debug.log
default.conf.php
install.log
10.89.71.2.conf.php 即全局配置文件(参数详解见本站《Revive Adserver 6.0.8 配置参数详解》)。
8.2 数据库核验
mysql -uroot -pq1w2e3r4 -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='revive_db'"
实测输出:
58
58 张表 = 核心表 + 10 个插件的表(含 IAB VAST 插件的 rv_ext_ap_video、rv_stats_vast、rv_banner_vast_element 与 rv_data_bkt_* 系列)。版本记录核验(实测回显):
mysql -uroot -pq1w2e3r4 -N -e "SELECT value FROM revive_db.rv_application_variable WHERE name='oa_version'"
6.0.8
8.3 后台登录核验(curl 完整流程)
后台登录页有一个 oa_cookiecheck 隐藏域防 CSRF,curl 需先 GET 拿 token 再提交:
rm -f /tmp/login.jar
TOKEN=$(curl -s -c /tmp/login.jar http://10.89.71.2:8128/admin/index.php | grep -oP 'oa_cookiecheck" value="\K[0-9a-f]{32}')
echo "token=$TOKEN"
实测输出:
token=e9c50c8089f790c3f213c0fb0ea9c525
curl -s -b /tmp/login.jar -c /tmp/login.jar -o /dev/null -w "POST login -> %{http_code} loc=%{redirect_url}\n" --data-urlencode "oa_cookiecheck=$TOKEN" --data-urlencode "username=admin" --data-urlencode "password=q1w2e3r4admin" --data-urlencode "login=Login" http://10.89.71.2:8128/admin/index.php
curl -s -b /tmp/login.jar http://10.89.71.2:8128/admin/dashboard.php | grep -o "<title>[^<]*</title>"
实测输出:
POST login -> 302 loc=http://10.89.71.2/admin/dashboard.php
<title>Revive Adserver - Home</title>
8.4 投递端点核验
curl -s -o /dev/null -w "GET /delivery/avw.php -> %{http_code}\n" http://10.89.71.2:8128/delivery/avw.php
实测输出:
GET /delivery/avw.php -> 200
投递端点正常响应即 HTTP 链路与投递引擎就绪(avw.php 是广告展示调用端点,此刻尚无广告活动,返回空白页属正常)。
九、配置周期维护任务
Revive 的统计汇总、过期数据清理、优先级计算都由维护脚本完成,不配 cron 统计报表会一直空着。入口脚本为 scripts/maintenance/maintenance.php(源码内另有 maintenance/maintenance.php 旧路径,内容等价,推荐用 scripts 路径)。
后台会在"计划维护超过 1 小时未运行"时给出告警(源码 www/admin/maintenance-maintenance.php 的判定逻辑),因此推荐按小时调度。用 www-data 身份配置系统 cron:
crontab -u www-data -e
加入:
0 * * * * php /var/www/revive-adserver/scripts/maintenance/maintenance.php 10.89.71.2
两个要点:
- host 参数不可省:CLI 方式运行必须把"安装时访问用的主机名"作为第一个参数传入(这里实测传
10.89.71.2,与配置文件var/10.89.71.2.conf.php同名)。缺参时脚本直接报错退出,实测报错原文为Revive Adserver was called via the command line, but had no host as a parameter(排障细节见本站《Revive Adserver 6.0.8 常用 CLI 命令与工具详解》); - 运行身份用 www-data:若用 root 跑,会在
var/cache/下生成 root 属主的缓存文件,导致下次系统检查把整个var/判为不可写(实测排障见 10.7)。
没有 cron 的环境(如部分受限面板主机)可退而求其次,在配置文件 [maintenance] 段开启 autoMaintenance=true,由投递端点在响应间隙顺带触发维护;有 cron 就不要依赖它。
十、常见问题与排障实录
以下问题全部在实测中真实遇到,按"现象 → 原因 → 处理"沉淀。
10.1 官方下载源 403 / 连接重置
- 现象:直连
download.revive-adserver.comTLS 握手被重置;经代理带 UA/Referer 访问官方直链返回 403 Forbidden; - 原因:官方下载源对部分网络环境/代理出口做了限制;
- 处理:改用 GitHub tag 归档(3.2 节),并按 5.2、5.3 补齐 vendor 与 UPGRADE 两处差异。
10.2 访问 install.php 被重定向回后台登录页
- 现象:
curl -I http://<host>:8128/admin/install.php返回302 Found+Location: /admin/index.php,浏览器里"永远进不去向导"; - 原因:
var/UPGRADE标记文件不存在。向导在每次请求时检查该文件(InstallController.php 第 80 行),缺失即 302 回登录页;正常安装完成后 finish 步骤会自动删除它,所以"装完后再访问"也复位向此现象,属预期行为; - 处理:需要(重)运行向导时
touch /var/www/revive-adserver/var/UPGRADE && chown www-data:www-data /var/www/revive-adserver/var/UPGRADE。
10.3 打开首页 500,日志报 lib/vendor/autoload.php 缺失
- 现象:Apache 访问任意页面 500,错误日志指向
lib/vendor/autoload.php不存在; - 原因:使用 GitHub 源码归档安装,未安装 Composer 依赖;
- 处理:5.2 节
composer install --no-dev --no-interaction --no-progress。官方发行包无此问题。
10.4 系统检查报目录 NOT writeable
- 现象:向导 System check 的 File Permissions 组报错,无法继续;
- 原因:实测遇到两类——全新环境漏做
chown www-data(plugins、www/admin/plugins、www/images 三处最常见);以及曾在命令行以 root 运行过 Revive 脚本,var/cache/里留下 root 属主缓存文件,递归检查把整个 var/ 判为不可写(页面实测回显:/var/www/revive-adserver/var Directory must be writeable NOT writeable); - 处理:前者按 5.3 节补 chown;后者
chown -R www-data:www-data /var/www/revive-adserver/var。页面建议的chmod -R a+w ...虽然有效,但生产环境建议保持属主方案。
10.5 数据库步骤报 Access denied
- 现象:向导第 3 步提交后报数据库连接失败;
- 原因:向导会用表单里的账号真实连接数据库做权限与建表预检,账号不存在/密码不对/未授权到目标库都会失败。用错误账号可稳定复现底层报错(实测回显):
mysql -h localhost -u revive_wrong -pwrongpass -e "SELECT 1"
ERROR 1045 (28000): Access denied for user 'revive_wrong'@'localhost' (using password: YES)
- 处理:按 4.4 节先建库、建账号、授权,再回向导重填。
10.6 管理员密码 Too short
- 现象:第 4 步提交后密码框标红
Too short,无法进入下一步; - 原因:6.0.8 强制后台密码最少 12 位(页面校验规则实测原文:
"adminPassword": { "required": true, "minLength": 12 },服务端常量见lib/OA/Auth.php的DEFAULT_MIN_PASSWORD_LENGTH = 12); - 处理:使用 ≥12 位密码(本文演示密码 q1w2e3r4admin 即 12 位)。
10.7 命令行工具报"no host as a parameter"
- 现象:
php scripts/maintenance/maintenance.php直接退出; - 实测报错原文:
Revive Adserver was called via the command line, but had no host as a parameter
- 原因:CLI 入口(
init-parse.php)从$GLOBALS['argv'][1]取主机名并加载同名配置文件,缺参即退出; - 处理:
php scripts/maintenance/maintenance.php 10.89.71.2(host 与配置文件名一致)。完整脚本族用法见本站《Revive Adserver 6.0.8 常用 CLI 命令与工具详解》。
十一、卸载与清理
按依赖关系逆序拆除:
# 1. 移除维护任务
crontab -u www-data -r
# 2. 停用并删除虚拟主机配置
a2dissite revive-adserver
rm /etc/apache2/sites-available/revive-adserver.conf
systemctl reload apache2
# 3. 删除源码目录
rm -rf /var/www/revive-adserver
# 4. 删除数据库与专用账号(root 执行)
mysql -uroot -pq1w2e3r4
DROP DATABASE revive_db;
DROP USER 'admin'@'localhost';
FLUSH PRIVILEGES;
如需把 LAMP 全套也卸掉:apt-get purge apache2 mariadb-server 'php8.1*' && apt-get autoremove(会连带删除 PHP 与数据库,确认无其他业务再用再执行;purge 不会自动删除 /var/lib/mysql 数据目录,需手动清理)。
十二、参考链接
- 选型与背景:本站《Revive Adserver 介绍与选型指南》
- 配置参数:本站《Revive Adserver 6.0.8 配置参数详解》
- 运维命令:本站《Revive Adserver 6.0.8 常用 CLI 命令与工具详解》
- 官网下载页:https://www.revive-adserver.com/download/
- 官方安装文档:https://www.revive-adserver.com/docs/installation/
- v6.0.8 源码归档(本文所用):https://github.com/revive-adserver/revive-adserver/archive/refs/tags/v6.0.8.tar.gz
- GitHub 仓库:https://github.com/revive-adserver/revive-adserver