一些更新的设置

Yicheng 于 2020-05-10 发布

这几天断断续续地继续折腾 VPS 上的服务,主要是想把之前那套配置再优化一下。说实话,每次折腾完一个东西,总会发现还有更好的方案,然后就忍不住要试试。这次主要搞了这么几件事:

NPS:比 frp 更好用的内网穿透

之前一直用 frp,用着也还行,但是管理起来有点麻烦。每次要加个新的端口映射,都得去改配置文件,然后重启服务,挺繁琐的。

后来发现了 NPS,这玩意儿最大的优点就是有个 Web 管理界面,所有的配置都可以在浏览器里搞定,不用再去服务器上改配置文件了。

部署过程

NPS 的 Git 仓库里自带了两个 Dockerfile,分别是服务端和客户端的。编译镜像很简单:

docker build -t personal/npc:latest -f Dockerfile.npc .
docker build -t personal/nps:latest -f Dockerfile.nps .

然后编辑一下配置文件,运行服务端:

docker run --restart=unless-stopped -d --network host \
  -v /root/.acme.sh/yicheng.ren/:/ssl/ \
  -v $PWD/conf/:/conf/ \
  --name nps personal/nps:latest

这里我把 HTTPS 证书也一起挂载进去了,这样登录管理界面的时候就可以用 HTTPS 加密,安全一点。

启动好以后,打开管理界面长这样:

NPS管理界面

真的方便太多了! 所有的客户端、端口映射、流量统计都一目了然,再也不用去翻配置文件了。

客户端配置

在服务端的管理界面新增一个客户端,然后把 VKEY 复制下来,在客户端机器上运行:

docker run --restart=unless-stopped -d --network host \
  --name npc \
  -e SERVERIP=ip:8124 \
  -e VKEY='xxx vkey ccc' \
  personal/npc:latest

搞定。接下来所有的端口映射管理就可以在服务端的 Web 界面里完成了,再也不用 SSH 到客户端机器上改配置了。

编译 emacs 的 native-comp 分支

说起来这个也是一时兴起。看到有人说 emacs 的 native-comp 分支可以把 elisp 编译成原生代码,性能提升不少,就想试试。

其实编译过程和正常编译 emacs 差不多,就是多加了一个编译参数。具体步骤我就不详细写了,网上教程一大堆。

实际使用感受: 说实话,日常使用的时候,我没感觉到有特别明显的提升。但是有一个地方确实快了不少,就是用 pyim(中文输入法)的时候,尤其是通过 SSH 远程连接的时候,输入延迟明显减少了。这点还是挺爽的。

如何更新博客:从本地到 code-server

以前的本地配置

以前写博客的时候,都是在本地用 emacs 编辑 Markdown 文件,然后通过 rsync 或者 git push 上传到服务器,再在服务器端编译成静态网页发布到 webroot。为了方便,我写了点脚本可以一键搞定整个流程。

我一直以来用的 emacs + markdown 的配置长这样:

emacs截图

整个截图是一个 Emacs 窗口,上边是正在编辑的 Markdown 文件,下面是实时渲染出来的 HTML 预览。每次保存都会自动编译更新预览,用起来还挺顺手的。

新配置:使用 Code-server

有一天看到别人用 Visual Studio Code 的时候,第一眼觉得,emmm,和我的 emacs 差不多嘛。但是转眼一想,诶,可以弄个 code-server 直接跑在服务器上,然后在浏览器里直接编辑啊!

这样的话,不管我在哪台机器上,只要有浏览器就能写博客了,甚至用 iPad 都行。想到这里就立马动手了。

用 Docker 启动一个 code-server 很简单:

docker run --restart=unless-stopped -d -p 127.0.0.1:12345:8080 \
  -v "/path-to-blog:/home/blog/" \
  -v "/path-to-web-root:/home/webroot/" \
  -u "$(id -u):$(id -g)" \
  -e PASSWORD='登陆密码' \
  --name code-server codercom/code-server:latest

然后用 nginx 包上 HTTPS,在浏览器里打开,效果完美:

Code Server截图

太爽了! 下面还有 terminal 可以运行一个编译线程,检测到文件改动就自动发布到 webroot。在博客目录下运行:

bundle exec jekyll build -d /home/webroot -w -V -I

编辑 + 实时预览 + 实时发布! 而且因为是跑在浏览器里的,完全不依赖任何本地的设置。这样的话,我用 iPad 也可以随时随地更新博客了。

之前还在纠结要不要买个轻薄本出门写东西,现在看来完全不需要了,iPad + 键盘就够了。