如何将 CodiMD 设置为个人 wiki?

如何将 CodiMD 设置为个人 wiki?

科迪MD非常适合协作工作,但我想在我的笔记本电脑(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 的详细说明。

答案1

我已经想通了。为了隔离和安全,我把它放在 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,以及 https

最后,如果有人对全局搜索功能感兴趣,我已将其添加到我在 Github 上的 CodiMD 分支。然而,它需要两个重要的警告:它打破了 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 中,接受自签名证书并登录

相关内容