自动方式:从个人中心运行一个脚本即可完成整台服务器的准备工作 (Apache + PHP 网络栈、数据库、安全工具、cron)。之后只需 部署面板、签发 SSL 并输入许可证。适用于 Ubuntu/Debian:在全新 VPS 上从零配置一切,在已配置好的服务器上则仅做增量改动(配置文件“已配置服务器”,步骤 01)。 下方所有命令均按顺序排列,从上往下依次操作即可。在全新 VPS 上,每一步都可以逐一执行; 如果服务器已经配置过,或者上面装有主机控制面板,脚本会有意将一部分工作留给您—— 具体是哪些,它会在运行结束时写明(输出内容的解读见步骤 01)。
monitor.example.com 是您的域名;203.0.113.10 是服务器的真实 IP;/var/www/monitor 是面板根目录(存放 public/、assets/、config.php 的位置);数据库密码请自行设置。
jail.local)、root 的 crontab、UFW 规则、Apache 配置。如果服务器已经配置好(有正在运行的面板、网站、邮件、自定义 jail),请选择“已配置服务器”配置文件:它只做增量改动,不会触碰您的防火墙、Fail2ban、邮件、SSH 和 sysctl。当检测到主机控制面板时,脚本会自动切换到此模式。首次运行前可以开启试运行(在个人中心勾选)——它会显示将执行哪些操作,而不做任何更改。在生产服务器上,建议先创建一个快照(snapshot)以防万一。
my.arciveo.com → “服务器配置”板块中获取(订购 Arcivéo Security Monitor 后即可使用)。它与您的账户绑定,并包含专属令牌。
该脚本会准备好整台服务器:Web 栈(Apache + PHP)、数据库、SSL 工具、完整的防护组件以及 cron 任务(Lynis、SMART、debsums、Logwatch、每日报告、ipsum 更新)。
1)选择防护级别(在个人中心中,复制命令前):
2)在服务器上以 root 身份执行个人中心中的命令——它形如:
3)请阅读结尾处的输出——那里写明了还有哪些工作需要您完成。脚本会以一段检查结果和一份“接下来——安装面板”的清单结束运行。其中一部分步骤它是有意不做的:具体是哪些,取决于所选的配置文件以及它在服务器上发现的情况。请对照下方清单——只需执行那些在您的输出中确实出现了对应行的条目。
Control panel detected (…) —— 站点由主机控制面板自身创建,脚本不会创建虚拟主机。请见步骤 03 的“带主机控制面板的服务器”分支。No vhost created (no domain given) —— “已配置服务器”配置文件且未提供域名:没有名称的虚拟主机会成为默认站点并抢占您自己的站点,因此脚本没有创建它。请见步骤 03 的“手动创建虚拟主机”分支。sudo rules NOT written —— 脚本无法确定面板运行在哪个账户下。这是常见情况:面板文件是在自动配置之后才上传的,当时还没有可供判断的依据。缺少这些规则,各模块将读取不到系统数据。请见步骤 04 的“Web 服务器的 sudo”板块。! Nginx does not read .htaccess —— Apache 前面还有一层 Nginx,而自动把禁止规则写入其配置未能成功。请务必手动完成:否则 data/、keys/、database/ 和 config.php 会绕过 .htaccess 直接对外开放。请见步骤 03 的“如果 Apache 前面有 Nginx”板块。UFW installed but inactive —— 防火墙已安装但未启用:在已配置好的服务器上,脚本不会自行启用它,以免切断您的访问。请自行启用,并务必放行您的 SSH 端口:
Fail2ban installed but not running —— 请启动它:sudo systemctl enable --now fail2ban。Database server present … but not running —— 请在步骤 04 之前启动数据库服务:sudo systemctl enable --now mariadb(或 mysql——取决于所安装的版本)。Certbot skipped — issue SSL in … —— 证书由主机控制面板中的 Let's Encrypt 开关签发;您无需执行步骤 06。All checks passed。带 ! 的条目需要留意;详细信息会写入日志,脚本会在最末尾打印日志路径(Log: …)。
要通过类似 monitor.example.com 的地址访问面板并获取免费 SSL,域名必须指向服务器。请在 DNS 管理面板(域名注册商或主机商处)创建一条 A 记录:
几分钟后(有时需要一小时),请检查域名是否已指向服务器:
/var/www/monitor 并配置好 Apache 站点(DocumentRoot 指向面板根目录、PHP-FPM、为 .htaccess 设置 AllowOverride)。在脚本输出中对应的是 vhost … → DocumentRoot … 这一行。无需另行创建目录和虚拟主机——只需上传文件并设置权限。
“带主机控制面板的服务器”分支(输出中为:Control panel detected (…))。这类服务器上的站点由面板统一管理,脚本有意不创建自己的虚拟主机——面板首次重建配置时就会把它覆盖掉。操作顺序如下:
public_html 中:除 index.php、api/、assets/ 外,服务性的 config.php、includes/、data/、tmp/、logs/、keys/、cron/、database/ 也应放在同级目录中。无需把任何内容移到网站根目录之外:服务性目录已由发行版自带的 .htaccess 保护,在 Nginx 下则由脚本写入域名配置的禁止规则保护。config.php(步骤 05)。请把命令中的路径替换为 /home/账号/web/域名/public_html,并把属主替换为该域名的用户,而不是 www-data。“手动创建虚拟主机”分支(输出中为:No vhost created (no domain given))。这只会出现在“已配置服务器”配置文件且未传入域名的情况下。最简单的办法是带上域名重新执行个人中心里的命令:
重复运行是安全的:已完成的操作不会重复执行。如果确实需要手动创建虚拟主机——下面就是安装程序所写入的同一份配置:
ServerName 是必需的。没有名称的虚拟主机会成为 Apache 的默认站点,并开始响应同一台服务器上其他域名的请求。出于同样的原因,在已配置好的服务器上请不要停用 000-default.conf:该站点有可能已被改造成某个正在使用的站点——在全新 VPS 上安装程序会自行移除它,而这里不需要这么做。
! Nginx does not read .htaccess)。Nginx 直接从磁盘返回静态文件,并且不读取 .htaccess——即便 Apache 已正确保护,服务性目录仍会对外开放。脚本已预先准备好一份包含禁止规则的文件;需要把它引入您站点的 server{} 块中并重新加载 Nginx:
my.arciveo.com 的个人中心 → “下载”下载面板文件(发行版压缩包)。上传到服务器前请先解压。
请将发行版内容上传到 /var/www/monitor(使 public/、assets/、config.php 等位于其中)——通过 SFTP/SCP(FileZilla / WinSCP)或从本地计算机执行 scp 命令:
ServerName),可在步骤 01 就将其传入自动配置命令:… | sudo bash -s -- monitor.example.com(或在个人中心的“面板域名”字段中填写域名)。若未传入域名——面板会响应任意主机和 IP 访问,而 ServerName 将在签发 SSL 时由 certbot 写入(步骤 06);无需重新安装任何内容。
root 身份或通过 SFTP 上传,文件将归 root 所有,Web 服务器(www-data)将无法读取——面板会打开为空白页或出现 403 错误(日志中:.htaccess unreadable / directory not executable)。下面的命令可修复此问题:
为自己开通 SFTP 上传权限。执行上面的命令后,所有文件都归 www-data 所有,而 FileZilla / WinSCP 是以您自己的用户连接的——上传时会报 SSH_FX_PERMISSION_DENIED(Permission denied)。请从以下两种方案中选择一种。
方案 A——仅为您的用户设置 ACL(推荐)。只有您获得写入权限,Web 服务器仍然无法覆盖面板代码:
方案 B——通过 www-data 组。更简单,但 Web 服务器同样获得对面板文件的写入权限:一旦 PHP 出现漏洞,代码就可能被替换。命令顺序很重要——config.php 和工作目录最后收紧:
id deploy,组列表中应出现 www-data;ls -ld /var/www/monitor,权限为 drwxrwsr-x,用 s 代替 x 表示 setgid 已设置。
请先创建数据库和用户,然后导入表结构。数据库代码块整体粘贴到终端即可(sudo mysql 通过 unix 套接字以 root 身份登录——无需 root 密码)。monitor_db 和 monitor_user 仅为示例名称,您可自定义;请记住数据库名、用户名和密码——下一步需要填入 config.php:
admin 账户(来自 database/db.sql)。
如果数据表没有创建成功(面板显示数据库连接错误,或本应是登录表单的位置是一片空白)——请手动导入表结构。命令需在面板根目录下执行,取值来自上面的代码块:
$DBNAME / $DBUSER / $DBPASS 这几个变量已经“失效”(换了新的终端会话)——请在命令中手动填入实际值,或用上面代码块中的那三行重新设置一遍。
sudo rules NOT written 这一行——说明当时没有依据可以判定面板账户(文件尚未上传),因此规则并未创建。缺少它们,防火墙、Fail2ban、CrowdSec 等板块会一直是空的。现在文件已经就位,请重新执行个人中心里的命令,并显式指明账户:
www-data 替换为您站点的 PHP 实际运行用户(在主机控制面板上通常是该域名的属主)。可以这样查看:
/etc/sudoers.d/monitor 存在,且其中含有带您用户名的条目。
面板根目录下的 config.php(/var/www/monitor/config.php)是唯一需要手动编辑的文件。面板的所有设置都以 define() 常量的形式定义在其中。用编辑器打开它:
在有高亮的地方填入您自己的值,其余保持原样:
需要修改的内容:
DB_NAME、DB_USER、DB_PASS —— 与您在第 04 步创建数据库时设置的库名、用户和密码完全一致(若保留了示例值 —— monitor_db / monitor_user)。请勿改动 DB_HOST 和 DB_CHARSET。APP_URL —— 面板的完整地址,带 https://,末尾不加斜杠,也不带 www。必须与您激活许可证所用的域名一致(第 07 步),否则密钥将被拒绝。TIMEZONE —— 您的时区(列表见 timedatectl list-timezones)。它只影响面板显示日期的方式;对 cron 任务的启动时间没有影响(那里使用系统时区)。SESSION_LIFETIME —— 空闲多少秒后面板要求重新登录(默认 8 小时)。例如 3600 = 1 小时,86400 = 一天。display_errors、log_errors、error_log)—— 保持默认即可。保存文件(Ctrl+O、Enter,再按 Ctrl+X)并重启 PHP-FPM —— 否则由于 OPcache,改动不会生效:
640(在第 03 步设置)并在根 .htaccess 中明确禁止访问。请勿将其上传到公开仓库,也不要带着真实密码发给支持团队。
http:// 您将无法登录。
Certbot skipped — issue SSL in …)。证书由面板自身 Web 域名上的 Let's Encrypt 开关签发——这样续期也由面板负责。
certbot 及其 Apache 插件已在自动配置时安装完成。域名的 DNS 应已指向本服务器(步骤 02)。一条命令即可签发:
如果面板还需要通过 www. 访问——请在同一条命令中列出两个名称,否则浏览器在第二个地址上会显示证书警告:
Y。<VirtualHost *:443>、配置 http→https 重定向并启用自动续期。最后会显示 Successfully enabled HTTPS。
dig +short monitor.example.com 是否返回服务器的 IP,以及 80/443 端口是否已开放(sudo ufw allow 80,443/tcp)。
签发完成后:https://monitor.example.com 打开时会显示锁形图标,http:// 会重定向到 https://。
打开 https://monitor.example.com,使用 admin / useradmin 登录并完成以下清单:
ARCIVEO-… 激活到您的域名,并将密钥填入“设置”→“许可证”。了解更多。public/start_db.php(如仍存在):它允许无需授权即可重建数据库。只要该文件仍位于面板根目录或 public/ 中,面板就会以红色横幅提示您。sudo /usr/local/bin/clamav-scan.sh)会大量占用磁盘和 CPU,可能持续一小时以上——在生产服务器上最好等待 01:30 的夜间任务。“磁盘(SMART)”“性能”和“安全更新”板块会自行填充:分别为每 30 分钟、每 5 分钟和每小时一次。