Docker使用|觅思开源文档系统
觅思文档开源版
简介
MrDoc 是基于Python开发的在线文档系统,适合作为个人和中小型团队的私有云文档、云笔记和知识管理工具,致力于成为优秀的私有化在线文档部署方案。你可以简单粗暴地将 MrDoc 视为「可私有部署的语雀」和「可在线编辑文档的GitBook」。
觅思文档使用了以下技术栈:
- 后端:
Python+Django - 前端:
LayUI+JQuery
适用场景
MrDoc 适用于个人云笔记、在线产品手册、团队内部知识库、在线电子教程等私有化部署场景。
安装手册
- 清晰的安装手册能够快速完成私有化部署
- 安装手册支持Docker部署、Linux部署、Windows部署,步骤清晰明了。以下是部分截图说明,更多内容到觅思文档官网查看更多。
Docker部署
Docker 部署 doc.mrdoc.pro/doc/3958/
-
支持离线部署与在线部署
-
离线部署也提供了网盘地址,作者可以是很细的操作了。
- 离线
Docker镜像下载链接: pan.baidu.com/s/1OExl7iEz… 提取码: fr87
- 离线
-
在线操作则是通过
Docker获取镜像的方式docker pull zmister/mrdoc:v7
-
Linux部署
MrDoc 使用的是 Python Django 框架,部署方案中也清楚的写明了需要配合 Nginx + uWSGI
Django框架的服务器架构一般是 Nginx + uWSGI + Django
为什么使用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反向代理)
安装使用
使用推荐的 Docker 方式安装部署
- 拉取镜像
docker pull zmister/mrdoc:v7
- 查看镜像
docker images,没想到还是挺大的1.4G。
- 运行
docker run -d --name mrdoc -p 8001:10086 -v /opt/MrDoc:/app/MrDoc zmister/mrdoc:v7
- 上述运行结果失败,是由于没有下载Gitee中的配置文件。赶紧下载配置文件到指定目录
- 新建用户和修改用户密码
- 后续可以加装
Nginx完善服务
- 我这里直接开放端口
- 访问结果
学习到的内容
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 # 批量开放端口,打开从40000到45000之间的所有端口
firewall-cmd --zone=public --list-ports # 查看系统所有开放的端口
firewall-cmd --zone=public --remove-port=40000-45000/tcp --permanent # 批量关闭端口,关闭从40000到45000之间的所有端口
更新防火墙的设置,使上面的修改生效:
firewall-cmd --reload
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则,重启服务: firewall-cmd --completely-reload