MAC环境
列举些正在使用的软件。
为了更好隔离,专门开了个 nginx 的账户来存储 nginx 使用的静态网页。本来想不允许登陆该账户,但从 目前资料来看,如果在 passwd 中配置了 nologin Shell,则会导致连 ssh 都会登陆失败。想对于 bash,使 用 rssh 并不能带来安全级别提升。故当前方案保留了 bash,通过配置 ssh 只允许 rsync 命令。
rsynconly.sh脚本内容如下:
1 | #!/bin/bash |
把该文件保存到路径/bin/rsynconly.sh,注意加上执行权限chmod +x /bin/rsynconly.sh.
sshd_config找到 Match User 的地方,没有的话最后一行就可以,添加内容如下:
1 | Match User nginx |
这里其实就是对用户 nginx 的 ssh 连接进行限制,强制运行刚刚创建的脚本/bin/rsynconly.sh。
systemctl restart sshd
到此为止,整个搭建就完成了。可以愉快的使用 rsync 通过 ssh 传文件,并同时禁用了 ssh 直接登陆和执 行其他命令。
当使用 rsync 上传文件时,会先 ssh 登陆远程主机。可通过rsync -vvv source_file nginx@ip.address: 看到,其实调用了命令ssh -l nginx ip.address rsync --server -vvve.LsfxCIvu . ., 故在脚本
/bin/rsynconly.sh中的${SSH_ORIGINAL_COMMAND}是字符串:rsync --server -vvve.LsfxCIvu . .
纠结了下,还是选择hexo-filter-mathjax + hexo-renderer-pandoc方案。主要原因:
$, 相比hexo-math在书写起来会丝滑一点_所以就这么选择了。
按官方指引来,很是顺利.
奇怪的是我不安安装hexo-renderer-pandoc不转义_也可以生成成功, 如下面的Example。
那就先不安装hexo-reader-pandoc先吧, 后面有问题再说。
代码:
1 | - Inline: $\sum_{i=0}^{i<100}{x_i}$ |
效果:
过了一段时间没用了
没有网络前后端开发经验,没接触过Vue,懒得去研究代码了。看到Next主题支持Waline,还是直接上干脆一点。
经过了前面的折腾,Next的安装和配置就非常简单了,按官网一步步来就好了。
1 | location / { |
如果想快速的在新机器上用,就把waline的配置放到站点的根目录并存入仓库。
通过初步比对,决定先利用当前VPS + Docker + Sqlite搭建Waline评论系统。选择Waline是因为很多人用,并且评论无需注册,暂无安全漏洞。
由于Docker和Sqlite对我来说都是新鲜事物,所以看官方文档相对比较抽象点,就写一写步骤了。所以站在docker小白视角,总结一下。
这个按VPS操作系统的环境安装即可。记得启动Docker的Daemon。
按官方要求,执行下面3个动作:
1 | git clone https://github.com/lizheming/waline.git |
第1,2两条指令就不用多说了,对docker不了解的人看第3条指令就读天书一样(好在是执行不出状况),如果手敲的话不要漏了后面的’.'。
实际上第3条指令就是创建镜像了。-t选项是标签名,后面docker启动就靠它了。-f 指定dockerfile, dockerfile的内容就是构建镜像的指令和说明。
建一个目录为了干净一点,没其他目的,也就是说不是必要的。但要编辑一个docker-compose.yml文件:
1 | mkdir tmp |
文件内容如下:
1 | # docker-compose.yml |
按官网要求,把刚刚clone目录里面的../asset/waline.sqlite拷贝到自己配置的目录:完整路径是/home/nginx/data/waline.sqlite.
为了减少不必要的问题,直接用root启动吧:sudo docker compose up. 这时候,评论系统没什么问题的话就可以工作了,输入 http://localhost:8360 可以看到效果。
这个就没啥坑了, 先把网站暂停下,直接拷配置就可以看到效果:
1 | # proxy to 8360 |
如何将评论与文章关联起来?
问题提示: SQLITE_ERROR: no such table: wl_Comment
错误配置如下:
1 | # docker-compose.yml |
这里面有两个坑,主要是对Docker不熟悉引起:
我的配置是在SQLITE_DB后的名字用了’waline.sqlite’, 多加了sqlite后缀,去掉就好.
volumes和SQLITE_PATH含义没理解清楚,配置错误。volumes的值的意思是将本地目录和容器目录映射。
SQLITE_PATH是容器内部路径。
把坑1和坑2填平后,配置如上一节描述。
在搭建过程中参考了 https://waline.js.org/en/guide/deploy/vps.html https://dzyx.uk/2023/01/22/39/ https://vickey.fun/2022/08/09/Waline-Migration-From-CloudBase-to-Docker/ https://www.zdynb.cn/2022/shi-yong-docker-bu-shu-waline.html
Git 和 Nginx不是同一个用户,现在需要他们联系上,以便在Git有更新后Nginx可自动以更新网站内容。第一个方案是Git通过访问ngnix服务器,ngnix通过cgi运行shell脚本更新。
1 | $ ps -aux | grep nginx |
nginx 的work线程默认用http用户在跑。
1 | $ cat /etc/passwd | grep http |
对安全不是很懂,就按照能分就分的原则,把Nginx和http用户解耦一下,毕竟用Nginx不一定就是http。
1 | $ sudo useradd -d /home/nginx -s /usr/bin/nologin nginx |
账户和目录建好了,把网页拷到http目录下就好了。
...表示省略一些东西。注意不要忘了语句以;结尾(要不然服务启动不成功)。
文件: /etc/nginx/nginx.conf
1 | ... |
改好后运行 systemctl restart nginx, 搞定。
1 | $ ps -ef | grep nginx |
好, worker process是用nginx 跑了。
到此为止,git和nginx可以用各自账户跑了。接下来把git和nginx搭上线吧。