Ubuntu

如何將 CodiMD 設置為個人 wiki?

  • April 26, 2020

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"
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 中,接受自簽名證書並登錄

引用自:https://unix.stackexchange.com/questions/518849