搭建一体化的博客与工具平台
前情提要:
服务架构
经过多次删库跑路搬家之后,博客现在在阿里云驻扎了下来。整个服务器的结构大概如下:
- 主站:个人首页以及博客、文档页面;
- IPY:Jupyter Notebook,快乐的云端计算器;
- VCS:因为服务器比较烂只能用Gitea了,这个git系统同时负责博客的自动更新和部署;
- NAS:服务器放在宿舍,存储文件。
👆博客主页的传送门
主页+博客
主页采用了一套自己瞎JB写的博客系统(有GitHub开源版本),工作流程大概如下:
- 本地使用R Markdown来撰写内容;
- 使用git传至服务器,触发自动部署;
- 文本通过Lumen解析后塞入数据库,作为数据缓存;
- 其他的附件和图片复制到public目录,可直接访问。
右侧为本地文档源码,左侧为服务端显示效果。
云端计算器
自从被班上同学安利Anaconda之后就爱不释手(误),服务器上也安装了Anaconda3,大礼包内自带Jupyter。于是打算用Apache做反向代理来使用Jupyter Notebook服务。
然而Jupyter对请求来源有验证,且内核连接使用WebSocket而非HTTP,需要特殊配置。(Kernel始终无法连接,经过一个小时debug后才知道是因为httpd没有加载ws的反向代理模块……f**k)
参考配置:
-
为Jupyter创建单独用户,在
/etc/sudoers
中给予ALL=(ALL)
权限(与root同等) -
设置Jupyter配置文件,监听所有地址(
c.NotebookApp.ip = 0.0.0.0
)并允许指定来源访问(c.NotebookApp.allow_origin = 'https://YOUR_HOST'
)。 -
创建systemctl服务文件,保存并启用。参考如下:
[Unit] Description=Jupyter Notebook [Service] RestartSec=5s Type=simple User=jupyter Group=jupyter WorkingDirectory=/home/jupyter ExecStart=/usr/local/anaconda3/bin/jupyter notebook Restart=always Environment=USER=jupyter HOME=/home/jupyter [Install] WantedBy=multi-user.target
-
为Apache开启反向代理(需要启用HTTP和WS两种协议的模块)。参考如下,注意WS协议一定要比HTTP早出现。
RewriteEngine On RewriteCond %{HTTP:Connection} Upgrade [NC] RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteRule /(.*) ws://localhost:8888/$1 [P,L] <Location "/"> ProxyPreserveHost on ProxyPassReverse http://localhost:8888/ ProxyPass http://localhost:8888/ </Location>
-
安装Jupyter Theme享受漂亮的界面
以上内容参考网址:
- https://github.com/jupyterhub/jupyterhub/issues/219
- https://www.linode.com/docs/applications/big-data/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy/
私人git服务器
个人感受:
- GitLab太吃内存,都不需要运行就可以让load average飙上30,穷逼的我用不起。
- Gitea的文档像$hit,各种冒出来莫名其妙的你还没见过的文件(夹),更不用说残缺(残念)的中文版文档。
- Gogs单独开发的观念不太喜欢,所以没考虑用。
GitBucket没有考虑过。
如何安装(存档):
- 下载最新的可执行文件,给予
x
权限。(强烈指责官方文档内容与最新版本脱节) - 根据官方文档创建
/etc/gitea
和/var/lib/gitea
两个文件夹,分别给予读写权限。 - 创建
git
用户,给予权限。 - 创建系统服务,把官方给的设置贴进去即可。
- 祈祷没有权限错误,然后启动系统服务。(如果报错就对着
journalctl
改直到他能运行为止) - 设置Apache反向代理(比上面的简单很多),访问主页打开安装页面
- 官方文档根本没说该怎么做:不要修改监听的端口号,他们根本不会出现在地址中。只要把SSH和页面地址的3000端口去掉,改成正确的域名/IP地址就可以了。
如果某个选项没有设置,他是不会出现在app.ini
中的,只能通过解锁安装权限重新访问这个页面才能设置(或者去看cheatsheet)。除了安装界面不能修改程序设置的设定真的是脑残,此处给GitLab100个好评。
自动部署和权限设置在这篇文章里,这里不再写了。
CentOS特别注意内容(存档)
git
CentOS的git版本只有1.8,不支持LFS等功能,Gitea运行会报错。安装新版方法是首先用yum
删除旧版,然后下载源码,需要perl
等语言的编译器。
编译时需要去掉liconv
库,编译命令为
./configure --without-iconv
make CFLAGS=-liconv prefix=/usr/local/git all
make CFLAGS=-liconv prefix=/usr/local/git install
参考:
php
和上面一样,CentOS只有PHP5,需要手动编译PHP7。
pathmunge
修改/etc/profile.d/xxx.sh
,内容为
pathmunge /PATH_TO_BIN
会自动扫描PATH
,如果路径不存在,会将路径加入其中(自动选择在前还是在后)。
<EOF>
Loading Comments By Disqus