跳至内容

DokuWiki 服务器

先决条件和假设

  • 安装在服务器、容器或虚拟机上的 Rocky Linux 实例
  • 熟悉使用编辑器在命令行中修改配置文件(此处示例使用 vi,但您可以替换为您喜欢的编辑器)
  • 对 Web 应用程序和设置有一些了解
  • 使用 Apache Sites Enabled 进行设置。如有必要,请回顾。
  • 本文档将全程使用“example.com”作为域名
  • 您必须是 root 用户或能够使用 sudo 提升权限
  • 假设操作系统是全新安装的,但这不是必需的

简介

文档在组织中可以有多种形式。拥有一个可以引用的文档存储库是无价的。Wiki(在夏威夷语中意为“快速”)是一种将文档、流程说明、公司知识库甚至代码示例集中在一个地方的方式。维护 wiki 的 IT 专业人员,即使是秘密地进行,也能在忘记晦涩的例程时获得内置的保险。

DokuWiki 是一个成熟、快速的 wiki,无需数据库即可运行,具有内置的安全功能,并且部署起来并不复杂。有关更多信息,请查看他们的 网页

DokuWiki 是众多可用 wiki 中的一种,而且它是一个不错的选择。一个很大的优点是 DokuWiki 相对轻量,可以运行在已经运行其他服务的服务器上,前提是您有可用的空间和内存。

安装依赖项

DokuWiki 的最低 PHP 版本现在是 8。Rocky Linux 10 默认使用 PHP 8.3。请注意,此处列出的一些软件包可能已经存在

dnf install tar wget httpd php php-gd php-xml php-json php-mbstring

接受并安装这些软件包附带的任何其他列出的依赖项。

创建目录并更改配置

Apache 配置

如果您已经阅读了 Apache Sites Enabled 流程,您就知道需要创建几个目录。从 httpd 配置目录的添加开始

mkdir -p /etc/httpd/{sites-available,sites-enabled}

您需要编辑 httpd.conf 文件

vi /etc/httpd/conf/httpd.conf

将此添加到文件最底部

Include /etc/httpd/sites-enabled

在 sites-available 中创建站点配置文件

vi /etc/httpd/sites-available/com.example

该配置文件将与此类似

<VirtualHost *>
  ServerName    example.com
  DocumentRoot  /var/www/sub-domains/com.example/html

  <Directory ~ "/var/www/sub-domains/com.example/html/(bin/|conf/|data/|inc/)">
      <IfModule mod_authz_core.c>
                AllowOverride All
          Require all denied
      </IfModule>
      <IfModule !mod_authz_core.c>
          Order allow,deny
          Deny from all
      </IfModule>
  </Directory>

  ErrorLog   /var/log/httpd/example.com_error.log
  CustomLog  /var/log/httpd/example.com_access.log combined
</VirtualHost>

请注意,这里的“AllowOverride All”允许 .htaccess(目录特定安全)文件工作。

继续并将配置文件链接到 sites-enabled,但暂时不要启动 Web 服务

ln -s /etc/httpd/sites-available/com.example /etc/httpd/sites-enabled/

Apache DocumentRoot

您需要创建您的 DocumentRoot。使用以下命令进行操作

mkdir -p /var/www/sub-domains/com.example/html

安装 DokuWiki

在您的服务器上,切换到根目录。

cd /root

获取最新稳定版的 DokuWiki。您可以通过访问 下载页面 来找到它,并在页面左侧的“版本”下,您会看到“稳定版(推荐)(直接链接)”。

右键单击“直接链接”并复制链接。在您的 DokuWiki 服务器的控制台中,键入 wget 和一个空格,然后将您复制的链接粘贴到终端中。您应该会看到类似以下内容

wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz

在解压归档文件之前,使用 tar ztf 检查内容

tar ztvf dokuwiki-stable.tgz

请注意,所有其他类似文件的前面都有一个带有日期的目录

... (more above)
dokuwiki-2020-07-29/inc/lang/resetpwd.txt
dokuwiki-2020-07-29/inc/lang/draft.txt
dokuwiki-2020-07-29/inc/lang/recent.txt
... (more below)

解压归档文件时,您不希望有这个带日期的前导目录,因此请使用 tar 的一些选项来排除它。第一个选项是 --strip-components=1,它会删除前导目录。第二个选项是 -C 选项,它告诉 tar 您希望在哪里解压归档文件。解压将与此类似

tar xzf dokuwiki-stable.tgz  --strip-components=1 -C /var/www/sub-domains/com.example/html/

运行此命令后,所有 DokuWiki 文件都应该在您的 DocumentRoot 中。

您需要复制 DokuWiki 附带的 .htaccess.dist 文件,并保留旧文件以备需要恢复到原始文件。

在此过程中,您将把名称更改为 .htaccess。这是 apache 将要查找的。操作如下

cp /var/www/sub-domains/com.example/html/.htaccess{.dist,}

将新目录及其文件的所有权更改为 apache 用户和组

chown -Rf apache.apache /var/www/sub-domains/com.example/html

设置 DNS 或 /etc/hosts

在访问 DokuWiki 界面之前,必须为该站点设置名称解析。您可以使用 /etc/hosts 文件进行测试。

在此示例中,假设 DokuWiki 将运行在私有 IPv4 地址 10.56.233.179 上。假设您还修改了 Linux 工作站上的 /etc/hosts 文件。操作如下

sudo vi /etc/hosts

然后将您的 host 文件修改为类似如下(请注意示例中前面的 IP 地址)

127.0.0.1 localhost
127.0.1.1 myworkstation-home
10.56.233.179 example.com     example

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

完成测试并准备好向所有人公开后,您必须将此主机添加到 DNS 服务器。您可以使用 私有 DNS 服务器 或面向公众的 DNS 服务器。

启动 httpd

在启动 httpd 之前,请测试以确保您的配置无误

httpd -t

您应该会看到

Syntax OK

如果一切正常,您就可以启动 httpd 然后完成设置。首先,启用 httpd 在启动时启动

systemctl enable httpd

然后启动它

systemctl start httpd

测试 DokuWiki

下一步是打开 Web 浏览器并在地址栏中键入

http://example.com/install.php

这将带您进入设置屏幕

  • 在“Wiki 名称”字段中,输入您的 wiki 的名称。例如:“技术文档”
  • 在“超级用户”字段中,输入管理员用户名。例如:“admin”
  • 在“真实姓名”字段中,输入管理员用户的真实姓名
  • 在“电子邮件”字段中,输入管理员用户的电子邮件地址
  • 在“密码”字段中,输入管理员用户的安全密码
  • 在“再次输入”字段中,重新输入相同的密码
  • 在“初始 ACL 策略”下拉菜单中,选择最适合您环境的选项
  • 选择您希望将内容置于哪个许可证下的相应复选框
  • 保留选中(或取消选中,如果您愿意)“每月一次,将匿名使用数据发送给 DokuWiki 开发人员”复选框
  • 点击“保存”按钮

您的 wiki 现在已准备好添加内容。

保护 DokuWiki

除了您刚刚创建的 ACL 策略外,请考虑以下几点

您的 firewalld 防火墙

注意

此防火墙示例不假设您可能需要在 DokuWiki 服务器上允许其他哪些服务。这些规则基于您的测试环境,并且**仅**处理允许访问本地网络 IP 块。生产服务器需要允许更多服务。

在完成所有工作之前,您需要考虑安全性。首先,您应该在服务器上运行防火墙。

假设 10.0.0.0/8 网络上的任何人都在您的私有局域网内,并且只有这些人需要访问该站点。

如果您将 firewalld 用作防火墙,请使用以下规则语法

firewall-cmd --zone=trusted --add-source=10.0.0.0/8 --permanent
firewall-cmd --zone=trusted --add-service=http --add-service=https --permanent
firewall-cmd --reload

添加这些规则并重新加载 firewalld 服务后,列出您的区域以确保其中包含您需要的所有内容

firewall-cmd --zone=trusted --list-all

如果一切正常,这将类似于

trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: 
  sources: 10.0.0.0/8
  services: http https
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

SSL/TLS

您应该考虑使用 SSL/TLS 进行加密 Web 流量以获得最佳安全性。您可以从 SSL/TLS 提供商处购买 SSL/TLS 证书,或使用 Let's Encrypt

结论

无论您是需要记录流程、公司政策、程序代码还是其他内容,wiki 都是一种很好的方式。DokuWiki 是一款安全、灵活、易于使用的产品,并且易于安装和部署。它也是一个稳定且已存在多年的项目。

作者:Steven Spencer

贡献者:Ezequiel Bruni, Ganna Zhyrnova