本文面向有
手(需要一點點 Python Django 基礎)的小夥伴,急需文件管理者食用最佳。
作者:HelloGitHub-吱吱(首發於 HelloGitHub 公眾號)
嗷嗷待哺的小白:“今天又是沉迷花裡胡哨部落格的一天,我希望歸檔一類知識或者是連載一些教程,而部落格都是一篇篇散落的,沒有連貫性,閱讀體驗不太良好,怎麼辦呢?”
HelloGitHub:“那你可是問對人了,這期 《講解開源專案》 系列的新專案:MrDoc 覓道文件,將會解決你的煩惱。”
小白:“這又是什麼神奇的開源工具。”
HelloGitHub:“這是一個基於 Django 開發的線上文件系統,適合作為個人和小型團隊的私有云文件、雲筆記和知識管理工具。你看它介面簡潔,功能俱全,部署簡單。話不多說,直接開始實踐檢驗真理!”
一、簡單測試
HelloGitHub:“嘿嘿,先彆著急,我們先在本地平臺執行,測試測試功能,瞭解這個專案的基本使用,再一步步往前走。”
僅需 6 步你就可以從零執行起來這個專案!
1、我們本地的實驗環境是:
- Windows 10 64 位作業系統
- Python 3.7,pip 21.0.1
2、我們需要將開源專案克隆到本地,使用如下命令:
git clone https://github.com/zmister2016/MrDoc
3、為 MrDoc 安裝好所需的第三方庫:進入 Mrdoc/
目錄,執行如下命令:
4、初始化資料庫,該專案預設使用 sqlite 資料庫。在命令列下執行:
5、建立管理員賬戶,來管理整個 MrDoc 應用。注意使用者名稱和電子郵箱地址在整個 MrDoc 應用中是唯一的。
6、本地上線測試:在測試環境中,可以使用 Django 自帶的伺服器執行 MrDoc。
二、食用說明
小白搓搓手,期待:“我也在本地測試成功了,是不是可以探索一番裡面的彩蛋呢?”
HelloGitHub:“好嘞,專案主打的關鍵字就是:個人團隊協作和文件管理,讓我現在來給你展現一下五臟俱全的 MrDoc。”
2.1 註冊登入
HelloGitHub:“當我們訪問網站的時候,以遊客身份進行的。假如我們需要註冊一個普通使用者的帳號,則需要填寫相應的表單資訊,註冊完畢後會自動跳轉到已登入介面。”
小白:“補充:其實如果遊客想點選 新建
→ 新建文件
,也是需要登入操作的喲。”
2.2 文集文件
HelloGitHub:“當我們登入以後,可以在 新建
→ 新建文集
中建立一個文集。”
小白:“我發現了,可以點選首頁的文集,進入到文集的瀏覽閱讀頁面,還可以用 新增
新建一個文件。在進入文件編輯器頁面,我們可以 點選文件樹
選擇當前文件對應的上級或者 取消上級
,以及通過輸入 文件排序值
,來給不同文件排序。”
HelloGitHub:“嗯吶,現在我們就不用擔心教程學習類的文章不連續啦,因為他們都有層次順序的分佈在我們的文集中。不過因為目前 MrDoc 最多支援 3 級的文件,可別讓自己的文件樹太大鴨。”
HelloGitHub:“非常重要的一點是團隊的共享和協作。我們普通使用者可以對自己的文集進行管理,點選 個人中心
→ 我的文集
→ 文集管理
→ 文整合員
處的 協作管理
小圖示,可以新增協作人。而且在 文集管理
→ 操作
→ 文集設定
小圖示可以修改 基礎資訊
、許可權配置
和 管理控制
。當許可權設定為公開時,則當以遊客身份訪問網頁的時候能夠看到該文集;當許可權設定為私密,則只有自己能看到。當然也可以給固定的人看,這也就能實現了小團隊的共享。”
2.3 文件編輯
HelloGitHub:“現在我們把目光投向 MrDoc 的文件編輯和修改模組,它支援以 Markdown 和富文字兩種方式進行文件編寫,給我們提供了 3 種編輯器使用。它能支援插入數學公式、流程圖、序列圖、腦圖、Echarts 圖形圖表和時間線,能夠新增音視訊連結和圖片附件等,能夠建立文件模板,總之是概括不完了,圖也上不完了,需要在使用過程中慢慢的熟練。”
小白:“我現在也看得懂了,在 個人中心
→ 我的文件
→ 文件管理
中可以統一管理建立的所有文件,還可以看到 歷史版本管理
資訊呢,方便了使用者進行對比,也方便了團隊協作的管理。”
2.4 後臺管理【管理員】
HelloGitHub:“大 boss 的許可權必然是很高的,一切都收之眼底,包括使用者的文集、文件、文件模組,還可以進行使用者管理和站點設定。”
小白:“那我就做自己的主宰好了。”
三、上線部署
HelloGitHub:“已經瞭解了一些功能了,但是隻在本地跑會不會太拉垮了,是不是得考慮將這個專案部署到我們的雲伺服器上,讓自己的小團隊實現高大上的知識協作管理呀。”
小白:“可以和組裡的小夥伴多了一個摸魚工具,想想就很開心~”
HelloGitHub:“先部署好吧,誰知道過程中會出現一堆坑呢。為了比較順利的進行,我們這次的方法就選用官方提供的比較完整的教程:使用 Nginx + uWSGI
部署 MrDoc
。”
1、我們雲主機的環境是:
- Ubuntu 18.04.4 LTS
- Python 3.6.9,pip 21.0.1
- 在
~
目錄下進行,即用pwd
命令檢視為:/home/purple
,小夥伴們改成自己對應的目錄
2、安裝 uWSGI 和 Nginx:
sudo apt-get install uwsgi
sudo apt install uwsgi-plugin-python3
sudo apt-get install nginx
3、將 MrDoc 的原始碼拉取至本地(用之前的命令),但是為了不對伺服器上現存的環境造成影響,我們這次需要用到虛擬環境:
4、進入 MrDoc 資料夾,重複簡單測試的 3、4、5 步驟,分別實現依賴庫的安裝、初始化資料庫以及建立管理員賬號(略)。
5、我們在 ~
目錄下新建一個名為 mrdoc_deploy 的資料夾,命令如下所示,用於存放部署的相關檔案。
mkdir /home/purple/mrdoc_deploy
(1) uWSGI
配置檔案:
在 mrdoc_deploy
目錄下新建一個名為 uwsgi_params
的檔案,用 vim uwsgi_params
命令進行寫入:
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
在 mrdoc_deploy
目錄下新建一個名為 mrdoc_uwsgi.ini
的檔案,同理用 vim mrdoc_uwsgi.ini
寫入:
[uwsgi]
# Django-related settings
socket = :8008
# the base directory (full path)
chdir = /home/purple/MrDoc
virtualenv = /home/purple/mrdoc_env
# Django s wsgi file
module = MrDoc.wsgi:application
wsgi-file = MrDoc/wsgi.py
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 1
threads = 2
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
plugins = python3
vacuum = true
python-autoreload = 1
# buffer size
buffer-size = 65536
注:如果後續執行服務的時候出現如下問題,則需要調整 mrdoc_uwsgi.ini
下的 buffer-size
引數。
spawned uWSGI master process (pid: 21172)
spawned uWSGI worker 1 (pid: 21173, cores: 2)
invalid request block size: 21573 (max 4096)...skip
invalid request block size: 21573 (max 4096)...skip
(2) Nginx
配置檔案
在 mrdoc_deploy
目錄下新建一個名為 mrdoc_nginx.conf
的檔案,使用命令 vim mrdoc_nginx.conf
寫入如下內容:
server {
listen 80;
server_name 此處填入域名;
charset UTF-8;
access_log /var/log/nginx/mrdoc_access.log;
error_log /var/log/nginx/mrdoc_error.log;
client_max_body_size 75M;
location / {
include /home/purple/mrdoc_deploy/uwsgi_params;
uwsgi_pass 127.0.0.1:8008;
uwsgi_read_timeout 60;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /home/purple/MrDoc/static;
}
location /media {
alias /home/purple/MrDoc/media;
}
}
注意在 server_name
引數中,需要填入自己的域名。此處我填的是雲主機的公網 IP 地址,之後訪問網站則需要輸入該 IP 地址。
(3) 為了能讓 MrDoc 應用按我們的要求執行,使用 systemctl
工具來管理服務。
在 mrdoc_deploy
目錄下新建一個名為 mrdoc.service
的檔案,用命令 vim mrdoc.service
將如下內容寫入檔案:
[Unit]
Description = MrdocApp
After = syslog.target
[Install]
WantedBy = multi-user.target
[Service]
WorkingDirectory = /home/purple/MrDoc
ExecStart = /usr/bin/uwsgi --ini /home/purple/mrdoc_deploy/mrdoc_uwsgi.ini
User = purple
Restart = always
StandardError = syslog~
6、新增程式管理
sudo systemctl enable /home/zmister/mrdoc_deploy/mrdoc.service
7、建立 Nginx 站點軟連結
sudo ln -s /home/zmister/mrdoc_deploy/mrdoc_nginx.conf /etc/nginx/sites-enabled/mrdoc_nginx.conf
8、啟動 MrDoc 服務
sudo systemctl start mrdoc.service
注意:當試圖啟動的時候,出現如下報錯。原因是:在配置 mrdoc.service
的時候 ExecStart
引數如果按照官方文件寫的是 uwsgi
,但實際上應該寫成絕對路徑(可以檢視一下自己的路徑),我的是 /usr/bin/uwsgi
。
(mrdoc_env) purple@VM-Purplezi-Ubuntu ~ % sudo systemctl start mrdoc.service
Failed to start mrdoc.service: Unit mrdoc.service is not loaded properly: Exec format error.
See system logs and 'systemctl status mrdoc.service' for details.
四、最後的最後
小白:“課代表來了,一句話總結,只需要在部署的時候費點勁,之後就可以體驗這個專案帶給我們的方便快捷了,有手即可。”
HelloGitHub:“在官方文件中,其實還有一些功能沒有覆蓋到,比如說作者還提供了 MrDoc 瀏覽器擴充套件,有空記得去看看哇。記得要第一時間關注我們,我們將會不間斷正常執行為您帶來有趣的開源專案分享。”
關注 HelloGitHub 公眾號 第一時間收到更新。
還有更多開源專案的介紹和寶藏專案等待你的發現。