前言
之前一直用腾讯云 COS 存博客图片,之前也写过一篇博文来介绍typora+picgo+cos+cdn搭建个人写作环境 - 阿雷的小窝,每月虽然花不了多少钱,但总觉得被厂商绑着,而且流量多了之后费用也不少。之前也试过 Lsky这些图床,要么功能不全,要么界面用着不舒服,后来因为内网穿透不稳定,就搁置了个人图床的想法。
前阵子发现腾讯云 EdgeOne 有免费套餐,不限流量还能做 IPv6 转 IPv4,这不正好解决了我内网群晖没法公网访问的问题。果断决定折腾一波 Chevereto,毕竟之前就听说它开源免费,功能还全,这次正好趁着 EdgeOne 的车,搭个专属图床试试水。
废话少说,直接开干!
准备工作
chevereto部署门槛相较于之前介绍的软件要高一些,其实也没什么复杂的,就是提前把环境弄好,省得等下部署的时候手忙脚乱:
- 已安装 Docker 和 Docker Compose
- 有公网 IP(或本地服务器用于测试)
- 开放目标端口(默认 38080,可自定义)
然后是目录规划,我习惯把所有工具都放在~/opt 目录下,统一管理,找起来方便。这次也不例外,新建了 chevereto 的专属目录,还分了 database(存数据库)、storage(存图片):
cd ~
mkdir -p ~/opt/chevereto
mkdir -p ~/opt/chevereto/database
mkdir -p ~/opt/chevereto/storage
cd ~/opt/chevereto
接下来要开放端口,我选的是 38080,避免和其他服务冲突。这里分两种场景,根据你的服务器防火墙类型选:
# 场景1:用ufw防火墙(Ubuntu/Debian),开放13001端口
sudo ufw allow 38080/tcp comment 'chevereto' && sudo ufw reload
# 场景2:用firewalld防火墙(CentOS/RHEL)
sudo firewall-cmd --add-port=38080/tcp --permanent && sudo firewall-cmd --reload
注意:如果是云服务器(阿里云/腾讯云),还要在控制台的“安全组”里开放38080端口,否则外部无法访问。
docker compose部署
如果你使用的是付费版本Chevereto图床,需要自己下载付费版本的代码库,然后自己通过docker进行构建,因为我使用的是免费版本(直接在官网下载就行),如果你使用的付费版本可以参考一下官网上介绍的付费版的镜像构建Install Chevereto on Docker | Chevereto V4 Docs。
接着,在~/opt/chevereto文件夹中建立一个文件php.ini:
upload_max_filesize = 100M
post_max_size = 100M
memory_limit = 3072M
max_execution_tim = 180
接着,在~/opt/chevereto文件夹中建立一个文件docker-compose.yml:
services:
database:
image: docker.m.daocloud.io/mariadb:jammy
networks:
- chevereto
volumes:
- ./database:/var/lib/mysql:rw
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: chevereto
MYSQL_USER: chevereto
MYSQL_PASSWORD: user_database_password
php:
image: chevereto/chevereto:latest # tweak with target image to run
networks:
- chevereto
volumes:
- ./storage:/var/www/html/images/:rw
- ./storage/content:/var/www/html/content:rw
- ./storage/routes:/var/www/html/app/routes:rw
- ./storage/php.ini:/usr/local/etc/php/php.ini:ro
# - app:/var/www/html/ # uncomment when using CHEVERETO_SERVICING=server
restart: always
depends_on:
- database
ports:
- 38080:80
environment:
CHEVERETO_DB_HOST: database
CHEVERETO_DB_USER: chevereto
CHEVERETO_DB_PASS: user_database_password
CHEVERETO_DB_PORT: 3306
CHEVERETO_DB_NAME: chevereto
CHEVERETO_HOSTNAME: chevereto.leiting2020.top
CHEVERETO_HOSTNAME_PATH: /
CHEVERETO_HTTPS: 0
CHEVERETO_MAX_POST_SIZE: 2G
CHEVERETO_MAX_UPLOAD_SIZE: 2G
#CHEVERETO_SERVICING: server # uncomment to enable application filesystem upgrades
networks:
chevereto:
配置完成后,执行启动命令,Docker会自动拉取镜像并创建容器:
# 后台启动服务(-d表示 detached 模式)
docker-compose up -d
# 查看容器运行状态(出现Up说明启动成功)
docker ps
# 若启动失败,查看日志排查问题
docker-compose logs -f
使用 docker ps 命令检查容器是否创建成功。
初始化chevereto
我是把 Chevereto 部署在群晖 NAS 上的,直接用 IP:38080 访问太丑了,还没 HTTPS,所以得整个反向代理。群晖用户直接在Web Staion里弄就行。
如果是其他系统可以通过NPM/nginx进行配置。将域名反向代理到docker compose.yml中配置的 CHEVERETO_HOSTNAME域名。

然后就是 EdgeOne 的配置,解决内网没有公网 IPv4 的问题。我用了 DDNS-go 工具,把域名解析到群晖的 IPv6 地址,然后在 EdgeOne 控制台添加站点,源站填解析好的 IPv6 域名,开启 IPv6 回源和 HTTPS 免费证书。这样一来,纯 IPv4 网络也能通过域名访问我的图床了,还能享受 EdgeOne 的加速和防护,关键是免费不限流量,还是挺香的。

完成相关配置后,访问你在docker compose.yml中配置的 CHEVERETO_HOSTNAME域名即可。会自动转到安装界面,会自动跳转到 Chevereto 的安装界面,一步步来就行:

自己填好相关信息就可以完成登陆了。直接登陆,后台就是这样:

登录后台后,第一件事就是把语言改成中文,在 Settings→Language 里选 Chinese (Simplified),保存后页面就变成中文了,看着舒服多了。

到这里,我们就完成chevereto的安装了。
上传图片
上传图片很简单,在任意界面都可以看到右上方有一个上传按钮,可以直接浏览本地图片进行上传。

Chevereto 的上传方式特别多,我最常用的是拖拽和剪贴板粘贴:
- 写博客的时候,直接把本地图片拖拽到图床页面,自动上传;
- 微信、QQ 截图后,按 Ctrl+V 就能直接粘贴上传,不用保存本地,太省时间了。
上传完成后,会自动弹出各种格式的链接,我写博客常用 Markdown 格式,直接复制粘贴到 Typora 里就行,不用再手动处理图片路径了。

双击图片还能查看详情,比如上传时间、大小、分辨率,还能生成不同尺寸的链接,功能挺全的。

小结
用了一段时间,Chevereto 整体挺稳定的,没出什么幺蛾子。搭配 EdgeOne 之后,不仅不用花钱买存储和流量,还解决了公网访问的问题,写博客上传图片的效率也提高了不少。后续我打算研究一下把图片同步到腾讯云 COS 做双备份,这样更安全,到时候再写一篇记录。
如果你也经常写博客,或者需要存很多图片,不想被第三方图床限制,真心推荐试试这个组合,折腾一次,后续能省不少事。