搭建一体化的博客与工具平台

博客目录

2019-03-30 15:30 CST

2019-09-30 13:46 CST

前情提要:

服务架构

经过多次删库跑路搬家之后,博客现在在阿里云驻扎了下来。整个服务器的结构大概如下:

  • 主站:个人首页以及博客、文档页面;
  • 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享受漂亮的界面

50分钟激情debug

以上内容参考网址:

私人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,如果路径不存在,会将路径加入其中(自动选择在前还是在后)。