一、需求
在一台 win10 服务器上,需要搭建多个各不相干的 wiki 系统,用于不同小组访问。眼下最便捷的 wiki 系统,就是 dokuwiki 了,官方自带微型 apache 服务器、纯文本保存内容、无需数据库,直接运行就好了。
Dokuwiki的一个弱点是无法很好利用 Markdown 语法的便利性,因此又考虑在同一台服务器上搭建一个支持 Markdown 语法的 wiki。经了解,django-wiki 支持。
二、思路简述
- 利用 nginx 做反向代理,通过域名区别不同的wiki
- DokuWiki 可利用自带的微型 apache 服务器,服务在不同的端口上,实现多个实例
- django-wiki 可利用 waitress 来部署在Windows下
三、详细动手
安装第一个 DokuWiki 1
到 DokuWiki 的官方下载页面(https://download.dokuwiki.org),给 Include Web-Server
选项打钩,去掉 Languages
列表中除了中文之外的其他所有语言,Popular Plugins
选项中的内容,根据实际需求选择,然后点击 Download
即可。
将下载到本地的压缩包解压的合适位置(譬如 d:\Public\DokuWiki1
下),然后运行自带的 run.cmd
,访问 http://127.0.0.1:8800 ,看是否成功
安装第二个 DokuWiki
利用上述步骤下载的压缩包,复制一份到另一目录(譬如 d:\Public\DokuWiki2
下),修改其中 server\conf
目录下的 httpd.conf 文件,将端口号改为 8802
,然后运行自带的 run.cmd
,访问 http://127.0.0.1:8802,看是否成功。
至此,两个 DokuWiki 已安装好。
安装 django-wiki 2
-
安装 python 3.7
-
修改 pip 的镜像指向。新建
C:\Users\Administrator\pip\pip.ini
文件,并添加下述内容:[global] index-url = https://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com
-
安装 django-wiki 模块。 打开 CMD 窗口,直接运行
pip install wiki
即可。若不想将相关模块全局安装,可利用python -m venv venv
命令新建虚拟环境、激活之后,再运行pip install
相关命令。 -
新建 django-wiki 项目。进入
d:\public
目录,运行django-admin.exe startproject django-wiki
-
修改 django-wiki 的配置。修改
d:\public\django-wiki\django-wiki\settings.py
文件,首先改INSTALLED_APPS
参数,添加如下模块:'django.contrib.sites.apps.SitesConfig', 'django.contrib.humanize.apps.HumanizeConfig', 'django_nyt.apps.DjangoNytConfig', 'mptt', 'sekizai', 'sorl.thumbnail', 'wiki.apps.WikiConfig', 'wiki.plugins.attachments.apps.AttachmentsConfig', 'wiki.plugins.notifications.apps.NotificationsConfig', 'wiki.plugins.images.apps.ImagesConfig', 'wiki.plugins.macros.apps.MacrosConfig',
其次,修改
TEMPLATES
参数,在context_processors
处,添加如下内容'sekizai.context_processors.sekizai',
最后,添加如下内容在
settings.py
的末尾:SITE_ID = 1 STATIC_ROOT = 'D:\Public\django-wiki\mywiki\static' #用于生产环境下存储静态文件 MEDIA_URL = "/media/" MEDIA_ROOT = os.path.join(BASE_DIR, "media") from django.urls import reverse_lazy LOGIN_REDIRECT_URL = reverse_lazy('wiki:get', kwargs={'path': ''}) LANGUAGES = [ ('en-us', 'English'), ('zh-hans', 'Chinese'), ]
-
创建数据库表格。进入
d:\public\django-wiki
目录,运行python manage.py migrate
-
添加管理员。运行
python manage.py createsuperuser
,为网站创建一个管理员 -
修改项目 url 的处理规则。将新建项目自带的 urls.py 改为如下内容:
from django.contrib import admin from django.urls import include, path from django.conf import settings from django.conf.urls.static import static urlpatterns = [ path('admin/', admin.site.urls), path('notifications/', include('django_nyt.urls')), path('', include('wiki.urls')), ] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
至此,整个项目即可通过 python manage.py runserver 8001
命令,在http://127.0.0.1:8001
地址处看到效果
最后,我们利用专业的 wsgi 服务器来部署 django-wiki。经了解 3,windows 环境下的 wsgi 服务器用 waitress 最简单,如果在 linux 环境下,也可以用 gunicorn、uWSGI 等。当然,不怕麻烦的可以考虑使用 apache 加上 mod_wsgi 来实现。
- 关闭调试开关。继续打开
d:\public\django-wiki\django-wiki\settings.py
修改 DEBUG、ALLOWED_HOSTS 变量DEBUG = False ALLOWED_HOSTS = ['127.0.0.1','localhost']
- 整理静态文件。进入项目
d:\public\django-wiki\
目录下,运行python manage.py collectstatic
- 安装 waitress 服务器。使用命令安装之:
pip install waitress
,当前最新版本 1.3.1。安装完毕后,可以发现在 python 的目录下多了 waitress-serve.exe 文件。若使用虚拟环境,则可在虚拟环境目录下找到它venv\Scripts\waitress-serve.exe
。 - 运行服务器:运行
waitress-serve --listen 127.0.0.1:8804 django-wiki.wsgi:application
即可启动服务器。 4
批量启动 wiki 服务们
至此,多个 wiki 系统已经安装完毕。我们需要提供一个快捷的手段,以便一次性启动他们。
另外,前面安装的两套 DokuWiki 一个问题,就是需要维持一个黑色的 CMD 窗口以便运行 apache 服务器。一旦关闭那个 CMD 窗口, apache 服务器进程就被关闭了。而 waitress-serve 命令也需要在 CMD 窗口下运行。这个问题可以通过“隐藏批处理窗口“相关技巧来解决。
打开 Dokuwiki 自带的 run.cmd 文件,可以看到核心语句就是一句 start /B mapache.exe
,因此我们可以单独写一个批处理文件,一次性启动两个 apache 进程和 waitress。新建 start_Dokuwikis.cmd
文件于d:\Public
下,内容如下: 5
@echo off
rem 下面这两句,实现了无窗口的脚本启动。其中第二句在第一次运行时会退出,再带着参数 h 运行第二次,此时就跳转到真正的代码处
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin
rem 启动两个小型 apache 服务器
cd D:\Public\DokuWiki1\server
start /B mapache.exe
cd D:\Public\DokuWiki2\server
start /B mapache.exe
rem 若有python虚拟环境,可使用下面这一句
rem call D:\public\django-wiki\venv\Scripts\activate.bat
cd D:\Public\django-wiki
waitress-serve --listen 127.0.0.1:8804 django-wiki.wsgi:application
安装 nginx
到 nginx 官方下载最新版(编写此文时为 1.16.1
)的 windows 系统包,直接解压到 D:\Public\nginx
下即可,然后打开 cmd 窗口,运行 start d:\public\nginx\nginx.exe
即可。然后修改 nginx\conf\nginx.conf
文件6
...
include server_wiki_1.conf;
include server_wiki_2.conf;
include server_django-wiki.conf;
server {
listen 80;
server_name *.abc.org;
...
在nginx\conf
目录下,新建 server_wiki_1.conf
文件,内容大致如下:
server {
listen 80;
server_name wiki1.abc.org;
charset utf-8;
location /{
proxy_pass http://127.0.0.1:8800;
}
access_log logs/private_wiki.log;
}
再新建server_wiki_2.conf
文件,内容与此大同小异,就是修改一下对应的域名与端口号而已。
最后新建 server-django-wiki.conf
文件,内容如下:
server {
listen 18099;
server_name wiki3.xacourt.org;
charset utf-8;
location /media/ {
root D:/Public/django-wiki/mywiki/;
try_files $uri =404;
}
location /static/ {
alias D:/Public/django-wiki/mywiki/static/;
}
location / {
proxy_pass http://127.0.0.1:8804;
}
access_log logs/server_django-wiki.log;
}
现在,我们用 nginx.exe -t
来测试一下配置文件是否有问题,没问题的话,运行 nginx.exe -s reload
即可加载最新配置文件。此时试试 wiki1.abc.org
、 wiki2.abc.org
、wiki3.abc.org
几个域名,看看是否均正常访问。