前言
之前使用的是公共图床:微博图床
,把图片存在其他平台其实风险很高,那就把vps利用起来,自建图床吧。
现状
- 操作系统:ubuntu18.04
- 已安装软件:nginx(反向代理,web站点)、v2ray(用于科学上网)、modsecurity(WAF)
图床软件选择
google了一圈,现在最流行的就是chevereto这款图床开源软件了,有免费版,咱就用免费版足够了。
我选择用docker部署
安装部署chevereto的方式有很多,我选了最省事的方法——docker。docker相当于是一个盒子,把安装chevereto软件的环境都集成到里面,我们把这个盒子做好,再装上chevereto软件就可以直接运行了。docker为我们节省了集成安装环境的步骤和时间。
安装docker-ce
参考官网,用脚本安装的方法:
1 | root@vultr:~# curl -fsSL https://get.docker.com -o get-docker.sh |
用docker version
检查版本号。
1 | root@vultr:~# docker version |
试运行hello-world镜像:
1 | root@vultr:~# docker run hello-world |
安装docker-compose
在github找到docker-compose的最新版本,按照官方提供的方法进行安装。
1 | root@vultr:~# curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose |
docker-compose --version
是用于查看docker-compose是否安装成功,能正常显示版本号,就说明安装成功了。
配置docker-compose.yml
就在root家目录操作吧。vi docker-compose.yml
新建配置文件(这是官方建议的配置):
点击展开docker-compose.yml
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
31
32
33
34
35
36
37version: '3'
services:
db:
image: mariadb
volumes:
- ./database:/var/lib/mysql:rw
restart: always
networks:
- private
environment:
MYSQL_ROOT_PASSWORD: chevereto_root
MYSQL_DATABASE: chevereto
MYSQL_USER: chevereto
MYSQL_PASSWORD: chevereto
chevereto:
depends_on:
- db
image: nmtan/chevereto
restart: always
networks:
- private
environment:
CHEVERETO_DB_HOST: db
CHEVERETO_DB_USERNAME: chevereto
CHEVERETO_DB_PASSWORD: chevereto
CHEVERETO_DB_NAME: chevereto
CHEVERETO_DB_PREFIX: chv_
volumes:
- ./chevereto_images:/var/www/html/images:rw
- ./conf/php.ini:/usr/local/etc/php/conf.d/php.ini
ports:
- 8080:80
networks:
private:
配置文件解读:参考
- 用到两个镜像:
mariadb
和nmtan/chevereto
。 image
指定为镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取这个镜像。ports
的配置就是把容器内的80端口映射为本机的8080端口。volumes
是数据卷所挂载路径设置。environment
设置环境变量。
设置docker环境
- 创建目录,用于挂载数据卷:
1
root@vultr:~# mkdir database chevereto_images conf
- 创建配置文件
conf/php.ini
,修改上传文件大小的限制为256M(默认的大小是2M)。1
2
3
4
5PHP:
max_execution_time = 60;
memory_limit = 256M;
upload_max_filesize = 256M;
post_max_size = 256M; - 调整目录所属权限为www-data:
1
root@vultr:~# chown -R www-data:www-data database chevereto_images conf
启动docker容器
1
root@vultr:~# docker-compose up -d
安装chevereto
测试docker启动是否正常
开启防火墙的8080端口(因为docker容器开放的端口是8080):接下来在浏览器输入vps的外网IP+8080端口,就可以进行chevereto软件安装了。1
root@vultr:~# ufw allow 8080
安装过程傻瓜化。参考用Nginx反向代理docker容器
参考
接下来我们用nginx反向代理docker。为什么要用nginx反向代理?因为我不想增加vps开放的端口(不在互联网暴露docker的8080端口,降低安全风险)。
nginx的开放端口目前反向代理了v2ray和伪装网站。我们取消对伪装网站的代理,/路径直接代理docker容器的8080端口。nginx配置文件修改如下
1 | ## server部分增加对/路径的反向代理 |
注意:配置文件中的这一句location ~ .*\.(js|jpg|JPEG|css|bmp|gif|GIF|png)$ {access_log off;}
默认不注释的话,将导致chevereto网站的静态资源无法显示。<原因就是静态资源没有转发到docker容器,我们直接注释掉这一句,不单独设置静态资源的转发。
好的,经过一番折腾,终于可以正常使用图床了,玩一玩:
我的图片
给图片加水印
之前看到有些博客的图片是加的统一水印,看起来可酷了~
这个图床也可以自定义水印图片~
加了水印就是这样的效果。为了统一风格,我把主题的图片改成和水印一样的图片了。
开放用户注册
可以把图床提供给朋友使用,默认的配置是新用户注册时,站长会发送激活链接至用户邮箱。这就涉及到了邮件功能,chereveto默认用PHP函数发送邮件,但是这个默认的配置将导致邮件发不出去。
所以,我们选择SMTP方式给注册用户发送激活邮件。
我用Gmail邮箱设置的SMTP,在Gmail邮箱这边需要开启双重验证,获取专用密码(我之前设置过,已经有专用密码了,这个步骤就跳过,可参考这篇教程)
接下来进入chereveto的邮件设置,按照这个配置:参考教程
接下来,发送一封测试邮件,试一下站长邮箱能不能自动往外发送邮件:
终于可以开放用户注册使用自己的图床啦~
总结
还有很多功能可以摸索,这次的docker体验满分!docker真是一项伟大的发明。这个图床花了好多时间精力,昨天几乎通宵,很久没有这样的求知欲了。
参考
主要参考这篇文章进行docker镜像安装和chereveto软件的安装
还参考了这篇文章用nginx代理docker容器的部分