Ubuntu
如何將 CodiMD 設置為個人 wiki?
CodiMD非常適合協作工作,但我想在我的筆記型電腦 (Ubuntu 18.04) 上使用它來做個人筆記,配置它可以在沒有網際網路連接的情況下工作並使用盡可能少的資源。手動安裝似乎是一個很好的起點,但說明假設我不熟悉 Node、npm、數據庫管理員等知識。我不需要 TLS、使用者身份驗證或與雲服務的連接。
這是我到目前為止所擁有的:
sudo apt install -y nodejs npm sqlite3 sudo npm install -g node-gyp sudo npm install -g yarn # broken: sudo apt install -y libssl-dev git clone https://github.com/codimd/server.git cd server sudo bin/setup sudo vi config.json .sequelizerc # in vi, copy 4 "db" lines from "development" to "production" # in vi, disable "hsts" and "csp" # in vi, what should go in the "url" line? # in vi, what else needs modificaiton? sudo npm run build sudo npm start --production # fails: sequelize db:migrate && node app.js # what is the best way to start CodiMD at boot?
簡而言之,我正在尋找在 Ubuntu 上設置最少 1 個使用者的 CodiMD 的詳細說明。
我已經想通了。我把它放在一個 LXC 容器中,用於隔離和安全。我歡迎有關執行這些步驟的更好方法的建議。
lxc launch ubuntu:18.04/amd64 codimd lxc exec codimd -- apt update lxc exec codimd -- apt install -y nodejs npm sqlite3 lxc exec codimd -- npm install -g node-gyp lxc exec codimd -- npm install -g yarn lxc exec codimd -- git clone https://github.com/codimd/server.git lxc exec codimd -- bash -c 'cd server && bin/setup' VMIP=$(lxc list codimd -c4 --format=csv |grep -o '^\S*'); echo $VMIP # use this IP below lxc exec codimd -- vi server/config.json # in vi, under "production", set "domain" to the IP displayed above # in vi, copy 4 "db" lines from "development" to "production", add final comma # in vi, delete 8 "db" lines for "postgres" # in vi, delete 15 "saml" lines lxc exec codimd -- vi server/.sequelizerc # in vi, set "url" to 'sqlite://./db.codimd.sqlite' lxc exec codimd -- vi server/lib/config/default.js # in vi, set port to 80 lxc exec codimd -- bash -c 'cd server && npm run build' #test it: lxc exec codimd -- bash -c 'cd server && npm start --production' lxc exec codimd -- bash -c '(crontab -l 2>/dev/null; echo @reboot /bin/bash -c \""cd /root/server && npm start --production"\") |sudo crontab' lxc stop codimd && sleep 3 && lxc start codimd firefox "http://$VMIP"
2020-04-26 更新:我在 CodiMD 方面取得了長足的進步,但仍然喜歡它。以下步驟是我的“新改進”安裝過程。特別是,不應該
.js
像我上面那樣編輯文件,使用 Postgres 而不是 SQLite 和 http s。最後,如果有人對全域搜尋功能感興趣,我已將其添加到我在 Github 上的 CodiMD fork 中。但是,它需要兩個重要的警告:它打破了 CodiMD 權限模型,因為它允許任何登錄的使用者找到其他使用者的頁面;我認為它是“alpha”質量(儘管我已經使用了 7 個月沒有問題)。
這是我更新的安裝過程。
- 安裝 LXD:
sudo apt install -y lxd sudo lxd init --auto --storage-backend=dir
- 創建和更新容器:
lxc launch ubuntu:18.04 codimd lxc exec codimd -- apt update && lxc exec codimd -- apt upgrade -y
- 安裝 CodiMD:
lxc exec codimd -- apt install -y git nodejs npm postgresql lxc exec codimd -- npm install -g node-gyp lxc exec codimd -- npm install -g yarn lxc exec codimd -- git clone https://github.com/codimd/server.git lxc exec codimd -- bash -c 'cd server && bin/setup'
- 安裝 PostgreSQL:
lxc exec codimd -- sudo -i -u postgres createuser --createdb codimd lxc exec codimd -- sudo -i -u postgres createdb codimd lxc exec codimd -- useradd codimd lxc exec codimd -- mkdir /home/codimd lxc exec codimd -- chown -R codimd:codimd /home/codimd lxc exec codimd -- sudo -i -u codimd psql --command='\password codimd' # set password to <pgpass> lxc exec codimd -- sudo -i -u codimd psql --command='\conninfo' # verify
- 生成自簽名 TLS 證書(源):
lxc exec codimd -- openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/codimdselfsigned.key -out /etc/ssl/certs/codimdselfsigned.crt # use defaults except Common Name: $MYURL lxc exec codimd -- openssl dhparam -dsaparam -out /etc/ssl/dhparam.pem 4096
- 建造:
lxc exec codimd -- bash -c 'cd server && npm run build'
- 啟用防火牆(阻止出站網際網路,因此我們確定不需要它):
lxc exec codimd -- ufw enable lxc exec codimd -- ufw default allow incoming # allow inbound https, ssh lxc exec codimd -- ufw default deny outgoing
- 執行一次以檢查錯誤(ctrl-c 退出):
#test it: lxc exec codimd -- bash -c 'cd server && npm start --production'
- 添加使用者帳戶:
lxc exec codimd -- bash -c "cd server && NODE_ENV=production bin/manage_users --pass $USERPASSW --add $EMAIL1" lxc exec codimd -- bash -c "cd server && NODE_ENV=production bin/manage_users --pass $USERPASSW --add $EMAIL2" lxc exec codimd -- bash -c "cd server && NODE_ENV=production bin/manage_users --pass $USERPASSW --add $EMAIL3"
- 從引導開始(問題 #46):
cd /tmp printf "[Unit]\nDescription=CodiMD collaborative markdown notes\n" >codimd.service printf "Documentation=https://github.com/codimd/server\nAfter=network.target\nAfter=postgresql.service\n\n" >>codimd.service printf "[Service]\nType=exec\nRestartSec=2s\nUser=root\nGroup=root\nWorkingDirectory=/root/server\n" >>codimd.service printf "ExecStart=/usr/bin/npm start --production\nRestart=always\nPrivateTmp=true\nPrivateDevices=true\n\n" >>codimd.service printf "[Install]\nWantedBy=multi-user.target\n" >>codimd.service lxc file push codimd.service codimd/lib/systemd/system/codimd.service lxc exec codimd -- systemctl enable /lib/systemd/system/codimd.service lxc exec codimd -- systemctl daemon-reload lxc exec codimd -- systemctl enable codimd
- 要進行調試,請
log.console()
通過以下方式查看輸出:lxc exec codimd -- systemctl stop codimd lxc exec codimd -- bash -c 'cd server && npm start --production' #... monitor output; ctrl-c to quit lxc stop codimd; sleep 5; lxc start codimd
- 重新啟動並連接:
lxc stop codimd; sleep 5; lxc start codimd firefox "https://$MYURL"
- 在 Firefox 中,接受自簽名證書並登錄