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