Hexo翻修

Author Avatar
琉璃 1月 09, 2018

0x01 Introduction

我的服务器到现在为止就只运行了一个博客,而且还是hexo这样的静态博客。所有的资源全是静态的。视频和照片放在了网站目录下,设置了755的权限。这样有些浪费资源,我这样想。应该增加点什么功能。

不知道各位用过没有离线下载,有没有感受过国内下载国外的种子有多慢。离线下载的本质便是先把你需要下载的文件下载到服务器上,再在需要的时候把资源取回本地。离线下载的优势来自于服务器更高的带宽,强大的稳定性(自从升级到window inside,崩溃已成为家常便饭。)
windows inside
aria高速下载

那么怎么取回本地呢? 用同步软件!
什么东西是可以不用取回本地呢? 视频啊!我们可以直接在线播放视频,这样可以节省不少时间。
为了方便连接这些服务,为每一个服务都设置一个子域名,并且加上https。

我的系统是Ubuntu。

0x02 Hexo-edit

0x001 introduction

Hexo-editor
我第一个部署的服务是Hexo-edit(传送门)。Hexo-editor为编辑Hexo博客提供了一个在线的可视化的界面。以前,我通常是在本地写博客,写完后用github同步到Hexo上。Hexo-editor提供了一键publish和一键deploy。这对于把博客托管在github上的非常有用。但是对于我,把博客直接搭在vps上的人,deploy并不能实现我博客的更新。我需要修改一下程序来实现我想要的功能。并且编辑的时候,左边的可选项太少了。只有tag,time等选项。并没有comment等选项。

Hexo-editor

Hexo-editor支持插入图片,并且可以帮助你上传图片到Hexo-editor指定的目录,我需要自定义这个目录,例如我就把图片统一放在/static里。

*注意:*请不要在heox-blog的根目录下建立一个media的文件夹,来存放所有的媒体文件:音乐,视频等。在你执行hexo generate的时候,会出现kill。原因是media目录太大,渲染失败。Hexo的渲染器对于目录大小有限制,大约在5-10M。

我把所有媒体文件都放在了/var/www/hexo/static中。注意设置权限。sudo chown -R $USER:$USER /var/www/hexo/static sudo,chmod -R 755 /var/www/hexo

0x002 Installation

git clone https://github.com/tajpure/hexo-editor.git
cd hexo-editor
npm install --production
npm start

非常简单的安装.

如果想要改变端口,配置文件是hexo-editor/_config.yml。最后请不要忘记打开端口。以端口32400为例 sudo iptables -A INPUT -p tcp --dport 32400 -j ACCEPT

0x03 Aria2 and WebUI

0x001 Introduction

Aria2(传送门)是一款命令行下载工具。虽然只能用命令行使用Aria2,AriaNG(传送门),但是它的功能的确很强大,比迅雷强大的多。Aria支持种子,磁力链接,链接,metalink。可以手动设置每个服务器的最大连接数,可以设置多线程下载是区块的大小。也可以手动导入tracker server等。例如我们可以加入国内的一些节点,这样即使服务器在国外,也可以高速下载国内的种子。

虽然没有官方的GUI,但是第三方的GUI也是不错的。例如webui-aria2(传送门),AriaNG(传送门)。AriaNG是一个新上线的项目,star并不如webui-aria2多。 由于我第一个接触到的是webui-aria2,再加上webui-aria2和AriaNG在功能上没有特别大的差距,我就没有尝试AriaNG。
webui

0x002 Installation for Aria2

我们先安装Aria2,在安装它的GUI webui-aria2。
简单一些,对于Ubuntu的同学来说可以直接apt-get install aria2 这样做非常的快捷,只是版本比较老,为2015年发布的1.19。
关于编译请参考这篇文章(传送门)

从官方仓库直接下载旧版Aria2apt-get install aria2

0x003 Configuration for Aria2

#创建配置文件夹并进入
mkdir ~/.aria2 && cd ~/.aria2
#下载配置文件
wget http://cloud.vccvps.com/aria2/aria2.conf
#用来发现DHT节点,解决国外下载国内种子没有速度
wget http://cloud.vccvps.com/aria2/dht.dat
#创建一个空的 Aria2 下载任务保存文件
echo '' > /root/.aria2/aria2.session

由于有中文注释,所以aria2.conf打开可能会出现乱码。

添加了DHT节点后,我们可以继续添加Tracker Server。
这儿推荐一个自动更新的Tracker列表——>传送门
添加前20的节点到aria2.conf。
例如:

bt-tracker=udp://tracker.skyts.net:6969/announce,udp://tracker.safe.moe:6969/announce,udp://tracker.piratepublic.com:1337/announce,udp://tracker.pirateparty.gr:6969/announce,udp://tracker.coppersurfer.tk:6969/announce,udp://tracker.leechers-paradise.org:6969/announce,udp://allesanddro.de:1337/announce,udp://9.rarbg.com:2710/announce,http://p4p.arenabg.com:1337/announce,udp://p4p.arenabg.com:1337/announce,udp://tracker.opentrackr.org:1337/announce,http://tracker.opentrackr.org:1337/announce,udp://public.popcorn-tracker.org:6969/announce,udp://tracker2.christianbro.pw:6969/announce,udp://tracker1.xku.tv:6969/announce,udp://tracker1.wasabii.com.tw:6969/announce,udp://tracker.zer0day.to:1337/announce,udp://tracker.mg64.net:6969/announce,udp://peerfect.org:6969/announce,udp://open.facedatabg.net:6969/announce
#抗DMCA的服务器设置如下选项
enable-dht=true
bt-enable-lpd=true
enable-peer-exchange=true

如果想要开启token认证,在aria.conf写入:

rcp-secure=true
rcp-secret=your-secret-token

如果使用用户名和密码,在aria.conf写入:

rcp-secure=true
rpc-user=yourusername
rpc-passwd=yourpasswd

如果设置SSL,在aria.conf写入:

#关于如何用let's encrypt免费生成证书,将在之后 0x06 域名设置 中提到。
rpc-certificate=/etc/letsencrypt/live/yourdomain.com/fullchain.pem
rpc-private-key=/etc/letsencrypt/live/yourdomain.com/privkey.pem

附Aria2 参数翻译,请见文末

0x003 Starting Aria2

我们需要建立一个下载目录,例如 ~/aria2-download
启动Aria2 aria2c --enable-rpc --rpc-listen-all 可用tmux来管理窗口,或者防止关闭ssh窗口,服务自动结束

注意打开端口sudo iptables -A INPUT -p tcp --dport 32400 -j ACCEPT
注意下载目录的权限。
如果出现端口冲突,执行lsof -i :端口。然后杀死占用端口的进程kill -9 进程ID

0x004 Webui-aria2

#下载源码
git clone https://github.com/ziahamza/webui-aria2.git
#编辑配置文件
vim configuration.js

请注意配置encrypt(若为true,则意味着启用了SSL)。
auth的配置需要和aria2.conf中一致。
启动服务器node node-server.js
请注意打开端口sudo iptables -A INPUT -p tcp --dport 6800 -j ACCEPT

0x005 browse the service

访问youserverip:6800
左侧max-connection-per-server可以设置的最大值为16。
如果configuration.js中的encrypt设置为了`true,需要勾选启用 SSL/TLS 加密

0x04 Syncthing

0x001 Introduction

资源下完了接下来就是同步。开源的Syncthing更加适合用于服务器与服务器之间备份,它支持像github一样基于版本的更新及备份。但是它的速度并没有Resilio Sync快。并且它并没有苹果客户端。它拥有官方包以及社区封装的安装包。

0x002 Installation

安装syncthing官方版本。

sudo apt-get install apt-transport-https
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt-get update
sudo apt-get install syncthing

修改syncthing本地监听为公网监听。
修改/root/.config/syncthing/config.xml 中27行

<address>127.0.0.1:8384</address>
//修改为
<address>0.0.0.0:8384</address>

注意打开端口。
登陆 yourIP:8384

Syncthing支持KCP加速–>传送门

0x05 Resilio Sync

0x001 Introduction

Resilio Sync是一个跨平台支持P2P下载,节点越多下载速度越快的分布式网盘。即使单个节点向本地机器备份,速度也很快。然而它并不是开源的,pro版本支持选择性同步,支持加密后同步到第三方服务器。支持公网上相互同步,也支持内网中相互同步。文件大小没有限制,文件数量没有限制。Resilio Sync 在2.2x版本之前,Resilio Sync支持DHT,但是现在只支持官方Tracker Server。然而在中国Tracker Server被墙了。不走全局代理是没有办法连上Tracker Server的。

Resilio Sync 解决Tracker Server被屏蔽—>传送门

或者使用拥有DHT功能的旧版本Resilio Sync(又名BT Sync)—>下载地址来自官网:windows 7 or later

0x002 Installation

echo "deb http://linux-packages.resilio.com/resilio-sync/deb resilio-sync non-free" | sudo tee /etc/apt/sources.list.d/resilio-sync.list
wget -qO - https://linux-packages.resilio.com/resilio-sync/key.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install resilio-sync

启动

sudo service resilio-sync start|stop

开机自动启动

update-rc.d resilio-sync enable

修改配置文件/etc/resilio-sync/config.json,修改成0.0.0.0,公网监听。

"webui":
{
"listen" : "0.0.0.0:8888"
}

注意开启端口
注意端口冲突

重启Resili Sync,访问yourip:8888
同步时注意文件夹权限。
使用chown -R rslsync:rslsync /path/to/folder 来更改所有者

0x06 Plex

0x001 Introduction

Plex是一个多媒体管理软件。它可以帮助你管理视频,音乐,电影。它也可以帮助你进行转码,以流媒体的方式在线播放。例如你可以用离线下载,高速下载小姐姐,然后在线观看超清的小姐姐。想想是不是就很激动呢。

0x002 Installation

在plex注册,并下载最新的Ubuntu安装包。—>(官网)
使用dpkg -i pelxmeida.deb进行安装。

0x003 Configuration

启动Plex service plexmediaserver start
注意打开端口。
因为Plex只支持本地访问并配置,所以我们使用ssh隧道进行连接并且配置。
在这里我使用的是putty。首先正确配置putty,保证可以连接到服务器。
配置SSH Tunnels。

打开浏览器,访问http://localhost:8888/web
按着指示配置下去就好了。
注意媒体文件夹的权限
注意实时转码非常的慢。1080P实时转码一直卡,即使使用八核的vps。
我们可以先优化,先进行转码,转完码再看。这样我们只需要一个速度快一点的网。根据我自己的测试,一集23分钟的番533.8MB转码后的大小为2个G。也就是说你需要1.5M/s的实际网速才可以流畅播放1080P视频。

0x07 Mount digital space

0x001 Introduction

我们可以在vps上放这么多东西,20GB的空间怎么够?vps的空间也的确是贵。但是我们可以用云盘-Digitalocean space($5 250G)。我们可以将space挂载到vps上。

0x002 Installation

我们借助s3fs-fuse来进行挂载。

#下载编译工具
sudo apt-get install automake autotools-dev fuse g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
#下载源码
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
#编译
cd s3fs-fuse
./autogen.sh
./configure
make
sudo make install

0x002 Configuration

我们要拥有一个spaces,拥有API Spaces access keys的key和secret。由于secret刷新一次页面就会隐藏掉,所以我们要Generate new keys。记下key和secret。

#编辑配置文件
echo 'your-spaces-name:your-key:your-secret' > ~/.passwd-s3fs
#设置权限
chmod 0600 ~/.passwd-s3fs
#挂载
s3fs your-space-name /mount-directory -ourl=https://yourendpoint.com -o allow_other -o no_check_certificate

由于程序的不稳定,会遇到fail to connect。可以先umount在重新进行挂载s3fs your-space-name /mount-directory -ourl=https://yourendpoint.com -o allow_other -o no_check_certificate

#0x08 HTTPS
我们使用let’s encrypt来生成SSL证书

#安装certbot
apt-get install certbot
#为微服务,没有根目录的服务生成证书。注意停止nginx,因为生成证书需要占用443端口。
certbot certonly --standalone -d yourdomain.com

证书生成在/etc/letsencrypt/live/ 下对应的域名文件中。
证书的有效期为90天,所以我们将其设置为自动更新。
新建一个文件certbot-auto-renew-cron

15 2 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

每隔 两个月的 凌晨 2:15 执行 更新操作
最后加载脚本crontab certbot-auto-renew-cron

0x09 域名设置

首先添加A记录,设置子域名。
编辑nginx配置/etc/nginx/sites-available/default
以plex服务作为例子。Plex的端口是32400.
我们使用端口转发。

server{
 listen 80;
 listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/subdomain.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/subdomain.yourdomain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
 server_name yourdomain.com;
  location /{
 proxy_redirect off;
 proxy_pass http://127.0.0.1:32400;
}
}

重启nginx,就可以访问我们的子域名了。

0x09 参考

Aria 参数翻译


![](/static/images/hexo-gift.jpg)

This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:https://www.inevitable.tech/posts/d5256460/