一、需求

在一台 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 staticurlpatterns = [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 相关文档 ↩︎

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

  1. java线程服务器_一台Java服务器跑多少个线程

    一台Java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值. 图:京东自研UMP监控分析 打出jstack文件,通过IBM Thread and Monitor Dump ...

  2. 一台 Java 服务器可以跑多少个线程?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 转自:简书,作者:新栋BOOK www.jianshu.com/p ...

  3. 线上经验总结:一台 Java 服务器可以跑多少个线程?

    一台java服务器能跑多少个线程? 这个问题来自一次线上报警如下图,超过了我们的配置阈值. 京东自研UMP监控分析 打出jstack文件,通过IBM Thread and Monitor Dump A ...

  4. bigint最大有多少位_一台 Java 服务器可以跑多少个线程?

    一台Java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值. 京东自研UMP监控分析 打出jstack文件,通过IBM Thread and Monitor Dump An ...

  5. 能跑java的服务器_一台java服务器可以跑多少个线程?

    一台java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值. 京东自研UMP监控分析 打出jstack文件,通过IBM Thread and Monitor Dump An ...

  6. java xss 默认值_一台 Java 服务器可以跑多少个线程?

    原标题:一台 Java 服务器可以跑多少个线程? 转自:简书,作者:新栋BOOK 一台Java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值. 京东自研UMP监控分析 打出 ...

  7. 为什么云服务器没西南的_去年“双11“我买的那台云服务器

    一.为什么会买云服务器 为什么初学者需要一台云服务器? 从我自己那仅有的一点经验来看, 重点无非这一个词:实践. 细数一下初学者拥有一台云服务器的好处: 学习操作系统.熟悉环境 大部分初学者在本地使用 ...

  8. 如何在20分钟内批量部署20台ESXi服务器?

    如何在20分钟内批量部署20台ESXi服务器? https://mp.weixin.qq.com/s?__biz=MjM5NTk0MTM1Mw==&mid=2650642256&idx ...

  9. 服务器跑项目,如何使用远程服务器跑项目

    如何使用远程服务器跑项目 内容精选 换一换 远程桌面协议(Remote Desktop Protocol,RDP),是微软提供的多通道的远程登录协议.本节为您介绍如何使用RDP文件远程登录Window ...

最新文章

  1. AI视觉组仙人一步之模型量化
  2. 评分卡上线后如何进行评分卡的监测
  3. 产品经理日常数据分析工作
  4. 【WebRTC---入门篇】(十四)WebRTC音视频录制
  5. 实时监控后台数据 vue_实时数据监控,快速掌握B站爆款视频热度走向
  6. opencv方框内图像保存_opencv 图像滤波(均值,方框,高斯,中值)
  7. python map lambda表达式_Python的lambda表达式、filter、map、reduce等函数的用法
  8. C++标准库分析总结(一)
  9. Python虚拟机之if控制流(一)
  10. 中国智慧园区未来发展趋势及投资战略规划研究报告2022年版
  11. (学习)如何科学合理的制定目标
  12. 常见网络延迟测量方法
  13. word中插入的图片会覆盖文字
  14. 计算机网络:P4.3-网络层(下)
  15. 安装Google三件套
  16. LitJson输出格式化Json字符串
  17. 网络攻防环境的搭建--MacOs配置Vmnet1及Vmnet8
  18. ROS kinetic环境使用Realsense D435i获取三维点云并存为.pcd文件
  19. Python解释器安装教程
  20. Unity商店下载的文件保存路径?

热门文章

  1. java-net-php-python-SSM病历管理系统计算机毕业设计程序
  2. C++笔记 20:宁以pass-by-reference-to-const替换pass-by-value
  3. 华为交换机重制_FAQ:5700能否通过reset按键清空配置
  4. CubeMX生成的代码烧录一次后无法再烧录(识别)STM32,需按住reset后放开才能烧录
  5. 具有中国风的传统颜色(炫酷)
  6. 15基于峰谷分时电价引导下的电动汽车充电负荷优化(matlab程序)
  7. 阿里巴巴-鹿班实验室算法实现系列
  8. STM32学习笔记(一)丨建立工程丨GPIO 通用输入输出
  9. Spring Cloud微服务开发笔记4——Ribbon框架使用方法
  10. 数据中心网络带宽线速有门道