Ubuntu 22.04 安装 Cloudlog 指南
在 Ubuntu 22.04 上从零完成 Cloudlog 2.8.21 的 LAMP 形态部署:PHP 8.5(PPA)与 MariaDB 安装、目录权限、Apache 站点、安装向导与首登初始化,附离线 zip 备用方案与 8 条 FAQ,全程命令实测。
Ubuntu 22.04 安装 Cloudlog 指南
目标:在 Ubuntu 22.04 服务器上从零完成 Cloudlog 2.8.21 的 LAMP 形态部署——涵盖 Apache/PHP 8.5/MariaDB 安装、代码部署、目录权限、站点配置、安装向导与首次登录初始化,并给出离线 zip 包的备用安装方案与常见故障排查。已在 Ubuntu 22.04 + Apache 2.4.52 + PHP 8.5.12 + MariaDB 10.6.23 + Cloudlog 2.8.21 实测通过,登录后台功能验证正常。
一、环境信息
本篇部署实测环境与结果如下,后续排查问题时可对照:
- 操作系统:Ubuntu 22.04(x86_64,jammy)
- Web 服务:Apache 2.4.52(Ubuntu 官方仓库版本,
apache2handler方式运行 PHP) - PHP:8.5.12(CLI 与 Apache 模块同版本,来源 ondrej/php PPA)
- 数据库:MariaDB 10.6.23(Ubuntu 官方仓库版本)
- Cloudlog:2.8.21(git tag 检出,
git log -1显示提交a3da98d6 2.8.21) - 安装路径:
/var/www/cloudlog - 数据库:库名
cloudlog,用户cloudlog,密码q1w2e3r4(演示口令) - 后台演示账号:
admin/q1w2e3r4(站点呼号 M0ABC) - 部署后台:安装完成后 Debug 页实测显示 PHP 8.5.12、MariaDB 10.6.23-MariaDB-0ubuntu0.22.04.1、框架 CodeIgniter 3.2.0-dev、数据库迁移版本 286、
/backup/updates/uploads三个目录全部可写(Success)
选型说明:Cloudlog 是 PHP Web 应用,官方 Wiki(2026-10 查询)要求 Apache 2.4 或 nginx、MySQL 5.7+ 或 MariaDB、PHP 8.5.12 或更高(修复 PHP2Shell 漏洞 CVE-2026-109618/CVE-2026-109619 的安全版本),并要求 64 位系统(微波频段频率值超出 32 位整数范围)。Ubuntu 22.04 自带 PHP 8.1,不满足要求,因此 PHP 一律走 ppa:ondrej/php 装 8.5 系列带版本号的包。
二、前置条件
- 一台 64 位 Ubuntu 22.04 服务器,拥有 sudo 权限的账户;本篇命令均以 root 执行(省略 sudo)。
- 服务器可访问 Ubuntu 官方仓库与 GitHub(下载代码);访问 Launchpad PPA 时若配置了不可用的代理环境变量会超时(排障见第八章 8.1)。
- 计划用
http://<服务器地址>访问站点;生产环境建议先备好域名与 DNS 解析,HTTPS 收尾见第七章 7.3。
三、版本选型说明
| 组件 | 本篇实测版本 | 说明 |
|---|---|---|
| Cloudlog | 2.8.21 | GitHub Releases 最新稳定版(2026-10-21 发布,2026-10-31 查询核验) |
| PHP | 8.5.12 | 官方 Wiki 要求的最低安全版本;PPA 安装,带 php8.5- 前缀防大版本漂移 |
| Apache | 2.4.52 | Ubuntu 22.04 官方仓库版本,mod_php(apache2handler)形态 |
| MariaDB | 10.6.23 | Ubuntu 22.04 官方仓库版本,满足官方 MySQL 5.7+/MariaDB 要求 |
关键差异解读:PHP 必须装「带版本号的包」(php8.5-*)而非无前缀的 php-*——后者跟随仓库默认大版本,未来系统升级时会静默换底。Cloudlog 对 PHP 模块的硬需求是 mysqli、curl、mbstring、xml、zip、gd(openssl 与 json 内置无独立包),外加 allow_url_fopen=On(国家文件、LoTW 用户数据均靠它拉取),这些在 4.1/4.2 两节落地并验证。
四、方案 A:在线 git 仓库安装(官方推荐)
官方 Wiki 的推荐方式是 git clone 官方仓库(master 分支)并检出 tag,日常升级用 git pull 即可,本篇实测即采用此方案。整章按「依赖 → PHP → 数据库 → 代码 → 权限 → 站点 → 向导 → 首登」顺序执行。
4.1 安装基础软件与 PHP 8.5
先更新索引并安装基础工具(git 后面拉代码要用):
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y software-properties-common ca-certificates lsb-release gnupg curl git
实测回显(输出节选,实测首尾):
Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [129 kB]
...
Fetched 49.2 MB in 9s (5480 kB/s)
Reading package lists...
添加 ondrej/php PPA(PHP 8.5 的来源,该 PPA 跟随上游安全更新):
add-apt-repository -y ppa:ondrej/php
apt-get update
实测回显(首次因代理环境变量超时失败,重跑直连成功;完整排障见 8.1):
Repository: 'deb https://ppa.launchpadcontent.net/ondrej/php/ubuntu/ jammy main'
Description:
This repository is in process of being merged into https://packages.sury.org/php/;
For Ubuntu Resolute, https://packages.sury.org/php/ is the canonical way of getting PHP packages, for previous releases, I will provide a simple way how to migrate to the new repositories in upcoming weeks, you can still use this repository for Ubuntu Jammy and Ubuntu Noble.
More info: https://launchpad.net/~ondrej/+archive/ubuntu/php
Adding repository.
Adding deb entry to /etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list
Adding disabled deb-src entry to /etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list
Adding key to /etc/apt/trusted.gpg.d/ondrej-ubuntu-php.gpg with fingerprint B8DC7E53946656EFBCE4C1DD71DAEAAB4AD4CAB6
安装 Apache、PHP 8.5 全套模块与 MariaDB:
apt-get install -y apache2 php8.5 php8.5-cli php8.5-mysql php8.5-curl php8.5-mbstring php8.5-xml php8.5-zip php8.5-gd mariadb-server
启用 Apache 重写模块(Cloudlog 的 URL 路由依赖它)并启动两个服务:
a2enmod rewrite
systemctl restart apache2
systemctl enable --now mariadb
实测回显:
Enabling module rewrite.
To activate the new configuration, you need to run:
systemctl restart apache2
验证服务状态与 PHP 版本、模块:
systemctl is-active apache2
systemctl is-active mariadb
php -v
php -m | grep -iE 'curl|mysqli|mbstring|xml|openssl|zip|gd|json'
实测回显(两条 is-active 均输出):
active
active
PHP 8.5.12 (cli) (built: Oct 21 2026 14:36:25) (NTS)
Copyright (c) The PHP Group
Built by Ubuntu
Zend Engine v4.5.12, Copyright (c) Zend Technologies
with Zend OPcache v8.5.12, Copyright (c), by Zend Technologies
curl
gd
json
libxml
mbstring
mysqli
openssl
SimpleXML
xml
xmlreader
xmlwriter
zip
两个 active 与 13 行模块输出即本步生效凭证。php -v 低于 8.5.12 时先 apt update && apt upgrade 再复核。
4.2 PHP 配置
Apache mod_php 形态读取 /etc/php/8.5/apache2/php.ini(注意 php --ini 打印的是命令行用的文件,改它对网站无效)。本篇用 sed 逐项替换关键设置:
INI=/etc/php/8.5/apache2/php.ini
sed -i 's|^;*date.timezone *=.*|date.timezone = Asia/Shanghai|' $INI
sed -i 's|^memory_limit *=.*|memory_limit = 256M|' $INI
sed -i 's|^upload_max_filesize *=.*|upload_max_filesize = 32M|' $INI
sed -i 's|^post_max_size *=.*|post_max_size = 40M|' $INI
sed -i 's|^max_execution_time *=.*|max_execution_time = 300|' $INI
sed -i 's|^;*allow_url_fopen *=.*|allow_url_fopen = On|' $INI
逐项说明:date.timezone 按实际时区写(本篇 Asia/Shanghai);memory_limit=256M 保障 ADIF 批量导入不中途耗尽内存;upload_max_filesize=32M 与 post_max_size=40M 服务大日志文件上传,且 post 必须大于 upload 否则 PHP 拒收上传;max_execution_time=300 给国家文件下载与批量导入留足时长;allow_url_fopen=On 是官方 Wiki 点名的必需项。
验证替换结果并重启 Apache 生效:
grep -E '^(date\.timezone|memory_limit|upload_max_filesize|post_max_size|max_execution_time|allow_url_fopen)' $INI
systemctl restart apache2
实测回显:
max_execution_time = 300
memory_limit = 256M
post_max_size = 40M
upload_max_filesize = 32M
allow_url_fopen = On
date.timezone = Asia/Shanghai
4.3 安装与初始化 MariaDB
4.1 已随大包安装 mariadb-server 并 systemctl enable --now mariadb 启动。生产环境执行一次安全初始化(移除匿名账户、禁远程 root 等;Ubuntu 22.04 上该工具名为 mariadb-secure-installation,若敲 mysql_secure_installation 提示找不到就用前者):
mariadb-secure-installation
💡 说明:Ubuntu/Debian 的数据库 root 账户走本地 socket 认证,
mariadb-secure-installation与后续mariadb命令都直接以 root 身份进入,无需输入数据库 root 密码。
4.4 创建数据库与用户
mariadb -e "CREATE DATABASE IF NOT EXISTS cloudlog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER IF NOT EXISTS 'cloudlog'@'localhost' IDENTIFIED BY 'q1w2e3r4'; GRANT ALL PRIVILEGES ON cloudlog.* TO 'cloudlog'@'localhost'; FLUSH PRIVILEGES;"
库名、用户名、密码三件套记牢——安装向导第 5 步要逐字填入。'cloudlog'@'localhost' 只允许本机连接,与数据库同机的单机部署正合适。验证:
mariadb -e 'SHOW DATABASES;'
实测回显:
Database
cloudlog
information_schema
mysql
performance_schema
sys
4.5 拉取 Cloudlog 代码
cd /var/www
rm -rf /var/www/cloudlog
git clone https://github.com/magicbug/Cloudlog.git /var/www/cloudlog
cd /var/www/cloudlog
git checkout -q 2.8.21
git describe --tags
git log -1 --oneline
实测回显:
Cloning into '/var/www/cloudlog'...
2.8.21
a3da98d6 2.8.21
clone 默认跟踪 master 分支(官方 Wiki 指明 master 即发布分支),再检出 2.8.21 标签锁定版本。git describe --tags 输出 2.8.21 即版本锁定成功。
4.6 目录权限
Cloudlog 正常运行时要向 11 个目录写入(向导写配置、日志、缓存、插件、备份、国家文件、上传等),PHP 以 www-data 身份运行,需把这些目录的属组设为 www-data 并放开组写。用一条 install -d 一次建全(-m 2775 中的 setgid 位保证今后新建文件自动继承 www-data 组):
chown -R root:www-data /var/www/cloudlog
install -d -o root -g www-data -m 2775 /var/www/cloudlog/application/config /var/www/cloudlog/application/logs /var/www/cloudlog/application/cache /var/www/cloudlog/application/plugins /var/www/cloudlog/backup /var/www/cloudlog/updates /var/www/cloudlog/uploads /var/www/cloudlog/images/eqsl_card_images /var/www/cloudlog/assets/qslcard /var/www/cloudlog/assets/json /var/www/cloudlog/assets/sstvimages
抽查验证(应全部为 drwxrwsr-x root www-data):
ls -ld /var/www/cloudlog/application/config /var/www/cloudlog/backup /var/www/cloudlog/uploads /var/www/cloudlog/assets/json
实测回显:
drwxrwsr-x 2 root www-data 4096 Oct 30 16:13 /var/www/cloudlog/application/config
drwxrwsr-x 3 root www-data 4096 Oct 30 16:11 /var/www/cloudlog/assets/json
drwxrwsr-x 2 root www-data 4096 Oct 30 16:11 /var/www/cloudlog/backup
drwxrwsr-x 2 root www-data 4096 Oct 30 16:11 /var/www/cloudlog/uploads
⚠️ 注意:这组权限足以让单管理员服务器跑起来,但
application/config/下将存有数据库密码、backup/下是整本日志的副本,两者之后要收紧(见第七章 7.1);application/、system/、backup/、updates/四个目录绝不能让访客经 Web 下载,4.7 的站点配置已封堵。
4.7 Apache 站点配置
写一个专用站点,DocumentRoot 直接指向 Cloudlog 目录(这样向导的 Directory 字段留空即可,自带的 rewrite 规则也无需改动)。保存为 /etc/apache2/sites-available/cloudlog.conf:
<VirtualHost *:80>
ServerName cloudlog.example.com
DocumentRoot /var/www/cloudlog
<Directory /var/www/cloudlog>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# PHP reads these from disk. Visitors should not.
<Directory /var/www/cloudlog/application>
Require all denied
</Directory>
<Directory /var/www/cloudlog/system>
Require all denied
</Directory>
<Directory /var/www/cloudlog/backup>
Require all denied
</Directory>
<Directory /var/www/cloudlog/updates>
Require all denied
</Directory>
ErrorLog ${APACHE_LOG_DIR}/cloudlog_error.log
CustomLog ${APACHE_LOG_DIR}/cloudlog_access.log combined
</VirtualHost>
把 ServerName 换成你的域名(无域名时写服务器 IP 也能跑通向导)。四个 Require all denied 目录存着数据库密码(application)、框架代码(system)、日志备份(backup)与参考数据(updates),Apache 层直接封死,即便 .htaccess 被关也不泄露。启用站点并关闭默认站,然后语法自检并重载:
a2ensite cloudlog
a2dissite 000-default
apachectl configtest
systemctl reload apache2
实测回显:
Enabling site cloudlog.
To activate the new configuration, you need to run:
systemctl reload apache2
Site 000-default disabled.
To activate the new configuration, you need to run:
systemctl reload apache2
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.89.64.2. Set the 'ServerName' directive globally to suppress this message
Syntax OK
Syntax OK 即配置合法(AH00558 只是缺全局 ServerName 的提示,不影响运行,介意可在 /etc/apache2/conf-available/servername.conf 写 ServerName cloudlog.example.com 后 a2enconf servername 消除)。最后从本机探活安装入口:
curl -sI http://127.0.0.1/install | head -5
实测回显:
HTTP/1.1 301 Moved Permanently
Date: Fri, 30 Oct 2026 16:11:37 GMT
Server: Apache/2.4.52 (Ubuntu)
Location: http://127.0.0.1/install/
Content-Type: text/html; charset=iso-8859-1
301 跳转到 /install/ 说明 Apache 已正确接管 Cloudlog。
4.8 运行安装向导
浏览器打开 http://<服务器地址>/install/,按表逐项填写:
| 向导字段 | 填写值 | 说明 |
|---|---|---|
| Directory | 留空 | 本篇 DocumentRoot 即 Cloudlog 目录;若装在子目录才填子路径,填错会报 "Directory cannot be found" |
| Website URL | http://<服务器地址> | 向导会自动猜,含 https 时改成 https:// 前缀 |
| Default gridsquare | 你的网格坐标(如 IO91JS) | 距离与方位角的计算基准 |
| Hostname | localhost | 数据库与本应用同机 |
| Username / Password / Database name | cloudlog / q1w2e3r4 / cloudlog | 即 4.4 创建的三件套 |
提交后向导依次生成 application/config/database.php 与 application/config/config.php、建表灌数据、尝试拉取国家文件、删除 install/ 目录。若向导完成后 install/ 仍在,手动删掉:
rm -rf /var/www/cloudlog/install
⚠️ 注意:若向导提示 config 目录不可写,回查 4.6 的组写位(
drwxrwsr-x)与 PHP 运行身份(www-data);官方向导示例里提到的chmod 777不要照做,组写足够且安全。若提示 "The database tables could not be created",回查 4.4 的库名/用户/密码与 localhost 连接授权。
4.9 首次登录与初始化
用向导中创建的管理员账号登录(本篇演示账号 admin / q1w2e3r4,站点呼号 M0ABC)。登录后按序完成三件事,都是实测过的路径:
-
建台站位置与日志本:顶部呼号菜单 → Station Locations 新建并设为 active → Station Logbooks 新建日志本并挂上该台站位置。不建的话 Dashboard 一直挂 "You have no station locations / no station logbook" 与 "Attention: you need to set an active station location." 警告(本篇实例建站前实测到这三条)。
-
加载 DXCC 国家文件:Admin → Update Country Files,点击 Update DXCC Data。该操作从 Club Log CDN 拉取 cty 压缩包(下载失败自动回退 cloudlog.org CDN)解压为
updates/cty.xml,清空并重灌三张参考表,完成后状态页显示(本篇实测回显):DONE Dxcc Entities: 402 Dxcc Exceptions: 31730 Dxcc Prefixes: 4123这一步是 Dashboard 上 DXCC 判定生效的前提,加载完成后 Dashboard 的 Countries Breakdown 会显示 Needed 计数(本篇实测为 340,即 340 个可追逐实体)。
-
核对 Debug 信息:Admin → Debug Information,确认 PHP Version 为 8.5.12 或更高、8 个模块全部 Installed、
/backup/updates/uploads三目录 Success、memory_limit 等设置与 4.2 一致(本篇实测值见第一章环境信息)。
数据库迁移不需要手动跑——每次页面加载自动执行,git pull 升级后打开一次站点即可(本篇 Debug 页实测 Migration 版本 286)。
五、方案 B:离线 zip 包安装(受限网络/无 git 环境)
GitHub 直连不畅或服务器无 git 时,改用 Releases 附带的源码 zip 部署,后续向导与初始化步骤与方案 A 完全一致。本篇在实测环境验证了下载、校验与解压。
5.1 下载与校验
在能上网的机器(或服务器)下载 2.8.21 源码包:
curl -sSL -o cloudlog-2.8.21.zip https://github.com/magicbug/Cloudlog/archive/refs/tags/2.8.21.zip
ls -l cloudlog-2.8.21.zip
sha256sum cloudlog-2.8.21.zip
file cloudlog-2.8.21.zip
实测回显(2026-10-31 下载;GitHub 访问受限的网络需经代理,本篇实测走 curl -x http://192.168.1.72:7897 下载成功):
-rw-r--r-- 1 root root 24551726 Oct 31 00:48 cloudlog-2.8.21.zip
09d8dc27e893a456b01ceec05116ddce39086e068246df726dda789b02f76ec5 cloudlog-2.8.21.zip
cloudlog-2.8.21.zip: Zip archive data, at least v1.0 to extract, compression method=store
⚠️ 网络说明:GitHub 大文件直连在国内网络经常超时,实测可用渠道为 HTTP 代理(本篇经
http://192.168.1.72:7897完成下载);内网环境可先在能出网的机器下载后 scp 进服务器。
5.2 解压部署
安装 unzip 后解压到 /var/www,把解压出的目录改成站点路径:
apt-get install -y unzip
rm -rf /var/www/cloudlog
unzip -q cloudlog-2.8.21.zip -d /var/www
mv /var/www/Cloudlog-2.8.21 /var/www/cloudlog
解压结果实测(输出节选,包体解出约 91MB;zip 发行版不含生成的 config.php,只有 config.sample.php 与 database.sample.php 模板,由向导负责生成,属正常现象):
CloudLog.png
CloudLog_logo.png
LICENSE
README.md
SECURITY.md
application
assets
backup
cypress
...
后续步骤(4.6 目录权限 → 4.7 站点配置 → 4.8 向导 → 4.9 首登初始化)与方案 A 完全相同,逐节执行即可。
六、方案对比与选择建议
| 维度 | 方案 A:git 仓库 | 方案 B:离线 zip |
|---|---|---|
| 网络要求 | 安装机需通 GitHub,日常 git pull 升级 | 任一台机器下载一次,安装机零外网依赖 |
| 版本控制 | git 元数据齐全,升级/回滚一条命令 | 纯文件覆盖,升级=换包重解压 |
| 路径整洁 | 含 .git(站点配置已建议封堵,.htaccess.sample 也对 .git 返回 404) | 无 git 目录,包体略干净 |
| 适用场景 | 长期运维、追官方更新 | 内网隔离、批量铺装、无 git 环境 |
选择建议:能联网选 A(后续升级运维篇的 git pull 流程直接复用);内网/受限网络选 B,但要做好后续版本更新的手动搬运计划。两方案的运行时行为完全一致。
七、配置说明
安装向导生成两个核心配置文件,本章覆盖安装态必要的收尾配置;全量参数逐项解读见配置参数详解篇(发布后见本专栏)。
7.1 收紧配置文件权限
向导写完配置后会把两个文件留成组可写,把属主与权限收紧到「root 可写、www-data 组可读」:
chown root:www-data /var/www/cloudlog/application/config/config.php /var/www/cloudlog/application/config/database.php
chmod 640 /var/www/cloudlog/application/config/config.php /var/www/cloudlog/application/config/database.php
ls -l /var/www/cloudlog/application/config/config.php /var/www/cloudlog/application/config/database.php
实测回显:
-rw-r----- 1 root www-data 19666 Oct 30 16:16 /var/www/cloudlog/application/config/config.php
-rw-r----- 1 root www-data 1236 Oct 30 16:16 /var/www/cloudlog/application/config/database.php
database.php 里有数据库密码 q1w2e3r4,640 保证只有 root 与 www-data 组能读。
7.2 隐藏 URL 中的 index.php(可选)
Cloudlog 默认 URL 带 index.php 前缀(如 /index.php/dashboard)。Apache 已开 mod_rewrite(4.1),把示例 rewrite 规则启用并把框架索引页设空即可去掉:
cp /var/www/cloudlog/.htaccess.sample /var/www/cloudlog/.htaccess
sed -i "s|^\$config\['index_page'\] = 'index.php';|\$config['index_page'] = '';|" /var/www/cloudlog/application/config/config.php
grep -n "index_page" /var/www/cloudlog/application/config/config.php | grep -v '^|'
实测回显:
116:$config['index_page'] = '';
改完刷新站点,/dashboard 直达。
7.3 HTTPS 收尾(生产建议)
用 certbot 上证书后做两处联动:把 base_url 改为 https:// 地址(config.php 中 $config['base_url']),并设置 $config['cookie_secure'] = TRUE; 让登录 Cookie 仅经 HTTPS 传输。改完 systemctl reload apache2 生效,后台 Debug 页的 HTTPS 字段会随之变为 Enabled。
八、常见问题(FAQ)
Q1:add-apt-repository ppa:ondrej/php 报 TimeoutError: [Errno 110] Connection timed out?
实测环境遇到过:执行前 shell 里残留了不可用的 http_proxy/https_proxy 环境变量,launchpadlib 走该代理连接 Launchpad API 超时(错误栈经 httplib2 → sock.connect((self.host, self.port)) 后抛出)。处理:清掉错误代理变量(unset http_proxy https_proxy)或换成可用代理后重跑,实测重跑即成功并输出 PPA 指纹(Adding key ... fingerprint B8DC7E53946656EFBCE4C1DD71DAEAAB4AD4CAB6)。
Q2:向导报 "Directory cannot be found"? DocumentRoot 就是 Cloudlog 根目录时 Directory 必须留空;装在子目录时填子目录相对路径且目录必须已存在。填了不存在或多余的路径即此报错。
Q3:向导报 "The database tables could not be created"?
三件套不匹配或用户授权不是 'cloudlog'@'localhost'。回 4.4 核对,必要时 mariadb -e "SELECT user,host FROM mysql.user WHERE user='cloudlog';" 复核授权主机。
Q4:页面或 cron URL 全部 404(尤其 nginx 部署)?
nginx 的 PHP location 必须匹配 /index.php/... 形态(Cloudlog 的 PATH_INFO 路由),只匹配 .php 结尾的 location ~ \.php$ 会让所有 cron 端点失效——官方 issue #1613 的结论。用本篇第七章的思路改 location ~ \.php(/|$)。Apache 形态下确认 mod_rewrite 已启用且站点 AllowOverride All。
Q5:Dashboard 提示国家文件缺失/呼号无国家信息?
Admin → Update Country Files 手动触发一次。仍失败则查三件事:PHP curl 模块已装、allow_url_fopen=On(Debug 页可见实际值)、updates/ 目录 www-data 可写(ls -ld /var/www/cloudlog/updates 应为 drwxrwsr-x)。服务器无法直连 Club Log CDN 时需为服务器配出网代理——参考数据全靠在线拉取,这是离线部署的主要功能损失。
Q6:LoTW 相关功能提示 OpenSSL 缺失?
php -m | grep openssl 应有输出(本篇实测有);没有则补装 php8.5 全套(openssl 内置,装齐包后重启 Apache)。LoTW 证书签名依赖 PHP OpenSSL 扩展。
Q7:ADIF 导入中途停摆?
调大 Web 所用 php.ini 的 memory_limit 与 max_execution_time(4.2 的 256M/300 秒起点)后重启 Apache,回 Debug 页确认实际生效值——命令行 php --ini 显示的文件不是 Web 用的那份。
Q8:git pull 报目录所有权错误?
以执行升级的同一账户跑一次 git config --global --add safe.directory /var/www/cloudlog。这是 git 对属主变更目录的保护机制,升级脚本里 chown 过的树首次 pull 会触发。
九、卸载与清理
按「站点 → 代码 → 数据库 → 包」逆序拆除(数据库拆除前如有需要先按运维篇做 ADIF 备份):
a2dissite cloudlog
rm -f /etc/apache2/sites-available/cloudlog.conf
a2ensite 000-default
systemctl reload apache2
rm -rf /var/www/cloudlog
mariadb -e "DROP DATABASE IF EXISTS cloudlog; DROP USER IF EXISTS 'cloudlog'@'localhost'; FLUSH PRIVILEGES;"
如需连基础栈一起清(仅当该服务器无其他 PHP 应用依赖):
apt-get purge -y apache2 mariadb-server php8.5*
apt-get autoremove -y
add-apt-repository --remove -y ppa:ondrej/php 可移除 PPA 源。卸载后 ls /var/www 与 mariadb -e 'SHOW DATABASES;' 应不再出现 cloudlog 相关条目。
十、参考链接
- 官方 Wiki 安装指南(本篇流程与排障表的源头):https://github.com/magicbug/Cloudlog/wiki/Installation
- 官方 Releases(zip 包下载):https://github.com/magicbug/Cloudlog/releases
- ondrej/php PPA:https://launchpad.net/~ondrej/+archive/ubuntu/php
- PHP 时区列表:https://www.php.net/manual/en/timezones.php
- nginx PATH_INFO 路由问题(FAQ 4 依据):https://github.com/magicbug/Cloudlog/issues/1613
- 同专栏认知篇:《Cloudlog 介绍与选型指南》
- 同平台 LAMP 形态部署参考:《Ubuntu 22.04 安装 MyBB 指南》