个人图床Chevereto搭建全记录

部署Docker版Chevereto,博客图片再也不会丢链了

前言

开始写博客了,发现图片存放是个问题,尝试了七牛云、又拍云,速度都不错,也在typora上使用PicGo通过api实现这两个的自动上传,但最后还是决定自己在服务器搭建图床。

找了挺久,本来在找到 auxpi 这个项目,由go编写的,聚合好几个图床,但是在服务器上部署后通过配置的端口访问不到它的页面,也懒得去找原因了,后面又找到chevereto这个项目,由PHP写的,下面我们开始通过他的官方镜像部署到服务器

docker部署

拉取镜像

docker pull nmtan/chevereto

这个是官方镜像,具体使用说明可参照 dockerhub -> nmtan/chevereto

部署

docker run -it --restart=always --name chevereto -d \
    --link mysql:mysql \
    -p 7480:80 \
    -v "/data/chevereto/images":/var/www/html/images \
    -e "CHEVERETO_DB_HOST=172.17.0.1" \
    -e "CHEVERETO_DB_USERNAME=root" \
    -e "CHEVERETO_DB_PASSWORD=xxxxxxxxxx" \
    -e "CHEVERETO_DB_NAME=chevereto" \
    -e "CHEVERETO_DB_PREFIX=chv_" \
    nmtan/chevereto

部分参数解释

optiondescription
-v “/data/chevereto/images”:/var/www/html/images持久化存储,将容器内的images文件夹同步到宿主机的images文件夹中
CHEVERETO_DB_HOST连接MySQL的ip
CHEVERETO_DB_USERNAMEMySQL用户名
CHEVERETO_DB_PASSWORD登录密码
CHEVERETO_DB_NAME数据库名称
CHEVERETO_DB_PREFIX表前缀

这里需用到mysql容器,如没安装的可执行

docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password mysql

默认用户是root,密码由上设置

数据库需自己创建,表则会自动创建

连接的mysql host应是docker的虚拟化ip,可通过语句查看

ip addr show docker0
# 得到的返回结果中,此处为ip
inet **172.17.0.1**/16 brd 172.17.255.255 scope global docker0

站点设置

初始化

部署没有问题的话,访问站点ip:port可如下界面

按需填写内容,website mode选择personal

中文设置

中文设置可在setting中修改

配置图片上传限制大小

chevereto默认图片上传最大不能超过2MB,因此需要我们进行参数设置

首先将容器内的***.htaccess***文件拷贝到宿主机docker cp chevereto:/var/www/html/.htaccess /home/

接着在宿主机对拷贝的文件进行修改,在ServerSignature Off行下添加如下代码

php_value post_max_size 24M # post限制
php_value upload_max_filesize 10M # 文件上传限制
max_execution_time 120 # 执行时间限制

具体值可自定义

然后重启容器

docker restart chervereto

接着还需在前台设置里面修改图片上传最大限制,在仪表盘中选择如下,可见上传限制已经修改成功

修改最大上传文件大小并保存

若上传大图片出现***Server error (Internal server error)***的错误,可能是代理出现问题,例如我使用nginx进行代理,则在nginx.conf 中的http结构中添加

client_max_body_size 100m;
client_body_temp_path /tmp;

之后重启nginx,其他代理应用可能也是相同类型的问题,具体可自行百度(谷歌)

至此初始化设置基本结束,后续一些设置可以自己探索

将chevereto作为typora图床使用

我写博客实在windows下用typora写的,现在可以将图片上传到图床,这里使用PicGo配置chevereto图床

获取api和相册ID

api同样在仪表盘中

相册ID则在相册详情中的详细信息里

保存两者后面会用到

设置chevereto api upload 用户及相册

chevereto默认api上传相册是不可见的,且上传用户为guest,这里先修改用户及相册

首先进入容器docker exec -it chevereto /bin/bash

将route.api.php复制到同级的overrides文件夹中,overrides文件夹中的文件会替换同名文件运行

cp app/routes/route.api.php app/routes/overrides/

接着修改overrides中的route.api.php文件

找到$uploaded_id = CHV\Image::uploadToWebsite($source);这一行

将其替换为$uploaded_id = CHV\Image::uploadToWebsite($source, '用户名', array('album_id'=>相册ID));

记住这里用户名和相册ID需做好修改,保存退出后重启容器

安装PicGo及其插件

通过 PicGo官网 下载并安装,由core版本和app版本,core为命令行操作,这里仅用app版本做演示

搜索并安装Chevereto Uploader插件

设置PicGo

设置Chevereto Uploader

填入图床域名和刚才找到的api key

url的格式为http(s)://你的域名/api/1/upload,不可省略哪一部分

其他参数可不填,将其设为默认图床,并点击确定

接着上传图片尝试一下

typora设置

文件–偏好设置中选择图像,插入图片时选择上传图片,下面五个选项可根据需要勾选,上传服务选择PicGoapp,之后可以点击验证按钮上传图片验证一下,自此就已经成功地将chevereto配置为typora的图床了

后记

整个搭建及配置过程中遇到了不少问题,比如代理配置问题、图片上传大小限制,解决方案都已经融合到教程里面了,其实域名绑定配置部分我没写进去,是因为这一部分也算是比较独立的,以后会出相关教程