容器化部署博客【2】——搭建个人图床chevereto
date: 2023-11-15 update slug: docker_deploy_blog_2 key: Docker,chevereto ref: https://blognas.hwb0307.com/linux/docker/485 cover:
准备工作
按需修改工作目录。其中,app
这个目录要留给www-data:www-data
用户:
work=/home/zhaohuanan/3.project/my-blog_zhaohuanan.cc/chevereto mkdir -p $work/app/images cd $work
按需修改端口,开启防火墙:
# 后面所有操作全在root进行!!! ufw allow 7777/tcp comment 'chevereto' && sudo ufw reload
提前拉取镜像:
docker pull mariadb &&
docker pull nmtan/chevereto:1.4.1
接着,在./app
文件夹中建立一个文件:
vim ./app/php.ini
写入以下内容:
upload_max_filesize = 100M post_max_size = 100M memory_limit = 3072M max_execution_tim = 180
这个设置你可以先按我的来。以后不满意再改吧。
我们简单地看一下工作目录的准备:
tree -h $work
输出如下:
. ├── [4.0K] app │ ├── [4.0K] images │ └── [ 93] php.ini └── [ 958] docker-compose.yml(这个文件后面会建立) 2 directories, 2 files
为什么我要将这些目录/
文件挂出来呢?后面我再解释。
将./app
的用户组改为www-data:www-data
sudo chown -R 33:33 $work/app/
安装Chevereto
v4(付费)和v3版本(免费)有较大的区别,详见:CHEVERETO COMPARISON ⚡️V4 vs ⚡️V3… What’s new? – YouTube。v4主要是更灵活更复杂的后台界面、移动端适配性能的增强、更加灵活的User-based API(比如API寿命)、更加安全的登陆(基于2FA)、社交媒体支持等提升,对于图床使用者来说并不重要。因此继续用v3我觉得问题也不大。可能也有一些v4开心版吧,大家看情况吧!我为了保证可迁移性,还是使用的开源版本。
配置yml文件
不了解docker的小伙伴请先看:《Docker系列 配置Docker全局环境》;《Docker系列 了解Docker Compose的配置文件》。
创建docker-compose.yml
文件:
vim $work/docker-compose.yml
值得一提的是,在最新的1.6x版本中,chevereto好像不支持中文了。我也不知道为什么。所以我装了一个旧版本。如果大家介意的话,可以将:1.4.1
去除。填入以下内容:(啥也别改!)
--- version: '3' services: db: image: mariadb volumes: - ./db:/var/lib/mysql:rw restart: always networks: - default environment: MYSQL_ROOT_PASSWORD: chevereto_password_root # 按需更改 MYSQL_DATABASE: chevereto # 按需更改 MYSQL_USER: chevereto # 按需更改 MYSQL_PASSWORD: chevereto_password # 按需更改 app: image: nmtan/chevereto:1.4.1 # 固定为1.4.1,个人感觉这个版本最好用 restart: always ports: - 7777:80 # 按需更改 networks: - default environment: CHEVERETO_DB_HOST: db CHEVERETO_DB_NAME: chevereto # 与db的设置一一对应 CHEVERETO_DB_USERNAME: chevereto # 与db的设置一一对应 CHEVERETO_DB_PASSWORD: chevereto_password # 与db的设置一一对应 volumes: - ./app/images:/var/www/html/images:rw # - ./app/content:/var/www/html/content:rw - ./app/php.ini:/usr/local/etc/php/php.ini:ro # - ./app/app/routes:/var/www/html/app/routes:rw depends_on: - db networks: default: name: chevereto
这里,我向童鞋们说明一下初次使用mariadb
的一些技巧。
一般,我们会用mariadb/mysql
这些数据库软件来存储软件的数据,这样调用起来更加高效。在Docker的安装中,比如我要装chevereto
应用,如果事先指定数据库的帐号和密码:
CHEVERETO_DB_NAME: chevereto # 与db的设置一一对应 CHEVERETO_DB_USERNAME: chevereto # 与db的设置一一对应 CHEVERETO_DB_PASSWORD: chevereto_password # 与db的设置一一对应
然后在安装时,与mariadb/mysql
的对应上:
MYSQL_DATABASE: chevereto # 按需更改 MYSQL_USER: chevereto # 按需更改 MYSQL_PASSWORD: chevereto_password # 按需更改
这样在实际设置中,就不需要额外地设置数据库的帐户名。当然,这个密码你可以用bitwarden
生成强密码。用户名不改也无所谓。
在某些时候,甚至可以通过搭建一个phpmyadmin
来提供一个可视化的后台来管理mysql
。不过这里我们不会这样设置。
OK,我们直接安装:
docker-compose up -d
查看日志:
docker-compose logs -f
一般看到下面的字样,即说明服务已经完成准备:
... app_1 | [Mon May 16 13:24:00.568869 2022] [mpm_prefork:notice] [pid 8] AH00163: Apache/2.4.53 (Debian) PHP/7.4.28 configured -- resuming normal operations app_1 | [Mon May 16 13:24:00.568924 2022] [core:notice] [pid 8] AH00094: Command line: 'apache2 -D FOREGROUND' ... db_1 | 2022-05-16 13:24:07 0 [Note] mariadbd: ready for connections. db_1 | Version: '10.6.5-MariaDB-1:10.6.5+maria~focal' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution
阿里云域名转发
https://blog.csdn.net/abilix_tony/article/details/133699069
chevereto 设置
访问https://example.com
即可。会自动转到安装界面:
自己填好相关信息就可以完成登陆了。我们这里用@XL*%xdXZS^ZSrZQmXz2!D6y3r
为作密码。
直接登陆,后台就是这样
我们先将语言改成简体中文。如图所示,自己改吧!
到这里,我们尝试在主页上传一张照片。随便什么都行。
然后,我们还要进行一些额外的设置。
文件夹管理
我们回到shell里:
# 返回工作目录 cd $work
观察./app
目录:
tree -hl $work/app
内容如下:
├── [4.0K] images │ └── [4.0K] 2022 │ └── [4.0K] 05 │ └── [4.0K] 16 │ ├── [281K] image.md.png │ ├── [1.7M] image.png │ └── [ 48K] image.th.png └── [ 93] php.ini 4 directories, 4 files
我们还需要将content
和routes
文件夹里挂载到外面。我们最初在docker-compose里并没有挂载,因为这样会报错。
# 创建$work/app/app mkdir -p $work/app/app # 将content和routes文件夹里复制到宿主机目录$work/app docker cp chevereto_app_1:/var/www/html/content/ $work/app/ docker cp chevereto_app_1:/var/www/html/app/routes/ $work/app/app/
此时在宿主机器的shell中,我们再观察一下:
tree -hl -L 2 $work/app
输出为:
├── app
│ └── routes
├── content
│ ├── images
│ └── pages
├── images
│ ├── 2022
└── php.ini
已经成功啦!
最后,不要忘记将$work/app
文件夹及其子文件(夹)改为www-data:www-data
所有:
sudo chown -R 33:33 $work/app drwxrwxr-x 5 www-data www-data 4096 Nov 6 21:47 ./ drwxrwxr-x 4 zhaohuanan zhaohuanan 4096 Nov 6 21:49 ../ drwxr-xr-x 3 www-data www-data 4096 Nov 6 21:47 app/ drwxr-xr-x 2 www-data www-data 4096 Nov 6 21:47 content/ drwxrwxr-x 3 www-data www-data 4096 Nov 6 21:39 images/ -rw-rw-r-- 1 www-data www-data 93 Nov 6 20:47 php.ini
改动yml文件
下线服务
docker-compose down
将之前的yml内容挂载的目录中的两个#
去除。将content
和routes
文件夹也挂载到外面来!即:
--- version: '3' services: db: image: mariadb volumes: - ./db:/var/lib/mysql:rw restart: always networks: - default environment: MYSQL_ROOT_PASSWORD: chevereto_password_root # 按需更改 MYSQL_DATABASE: chevereto # 按需更改 MYSQL_USER: chevereto # 按需更改 MYSQL_PASSWORD: chevereto_password # 按需更改 app: image: nmtan/chevereto:1.4.1 restart: always ports: - 7777:80 # 按需更改 networks: - default environment: CHEVERETO_DB_HOST: db CHEVERETO_DB_NAME: chevereto # 与db的设置一一对应 CHEVERETO_DB_USERNAME: chevereto # 与db的设置一一对应 CHEVERETO_DB_PASSWORD: chevereto_password # 与db的设置一一对应 volumes: - ./app/images:/var/www/html/images:rw - ./app/content:/var/www/html/content:rw - ./app/php.ini:/usr/local/etc/php/php.ini:ro - ./app/app/routes:/var/www/html/app/routes:rw depends_on: - db networks: default: name: chevereto
然后直接上线:
docker-compose up -d
检验挂载是否生效
这里可以做一个简单的测试。我们进入dashboard:https://domain.com/dashboard
。在设置--主页
中,我们可以看到封面图片:
我们多上传1张封面图片,保存修改。
回到shell中,我们看一下这个文件夹:
ls $work/app/content/images/system
此时多了一张图片:home_cover_1650627141238_dba995.jpg
。就是你刚刚上传的图片。当然,你上传的图片的名字应该和我这张图片是不同的。你也可以上传几张测试图片,然后在$work/app/images
里看看有没有成功上传。
配置结束
备份
duplicati??
以后你要迁移chevereto
图床,只要copy整个$work
目录即可。
cd /home/zhaohuanan/3.project/my-blog_zhaohuanan.cc/scripts touch backup_chevereto.sh vim backup_chevereto.sh #!/bin/bash # crontab -e # 0 05 * * * sh /home/zhaohuanan/3.project/my-blog_zhaohuanan.cc/scripts/backup_chevereto.sh input_dir=/home/zhaohuanan/3.project/my-blog_zhaohuanan.cc/chevereto backup_dir=/home/zhaohuanan/3.project/my-blog_zhaohuanan.cc/backup maxnum=15 backup_name=chevereto_$(date +'%Y%m%d_%H%M%S').zip # 备份 chevereto 目录到指定目录 zip -r $backup_dir/$backup_name $input_dir function check_files() { cd $backup_dir local file_lis=$(ls | grep media.*zip) for file in ${file_lis[@]} do num=$(ls | grep media.*zip | wc -l) if [[ $num -lt $maxnum ]]; then break else rm -f $file && echo "remove ${file}" fi done echo "$(ls)" } check_files
设置PicGo工具
地址解析
不出意外的话,访问http://pic.zhaohuanan.cc即可访问自建图床了
PicGo配置
https://blog.csdn.net/qq_19564393/article/details/108506062
用过chevereta的都知道,api上传的图片,是在一个很特别的文件夹里
上传的相册ID为1(相册不可见)
上传的用户名为 guest
为此,我自己也折腾了很久,翻阅了一些博客,但是整理的都不是很详细,所以这里详细的记录下操作,方便自己以后或其他人浏览(只要按照步骤来,就没错的)
下载PicGo插件
首先下载安装chevereto插件
接着我们就可以看到这个安装的插件了(如果看不到,就重启下PicGo软件就可以了)
获取chevereto用户名和相册ID
这个就是你的ID,记录下来。
找到这个地址,网站根目录\app\routes
里面有一个route.api.php
文件,我们把它复制一份。
粘贴到同目录的overrides
目录里。如下图(记住是粘贴,不是移动)
这一步的操作,就是为了用overrides\route.api.php
来代替之前的route.api.php
文件执行,从而保留源文件,方便以后恢复!
修改php文件
打开overrides\route.api.php
文件
搜索$uploaded_id = CHV\Image::uploadToWebsite
(关键的一步)把这行代码,改成:
$uploaded_id = CHV\Image::uploadToWebsite($source, '用户名', array('album_id'=>相册ID));
设置PicGo插件变量
比如我的为
typora设置上传客户端为PicGo
可以点击【验证图片上传选项】测试是否通过。若通过,就设置好了,以后写东西自动将网图和本地图自动上传到图床中。