Rukovoditel 3.7.3 Ubuntu 22.04 安装指南

在 Ubuntu 22.04.5 LTS 实机从零安装 Rukovoditel 3.7.3:Nginx/Apache 双方案 + MariaDB + PHP 8.1 + Web 安装向导四步全流程,命令与回显逐条实测。

RukovoditelRukovoditel项目管理PHP 应用2026/10/28

Rukovoditel 3.7.3 Ubuntu 22.04 安装指南

目标:在一台 Ubuntu 22.04.5 LTS 服务器上从零安装 Rukovoditel 3.7.3(PHP 8.1 + Nginx 或 Apache + MariaDB),完成 Web 安装向导并登录后台验证。本文全部命令与回显均在 Ubuntu 22.04.5 LTS(x86_64)实机环境逐条实测通过。

一、环境信息

本文实测环境与最终交付形态如下,读者可在同版本系统上逐步复现:

项目值
操作系统Ubuntu 22.04.5 LTS(x86_64)
应用版本Rukovoditel 3.7.3(官方 zip 安装包,37448263 字节,sha256 7148380b1844ae139d1967dda89f668995ccc812ea049582931f5ac8a6df5757)
Web 服务器方案 A:Nginx 1.18.0;方案 B:Apache 2.4.52(二选一)
PHP8.1.2-1ubuntu2.28(Ubuntu 22.04 官方仓库)
数据库MariaDB 10.6.23
应用目录/var/www/rukovoditel
数据库名/账号数据库 rukovoditel,专用账号 rukovoditel / q1w2e3r4
管理员账号admin / q1w2e3r4
监听端口80(HTTP,Web 安装向导与日常访问均走此端口)
cat /etc/os-release | head -2 && uname -m

实测回显:

PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
x86_64

💡 技术拓展:PHP 应用常见的三种与 Web 服务器的对接方式——mod_php(Apache 内嵌模块,性能好但资源占用随进程增长)、PHP-FPM + Nginx 反代(进程池独立管理,是当前主流)、PHP-CGI(老旧,不推荐)。本文方案 A 采用 PHP-FPM + Nginx(Ubuntu 22.04 官方仓库默认形态,内存可控、静态文件与动态请求分工清晰),方案 B 采用 Apache + mod_php(配置最简单,适合熟悉 Apache 的运维)。

二、前置条件

本章准备操作系统层面的基础环境:软件源、时间同步、基础工具。以下命令以 root 执行(普通用户请自行加 sudo)。

apt-get update

实测回显(节选):

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [129 kB]
Reading package lists... Done

安装本文用到的基础工具(下载、解压、校验):

apt-get install -y wget unzip curl

实测回显(节选):

Reading package lists... Done
Building dependency tree... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

⚠️ 注意:若服务器启用了 UFW 防火墙,需要放行 80 端口后浏览器才能访问安装向导:ufw allow 80/tcp && ufw reload。本文实测环境未启用 UFW,该命令与预期结果来自 Ubuntu 官方 ufw 用法,请按自身防火墙策略执行。

三、版本选型说明

Rukovoditel 官网(rukovoditel.net,查询日期 2026-10-28)当前最新稳定版为 3.7.3,运行要求为「PHP >= 8.0.2 与 MySQL」。Ubuntu 22.04 官方仓库自带的 PHP 8.1 满足该要求,因此无需引入第三方 PHP 源(如 ppa:ondrej/php 或 sury.org);MariaDB 10.6 是 Ubuntu 22.04 官方仓库的 MySQL 兼容实现,实测与 Rukovoditel 3.7.3 完全兼容。

版本对照表:

组件官方要求本文实测采用仓库来源
PHP>= 8.0.28.1.2-1ubuntu2.28Ubuntu 22.04 官方仓库
数据库MySQLMariaDB 10.6.23Ubuntu 22.04 官方仓库
安装包3.7.3 zip37448263 字节,sha256 见上表rukovoditel.net/download.php

关键差异解读:Rukovoditel 是纯 PHP 应用,无任何编译或守护进程组件,版本选型的核心是「PHP 版本达标 + 数据库可连」,其余组件按运维习惯选择即可。若需要 8.2/8.3 等更新 PHP 版本,可在完成本文安装流程后引入 ppa:ondrej/php 切换,应用本身无额外适配。

四、方案 A:Nginx + PHP-FPM 在线安装(LEMP,推荐)

本章是完整主线:安装 LEMP 组件 → 建库 → 下载解压安装包 → 配置 Nginx 站点 → systemd 托管 → Web 安装向导 → 登录验证。

4.1 安装 Nginx、MariaDB 与 PHP 8.1 扩展

一次性安装全部组件(Rukovoditel 实测需要的 PHP 扩展一并列出):

DEBIAN_FRONTEND=noninteractive apt-get install -y \
  nginx mariadb-server \
  php8.1-fpm php8.1-mysql php8.1-gd php8.1-curl php8.1-xml \
  php8.1-mbstring php8.1-zip php8.1-bcmath php8.1-intl

实测回显(节选):

Processing triggers for php8.1-cli (8.1.2-1ubuntu2.28) ...
Processing triggers for php8.1-fpm (8.1.2-1ubuntu2.28) ...

逐项确认 PHP 扩展已加载(对 php -m 模块清单做全词匹配,九个扩展全部在列即通过):

php -m | grep -xE "gd|curl|mbstring|xml|zip|mysqli|pdo_mysql|bcmath|intl"

实测回显(九个扩展全部在列,顺序即 PHP 模块字母序):

bcmath
curl
gd
intl
mbstring
mysqli
pdo_mysql
xml
zip

4.2 创建数据库与专用账号

Rukovoditel 安装向导需要「已存在或可创建的数据库 + 具备建表权限的账号」。Ubuntu 的 MariaDB 默认对 root 走 unix_socket 认证(本机 root 免密登录),直接执行:

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

实测回显:无输出(SQL 执行成功时静默)。用以下命令验证:

mysql -e "SHOW DATABASES;" | grep rukovoditel
mysql -urukovoditel -pq1w2e3r4 -e "SELECT 1;" > /dev/null && echo "账号验证 OK"

实测回显:

rukovoditel
账号验证 OK

4.3 下载并解压安装包

下载 3.7.3 安装包。官方下载页(rukovoditel.net/download.php)的下载动作需要先接受 cookie 确认页,wget 需带会话 cookie 两步下载:

cd /tmp
wget -q --keep-session-cookies --save-cookies=cookies.txt "https://www.rukovoditel.net/cookie_usage.php" -O /dev/null
wget -q --load-cookies=cookies.txt --keep-session-cookies --save-cookies=cookies.txt "https://www.rukovoditel.net/download.php?action=download" -O rukovoditel.zip
ls -la rukovoditel.zip && file rukovoditel.zip

实测回显:

-rw-r--r-- 1 root root 37448263 Aug 20 03:09 rukovoditel.zip
rukovoditel.zip: Zip archive data, at least v2.0 to extract, compression method=store

校验完整性(本文实测 sha256 值,若官方页公布校验值则以其为准):

sha256sum rukovoditel.zip

实测回显:

7148380b1844ae139d1967dda89f668995ccc812ea049582931f5ac8a6df5757  /tmp/rukovoditel.zip

解压到应用目录。注意 zip 包内直接是应用文件(无顶层目录),解压后 chown 给 PHP-FPM 运行账号 www-data:

mkdir -p /var/www/rukovoditel
unzip -q rukovoditel.zip -d /var/www/rukovoditel
chown -R www-data:www-data /var/www/rukovoditel
du -sh /var/www/rukovoditel && ls /var/www/rukovoditel | head -8

实测回显:

130M	/var/www/rukovoditel
api
backups
cache
config
cron
css
favicon.ico
images

4.4 配置 Nginx 站点

写入站点配置。关键点:client_max_body_size 64M(附件上传需要大于 PHP 默认 2M 限制)、fastcgi_pass 指向 PHP-FPM sock、屏蔽 backups/tmp/log/cache/includes 等目录的 Web 直访:

cat > /etc/nginx/sites-available/rukovoditel << 'EOF'
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    root /var/www/rukovoditel;
    index index.php index.html;
    client_max_body_size 64M;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_read_timeout 300;
    }

    location ~ /(backups|tmp|log|cache|includes)/ {
        deny all;
    }
}
EOF
rm -f /etc/nginx/sites-enabled/default
ln -sf /etc/nginx/sites-available/rukovoditel /etc/nginx/sites-enabled/rukovoditel
nginx -t

实测回显:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

4.5 systemd 托管与开机自启

Nginx、PHP-FPM、MariaDB 均由 systemd 管理(apt 安装时自动生成 unit 文件)。启动服务并设置开机自启(systemctl 每行仅操作一个单元):

systemctl start mariadb
systemctl start php8.1-fpm
systemctl start nginx

设置开机自启:

systemctl enable mariadb
systemctl enable php8.1-fpm
systemctl enable nginx

实测回显(三条分别执行):

Executing: /lib/systemd/systemd-sysv-install enable mariadb
Executing: /lib/systemd/systemd-sysv-install enable php8.1-fpm
Executing: /lib/systemd/systemd-sysv-install enable nginx

验证服务状态:

systemctl is-active mariadb; systemctl is-active php8.1-fpm; systemctl is-active nginx

实测回显(三行):

active
active
active

4.6 Web 安装向导(四步)

浏览器访问 http://<服务器IP>/,会自动跳转到安装向导。向导共四步:

第 1 步:选择语言。页面显示「Rukovoditel 3.7.3 Installation」与五个语言按钮(english / russian / german / italian / chinese),点击进入环境自检。

第 2 步:环境自检。页面标题 "Checking environment...",自检通过后显示:

Environment checked. No errors found. You can install Rukovoditel.

第 3 步:数据库配置。表单字段:DB Host(填 localhost)、DB Port(本机默认留空)、DB Name(填 rukovoditel)、DB Username(填 rukovoditel)、DB Password(填 q1w2e3r4),点击 "Install Database"。

第 4 步:应用配置与管理员账号。表单字段:Name of application(填 Rukovoditel)、Short name(填 RK,即浏览器标签页标题)、Time Zone(下拉选 Asia/Shanghai)、Username(填 admin)、Password(填 q1w2e3r4)、First Name(填 Admin)、Last Name(填 User)、Email(填 noreply@noreply.com),提交后自动跳转安装成功页。

安装成功后向导自动生成数据库配置文件并锁定。验证方式(在服务器上):

cat /var/www/rukovoditel/config/database.php

实测回显:

<?php

// define database connection
  define('DB_SERVER', 'localhost'); // eg, localhost - should not be empty for productive servers
  define('DB_SERVER_USERNAME', 'rukovoditel');
  define('DB_SERVER_PASSWORD', 'q1w2e3r4');
  define('DB_SERVER_PORT', '');
  define('DB_DATABASE', 'rukovoditel');
mysql -urukovoditel -pq1w2e3r4 rukovoditel -e "SELECT COUNT(*) AS tables_cnt FROM information_schema.tables WHERE table_schema='rukovoditel';"

实测回显:

tables_cnt
84

再次访问 http://<服务器IP>/install/ 应被自动重定向回首页(安装向导锁定验证):

curl -s -o /dev/null -w "install=%{http_code} -> %{redirect_url}\n" http://localhost/install/index.php

实测回显:

install=302 -> http://localhost/index.php

4.7 登录验证

浏览器打开 http://<服务器IP>/,输入 admin / q1w2e3r4 登录,进入 Dashboard 后浏览器标题显示 RK | Dashboard,右上角显示登录用户 Admin User。服务器侧验证登录页响应:

curl -s -I http://localhost/ | head -3

实测回显:

HTTP/1.1 302 Found
Server: nginx/1.18.0 (Ubuntu)
Content-Type: text/html; charset=UTF-8

(302 是未携带会话时跳转到登录页的正常行为;浏览器访问时输入账号密码即可进入仪表盘。)

五、方案 B:Apache + mod_php 在线安装(LAMP)

若运维栈是 Apache,可用本方案替换方案 A 的第 4.4 节(Nginx 配置)部分;4.1–4.3、4.5–4.7 步骤完全一致(Apache 场景下 80 端口由 apache2 占用,nginx 无需安装)。本章给出实测验证过的 Apache 配置。

安装 Apache 与 PHP 模块:

DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 libapache2-mod-php

实测回显(节选):

Processing triggers for libapache2-mod-php8.1 (8.1.2-1ubuntu2.28) ...

写入站点配置:

cat > /etc/apache2/sites-available/rukovoditel.conf << 'EOF'
<VirtualHost *:80>
    ServerName _
    DocumentRoot /var/www/rukovoditel
    <Directory /var/www/rukovoditel>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    <DirectoryMatch "/var/www/rukovoditel/(backups|tmp|log|cache|includes)">
        Require all denied
    </DirectoryMatch>
    ErrorLog ${APACHE_LOG_DIR}/rukovoditel_error.log
    CustomLog ${APACHE_LOG_DIR}/rukovoditel_access.log combined
</VirtualHost>
EOF
a2ensite rukovoditel
a2dissite 000-default
apache2ctl configtest

实测回显:

Syntax OK

启动并设置自启(每行一个单元):

systemctl start apache2
systemctl enable apache2

实测回显:

Executing: /lib/systemd/systemd-sysv-install enable apache2

验证(先确认 80 端口由 Apache 提供服务):

apachectl -v | head -1
systemctl is-active apache2
curl -s -o /dev/null -w "首页=%{http_code} " http://localhost/
curl -s -L http://localhost/ | grep -oE "<title>[^<]*" | head -1

实测回显:

Server version: Apache/2.4.52 (Ubuntu)
active
首页=302 <title>RK

首页=302 后跟随登录页 <title>RK,与方案 A 行为一致;后续 Web 安装向导步骤与 4.6 节完全相同。

六、方案 C:离线安装(断网环境)

内网隔离环境无法访问官方下载源时,把「在线机器上准备好的安装包与依赖」拷贝到目标服务器安装。本章标注了无法在线上复现的传输动作,其余命令与在线方案一致且已实测。

在有网的准备机上下载安装包(命令同 4.3 节两步 wget,产物 37448263 字节),并下载全部 deb 依赖包:

apt-get install -y --download-only nginx mariadb-server php8.1-fpm php8.1-mysql \
  php8.1-gd php8.1-curl php8.1-xml php8.1-mbstring php8.1-zip php8.1-bcmath php8.1-intl
ls /var/cache/apt/archives/*.deb | wc -l

预期结果:deb 包全部缓存到 /var/cache/apt/archives/(Ubuntu 22.04 全新环境约百余个,数量随环境略有差异;此下载动作在有网环境执行,本文实测环境已完成 apt 在线安装,未重复执行 --download-only)。

传输到目标服务器(scp / U 盘均可,此动作按各自内网规范执行):

scp rukovoditel.zip user@<目标服务器>:/tmp/
scp /var/cache/apt/archives/*.deb user@<目标服务器>:/tmp/debs/

在目标服务器上安装离线 deb 包(预期输出为逐包解包信息,最后一行 0 upgraded, 0 newly installed 表示无缺失依赖):

dpkg -i /tmp/debs/*.deb || apt-get install -f -y

之后的应用部署(解压、权限、Nginx/Apache 配置、Web 向导)与方案 A 的 4.3–4.7 节完全一致,不再重复。

七、多方案对比与选择建议

维度方案 A:Nginx + PHP-FPM方案 B:Apache + mod_php方案 C:离线部署
是否需联网需要(apt + 官网)需要(apt + 官网)不需要
Web 服务器版本nginx/1.18.0Apache/2.4.52与 A/B 一致
PHP 对接方式php8.1-fpm.socklibapache2-mod-php8.1与 A/B 一致
systemd 服务名nginx / php8.1-fpm / mariadbapache2 / mariadb与 A/B 一致
配置复杂度中(server 块 + fastcgi)低(VirtualHost)高(需预备包)
适用场景生产推荐、并发友好运维熟悉 Apache、小规模内网隔离

选择建议:可联网选方案 A(Nginx 内存占用更低、静态与动态请求分工清晰);团队已有 Apache 运维经验选方案 B;隔离内网只能走方案 C,并建议先在一台有网验证机上完整跑一遍方案 A 再打包。

八、配置说明

安装完成后与日常运维直接相关的三类配置位置:

1. 应用数据库配置:/var/www/rukovoditel/config/database.php(安装向导生成,含 DB_SERVER/DB_SERVER_USERNAME/DB_SERVER_PASSWORD/DB_SERVER_PORT/DB_DATABASE 五个常量;改数据库连接只需改此文件后重启 php-fpm:systemctl reload php8.1-fpm)。

2. 应用服务端配置:/var/www/rukovoditel/config/server.php(官方分发文件,含 SSL 开关 ENABLE_SSL、cron 域名 CRON_HTTP_SERVER_HOST、LDAP 登录开关、locale、会话与路径常量等),逐项含义见本系列《Rukovoditel 3.7.3 配置参数详解》。

3. PHP 运行限制:/etc/php/8.1/fpm/php.ini(Nginx 方案)或 /etc/php/8.1/apache2/php.ini(Apache 方案)。与附件上传直接相关的三项默认值(实测 grep 行号):

grep -nE "^upload_max_filesize|^post_max_size|^memory_limit" /etc/php/8.1/fpm/php.ini

实测回显:

430:memory_limit = 128M
698:post_max_size = 8M
850:upload_max_filesize = 2M

配套改法:upload_max_filesize 与 post_max_size 调至不超过 Nginx client_max_body_size(本文已设 64M),修改后 systemctl reload php8.1-fpm 生效。

4. 服务日志:Nginx 访问/错误日志在 /var/log/nginx/(access.log、error.log),Apache 站点日志为 /var/log/apache2/rukovoditel_error.log 与 rukovoditel_access.log(由上文 VirtualHost 指定),PHP-FPM 日志在 /var/log/php8.1-fpm/。

九、常见问题(FAQ)

Q1:官网下载链接直接 wget 得到的是 HTML 而不是 zip? 现象:wget https://www.rukovoditel.net/download.php?action=download 保存的文件是 16036 字节的 HTML(实测出现过,内容为 cookie 确认页)。原因:官方下载动作要求先经过 cookie_usage.php 确认页,无会话 cookie 会被 302 重定向。解决:按 4.3 节两步 wget(先带 --keep-session-cookies --save-cookies 访问 cookie_usage.php,再带 --load-cookies 下载),或用浏览器下载后上传。验证:file rukovoditel.zip 应输出 Zip archive data。

Q2:安装向导第 3 步提示数据库错误? 排查顺序:① systemctl is-active mariadb 确认数据库在跑;② mysql -urukovoditel -pq1w2e3r4 -e "SELECT 1" 验证账号密码;③ 确认 4.2 节的 GRANT 语句对 rukovoditel 库授权(Rukovoditel 安装时需要建表权限,实测需要 Select/Insert/Update/Delete/Create/Drop/Alter 权限)。表结构导入成功后应用共 84 张表(实测值)。

Q3:登录页能打开但登录后跳回登录页? 多为 PHP 会话目录或 cookie 域问题。检查 /var/www/rukovoditel/config/server.php 中 SESSION_COOKIE_DOMAIN 保持空值、STORE_SESSIONS 为 'mysql'(默认将会话存数据库,规避了目录权限问题);浏览器侧清除该站点 cookie 后重试。

Q4:上传附件失败? 按序检查三层限制:PHP upload_max_filesize(默认 2M,见第八节)→ post_max_size(默认 8M)→ Nginx client_max_body_size(本文配置 64M)。任一层小于上传文件大小都会失败;修改后分别 reload php8.1-fpm / nginx。

Q5:浏览器访问一直 502? 502 表示 Nginx 无法连接 PHP-FPM。执行 systemctl is-active php8.1-fpm 确认状态;确认 ls /run/php/php8.1-fpm.sock 存在且与 Nginx 配置中 fastcgi_pass 的 sock 路径一致。实测环境 sock 文件为 /run/php/php8.1-fpm.sock。

十、卸载与清理

按依赖反向顺序清理。先停服务(每行一个单元):

systemctl stop nginx
systemctl stop php8.1-fpm
systemctl stop mariadb

删除应用目录与站点配置:

rm -rf /var/www/rukovoditel
rm -f /etc/nginx/sites-enabled/rukovoditel /etc/nginx/sites-available/rukovoditel

卸载软件包并删除数据库(⚠️ 删除数据库不可恢复,执行前确认已按运维篇备份):

apt-get purge -y nginx php8.1-fpm mariadb-server
mysql -e "DROP DATABASE IF EXISTS rukovoditel; DROP USER IF EXISTS 'rukovoditel'@'localhost';"

清理残留配置(purge 后核对):

ls /etc/nginx /etc/php 2>/dev/null || echo "配置目录已清除"

十一、参考链接