0%

用docker方式自建图床chevereto

前言

之前使用的是公共图床:微博图床,把图片存在其他平台其实风险很高,那就把vps利用起来,自建图床吧。

现状

  • 操作系统:ubuntu18.04
  • 已安装软件:nginx(反向代理,web站点)、v2ray(用于科学上网)、modsecurity(WAF)

图床软件选择

google了一圈,现在最流行的就是chevereto这款图床开源软件了,有免费版,咱就用免费版足够了。

我选择用docker部署

安装部署chevereto的方式有很多,我选了最省事的方法——docker。docker相当于是一个盒子,把安装chevereto软件的环境都集成到里面,我们把这个盒子做好,再装上chevereto软件就可以直接运行了。docker为我们节省了集成安装环境的步骤和时间。

安装docker-ce

参考官网,用脚本安装的方法:

1
2
root@vultr:~# curl -fsSL https://get.docker.com -o get-docker.sh
root@vultr:~# sh get-docker.sh

docker version检查版本号。

1
root@vultr:~# docker version

试运行hello-world镜像:

1
root@vultr:~# docker run hello-world

安装docker-compose

在github找到docker-compose的最新版本,按照官方提供的方法进行安装。
image.png

1
2
3
4
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
root@vultr:~# chmod +x /usr/local/bin/docker-compose
root@vultr:~# docker-compose --version
docker-compose version 1.25.4, build 8d51620a

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
37
version: '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:

配置文件解读:参考

  • 用到两个镜像:mariadbnmtan/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
    5
    PHP:
    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):
    1
    root@vultr:~# ufw allow 8080
    接下来在浏览器输入vps的外网IP+8080端口,就可以进行chevereto软件安装了。
    安装过程傻瓜化。参考
    image.png
    image.png
    image.png
    image.png

    用Nginx反向代理docker容器

    参考
    接下来我们用nginx反向代理docker。为什么要用nginx反向代理?因为我不想增加vps开放的端口(不在互联网暴露docker的8080端口,降低安全风险)。
    nginx的开放端口目前反向代理了v2ray和伪装网站。我们取消对伪装网站的代理,/路径直接代理docker容器的8080端口。
    nginx配置文件修改如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
## server部分增加对/路径的反向代理
location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:8080;

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;

client_max_body_size 100m;
client_body_buffer_size 128k;

proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
## 注释掉原本的Nginx模板网站的配置
# /root/var/www/html;
# index index.html index.htm index.nginx-debian.html;
# location ~ .*\.(js|jpg|JPEG|css|bmp|gif|GIF|png)$ {access_log off;}

注意:配置文件中的这一句location ~ .*\.(js|jpg|JPEG|css|bmp|gif|GIF|png)$ {access_log off;}默认不注释的话,将导致chevereto网站的静态资源无法显示。<原因就是静态资源没有转发到docker容器,我们直接注释掉这一句,不单独设置静态资源的转发。
image.png
image.png

好的,经过一番折腾,终于可以正常使用图床了,玩一玩:
image.png
我的图片

给图片加水印

之前看到有些博客的图片是加的统一水印,看起来可酷了~
这个图床也可以自定义水印图片~
image54edcc7522f50cdd.png
image0b5b6fdbc185d4ac.png
加了水印就是这样的效果。为了统一风格,我把主题的图片改成和水印一样的图片了。
background.jpg
image.png

开放用户注册

可以把图床提供给朋友使用,默认的配置是新用户注册时,站长会发送激活链接至用户邮箱。这就涉及到了邮件功能,chereveto默认用PHP函数发送邮件,但是这个默认的配置将导致邮件发不出去。
image737c92dbdd8c0799.png
所以,我们选择SMTP方式给注册用户发送激活邮件。
我用Gmail邮箱设置的SMTP,在Gmail邮箱这边需要开启双重验证,获取专用密码(我之前设置过,已经有专用密码了,这个步骤就跳过,可参考这篇教程
接下来进入chereveto的邮件设置,按照这个配置:参考教程
imaged09f239ce201f243.png
接下来,发送一封测试邮件,试一下站长邮箱能不能自动往外发送邮件:
image5615ef216cd0e898.png
终于可以开放用户注册使用自己的图床啦~

总结

还有很多功能可以摸索,这次的docker体验满分!docker真是一项伟大的发明。这个图床花了好多时间精力,昨天几乎通宵,很久没有这样的求知欲了。

参考

主要参考这篇文章进行docker镜像安装和chereveto软件的安装
还参考了这篇文章用nginx代理docker容器的部分

-------------本文结束感谢您的阅读-------------