前言
其实早在最一开始的时候,就考虑过图片应该怎么办,真的是考虑了很久,也尝试过阿里云,七牛云的oss,总得来说就是花钱存图片让我有些不是滋味。
等到多平台发布文章变为刚需,就再次把目光放在了chevereto
上面,想要自建图床来使用。但是再换服务器的时候,发现还要迁移数据库和图片数据。不仅如此,更重要的是,我慢慢生出了转换域名的想法,如果真的是用了自建图床,那么之前的所有链接都会无效。
现在的方案是用墨滴上传到平台的图片数据库里,因为类似微信公众号和CSDN这种大平台,再如何也比我的个人域名更坚挺吧。
安装Chevereto
综合对比的内容不是本文的主要核心,干脆就完全舍弃好了。
所使用的chevereto
网上评价还是可以的,我也没有找到其他更多的开源图床程序,就使用这个了,效果如下。
创建数据库容器
存储的方式,是需要使用数据库来辅助存储内容,所以需要先构造一个的数据库。
如何使用docker安装部署mysql
或者mariadb
,已经在本系列里面写到了,大家可以从我的博客右上角去搜索。
在这里只是简单附上了运行容器、创建数据库的命令。
# 创建并且运行容器
docker run \
--name mariadb \
-p 4305:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
--restart=always \
--privileged=true \
-v /home/keen/docker/myriadb-10.0/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /home/keen/docker/myriadb-10.0/data/:/var/lib/mysql \
mariadb
# 创建数据库
create database keen_chevereto DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
这里有第一个重要参数,就是数据库的名称keen_chevereto
在下面会要用到的。
拉取镜像
先去寻找,再决定拉取哪个版本,最后直接拉取了最新版本的。
本意是想要直接拉取官方提供的那个版本,但是在之后发现了linuxserver/chevereto
还多适配了两个arm
和arm64
,虽然我现在是用不到,但是不代表我以后不会呀,于是就选择了这个。
docker search chevereto
docker pull linuxserver/chevereto
创建外部挂载目录
递归创建存储目录。
export Chevereto=chevereto
mkdir -p /home/keen/docker/$Chevereto/config
mkdir -p /home/keen/docker/$Chevereto/data
启动容器
其实两个端口可以只映射一个的,这里的第二个重要参数信息就是连接docker
数据库的名称为db
,也会在下面安装的时候用到。
docker run -d \
--restart=always \
--name=chevereto \
--link mariadb:db \
-e TZ=Asia/Shanghai \
-p 5217:80 \
-p 5218:443 \
-v /home/keen/docker/chevereto/config:/config \
-v /home/keen/docker/chevereto/data:/data \
-v /etc/localtime:/etc/localtime:ro \
linuxserver/chevereto
初始化账号
接下来进入图床的初始化界面,一般是用IP地址:端口
的方法访问,比如我的就可以用39.96.12.167:5218
,但是如果你会端口转发的话,也可以达成像我一样用链接登陆:https://www.images.clzly.xyz
两个重要信息就是这个时候使用的,按照提示,输入账号、密码、邮箱等信息,至此完成安装。
配置Chevereto容器
配置图片上传大小
图片上传2m
实在是太小了,这个问题,可以使用命令重启容器。重启后就可以在两个地方配置基础变量,只不过$Chevereto/config/php/php-local.ini
的优先级高于$Chevereto/config/php.ini
罢了。
docker restart chevereto
修改服务器的配置文件config/php/php-local.ini
,文件内容如下。
; post传递数据大小
post_max_size = 20M
; 上传文件的大小
upload_max_filesize = 20M
; 一批次最多可以上传的个数
max_file_uploads = 100
配置路由
如果是界面上正常使用图床,一般是不需要修改这里的。但是如果你有用Api的方式上传图片的需求,那么我更推荐你配置一下路由。
因为没有配置路由的话,传上来的图片全是归为访客上传的,不会在既有的相册里面存在。
首先要将容器中的配置文件复制到宿主机上来。
# 从容器中复制出来配置文件
docker cp temp:/app/chevereto/app/routes/route.api.php /home/keen/docker/$Chevereto/config/route.api.php
将里面原始的内容,进行特别的修改,比如我的用户名是 keen
,相册ID是2
,修改内容如下。
# 旧内容
# $uploaded_id = CHV\Image::uploadToWebsite($source);
# 新内容
$uploaded_id = CHV\Image::uploadToWebsite($source, 'keen', array('album_id'=>2));
接下来你可以选择关闭当前容器,用如下命令重新启动容器;当然,你也可以选择修改容器的hostconfig.json
配置文件,然后重启容器,之前的系列已经讲过,不再赘述。
docker run -d \
--restart=always \
--name=chevereto \
--link mariadb:db \
-e TZ=Asia/Shanghai \
-p 5217:80 \
-p 5218:443 \
-v /home/keen/docker/$Chevereto/config:/config \
-v /home/keen/docker/$Chevereto/data:/data \
-v /etc/localtime:/etc/localtime:ro \
-v /home/keen/docker/$Chevereto/config/route.api.php:/app/chevereto/app/routes/route.api.php \
linuxserver/chevereto
配置域名转发
因为以前就是使用的Nginx
,所以完全可以使用转发的方式,将端口映射到子域名。nginx
的配置如下。
server {
listen 80;
server_name images.clzly.xyz www.images.clzly.xyz;
rewrite ^(.*)$ https://www.images.clzly.xyz permanent; #用于将http页面重定向到https页面
}
server {
listen 443 ssl;
server_name images.clzly.xyz www.images.clzly.xyz;
ssl_certificate /etc/nginx/conf.d/cert3/www.images.clzly.xyz.pem;
ssl_certificate_key /etc/nginx/conf.d/cert3/www.images.clzly.xyz.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://39.96.12.167:5218; # 转发规则
}
location ~ .* {
proxy_pass https://39.96.12.167:5218; # 转发规则
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
图床迁移
图片内容是必须的,数据库也是必须的,还有配置文件更是必须的!
在切换服务器的时候,注意要把config/settings.php
文件进行备份,因为这些内容中配置了数据库的信息。
<?php
$settings = array (
'db_host' => 'db',
'db_name' => 'keen_chevereto',
'db_user' => 'root',
'db_pass' => '123456',
'db_table_prefix' => 'chv_',
'db_driver' => 'mysql',
'db_pdo_attrs' =>
array (
),
'debug_level' => 1,
);
完成上面三个的备份,就可以关闭并且删除原先的容器。
export Chevereto=chevereto
docker stop $Chevereto && docker rm $Chevereto
接着在新的机器上面,拉取镜像,创建外部挂载目录,导入数据库,修改配置文件,接着运行容器即可!
总结
用这篇文章记录了折腾个人图床的全过程,从安装到配置都尽量全面了,一般来说网页上直接使用,可以当个图片管理器。
但是如何使用API上传图片的部分被我单独拎出来写了一篇文章的,因为那些内容就跟本系列关系并不大了。有兴趣的可以去看看。
感谢
- 感谢现在的好奇,为了能成为更好的自己。
- 用docker快速搭建chevereto图床
- 解决nginx部署后css、js、图片等样式不加载的问题
- 修改Chevereto的API上传相册和用户