DirectAdmin 模板是什么?

DirectAdmin 模板是一系列文本文件,它们定义了 DirectAdmin 界面上显示的各种页面、邮件通知、配置文件生成规则等,当你在 DirectAdmin 中执行某个操作(如创建用户、修改域名设置)时,DirectAdmin 会调用相应的模板文件,将动态数据(如用户名、域名、IP地址等)填充进去,最终生成用户看到的 HTML 页面或服务器上的配置文件。

directadmin 模板
(图片来源网络,侵删)

模板就是 “静态结构” + “动态占位符” 的结合体。


模板的类型和存放位置

DirectAdmin 的模板主要分为两大类:用户界面模板系统/配置文件模板,它们存放在不同的目录中。

用户界面模板

这些模板控制着 DirectAdmin 用户和管理员在浏览器中看到的页面。

  • 存放位置: /usr/local/directadmin/data/templates/
  • 子目录:
    • language/: 存放语言包文件(.lang),这些文件本身也是一种特殊的模板,用于界面文字的翻译。
    • accounts/: 用户账户相关的页面模板,如注册、登录、账户信息等。
    • domains/: 域名管理相关的页面模板,如 DNS 管理、文件管理器、FTP 账户等。
    • resellers/: 经销商管理相关的页面模板。
    • admin/: 管理员管理相关的页面模板。
    • custom/: 极其重要! 这是自定义模板的目录,如果你修改了官方模板,官方更新后你的修改会被覆盖,所有自定义都应该在这个目录下进行,你可以将官方模板复制到这里进行修改。

系统/配置文件模板

这些模板是 DirectAdmin 自动化配置服务器的关键,当创建用户、添加域名时,DirectAdmin 会使用这些模板来生成实际的配置文件(如 Apache/Nginx 的虚拟主机文件、DNS 区域文件、Exim 邮件配置等)。

directadmin 模板
(图片来源网络,侵删)
  • 存放位置: /usr/local/directadmin/data/templates/
  • 重要子目录:
    • custom/: 同样,所有自定义的系统模板都应该放在这里。
    • virtual_host*.conf: 用于生成 Web 服务器(Apache/Nginx)的虚拟主机配置。
    • named.conf: 用于生成 DNS 服务器的配置。
    • spamd.conf: 用于生成 SpamAssassin 的配置。
    • exim.conf: 用于生成 Exim 邮件服务器的配置。
    • quota.conf: 用于生成磁盘配额配置。
    • user/: 为每个用户生成配置时使用的模板。
    • domain/: 为每个域名生成配置时使用的模板。

模板的基本语法

DirectAdmin 模板使用简单的标签语法来插入动态数据。

变量

变量是模板中最常见的元素,用花括号 包裹。

  • 示例:

    • {username}: 会被替换为当前用户的用户名。
    • {domain}: 会被替换为当前域名。
    • ip: 会被替换为服务器的 IP 地址。
    • email: 会被替换为用户的邮箱地址。
  • 如何知道有哪些变量可用? DirectAdmin 在处理模板时,会根据上下文提供一系列预定义的变量,最可靠的方法是查看 DirectAdmin 自带的模板文件,观察它们在不同场景下使用了哪些变量,你也可以通过 echo "show; template_vars" 命令(在 DA 命令行下)来查看某些特定操作的可用变量,但这比较复杂。

    directadmin 模板
    (图片来源网络,侵删)

条件语句

用于根据条件显示或隐藏内容。

  • 语法:

    {if condition}
        ... 内容1 ...
    {else}
        ... 内容2 ...
    {endif}
  • 示例:

    {if has_ssl}
        <a href="https://{domain}">访问 HTTPS 版本</a>
    {else}
        <a href="http://{domain}">访问 HTTP 版本</a>
    {endif}

    has_ssl 是一个布尔变量,如果域名启用了 SSL,则为真。

循环语句

用于遍历列表,例如显示一个用户的所有域名或所有 FTP 账户。

  • 语法:

    {loop name="list_name"}
        {value}
        {key}
    {endloop}
  • 示例: 在显示用户所有域名的列表时:

    <ul>
    {loop name="domains"}
        <li><a href="/domain/{value}">{value}</a></li>
    {endloop}
    </ul>

    这里 {value} 会循环替换为每个域名。


如何修改和使用模板(实战案例)

重要原则: 修改前务必备份原始模板,所有修改都应在 /usr/local/directadmin/data/templates/custom/ 目录下进行。

案例 1:修改用户登录后的欢迎页面

假设你想在用户登录后,欢迎页面显示服务器的 IP 地址。

  1. 找到原始模板:

    • 登录页面模板通常在 /usr/local/directadmin/data/templates/accounts/login.html
    • 登录成功后重定向的页面或欢迎信息可能在 /usr/local/directadmin/data/templates/accounts/index.html 或类似文件中,让我们假设是 index.html
  2. 复制到自定义目录:

    cp /usr/local/directadmin/data/templates/accounts/index.html /usr/local/directadmin/data/templates/custom/accounts/index.html
  3. 编辑自定义模板: 使用 vinano 编辑 /usr/local/directadmin/data/templates/custom/accounts/index.html。 假设文件中有一行 <h1>Welcome, {username}!</h1>,你想在下面添加一行显示 IP。

    修改为:

    <h1>Welcome, {username}!</h1>
    <p>You are logged into server: {ip}</p>
  4. 应用更改: 修改模板文件后,需要让 DirectAdmin 重新编译模板。

    # 进入 DA 的 scripts 目录
    cd /usr/local/directadmin/scripts
    # 运行模板更新脚本
    ./build_all_templates.sh

    运行此脚本后,所有用户再次登录时就会看到更新后的页面。

案例 2:为每个新创建的用户添加一个自定义的 PHP 文件

这个案例更高级,涉及到系统模板,假设你想在每个新用户的网站根目录下自动创建一个 info.php 文件。

  1. 找到并复制用户创建模板: 与域名创建相关的文件通常在 domain/ 目录下,我们需要找到在创建用户时执行文件操作的模板,这通常在 user 模板中,或者在 create_post.sh 脚本中处理,但更直接的方式是修改 virtual_host*.conf 模板,让它包含一个自定义的指令,但这很复杂。

    一个更简单的方法是使用 create_post.sh 脚本,它会在用户创建后执行,这个脚本位于 /usr/local/directadmin/scripts/custom/,如果目录不存在,请创建它。

  2. 创建或编辑 create_post.sh:

    mkdir -p /usr/local/directadmin/scripts/custom
    vi /usr/local/directadmin/scripts/custom/create_post.sh
  3. 编写脚本内容: 脚本需要接收用户名作为参数,内容如下:

    #!/bin/bash
    # DA 会将用户名作为第一个参数传递
    USERNAME=$1
    # 用户网站根目录
    USER_DIR="/home/${USERNAME}/domains"
    # 检查用户目录是否存在
    if [ -d "${USER_DIR}" ]; then
        # 遍历用户下的所有域名目录
        for DOMAIN_DIR in ${USER_DIR}/*; do
            if [ -d "${DOMAIN_DIR}" ]; then
                # 创建 info.php 文件
                echo "<?php phpinfo(); ?>" > "${DOMAIN_DIR}/public_html/info.php"
                echo "Created info.php for $(basename ${DOMAIN_DIR})"
            fi
        done
    fi
  4. 赋予执行权限:

    chmod +x /usr/local/directadmin/scripts/custom/create_post.sh
  5. 测试: 现在当你通过 DirectAdmin 创建一个新用户时,该脚本会自动执行,并在该用户所有域名的 public_html 目录下创建 info.php 文件。


主题与模板的关系

DirectAdmin 的 主题 本质上是一套预定义好的 UI 模板集合,它们存放在 /usr/local/directadmin/data/skins/ 目录下。

  • 当你选择一个主题(如 default, evolution)时,DirectAdmin 会优先从 /usr/local/directadmin/data/skins/{theme_name}/templates/ 目录下查找模板。
  • 如果在该主题目录下找不到,它会回退到 /usr/local/directadmin/data/templates/ 目录。
  • custom 目录的优先级最高:如果同时在主题目录和 /templates/custom/ 目录下存在同名模板,DirectAdmin 一定会优先使用 custom 目录下的版本,这就是为什么所有自定义都应该放在 custom 目录下的原因。

实用工具和资源

  1. build_all_templates.sh:

    • 位置: /usr/local/directadmin/scripts/
    • 作用: 重新编译所有模板,使修改生效,这是修改 UI 模板后必须执行的命令。
  2. build_confs.sh:

    • 位置: /usr/local/directadmin/scripts/
    • 作用: 重新生成所有用户的配置文件(如虚拟主机、DNS 等),当你修改了系统模板(如 virtual_host.conf)后,需要运行此脚本来让所有用户(或指定用户)的配置文件更新。
  3. 官方文档:

    • DirectAdmin 官方文档中关于模板的部分是最权威的参考,虽然有时比较简略,可以查阅 Customizing Templates 相关页面。
  4. 社区和论坛:

    • DirectAdmin 的官方论坛和社区(如 forums.directadmin.com)是解决模板问题的最佳场所,你可以找到很多现成的解决方案和经验分享。
特性 说明
核心功能 自动化生成配置文件和用户界面,实现批量定制。
关键目录 /usr/local/directadmin/data/templates/ (核心) 和 /usr/local/directadmin/data/templates/custom/ (自定义)。
语法 简单的 {variable}, {if/else/endif}, {loop/endloop}
操作流程 备份 -> 复制到 custom -> 编辑 -> 运行 build_all_templates.shbuild_confs.sh
主题 一套 UI 模板集合,custom 目录的优先级最高。

掌握 DirectAdmin 模板是成为 DirectAdmin 高级管理员的必经之路,它能让你极大地提升工作效率和服务器的可维护性。