懒人的「图床」打造

以前写博客,图都放在新浪上,方便好用。

但从今年开始,新浪断断续续开始测试防盗链功能,最近几周影响已经十分明显。

在图片挂掉不少时,我就打定主意要从新浪图床迁移出去。

sm.ms 到微软的 OneDrive 都尝试过,结果都不甚理想,最终决定——

将图放回自己的机器上。

图片 Pixiv ID = 35192

确定思路

网上有很多图床解决方案,但是几乎毫无例外需要用到数据库。

我的机器配置很低,硬盘空间更是所剩无几,这个方法对我来说用不了,也挺麻烦。

思考的过程中,我突然意识到,这些图作为 Hexo 的源文件,本身就被我用 Syncthing 同步到各个设备上,包括这台服务器。

机器上已经有了这些图,那么只要用 Nginx 把链接指过去,就解决了呀。

大方向确定,再思考完善几个细节,我就开始动手。

实施

分配域名

直接用 IP 不方便管理,最好分配一个二级域名给它,比如我就把 pic.neko7ina.com 指向了机器。

使用 Syncthing 同步图片

因为我的图片本来就在 Syncthing 的同步内,这里就不展开,有需要的可以参考 这篇

将图片传到了服务器上,就可以开始下一步操作。

初步配置 Nginx

先配置一个 Nginx 试试效果,顺便也为了后面申请证书做准备工作。

我图片放置路径是 /home/syncthing/Desktop/Hexo/Hexo,那么新建一个 Nginx 配置:

1
vim /etc/nginx/conf.d/pic.conf
1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name pic.neko7ina.com;
location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
root /home/syncthing/Desktop/Hexo/Hexo;
access_log off;
expires 1d;
}
}
1
nginx -s reload

如果 80 端口防火墙没放行记得放行。

尝试访问一张图片,成功!

申请 SSL 证书

HTTPS 站点如果引入的资源是 HTTP 会被提示不安全,为了避免这种问题,我使用 Let’s Encrypt 申请 SSL 证书。

这里我们使用 acme.sh 的 Nginx 模式来申请证书:

1
curl  https://get.acme.sh | sh
1
acme.sh --issue  -d pic.neko7ina.com   --nginx

申请完毕后将证书安装到指定位置:

1
2
3
4
acme.sh  --installcert  -d  pic.neko7ina.com   \
--key-file /etc/nginx/ssl/pic.neko7ina.com.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "service nginx force-reload"

如果路径报错,就手动建下文件夹:

1
mkdir /etc/nginx/ssl

再执行即可。

最后开启自动更新,不出意外就不太需要管了。

1
acme.sh  --upgrade  --auto-upgrade

完善 Nginx 配置

重新修改 pic.conf 配置文件:

1
vim /etc/nginx/conf.d/pic.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
server {
listen 80;
server_name pic.neko7ina.com;
return 301 https://pic.neko7ina.com$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name pic.neko7ina.com;
access_log /var/log/nginx/pic_access.log;
error_log /var/log/nginx/pic_error.log;

ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/pic.neko7ina.com.key;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
index index.html index.htm index.nginx-debian.html;
location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
root /home/syncthing/Desktop/Hexo/Hexo;
access_log off;
expires 1d;
}
}
1
nginx -s reload

如果 443 端口防火墙没放行记得放行。

善后工作

将之前所有文档的图片链接都换成现在图片对应的链接就可以了。

在搭建自己的「图床」之前,我迁移过其他几个免费图床,这会甚至有点轻车熟路。

另外还要把图片处理一下,直接用原图太大,尤其是照片,会十分影响使用体验。

这里把照片 4K 的分辨率缩到 2K,再把所有图片压缩了一下,TinyPng 可是个好帮手。

到这里,所有工作就基本结束了。

结语

新浪图床这么多年的体验十分良好,不可谓不良心。

免费使用了这么久,我还是挺知足的。

以后,就要靠自己的机器活下去了。

慢是慢了点,好歹能看,不是吗?