Admidio 5.0.17 常用运维命令详解

Admidio 5.0.17 常用运维命令详解:基于 Ubuntu 22.04.5 LTS 实测,覆盖服务管理、健康检查、数据库与 adm_my_files 备份恢复、日志分析、会话清理、版本升级流程与重装排障,附真实回显。

admidioAdmidioPHPUbuntu 22.04MariaDB2026/10/28

Admidio 5.0.17 常用运维命令详解

本文是 admidio 专栏的运维篇。全部命令均于 2026-10-28 在 Ubuntu 22.04.5 LTS + Admidio 5.0.17(Nginx 1.18.0 + PHP 8.2.35 + MariaDB 10.6.23)环境实测执行,输出为真实回显;标注「命令 + 预期结果」的小节为无法跨版本实测、按官方流程推演的验证步骤。环境搭建见《Admidio 5.0.17 LEMP 安装部署指南》,参数含义见《Admidio 5.0.17 配置参数详解》。

一、服务管理与健康检查

1.1 服务启停与重载

Admidio 本身无守护进程,运维对象是 Nginx、PHP-FPM 8.2 与 MariaDB 三件。实测重载命令与回显:

$ sudo systemctl reload nginx
$ sudo systemctl reload php8.2-fpm
$ sudo systemctl restart mariadb

无 systemd 的精简环境中可用 service 等价命令,实测回显:

$ service php8.2-fpm reload
 * Reloading PHP 8.2 FastCGI Process Manager php-fpm8.2
   ...done.
$ service nginx reload
 * Reloading nginx configuration nginx
   ...done.

实测进程与监听核对:

$ pgrep -c php-fpm8.2
3
$ ss -ltn | grep -E ':(80|3306)\s'
0.0.0.0:80
127.0.0.1:3306
[::]:80

要点:MariaDB 默认只监听本机回环(127.0.0.1:3306),与 config.php 的 localhost 一致;若数据库在另一台机器,需同步改监听地址与防火墙。

1.2 健康检查三板斧

实测可在监控脚本中直接使用的三条命令:

$ curl -s -o /dev/null -w '%{http_code} %{time_total}s\n' http://localhost/
303 0.007453s
检查命令健康标准
Web 入口curl -s -o /dev/null -w '%{http_code}' http://localhost/303(未登录跳转)或 200
PHP 执行上一条的时间字段通常毫秒级;秒级暴涨先查 FPM
数据层sudo mysql admidio -e 'SELECT 1;'返回 1 即库通

二、备份与恢复

2.1 数据库备份

Admidio 的全部业务数据(成员、偏好、会话)都在库中,实测热备命令:

$ mysqldump --single-transaction --routines admidio | gzip > /tmp/admidio_db_$(date +%Y%m%d).sql.gz
$ ls -la /tmp/admidio_db_*.sql.gz
-rw-r--r-- 1 root root 18197 Oct 28 03:09 /tmp/admidio_db_20261028.sql.gz

说明:--single-transaction 对 InnoDB 做一致性快照不锁表;空库压缩后约 18 KB,数据量随成员数与偏好增长,协会规模通常仍在数十 MB 量级。

2.2 adm_my_files 备份

配置、日志与模板都在 adm_my_files,实测打包:

$ cd /var/www/admidio && tar czf /tmp/admidio_myfiles_$(date +%Y%m%d).tar.gz adm_my_files
$ ls -la /tmp/admidio_myfiles_*.tar.gz
-rw-r--r-- 1 root root 28730 Oct 28 03:09 /tmp/admidio_myfiles_20261028.tar.gz

完整备份 = 数据库转储 + adm_my_files 打包,二者缺一不可:丢了数据库丢成员数据,丢了 adm_my_files 丢 config.php(含数据库口令)与定制模板。

2.3 定时备份脚本

可直接放入 /etc/cron.daily/admidio-backup 的实测组合(命令 + 预期结果:每日生成两份带日期的归档到备份目录,日志写入 backup.log):

#!/bin/bash
set -e
TS=$(date +%Y%m%d)
BAK=/var/backups/admidio
mkdir -p $BAK
mysqldump --single-transaction --routines admidio | gzip > $BAK/admidio_db_$TS.sql.gz
tar czf $BAK/admidio_myfiles_$TS.tar.gz -C /var/www/admidio adm_my_files
find $BAK -name 'admidio_*' -mtime +14 -delete

建议 chmod 700 并确认备份目录不在 Web 根下,避免归档被公网直接下载。

2.4 恢复演练

命令 + 预期结果(本节为标准恢复路径,按实测备份产物推演验证):

# 1. 恢复数据库
gunzip -c admidio_db_20261028.sql.gz | mysql admidio
# 2. 恢复运行目录
tar xzf admidio_myfiles_20261028.tar.gz -C /var/www/admidio/
# 3. 修正属主
chown -R www-data:www-data /var/www/admidio/adm_my_files
# 4. 验证
curl -s -o /dev/null -w '%{http_code}\n' http://localhost/   # 预期 303

三、日志分析与清理

3.1 日志位置与格式

应用日志按日滚动在 adm_my_files/logs/admidio-YYYY-MM-DD.log,实测样例行(安装期间的正常告警):

[2026-10-28 04:03:42.498154] Admidio.WARNING: PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'admidio.adm_organizations' doesn't exist  {"file":"/var/www/admidio/src/Infrastructure/Database.php","line":877,...}

Monolog 格式:时间戳 + 级别(DEBUG/INFO/WARNING/ERROR)+ 消息 + 上下文。快速筛查:

$ grep -c 'WARNING\|ERROR' adm_my_files/logs/admidio-2026-10-28.log
1

注意时间戳时区:未配置 php.ini date.timezone 时日志为 UTC(实测 04:03 UTC 对应北京 12:03),处置见 C1 篇 4.1 节。

3.2 会话与自动登录清理

会话存库(adm_sessions),实测查看:

$ sudo mysql admidio -e 'SELECT COUNT(*) FROM adm_sessions;'
COUNT(*)
7

会话由系统按偏好 logout_minutes(默认 20 分钟)过期;异常膨胀时可直接清理过期记录(命令 + 预期结果:删除会话后活跃用户需重新登录):

sudo mysql admidio -e "DELETE FROM adm_sessions WHERE ses_timestamp < NOW() - INTERVAL 1 DAY;"

四、版本升级

4.1 升级前检查

$ sudo mysql admidio -e 'SELECT com_name, com_version FROM adm_components WHERE com_type="SYSTEM";'
com_name       com_version
Admidio Core   5.0.17

该查询返回当前版本,用于升级前后比对。升级前完成 2.1/2.2 节完整备份。

4.2 官方升级流程(跨版本)

官方 README 定义的升级三步法(命令 + 预期结果,按 v5.0.17 源码内官方说明与 update.php 实测入口推演):

  1. 删除旧版除 adm_my_files、adm_plugins 外的全部文件与目录;
  2. 解压新版本归档,复制除 adm_my_files 以外的所有内容到站点目录(adm_plugins 用新版覆盖);
  3. 重建依赖:cd /var/www/admidio && sudo composer install --no-interaction --no-dev;
  4. 浏览器访问首页,系统检测到版本差自动跳转 install/update.php 更新向导(实测该入口 HTTP 200 可达),按界面提示完成数据库结构升级;
  5. 复查版本号与首页可用性:
$ sudo mysql admidio -e 'SELECT com_version FROM adm_components WHERE com_type="SYSTEM";'
$ curl -s -o /dev/null -w '%{http_code}\n' http://localhost/    # 预期 303

跨大版本升级(如 4.x → 5.x)必须先升 PHP 到 8.2+ 再动程序,顺序颠倒会在更新向导触发 B1 篇故障一的同款版本报错。

4.3 升级回退

命令 + 预期结果:以 2.3 节备份为基线,删程序目录(保留备份中的 adm_my_files)、回滚数据库(gunzip -c <旧备份> | mysql admidio)后恢复旧版文件即回到升级前状态;演练升级建议先在测试机完整走一遍。

五、重装与数据迁移

5.1 全新重装

实测重装清理路径(危险操作,先备份):

# 1. 清库
sudo mysql -e 'DROP DATABASE admidio;'
# 2. 重新建库建账号(见 B1 篇 3.1 节)
# 3. 清配置与表
sudo rm /var/www/admidio/adm_my_files/config.php
sudo rm -rf /var/www/admidio/vendor && sudo composer install --no-interaction --no-dev
# 4. 浏览器访问首页自动重新进入安装向导

清掉 config.php 后首页恢复 303 → install/index.php,与全新部署一致。

5.2 迁移到新服务器

命令 + 预期结果:新机按 B1 篇完成 LEMP 与源码部署 → 恢复数据库与 adm_my_files → 修改 config.php 中 $g_root_path 为新地址 → chown -R www-data:www-data adm_my_files → 首页返回 303 且登录正常即迁移完成。

六、日常巡检清单

频率项目命令/位置健康标准
每日备份产物ls /var/backups/admidio当日两份归档存在
每日错误日志grep ERROR adm_my_files/logs/*.log无新增 ERROR
每周磁盘占用du -sh /var/www/admidio/adm_my_files/temptemp 无异常膨胀
每周会话表SELECT COUNT(*) FROM adm_sessions;与活跃用户量级匹配
每月版本与安全更新GitHub Releases 页核对是否需要跟进补丁版

至此 admidio 专栏四篇完结:从选型判断(《Admidio 5.0.17 介绍与选型指南》)到部署、配置与日常运维形成闭环。运维层遇到安装向导类问题可回查 B1 篇排障实录,偏好项疑问回查 C1 篇。