Ubuntu 22.04 安装 Galette 1.3.1 指南

Ubuntu 22.04 从零安装 Galette 1.3.1 全流程实录:sury PPA PHP 8.3 依赖链、MariaDB 初始化、tarball 部署、Web 向导 8 页逐步实测、CLI 安装备选、systemd 管理与 302 循环排障实录。

GaletteCRM会员管理自托管2026/10/23

Ubuntu 22.04 安装 Galette 1.3.1 指南

目标:在一台 Ubuntu 22.04 服务器上从零安装并跑通开源会员管理系统 Galette 1.3.1,覆盖 PHP 8.3 依赖链(sury PPA)、MariaDB 数据库初始化、官方 tarball 部署、Web 安装向导 8 个页面的逐步实测、命令行安装备选方案、systemd 服务管理与排障实录。全部命令与回显均在 Ubuntu 22.04 + Apache 2.4.52 + PHP 8.3.36 + MariaDB 10.6.23 环境实测通过。

一、环境信息

本文实测环境如下(命令回显均取自该环境):

  • 操作系统:Ubuntu 22.04(x86_64)
  • Web 服务器:Apache 2.4.52(apache2 2.4.52-1ubuntu4.25,mpm_prefork + mod_php)
  • PHP:8.3.36(sury PPA ppa:ondrej/php,模块化安装)
  • 数据库:MariaDB 10.6.23(10.6.23-0ubuntu0.22.04.1,Ubuntu 官方仓库)
  • Galette:1.3.1(官方 tarball,SHA-256 见 4.1 节)
  • 站点根目录:/var/www/html/galette-1.3.1/galette/webroot
  • 数据库:库名 galette,账号 galette,密码 q1w2e3r4(示例口令,生产环境请自行更换)
  • 超级管理员:admin / q1w2e3r4

二、前置条件

2.1 软件与版本要求

Galette 官方前置要求(来源:doc.galette.eu 安装前置页,查询日期 2026-10-23):

组件最低版本说明
PHP8.31.3.0 起的硬性要求,低于此版本安装器直接拒绝
PHP 扩展—ctype, dom, fileinfo, filter, gd, gettext, iconv, intl, mbstring, session;PDO + pdo_mysql(或 pdo_pgsql);curl、openssl 推荐
MariaDB10.5或 MySQL 8.0+,或 PostgreSQL 13+
Web 服务器—Apache、Nginx 等均可,本文用 Apache + mod_php
浏览器—必须启用 JavaScript

关键差异提示:Ubuntu 22.04 官方仓库只有 PHP 8.1,而 Galette 1.3.x 要求 PHP ≥ 8.3,因此必须先接入 sury PPA 第三方源再安装 PHP 8.3——这是整个安装流程的第一道坎,也是最常见的"装不动"原因。

2.2 安装 PHP 8.3(sury PPA)

Ubuntu 22.04 自带的 PHP 是 8.1,需要接入 ondrej/php PPA 获取 8.3。先装软件源基础工具并接入 PPA:

apt-get install -y software-properties-common
add-apt-repository -y ppa:ondrej/php
apt-get update

接入后源文件落位 /etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list,内容为:

deb https://ppa.launchpadcontent.net/ondrej/php/ubuntu/ jammy main

安装 PHP 8.3 与 Galette 需要的全部扩展:

apt-get install -y php8.3 php8.3-mysql php8.3-gd php8.3-intl \
  php8.3-mbstring php8.3-xml php8.3-curl php8.3-opcache

实测安装后的包版本(dpkg -l 节选):

php8.3                8.3.36-1+ubuntu22.04.1+deb.sury.org+1
php8.3-cli            8.3.36-1+ubuntu22.04.1+deb.sury.org+1
php8.3-common         8.3.36-1+ubuntu22.04.1+deb.sury.org+1
php8.3-curl           8.3.36-1+ubuntu22.04.1+deb.sury.org+1
php8.3-gd             8.3.36-1+ubuntu22.04.1+deb.sury.org+1
php8.3-intl           8.3.36-1+ubuntu22.04.1+deb.sury.org+1
php8.3-mbstring       8.3.36-1+ubuntu22.04.1+deb.sury.org+1
php8.3-mysql          8.3.36-1+ubuntu22.04.1+deb.sury.org+1
php8.3-opcache        8.3.36-1+ubuntu22.04.1+deb.sury.org+1
php8.3-xml            8.3.36-1+ubuntu22.04.1+deb.sury.org+1

验证 PHP 版本与关键扩展:

php -v
php -m | grep -E 'intl|gd|mbstring|pdo_mysql|fileinfo|gettext'

实测回显:

PHP 8.3.36 (cli) (built: Oct 21 2026 14:31:50) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.36, Copyright (c) Zend Technologies

fileinfo
gd
gettext
intl
mbstring
mysqli
mysqlnd
pdo_mysql

2.3 安装 Apache 与 MariaDB

apt-get install -y apache2 libapache2-mod-php8.3 mariadb-server

实测安装版本:apache2 2.4.52-1ubuntu4.25、mariadb-server 1:10.6.23-0ubuntu0.22.04.1。Ubuntu 的 Apache 与 MariaDB 安装即被 systemd 托管并自启,验证状态:

systemctl is-active apache2
systemctl is-active mariadb
systemctl is-enabled apache2
systemctl is-enabled mariadb

实测回显:

active
active
enabled
enabled

三、版本选型说明

写本文时(2026-10-23)实查官方渠道确认版本:

  • GitHub 仓库 Releases 与官网 galette.eu 当前公告均为 1.3.1(官网首页发布说明 + 下载徽章指向 galette-1.3.1.tar.bz2);
  • 1.3.0 发布于 2026-10-03(官网公告),1.3.1 为其修复跟进版,无数据库结构变更,1.3 系列插件继续兼容;
  • 安装包内 includes/sys_config/versions.inc.php 实际定义 define('GALETTE_VERSION', 'v1.3.1') 与 define('GALETTE_DB_VERSION', '1.300'),安装器校验的最低 PHP 为 define('GALETTE_PHP_MIN', '8.3')。

结论:新装一律选 1.3.1;从 1.3.0 升级到 1.3.1 不涉及数据库升级脚本(见第九章);从 1.2.x 升级则必须先备份——1.3.0 改了数据库结构且 PHP 最低版本从 8.2 提到 8.3。

四、方案 A:官方 tarball + Web 安装向导(主推)

这是官方推荐路径:下载官方 tarball 解压到 Web 目录,浏览器里跑完安装向导。全程约 15 分钟。

4.1 下载与校验

cd /var/www
wget https://galette.eu/download/galette-1.3.1.tar.bz2
sha256sum galette-1.3.1.tar.bz2
ls -la galette-1.3.1.tar.bz2

实测回显:

65c3ae3ba9d364de0b4e36553d5fa2f325ac13b7ec283c7311b4328062c1094d  galette-1.3.1.tar.bz2
-rw-r--r-- 1 root root 12992760 Oct 23 15:27 galette-1.3.1.tar.bz2

💡 说明:官方下载服务器未发布独立的 sha256 文件,以上校验值为本次实测下载件的指纹;读者可重算比对同一发布版本的指纹是否一致,不一致时优先怀疑下载不完整。

4.2 解压与目录布局

tar -xjf galette-1.3.1.tar.bz2
ls -la /var/www/galette-1.3.1/

实测回显:

total 84
drwxr-xr-x  6 1000 1000  4096 Oct 18 07:27 .
drwxr-xr-x  4 root root  4096 Oct 23 15:30 ..
-rw-r--r--  1 1000 1000  2474 Sep 17 15:27 CONTRIBUTING.rst
-rw-r--r--  1 1000 1000 35149 Sep 17 15:27 LICENSE.md
-rw-r--r--  1 1000 1000  2635 Sep 17 15:27 README.md
-rw-r--r--  1 1000 1000   833 Sep 17 15:27 SECURITY.md
drwxr-xr-x  3 1000 1000  4096 Oct 18 07:21 bin
drwxr-xr-x 14 1000 1000  4096 Oct 18 07:27 galette

目录布局是两层结构,务必认清:

/var/www/galette-1.3.1/            ← tarball 解压根(含 bin/ 命令行工具)
├── bin/console                    ← 命令行入口(Symfony Console)
└── galette/                       ← 应用代码目录
    ├── config/                    ← 配置目录(安装器在此生成 config.inc.php)
    ├── data/                      ← 运行时数据(日志、缓存、上传附件)
    ├── includes/                  ← PHP 引导与路由定义
    ├── lib/                       ← 类库
    ├── plugins/                   ← 插件目录
    ├── templates/                 ← Twig 模板
    ├── vendor/                    ← Composer 依赖(已随包分发)
    └── webroot/                   ← 唯一需要暴露给 Web 的入口目录

Web 服务器只应把 galette/webroot/ 设为站点根——config/(含数据库密码)与 data/(含日志)都不应被直接暴露,这是 4.4 节 vhost 配置的核心安全考量。

4.3 数据库初始化

安装器要求账号对库具备 CREATE, DROP, DELETE, UPDATE, SELECT, INSERT 六项权限(向导第 2 页原话)。为 Galette 建专用库与专用账号:

mariadb -uroot -e "CREATE DATABASE galette CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mariadb -uroot -e "CREATE USER 'galette'@'localhost' IDENTIFIED BY 'q1w2e3r4';"
mariadb -uroot -e "GRANT ALL PRIVILEGES ON galette.* TO 'galette'@'localhost';"
mariadb -uroot -e "FLUSH PRIVILEGES;"

验证建库结果:

mariadb -uroot -e "SHOW DATABASES;"
mariadb -uroot -e "SELECT user, host FROM mysql.user WHERE user='galette';"

实测回显:

+--------------------+
| Database           |
+--------------------+
| galette            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

+---------+-----------+
| user    | host      |
+---------+-----------+
| galette | localhost |
+---------+-----------+

💡 说明:MariaDB 10.6 的 root 默认使用 unix_socket 认证,本机 root 用户免密直连即可执行上述语句,无需密码;若你的环境 root 是密码认证,mariadb -uroot -p 进入后执行。

4.4 Apache 虚拟主机配置

创建 /etc/apache2/sites-available/galette.conf:

cat > /etc/apache2/sites-available/galette.conf << 'EOF'
<VirtualHost *:80>
    ServerName galette.local
    DocumentRoot /var/www/html/galette-1.3.1/galette/webroot
    <Directory /var/www/html/galette-1.3.1/galette/webroot>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/galette-error.log
    CustomLog ${APACHE_LOG_DIR}/galette-access.log combined
</VirtualHost>
EOF

启用站点与重写模块并重载:

a2enmod rewrite
a2ensite galette
systemctl reload apache2

三行命令均无输出即成功。逐项说明:

  • DocumentRoot 必须指到 webroot/ 子目录(不是解压根,也不是 galette/ 应用目录):webroot/ 是官方设计的唯一 Web 入口,其下 .htaccess 把不存在的路径重写到 index.php 前端控制器;
  • AllowOverride All:允许该 .htaccess 生效(缺它则 URL 重写失效,后台多数字页面会 404);
  • ServerName:局域网/内网环境可在客户端 hosts 里把 galette.local 指向服务器 IP,或直接用 IP 访问(Apache 会因无匹配 ServerName 而打印一条 FQDN 提示,不影响使用)。

本文实验机为隔离环境,直接以 http://127.0.0.1/ 访问验证(真实服务器同理,用服务器 IP 或域名):

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1/installer.php

实测回显:

200

返回 200 说明安装器入口就绪(返回 302 时先看第八章 8.1 的排障实录)。

4.5 Web 安装向导逐步实测

浏览器打开 http://<服务器IP或域名>/installer.php(若直接访问首页,Galette 检测到未安装也会自动跳转到安装器)。向导共 8 个页面,左侧进度条依次为:Checks → Database → Database access and permissions → Database installation → Admin parameters → Telemetry → Galette initialization → End!。以下为本环境实测的每一步。

第 1 步 Checks(环境检查):纯展示页,无需操作。实测页面对每一项打出 Ok:

Welcome to the Galette Install!
Galette requirements are met :)
PHP version (8.3.36 >= 8.3) Ok
Date settings Ok
PHP Modules
'SimpleXML' module Ok      'ctype' module Ok      'dom' module Ok
'fileinfo' module Ok       'filter' module Ok     'gd' module Ok
'gettext' module Ok        'iconv' module Ok      'intl' module Ok
'mbstring' module Ok       either 'mysql' or 'pgsql' PDO driver Ok
'session' module Ok        'curl' module Ok       'openssl' module Ok

出现红色失败项时按提示补装对应 PHP 扩展后刷新。点击底部 Next step 进入下一步。

第 2 步 Database(数据库参数):表单填写连接参数。页面提示原文:"If it hadn't been made, create a database and a user for Galette. The needed permissions are CREATE, DROP, DELETE, UPDATE, SELECT and INSERT."。表单字段与本文实测取值:

字段取值说明
Database typeMysql二选一:Mysql / Postgresql
Hostlocalhost数据库主机
Port3306MySQL/MariaDB 默认端口
Usergalette4.3 节创建的账号
Passwordq1w2e3r4对应密码
Databasegalette4.3 节创建的库名
Table prefixgalette_保持默认

提交后进入第 3 步。

第 3 步 Database access and permissions(连接与权限核验):安装器实际连库并逐项验证权限。实测回显:

Check of the database
Database exists and connection parameters are OK.
Connection to database successfull
Permissions to database are OK.
Permissions on the base
CREATE operation allowed Ok
INSERT operation allowed Ok
UPDATE operation allowed Ok
SELECT operation allowed Ok
DELETE operation allowed Ok
DROP operation allowed Ok

六项全部 Ok 才能继续;任一项失败回 4.3 节补 GRANT。

第 4 步 Tables Creation(建表):确认页,点击按钮后安装器开始建表。实测页面逐条打出 DDL 执行结果(节选):

Database has been installed :)
SET FOREIGN_KEY_CHECKS=0 Ok
DROP TABLE IF EXISTS galette_adherents Ok
CREATE TABLE galette_adherents ( id_adh int unsigned NOT NULL auto_increment, ... ) Ok

建表完成后数据库中生成 20 余张 galette_ 前缀表。服务器侧验证:

mariadb -uroot -e "USE galette; SHOW TABLES;"

实测回显(节选):

+------------------------------+
| Tables_in_galette            |
+------------------------------+
| galette_adherents            |
| galette_cotisations          |
| galette_database             |
| galette_dynamic_fields       |
| galette_groups               |
| galette_logs                 |
| galette_mailing_history      |
| galette_paymenttypes         |
+------------------------------+

第 5 步 Admin parameters(管理员参数):设置超级管理员账号。实测表单三字段:install_adminlogin(用户名)、install_adminpass(密码)、install_adminpass_verif(密码确认),密码最短 6 位(不足时安装器报 "Too short (6 characters minimum, N found)")。本文实测取 admin / q1w2e3r4。

⚠️ 注意:这一步提交后安装器立即把连接参数写入 config/config.inc.php 并完成数据初始化,从这时起站点正式"已安装",重复打开安装器将以"更新模式"运行。

第 6 步 Telemetry(遥测):询问是否发送匿名统计。不需要时直接点 Next step(不勾选 send_telemetry),不影响安装。

第 7 步 Galette initialization(初始化):执行剩余初始化并展示结果。实测页面:

End!
Configuration file created!
Data initialized.
Write configuration file Ok
Settings Ok
Contributions types Ok
Status Ok
Fields config and categories Ok
Mails texts Ok
Titles Ok
PDF models Ok
Payment types Ok

第 8 步 End!(完成):实测页面显示:

Galette has been successfully installed!
Homepage

点击 Homepage 即进入登录页。

4.6 安装结果验证

登录验证:访问 http://<服务器IP或域名>/login,用 admin / q1w2e3r4 登录后进入 Dashboard - Galette 页面即安装成功。命令行侧三重验证:

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1/login
cat /var/www/html/galette-1.3.1/galette/config/config.inc.php
ls /var/www/html/galette-1.3.1/galette/data/ENABLE_INSTALL 2>&1

实测回显:

200
<?php
define('TYPE_DB', 'mysql');
define('HOST_DB', 'localhost');
define('PORT_DB', '3306');
define('USER_DB', 'galette');
define('PWD_DB', 'q1w2e3r4');
define('NAME_DB', 'galette');
define('PREFIX_DB', 'galette_');
ls: cannot access '/var/www/html/galette-1.3.1/galette/data/ENABLE_INSTALL': No such file or directory

三项判据:登录页 200;config.inc.php 已生成且参数与 4.3 节一致;ENABLE_INSTALL 锁文件不存在(安装完成时安装器自动删除它以禁用安装器,安全机制生效)。

五、方案 B:命令行安装(galette:install)

Galette 自带 Symfony Console 命令行,可以完全不开浏览器完成安装,适合批量部署与无头服务器。命令入口为解压根目录的 bin/console,建议以 Web 服务运行用户身份执行:

cd /var/www/galette-1.3.1
sudo -u www-data php bin/console galette:install --help

实测帮助回显(参数一目了然):

Description:
  Install Galette

Usage:
  galette:install [options]

Options:
      --dbtype=DBTYPE        Database type (mysql, pgsql)
      --dbhost=DBHOST        Database hostname or IP address
      --dbport=DBPORT        Database port
      --dbname=DBNAME        Database schema name
      --dbprefix[=DBPREFIX]  Database table prefix
      --dbuser=DBUSER        Database user
      --dbpass[=DBPASS]      Database password
      --admin=ADMIN          Administrator username
      --password=PASSWORD    Administrator password
      --ignore-config        Ignore existing configuration file
  -w, --write-config         Write configuration file (incompatible with --ignore-config)

带上全部参数执行安装(-w 表示写配置文件;不传 --dbprefix 时命令会交互询问,实测回显见下):

sudo -u www-data php bin/console galette:install \
  --dbtype=mysql --dbhost=localhost --dbport=3306 \
  --dbname=galette --dbuser=galette --dbpass=q1w2e3r4 \
  --admin=admin --password=q1w2e3r4 --ignore-config -w

实测回显:

Welcome to Galette installer!
=============================


 Database prefix [galette_]:
 >  ---------------------------
  Database information
  Type          mysql
  Name          galette
  Prefix        galette_
  Host          localhost
  Port          3306
  User          galette
  Password      ********
 ------------- -------------
  Superadmin information
  Name          admin
  Password      ********
 ------------- -------------

 * ✔️ CREATE operation allowed
 * ✔️ INSERT operation allowed
 * ✔️ UPDATE operation allowed
 * ✔️ SELECT operation allowed
 * ✔️ DELETE operation allowed
 * ✔️ DROP operation allowed

 [INFO] Installing database, please wait...

 [INFO] Writing configuration, please wait...

 [INFO] Initializing data, please wait...

 [OK] Galette installation is complete!

逐段解读:前 6 个 ✔️ 是权限核验(与 Web 向导第 3 步等价);三段 [INFO] 对应建表、写配置、初始化数据三个阶段;最终 [OK] 完成后,Web 侧验证方式与 4.6 节完全一致(实测 config.inc.php 内容与 Web 向导安装的结果逐字符一致,登录同样可用)。

💡 说明:完全无交互执行时补上 --dbprefix=galette_ 与 -n(no-interaction)即可;--ignore-config 用于覆盖已存在的配置文件重装,二者只能取其一(帮助原文:incompatible with --ignore-config)。

六、方案对比与选择建议

维度方案 A:Web 向导方案 B:galette:install
是否需要浏览器需要(且必须启用 JS)不需要
权限核验向导第 3 步可视化 6 项回显 6 项 ✔️
配置文件写入自动需显式 -w
可脚本化/批量不可可(全参数化)
出错可视化每步页面级提示终端回显
适合场景首次部署、单人操作无头环境、自动化、批量装机

选择建议:常规部署用方案 A(有页面级引导与错误提示,不易漏步骤);自动化或无浏览器环境用方案 B;两者装出的结果等价,事后都可以用 galette:checks 复检(见 7.4 节)。

七、配置说明

7.1 config.inc.php(数据库连接)

安装器生成的 galette/config/config.inc.php 只有 7 个常量(见 4.6 节实测回显):TYPE_DB(mysql/pgsql 二选一)、HOST_DB、PORT_DB、USER_DB、PWD_DB、NAME_DB、PREFIX_DB。手工迁移服务器时改这个文件即可换库,无需重装。同目录的 config.inc.php.dist 是官方样例,其中额外示范了一个可选常量 SCRIPT_AUTH_TOKEN("缴费后置脚本"的回调鉴权令牌,按官方注释应换成强口令)。

7.2 数据目录与权限

galette/data/ 是运行时数据落点,安装后实测目录与属主:

drwxr-xr-x 13 www-data www-data .
-rw-r--r--  1 www-data www-data .htaccess
drwxr-xr-x  2 www-data www-data attachments
drwxr-xr-x  3 www-data www-data cache
drwxr-xr-x  2 www-data www-data documents
drwxr-xr-x  2 www-data www-data exports
drwxr-xr-x  2 www-data www-data files
drwxr-xr-x  2 www-data www-data imports
drwxr-xr-x  2 www-data www-data logs
drwxr-xr-x  2 www-data www-data photos

要点:该目录必须对 Web 服务用户(www-data)可写——照片、附件、导出文件、日志都写在这里。日志为 data/logs/galette.log(应用日志)与 data/logs/galette_install.log(安装/升级日志);目录自带的 .htaccess 会拒绝 HTTP 直访。日志级别与 SQL 调试开关在 config/behavior.inc.php 设置(该文件默认不存在,需从 behavior.inc.php.dist 复制改造,详见专栏配置篇)。

7.3 systemd 服务管理

Ubuntu 22.04 下 Apache 与 MariaDB 均由 systemd 托管,日常运维命令(每条只针对一个服务单元):

systemctl status apache2
systemctl restart apache2
systemctl reload apache2
systemctl status mariadb
systemctl restart mariadb

实测状态回显(systemctl status apache2 首行节选):

* apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2026-10-23 07:11:40 UTC; 6h ago

Galette 本身无独立守护进程——它是 PHP Web 应用,随 Apache 常驻;CLI 侧的邮件队列可由 cron 定时调 bin/console galette:mailing:process-queue 处理。

7.4 环境自检命令

装完或迁移后,用官方自检命令一键复核环境:

cd /var/www/galette-1.3.1
sudo -u www-data php bin/console galette:checks

实测回显:

Galette requirements checks
===========================

 * ✔️ PHP version: 8.3.36
 * ✔️ 'SimpleXML' module
 * ✔️ 'ctype' module
 * ✔️ 'dom' module
 * ✔️ 'fileinfo' module
 * ✔️ 'filter' module
 * ✔️ 'gd' module
 * ✔️ 'gettext' module
 * ✔️ 'iconv' module
 * ✔️ 'intl' module
 * ✔️ 'mbstring' module
 * ✔️ either 'mysql' or 'pgsql' PDO driver
 * ✔️ 'session' module
 * ✔️ 'curl' module
 * ✔️ 'openssl' module

Directories rights are not checked from the command line, it is not reliable enough

 [OK] Everything is OK :)

末行 [OK] Everything is OK :) 即环境健康;输出同时提示目录权限无法从命令行可靠检查,需按 7.2 节人工确认。

八、常见问题(FAQ)

Q1:访问首页一直 302 跳回 /installer.php,安装器又 302 回自己,死循环?

这是本文实测踩过的最典型问题,根因是 DocumentRoot 指错了层级。Galette 的目录是三层嵌套:解压根 galette-1.3.1/ → 应用目录 galette/ → Web 入口 webroot/。若 DocumentRoot 指到了解压根(如 /var/www/galette-1.3.1),请求 http://服务器/galette/webroot/installer.php 时实际文件路径变成 webroot/galette/webroot/installer.php——不存在,于是 webroot/.htaccess 的重写规则把它转到 index.php 前端控制器;index.php 检测到 config/config.inc.php 不存在(未安装),便执行 header('location: ./installer.php') 跳向 webroot/installer.php——而它同样因路径错配不存在,再次被重写、再跳转,形成 302 循环。

定位与解决(实测过程):先用探针文件确认请求根本没落到目标文件——复制一份 installer.php 为 installer_test.php 并在首行插入 <?php die('TOP-EXIT');,访问它若仍是 302 而非输出 TOP-EXIT,即可断定重定向发生在文件命中之前,问题在路径映射;随后检查 vhost 生效配置(apache2ctl -S 可见 DocumentRoot /var/www/html/galette-1.3.1/galette/webroot),把 DocumentRoot 与 <Directory> 两处都修正到 webroot/ 层级,systemctl reload apache2 后恢复 200。

Q2:安装器入口到底在哪个 URL?

DocumentRoot 指向 webroot/ 时就是站点根下的 /installer.php;Galette 也支持直接访问首页 /——检测到未安装会自动跳转过去。1.3.0 起安装/更新由锁文件保护:data/ENABLE_INSTALL 存在时安装器才可用,安装完成自动删除该文件;装完后若要重跑安装器(例如整体重装),手动 touch /var/www/galette-1.3.1/galette/data/ENABLE_INSTALL 即可重新启用,用完它会再次自动删除。

Q3:管理员密码被拒?

安装器要求超管密码最短 6 字符(1.3.1 官网公告明确"refuses it under 6 characters"),且第 5 步的两次输入必须一致;用户名不能含 @(安装器校验规则,实测命中时报 "The username cannot contain the @ character")。装完后忘记密码可用命令行重置:php bin/console galette:superadmin:password(1.3.0 新增命令)。

Q4:装完还能重装/切换数据库吗?

改库重装用方案 B 带 --ignore-config -w 重跑 galette:install(实测会将建表、配置、初始化三阶段完整重跑,回显见第五章);仅换数据库参数(迁移到另一台数据库服务器)则直接改 config/config.inc.php 的 7 个常量即可,无需重装。

Q5:从旧版本升级有什么坑?

1.3.0 起 PHP 最低版本提升到 8.3,fileinfo 扩展成为必需,浏览器必须启用 JavaScript;1.3.0 移除了 QMAIL 与 Gmail 两种邮件方式(分别回退为 sendmail 与 SMTP);1.3.0 的数据库结构有变更,升级前必须备份数据库;1.2 时代的插件全部需要换装 1.3 适配版(旧插件会被自动禁用)。1.3.0 → 1.3.1 无数据库变更,覆盖代码目录后按第九章步骤操作即可。

九、升级与多版本管理

Galette 的升级是"覆盖代码 + 跑更新向导/命令"模式,数据全部在数据库与 data/ 目录中,代码目录整体可替换:

  1. 备份:数据库侧 mariadb-dump -uroot galette > galette-backup.sql;文件侧打包 data/ 与 config/ 两个目录。
  2. 下载新版并解压到新目录(如 /var/www/galette-1.3.2/,与旧版并存)。
  3. 迁移植停资产:把旧版 galette/config/config.inc.php 复制到新版同名路径(更新模式会从该文件读取连接参数),data/ 目录整体拷贝或保持原位置不改 vhost。
  4. 切换 vhost 的 DocumentRoot 到新目录后 systemctl reload apache2。
  5. 执行更新:浏览器访问站点会自动进入更新向导(安装器检测到 config.inc.php 存在即切 UPDATE 模式),逐页确认即可;命令行党用 php bin/console galette:install(不带 --ignore-config,读现有配置走更新分支)。1.3.0 起更新过程也由锁文件保护。
  6. 验证:登录后台核对版本号(页面底部显示 Galette v1.3.1),跑 7.4 节 galette:checks。
  7. 回滚:vhost 指回旧目录 + reload 即回退到旧代码;数据库用第 1 步备份恢复(1.3.0 类有结构变更的升级,回滚必须恢复数据库)。

多版本并存时各版本目录独立、互不影响,同一时间只有一个版本被 vhost 暴露;确定稳定后删除废弃版本目录即可。

十、卸载与清理

按依赖反向顺序清理:

a2dissite galette
systemctl reload apache2
rm -f /etc/apache2/sites-available/galette.conf
mariadb -uroot -e "DROP DATABASE galette;"
mariadb -uroot -e "DROP USER 'galette'@'localhost';"
rm -rf /var/www/galette-1.3.1 /var/www/galette-1.3.1.tar.bz2

PHP 8.3 与 sury 源如无其他应用使用,可一并移除:

apt-get purge -y 'php8.3*'
add-apt-repository -y --remove ppa:ondrej/php

逐条说明:a2dissite 摘除站点后必须 reload 才生效;删库删账号一步完成数据与凭据清理;最后两行仅在确认无其他 PHP 应用时执行,purge 通配会连带 PHP 配置文件一起删除。

十一、参考链接