图床搭建

周末回来发现博客里的图片全成了码云的个性403了,原来是因为很多公共的图床存活不了多少年,而且当图不再使用时,不便于回收,所以在图床选择这方面,纠结了很久。后来Github认为在其上传图片获取外链并不算滥用,但是Github在国内的速度比较慢,对于背景图来说,就是肉眼可见的卡了。好在当时发现了Coding和码云,于是在码云(Gitee)上用其Issue页上传图片做图床。
然而不幸的是,大概他们是觉得滥用了,于是被防盗链了。

图床搭建

然后又像以前一样,对比了很多现有的图床,依然没找到能安心存放的地方。于是想到手里还有VPS,便打算搭建一个了。
最开始是一个同学送的天翼云,估计是办宽带送的,结果发现80和443端口全被封了,问客服说要备案才行,想着备案就备案吧,然而当看到备案要填的资料时,立马放弃了。
另一个就是Vultr上的,国外的云主机商相比于国内,条件限制宽了不少,不用动不动就实名或者备案,虽不会发表什么不当言论,但吃相看着令人难受。
现有图床挺多的,目前打算用一个开源的荔枝图床,有现成的Docker镜像,界面比较美观,官网在这

Docker环境安装

其实云主机还好,如果觉得官方的Docker下载太慢,也有Daocloud的CDN加速的镜像,直接一条命令就可以完成:

1
curl -sSL https://get.daocloud.io/docker | sh

等安装完成之后,就可以拉取镜像了,

1
docker pull kdelfour/lychee-docke

或者直接试运行,看看效果:

1
docker run -it -d -p 80:80 kdelfour/lychee-docke

这时,在本地浏览器输入云主机的IP,就可以看到一个基本的界面了。
完整的命令是:

1
docker run -it -d -p 80:80 -v /your-path/uploads/:/uploads/ -v /your-path/data/:/data/ -v /your-path/mysql/:/mysql/ kdelfour/lychee-docker

分别挂载上传图片的uploads文件夹、data文件夹和数据库储存的mysql文件夹,并映射80端口。
这时候再登陆该地址,会提示要初始化一些配置,可以用官方提供的配置:

1
2
3
4
url : localhost
database name : lychee
user name : lychee
user password : lychee

然后就是创建用户名和密码了,创建成功,图床已经初步建成。

但是现在直接做图床,看到的链接都是丑陋的IP和http字段组成的地址,干干巴巴,麻麻赖赖的,一点都不圆润。
所以接下来就要盘它了。一方面是IP更换为域名,另一方面是HTTP更换为更为安全的HTTPS。

域名申请

为IP申请一个域名,然后配置DNS,将域名直接以A类指向云主机IP即可。过一段时间应该就可以在本地看到域名解析生效:

1
$dig $YourUrl

然后直接在浏览器输入域名即可访问。

HTTPS支持

要将HTTP转为HTTPS主要有两个步骤,一个是申请证书,一个是安装证书。

SSL证书申请

偶然发现了FreeSSL这个网站,申请证书是真的方便,还有一个支持各大平台的客户端KeyManager,可以直接在里面申请Let’s Encrypt证书或者TrustAsia证书,一般前者半年,后者一年,因为比较懒,所以选后者。
在里面申请证书后,会有两种方法验证,一种是DNS验证,另一种是文件验证。
对于DNS验证,它会给你一串字符,让你到DNS解析设置里添加一个TXT解析,并粘贴为该字串。但是验证结果是香港和美国通过了,大陆总是验证失败,提示CNAME超时。因此选择文件验证了。
要将文件放在网站中进行验证,需要将其拷进Docker中,或者直接Docker容器中拷出来。

1
Docker cp $YourContainer:/var/www/lychee/ www/lychee/

然后将SSL验证文件放入该文件夹中重新挂载:

1
docker run -it -d -p 80:80 -v /root/images/uploads/:/uploads/ -v www/lychee/:/var/www/lychee/ -v data/:/data/ -v mysql/:/mysql/ kdelfour/lychee-docker

然后就可以验证成功了,之后可以生成证书并下载Nginx证书。

Nginx配置修改

接下来就是容器配置了,将HTTP转换为HTTPS。

SSL证书安装

首先将生成的证书放到网站的某个目录中,一个公钥和一个私钥。然后修改Docker容器的Nginx配置文件,也可以将其从容器中拷贝出来,再作修改:

1
docker cp $YourContainer:/etc/nginx/ nginx/

然后进入nginx/sites-enabled目录,修改lychee文件。
加入HTTPS的端口以及SSL证书的地址:

1
2
3
4
5
6
7
8
9
listen 443 ssl;
server_name localhost;
keepalive_timeout 70;
ssl on;
ssl_certificate /etc/nginx/sslkey/server.pem;
ssl_certificate_key /etc/nginx/sslkey/key.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

HTTP跳转

当使用HTTP访问时,直接跳转到HTTPS,有很多方法,这里使用497的错误码实现跳转:
在Nginx的Server配置中加上

1
error_page 497 https://$YourSite/

然后重新挂载容器,此时需要指定HTTPS协议的443端口,以及Nginx配置文件目录:

1
docker run -it -d -p 80:80 -p 443:443 -v nginx/:/etc/nginx/ -v uploads/:/uploads/ -v www/lychee/:/var/www/lychee/ -v data/:/data/ -v mysql/:/mysql/ kdelfour/lychee-docker

此时即可正常访问图床,示例如下:
imgcloud

分享
匿名评论