同一台 win10 服务器跑多个 wiki(包括 DokuWiki、django-wiki)

一、需求

在一台 win10 服务器上,需要搭建多个各不相干的 wiki 系统,用于不同小组访问。眼下最便捷的 wiki 系统,就是 dokuwiki 了,官方自带微型 apache 服务器、纯文本保存内容、无需数据库,直接运行就好了。

Dokuwiki的一个弱点是无法很好利用 Markdown 语法的便利性,因此又考虑在同一台服务器上搭建一个支持 Markdown 语法的 wiki。经了解,django-wiki 支持。

二、思路简述

  1. 利用 nginx 做反向代理,通过域名区别不同的wiki
  2. DokuWiki 可利用自带的微型 apache 服务器,服务在不同的端口上,实现多个实例
  3. 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

  1. 安装 python 3.7

  2. 修改 pip 的镜像指向。新建 C:\Users\Administrator\pip\pip.ini 文件,并添加下述内容:

    [global]
    index-url = https://mirrors.aliyun.com/pypi/simple/
    
    [install]
    trusted-host=mirrors.aliyun.com
    
  3. 安装 django-wiki 模块。 打开 CMD 窗口,直接运行 pip install wiki 即可。若不想将相关模块全局安装,可利用 python -m venv venv 命令新建虚拟环境、激活之后,再运行 pip install 相关命令。

  4. 新建 django-wiki 项目。进入 d:\public 目录,运行 django-admin.exe startproject django-wiki

  5. 修改 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'),
    ]
    
  6. 创建数据库表格。进入 d:\public\django-wiki目录,运行 python manage.py migrate

  7. 添加管理员。运行 python manage.py createsuperuser ,为网站创建一个管理员

  8. 修改项目 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 来实现。

  1. 关闭调试开关。继续打开 d:\public\django-wiki\django-wiki\settings.py 修改 DEBUG、ALLOWED_HOSTS 变量
    DEBUG = False
    ALLOWED_HOSTS = ['127.0.0.1','localhost']
    
  2. 整理静态文件。进入项目 d:\public\django-wiki\ 目录下,运行 python manage.py collectstatic
  3. 安装 waitress 服务器。使用命令安装之: pip install waitress,当前最新版本 1.3.1。安装完毕后,可以发现在 python 的目录下多了 waitress-serve.exe 文件。若使用虚拟环境,则可在虚拟环境目录下找到它 venv\Scripts\waitress-serve.exe
  4. 运行服务器:运行 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.orgwiki2.abc.orgwiki3.abc.org 几个域名,看看是否均正常访问。

四、参考


  1. DokuWiki 的官方文档 ↩︎

  2. django-wiki 的官方文档 ↩︎

  3. 各 wsgi 服务器对比 ↩︎

  4. waitress 的官方文档 ↩︎

  5. 在批处理文件中如何调用 python 虚拟环境激活脚本(activeate.bat) ↩︎

  6. nginx 相关文档 ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值