之前用的图床 sm.ms 的图片突然挂了。不知道为何,图片还是能够上传,但是访问图片的链接会出ERR_SPDY_PROTOCOL_ERROR的错误。

ERR_SPDY_PROTOCOL_ERROR错误示意图

正好我自己的翻墙服务器的硬盘长期富余。虽然只有十几个 G,搭建一个自己图床还是够用的。更重要的是,Dogital Ocean 的服务器的流量非常多(我买的 $5 的服务器的流量有一个 T)。我选择的开源图床框架是Lychee。这个框架支持 Docker 安装,可以省很多事情。

1 Docker 安装 Lychee

常规的安装方法可以参考官方文档。我这里只介绍 Docker 方式。如果你没有什么特别的需求,Docker 方式应该是非常适合你的。

注:这篇教程只是对于我的操作过程的一个记录,因此对于一些依赖环境的安装没有面面俱到。这些问题,都可以面向 google 进行解决。

1.1 Docker 环境准备

首先你要安装一个 Docker 环境。在 Ubuntu 上,安装非常简单:

1
2
sudo apt update
sudo apt install docker-io

有时还需要将你当前用户加入到docker组中,这样每次执行docker命令不需要加sudo了。这个操作可能在安装过程中自动完成了,如果你发现docker命令执行时提示有权限相关的问题,可以运行

1
sudo adduser user docker

注意确保一下docker-compose也安装完毕了。我们需要通过docker-compose来将 Lychee 和数据库组装在一起。

1
2
$ docker-compose -v
docker-compose version 1.17.1, build 6d101fb

1.2 安装 Lychee

首先创建好目录树:

1
2
3
4
5
lychee
|-- config
|-- db
|-- pictures
|-- docker-compose.yml

其中,configpictures分别用来存储 Lychee 的设置和图片文件。db文件夹则是用于数据库,这三个文件夹需要你手动创建。docker-compose.yml文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '1'
services:
lychee:
image: linuxserver/lychee
links:
- lychee-db:lychee-db
volumes:
- /path/to/lychee/config:/config
- /path/to/lychee/pictures:/pictures
ports:
- 8000:80

lychee-db:
image: mariadb:10
volumes:
- /path/to/lychee/db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=<choose root password>
- MYSQL_DATABASE=<db name>
- MYSQL_USER=<username>
- MYSQL_PASSWORD=<username>

目前我没发现 lychee 的这个镜像支持用环境变量来配置数据库信息。所以上面对应的数据库信息后续需要在网页端手动输入。

然后在这个文件夹下运行

1
docker-compose up -d

然后访问http://yourdoman.com:8000就可以访问了。

1.3 Lychee 配置

在访问上述网页之后,Lychee 会提示我们输入数据库信息。

Lychee 配置

注意这里的 Database Host 要填写lychee-db。其他的设置与上面的docker-compose.yml文件中的一致即可。

而后按照提示创建登录账户:

创建账户

2 Lychee Advanced

2.1 使用 Nginx 进行反向代理

Nginx 配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
server_name imgs.codewoody.com;
client_max_body_size 50M;

location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://localhost:8000;
}
}

2.2 启用 HTTPS

目前来看,Let's encrypt仍然是个人建站启用 HTTPS 的不二之选。其使用教程可以说是非常简明了,具体参考certbot