Contents
前言
对家庭数据中心建站而言,有自己的图床可以说是一个必选项:一来,省钱才是硬道理,能自建的绝不花钱假借他人之手;二来,以后要细化对图床访问的地域处理(根据来自国内和来自国外的访问源地址返回不同的图床缓存地址)也需要有个自己的图床(这个我以后用另一篇文章详细说,需要用到cloudflare的动态重定向),图床的搭建我选择了docker版的chevereto来实现。
其实基本所有的应用都可以通过源码方式部署,只不过我部署应用只要有docker版的就会优先采用,毕竟我有专门的docker部署环境,部署迁移都比较方便,源码部署方式只是docker部署反而不方便或者根本就没有docker版的时候,我才会采用的备选方式,比如部署V免签(参见我另一篇文章:linux面板系列 基于宝塔面板以源码方式部署V免签之傻瓜书)。
部署
初始化数据库
如果采用docker-compose的方式部署就没有这一步,因为在对应的docker-compose.yml文件里已经对数据库进行了初始化。而采用docker run方式部署的话,在初次登录chevereto的时候会让你输入database的相关信息,包括host名,库名,用户名密码等,所以采用docker run方式,需要有现成的mariaDB(或者mysql)数据库(或者新建一个)并自己进行初始化,详细的初始化步骤参见我另一篇文章:奇技淫巧系列 新建空数据库以及给对应用户赋予权限。
如果还没有现成的数据库,就需要新建一个数据库容器之后再进行数据库初始化,参考以下命令:
docker run --name=mariadb -d --restart=always \
-p 3306:3306 \ #映射宿主机端口到容器内部的80端口,请根据自己实际情况修改
-v /docker/mariadb/db:/var/lib/mysql \ #映射宿主机指定文件夹到容器内部的/var/lib/mysql目录
-e MARIADB_ROOT_PASSWORD=yourpassword \ #指定root用户密码
mariadb:10.11
注:请自行删除#后面的注释
假设经过初始化之后数据信息为下面所示(这些都需要大家根据自己的实际配置情况填写):
Database host : 192.168.10.130 (mariaDB容器所在宿主机的IP,如果是本机部署,则为127.0.0.1。不加端口既为默认端口3306,如果不是3306,请用:port指定宿主机上映射的实际端口)
Database name : chevereto (chevereto库名)
Database user : chevereto (chevereto库对应的完全操作权限的用户的用户名)
Database user : chevereto (chevereto库对应的完全操作权限的用户的密码)
Database table prefix : chv_ (如果同一个chevereto库有多个chevereto的容器同时使用,则需要用前缀来区分不同容器使用的表)
创建宿主机上需要映射到chevereto容器内的文件夹
惯例先创建-v参数挂载需要的文件夹:
mkdir -p /docker/chevereto/config
mkdir -p /docker/chevereto/data
部署chevereto
docker run公式命令如下:
docker run --name=chevereto -d --restart=always \
-p 8090:80 \ #映射宿主机端口到容器内部的80端口,请根据自己实际情况修改
-e TZ=Asia/Shanghai \ #设置容器时区
-v /docker/chevereto/config:/config \ #映射宿主机指定文件夹到容器内部的/config目录
-v /docker/chevereto/data:/data \ #映射宿主机指定文件夹到容器内部的/data目录
linuxserver/chevereto:latest
另:如果要为以后和PicGo以及编辑器(例如obsidian)搭配使用以实现图片复制粘贴自动上传功能,还需要一行-v参数:
-v /docker/chevereto/config/route.api.php:/app/chevereto/app/routes/route.api.php
不过需要先创建一次容器,将/app/chevereto/app/routes/route.api.php
文件从容器内部拷贝到宿主机的/docker/chevereto/config
目录下,然后删除容器,重新加上这行-v参数重新创建容器,可以参考以下docker命令:
docker cp chevereto:/app/chevereto/app/routes/route.api.php /docker/chevereto/config
注:请自行删除#后面的注释
初始化chevereto
通过http://宿主机ip:8090
进行登录:
以上信息根据前面初始化数据库时候的信息填写,如果数据库配置正确,则进入以下界面:
配置完成后,点击最下方的"install Chevereto"完成安装,成功后显示如下界面:
到此chevereto安装完成,点击红框中的"admin dashboard"会跳转到登录界面:
使用前面配置的admin的用户名及密码登录:
点击上方的红框中的"Settings":
"HTTPS"是指定chevereto对外返回的链接是用http还是https,默认是"Automatic",还可以选择"Disabled"和"Forced"。"Default time zone"用来指定时区,国内改为"Asia/Shanghai"即可,最后记得点击最下方红框中的"Save changes"来保存更改的配置。
这个界面中需要强调一点的是"HTTPS"这个选项。默认是Automatic,会自动检测https,也是推荐的选项,但是,我在实际使用中,通过反向代理以https访问的时候,遇到了以下的显示:
和我们前面看到的登录界面不一样,这就是因为浏览器收到的chevereto返回的请求是http,而非https的,这也正常,因为反向代理指向chevereto容器的地址也是http的,所以chevereto检测到的都是反向代理发来的http请求,通过这个"Automatic"检测到的也只能是http,所以返回的也就是http地址了。
要解决以上问题有两种方案:
1、直接修改chevereto的"HTTPS"选项为"Forced"
这是最简单的方法,如果图床通过反向代理对以后实际的对外地址都是https的,那么选择"Forced"就没有任何问题。但是如果有些是https,有些是http,比如有2个对外域名,分别对应2个反向代理,其中一个是https方式,另一个是http的,这种情况下就不能选择"Forced"了,就只能选"Disabled"或者"Automatic",这是就只能在https方式的反向代理上进行配置来解决问题,见下一节。
2、在反向代理上进行配置
在对外是https的反向代理上进行配置,如果是nginx,反向代理的配置需要添加一行,这个可以参见我另一篇文章:docker系列 解决chevereto部署在反向代理后工作异常的问题。
创建一个相册
点击右上角红框中的账号名"Admin",从下拉菜单中,选择红框中的"Albums":
出现如下界面:
点击上图红框中的"Create new album":
在上图中,相册名字随便填,我是因为这个相册是用来存放在博客中文章里面的图片,所以名字取为blog。关键是"Album privacy",既相册隐私这个选项,默认是Public,因为这个相册是博客里的图片,所以我设置为私有(任何人用链接都能访问)。第一个创建的相册,id是1,这个在配合其他APP使用的时候,需要用到,比如配合PicGo实现截图粘贴自动上传,设置chevereto uploader的时候。如果是后面新建的相册,相册多了的时候你就要去chevereto里找相册id,所以不如刚开始第一个就创建主要用途的相册,这样id就直接是1了。
如果真是后面创建的相册,id在相册的Full info里面取找:
上传图片
上传图片很简单,任意界面只要点击页面右上方红框中的"upload"按钮:
出现如下界面:
从下面两个红框可以看出,可以直接浏览本地的图片进行添加,或者通过网上图片的url进行添加。不过很多图床都设置了放盗链,用图片url进行添加未必好使。以从本地添加为例,支持批量添加:
选择完图片以后点击右下方的打开:
相册选择刚刚创建的blog,然后点击最下方红框中的"Upload"即可完成上传:
点击上面的红框中的"blog"链接:
可以看到刚刚上传的图片,双击进入任意一张图片,在最下方可以看到各种格式的图片链接:
选择你需要的格式即可。
配置公网访问
要发布到公网上,大家需要根据实际环境和自己使用的反向代理选择最适合自己的发布方式,可以参考我以前的几篇文章:
1、docker系列 使用docker基于NPM搭建自己的反向代理
2、linux面板系列 配置反向代理并使用非443端口进行发布
3、家庭数据中心系列 通过国内备案云主机白嫖cloudflare实现国外快速访问国内站点
4、家庭数据中心系列 通过无公网IP的家庭宽带白嫖cloudflare实现快速建站(通用)
其中第1,2种方式适合有公网ip却没有合法443端口的环境(家庭宽带、未备案的云主机),需要在url后面加非标端口(如果使用cloudflare建站的不需要加端口,但是需要自定义源站端口,这个可以参考:家庭数据中心系列 通过cloudflare的Origin Rules解决建站有公网IP却没有合法的80、443端口的问题)。第3种方式适合有备案的云主机,第4种方式适合所有环境(包括没有公网IP的环境),也是我建议的方式(不管你的环境有没有公网IP,因为这种方式不需要直接在公网上跑https流量)。
后话
其实,chevereto还有丰富的功能选项(比如增加图片水印,这个可以参看我另一篇文章:奇技淫巧系列 使用chevereto给图片增加水印),不过限于篇幅我就不展开说了。
另外,本文的图片上传方式是最基本的图床使用方式,但是正常情况下来说,用这个方式效率太低了,一篇文章中如果几十张图,用这种方式会被折腾死。最高效的方式,是使用PicGo之类的图片上传APP并配合你的编辑器来实现直接粘贴自动上传并自动在编辑器中生成图片链接,这个需要使用api的方式,具体配置见我另一篇文章:奇技淫巧系列 chevereto+PicGo+Obsidian实现高效的图床图片上传及图片url获取。