缘起
突然的想法, 搜索关键词Markdown+思维导图得到了MrDoc项目的介绍
MrDoc 是基于Python开发的在线文档系统,适合作为个人和小型团队的私有云文档、云笔记和知识管理工具。致力于成为优秀的私有化在线文档部署方案。
先下载了在 Win10 + Python3.8官方嵌入式精简环境下折腾一番, 顺利跑起来了...
进行了简单的测试, 功能也十分强大, 现在才0.67的版本, 不知道1.0版本会是什么样子, 期待
官方部署手册中使用Debian10环境, 有之前搭建本地SmartDNS和编译OpenWrt时折腾WSL下Debian系统的经验, 本以为是手拿把抓的简单事, 缺没想到...大坑(PS:折腾时间小于1天的算不上巨坑)
现在把一番折腾之后的经验顺过来记录一遍, 以鉴后来...自己翻看
第一步, 升级WSL2
早就知道WSL2各种秒杀WLS, 奈何需要启用Hyper-V, 一旦启用VMware就用不了了...
昨天折腾MrDoc实在是走投无路了, 搜关键词VMware
WSL2
共存
,看到这篇文章才放下心来, 开干
先查看系统版本号是否满足: Win+R
运行winver
, 要求版本号大于18917才行...不满足条件的可以歇歇了
关于开启WSL的方法, 参见搭建本地SmartDNS的经验, 这里只说升级.
下载升级WSL2组件,执行, 一路Next
...
# 查看WSL系统列表
wsl --list --verbose #或 wslconfig /l
# 设置默认启用WSL2
wsl --set-default-version 2
# 升级现有WSL Debian系统至WSL2
wsl --set-version Debian 2
如果现有系统目录巨大...还是放弃转换算了, 多装一个子系统会更快捷...:sob:
第二步, 启用systemd
参考
sudo apt install daemonize #安装依赖
sudo nano /etc/profile #编辑配置文件
# 追加如下内容
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
if [ -z "$SYSTEMD_PID" ]; then
sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
fi
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
fi
sudo nano /etc/sudoers # 编辑
# 追加
%sudo ALL=(ALL) NOPASSWD: /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
%sudo ALL=(ALL) NOPASSWD: /usr/bin/nsenter -t [0-9]* -a su - [a-zA-Z0-9]*
source /etc/profile # 应用上述修改内容
systemctl --version # 查看结果
这里可能需要重启电脑, 未验证
接下来的操作与官方《使用 Nginx + uWSGI 部署 MrDoc》内容一致, 不再赘述.
结果展示
WSL局域网服务
关键点: WSL添加静态IP Host端口映射
WSL添加静态IP, 参见:掩码对照表
ip addr add 172.27.127.2/28 broadcast 172.27.127.15 dev eth0 label eth0:1
嫌每次启动执行命令麻烦的话, 可以用服务的方式自动执行, 参考
本机端口映射:
netsh interface portproxy add v4tov4 80 172.27.127.2 86 0.0.0.0
解释:netsh interface portproxy add v4tov4 [监听端口] [转发地址] [转发端口] [监听地址]
最后在Win10防火墙中添加入站规则-端口-TCP-80-允许...
到这一步, 可以用Host的局域网ip访问WSL中的Debian下的MrDoc服务.
如果还要穿过路由器的话, 可以在路由器端设置端口转发规则或UPNP规则, 以OpenWrt为例, 网络-防火墙-端口转发, 如下图: