同一台 win10 服务器跑多个 wiki(包括 DokuWiki、django-wiki)
一、需求
在一台 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 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 来实现。
- 关闭调试开关。继续打开
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
几个域名,看看是否均正常访问。
四、参考
DokuWiki 的官方文档 ↩︎
django-wiki 的官方文档 ↩︎
各 wsgi 服务器对比 ↩︎
waitress 的官方文档 ↩︎
在批处理文件中如何调用 python 虚拟环境激活脚本(activeate.bat) ↩︎
nginx 相关文档 ↩︎
同一台 win10 服务器跑多个 wiki(包括 DokuWiki、django-wiki)相关推荐
- java线程服务器_一台Java服务器跑多少个线程
一台Java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值. 图:京东自研UMP监控分析 打出jstack文件,通过IBM Thread and Monitor Dump ...
- 一台 Java 服务器可以跑多少个线程?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 转自:简书,作者:新栋BOOK www.jianshu.com/p ...
- 线上经验总结:一台 Java 服务器可以跑多少个线程?
一台java服务器能跑多少个线程? 这个问题来自一次线上报警如下图,超过了我们的配置阈值. 京东自研UMP监控分析 打出jstack文件,通过IBM Thread and Monitor Dump A ...
- bigint最大有多少位_一台 Java 服务器可以跑多少个线程?
一台Java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值. 京东自研UMP监控分析 打出jstack文件,通过IBM Thread and Monitor Dump An ...
- 能跑java的服务器_一台java服务器可以跑多少个线程?
一台java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值. 京东自研UMP监控分析 打出jstack文件,通过IBM Thread and Monitor Dump An ...
- java xss 默认值_一台 Java 服务器可以跑多少个线程?
原标题:一台 Java 服务器可以跑多少个线程? 转自:简书,作者:新栋BOOK 一台Java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值. 京东自研UMP监控分析 打出 ...
- 为什么云服务器没西南的_去年“双11“我买的那台云服务器
一.为什么会买云服务器 为什么初学者需要一台云服务器? 从我自己那仅有的一点经验来看, 重点无非这一个词:实践. 细数一下初学者拥有一台云服务器的好处: 学习操作系统.熟悉环境 大部分初学者在本地使用 ...
- 如何在20分钟内批量部署20台ESXi服务器?
如何在20分钟内批量部署20台ESXi服务器? https://mp.weixin.qq.com/s?__biz=MjM5NTk0MTM1Mw==&mid=2650642256&idx ...
- 服务器跑项目,如何使用远程服务器跑项目
如何使用远程服务器跑项目 内容精选 换一换 远程桌面协议(Remote Desktop Protocol,RDP),是微软提供的多通道的远程登录协议.本节为您介绍如何使用RDP文件远程登录Window ...
最新文章
- AI视觉组仙人一步之模型量化
- 评分卡上线后如何进行评分卡的监测
- 产品经理日常数据分析工作
- 【WebRTC---入门篇】(十四)WebRTC音视频录制
- 实时监控后台数据 vue_实时数据监控,快速掌握B站爆款视频热度走向
- opencv方框内图像保存_opencv 图像滤波(均值,方框,高斯,中值)
- python map lambda表达式_Python的lambda表达式、filter、map、reduce等函数的用法
- C++标准库分析总结(一)
- Python虚拟机之if控制流(一)
- 中国智慧园区未来发展趋势及投资战略规划研究报告2022年版
- (学习)如何科学合理的制定目标
- 常见网络延迟测量方法
- word中插入的图片会覆盖文字
- 计算机网络:P4.3-网络层(下)
- 安装Google三件套
- LitJson输出格式化Json字符串
- 网络攻防环境的搭建--MacOs配置Vmnet1及Vmnet8
- ROS kinetic环境使用Realsense D435i获取三维点云并存为.pcd文件
- Python解释器安装教程
- Unity商店下载的文件保存路径?
热门文章
- java-net-php-python-SSM病历管理系统计算机毕业设计程序
- C++笔记 20:宁以pass-by-reference-to-const替换pass-by-value
- 华为交换机重制_FAQ:5700能否通过reset按键清空配置
- CubeMX生成的代码烧录一次后无法再烧录(识别)STM32,需按住reset后放开才能烧录
- 具有中国风的传统颜色(炫酷)
- 15基于峰谷分时电价引导下的电动汽车充电负荷优化(matlab程序)
- 阿里巴巴-鹿班实验室算法实现系列
- STM32学习笔记(一)丨建立工程丨GPIO 通用输入输出
- Spring Cloud微服务开发笔记4——Ribbon框架使用方法
- 数据中心网络带宽线速有门道