Docker使用|觅思开源文档系统

532 阅读6分钟

Docker使用|觅思开源文档系统

觅思文档开源版

简介


MrDoc 是基于Python开发的在线文档系统,适合作为个人和中小型团队的私有云文档、云笔记和知识管理工具,致力于成为优秀的私有化在线文档部署方案。你可以简单粗暴地将 MrDoc 视为「可私有部署的语雀」和「可在线编辑文档的GitBook」。

觅思文档使用了以下技术栈:

  • 后端:Python + Django
  • 前端:LayUI + JQuery

适用场景


MrDoc 适用于个人云笔记、在线产品手册、团队内部知识库、在线电子教程等私有化部署场景。

安装手册


安装手册 https://doc.mrdoc.pro/doc/11/

  • 清晰的安装手册能够快速完成私有化部署

image-20240129212235431.png

image-20240129211700801.png

  • 安装手册支持Docker部署Linux部署Windows部署,步骤清晰明了。以下是部分截图说明,更多内容到觅思文档官网查看更多。
Docker部署

Docker 部署 doc.mrdoc.pro/doc/3958/

  • 支持离线部署与在线部署

    • 离线部署也提供了网盘地址,作者可以是很细的操作了。

    • 在线操作则是通过Docker获取镜像的方式

      • docker pull zmister/mrdoc:v7

image-20240129212309687.png

image-20240129212752868.png

Linux部署

MrDoc 使用的是 Python Django 框架,部署方案中也清楚的写明了需要配合 Nginx + uWSGI

Django框架的服务器架构一般是 Nginx + uWSGI + Django

image-20240129213544847.png

为什么使用Nginx?
  • Nginx是一个高性能的HTTP和反向代理web服务器服务器,暴露在公网相对比暴露服务是安全的
  • 处理静态资源, .css、.js、.html
  • 高性能,缓存一些动态内容
  • 可以进行多态服务器之间的负载均衡
为什么使用uWSGI?
  • Django本身提供了runserver,使用Django自带的WSGI Server运行,主要在测试和开发中使用,并且runserver开启的方式也是单进程。
  • uWSGI是一个Web服务器,它实现了WSGI协议(web服务网关接口)、uwsgi(线路协议)、http等协议。注意uwsgi是一种通信协议,而uWSGI是实现uwsgi协议和WSGI协议的Web服务器。uWSGI具有超快的性能、低内存占用和多app管理等优点,并且搭配着Nginx就是一个生产环境了,能够将用户访问请求与应用app隔离开,实现真正的部署。相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。
Windows部署

Windows部署项目,需要做两件事,一是项目启动(Python环境),另外就是部署后的访问工作(Nginx反向代理)

image-20240129214949435.png

安装使用


使用推荐的 Docker 方式安装部署

  • 拉取镜像docker pull zmister/mrdoc:v7

image-20240129215325220.png

  • 查看镜像docker images,没想到还是挺大的1.4G。

image-20240129215426660.png

  • 运行docker run -d --name mrdoc -p 8001:10086 -v /opt/MrDoc:/app/MrDoc zmister/mrdoc:v7

image-20240129220336637.png

  • 上述运行结果失败,是由于没有下载Gitee中的配置文件。赶紧下载配置文件到指定目录

image-20240129222511765.png

image-20240129222531609.png

  • 新建用户和修改用户密码

image-20240129222733682.png

  • 后续可以加装Nginx完善服务

image-20240129222830419.png

  • 我这里直接开放端口

image-20240129223324296.png

  • 访问结果

image-20240129223421218.png

image-20240129223603613.png

image-20240129224517709.png

学习到的内容

MySQL 数据库支持 emoji 的配置

MrDoc 仅支持 5.7 及以上版本的 MySQL

  • 修改数据库字符集编码
ALTER DATABASE 数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
  • 修改数据库表字符集编码
ALTER TABLE 数据库表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 如:
ALTER TABLE app_doc_doc CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE app_doc_doccomment CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE app_doc_dochistory CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE app_doc_doctemp CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE app_doc_project CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE app_admin_log CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Nginx 配置静态文件目录
    location ^~ /static/ {
      alias /www/wwwroot/MrDoc/static/;
    }
Nginx 配置反向代理和域名绑定

nginx.conf文件中,将下面的server部分增加至http分区内并重载配置

server {
    listen 你的端口;
    server_name 你的域名或IP;
​
    location / {
        proxy_pass http://127.0.0.1:10086;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header  X-Forwarded-Proto  $scheme;
        #Set Nginx Cache
        add_header Cache-Control no-cache;
        add_header X-Cache $upstream_cache_status;
        proxy_ignore_headers Set-Cookie Cache-Control expires;
        proxy_read_timeout 300;
    }
}
SFTP文件传输

我这台服务器一开始没有安装git,使用的是SFTP确实没有Git方便😢

  • 建立连接
[root@localhost ~]# sftp username@remote_ip # 连接root用户, 则可省略"root@"
[root@localhost ~]# sftp root@192.168.2.216
  • 上传文件
## 把本地服务器的/opt/testfile目录下面的test.log文件上传到远程服务器的/usr/local目录下。
sftp> lcd /opt/testfile
sftp> put test.log /usr/local## 上传文件夹:把本地服务器的 /opt/testfile 目录下面的 test 文件夹上传到远程服务器的/usr/local/test 目录下。
sftp> put -r test /usr/local/test## 查看远程服务器 /usr/local 目录下面的文件和文件夹
sftp> ls /usr/local## 查看本地服务器 /opt/testfile 目录下面的文件和文件夹
sftp> lls /usr/local
  • 下载文件
## 下载文件:把远程服务器的 /usr/local 目录下面的 test.log 文件下载到本地服务器的 /usr 目录下。
sftp> get /usr/local/test.log /usr## 下载文件夹:把远程服务器的 /usr/local 目录下面的 test文件夹 下载到本地服务器的 /usr 目录下。
sftp> get -r /usr/local/test /usr## 查看本地服务器 /usr 目录下面的文件和文件夹
sftp> lls /usr
  • 其他命令
ls, rm, cd, mkdir, pwd
lls, lrm, lcd, lmkdir, lpwd
防火前firewall

Mrdoc 部署没有使用 nginx ,而且直接打开的防火墙端口,可能用到的命令如下:

yum install firewalld

启动防火墙   systemctl start firewalld
关闭防火墙   systemctl stop firewalld
查看状态    systemctl status firewalld
开机禁用    systemctl disable firewalld
开机启动    systemctl enable firewalld
​
开放或关闭端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent # 开放80/tcp端口 (--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --query-port=80/tcp # 查看80/tcp端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent # 关闭80/tcp端口
​
批量开放或关闭端口:
firewall-cmd --zone=public --add-port=40000-45000/tcp --permanent # 批量开放端口,打开从4000045000之间的所有端口
firewall-cmd --zone=public --list-ports # 查看系统所有开放的端口
firewall-cmd --zone=public --remove-port=40000-45000/tcp --permanent # 批量关闭端口,关闭从4000045000之间的所有端口
​
更新防火墙的设置,使上面的修改生效:
firewall-cmd --reload
​
查看版本: firewall-cmd --version
​
查看帮助: firewall-cmd --help
​
显示状态: firewall-cmd --state
​
查看所有打开的端口: firewall-cmd --zone=public --list-ports
​
更新防火墙规则,重启服务: firewall-cmd --completely-reload