前言
Chevereto
是目前最流行的图床之一.其颜值高,功能多,扩展性强,安装方便并提供了免费和付费版本满足了各种需求.由于近期沉迷于 docker 环境,于是决定尝试使用 docker compose 安装部署,并迁移现有的图片和数据库.
镜像
官方镜像支持docker
及docker compose
两种部署方法,博主推荐使用docker compose
的方案,通过挂载图片及数据库目录,可以实现非常快速的备份和迁移.
docker-compose.yml 参考
version: '3'
services:
db:
image: mariadb
volumes:
- ./database:/var/lib/mysql:rw
restart: always
networks:
- private
environment:
MYSQL_ROOT_PASSWORD: xxxxx
MYSQL_DATABASE: xxxxx
MYSQL_USER: xxxxx
MYSQL_PASSWORD: xxxxx
chevereto:
depends_on:
- db
image: nmtan/chevereto
restart: always
networks:
- private
environment:
CHEVERETO_DB_HOST: db
CHEVERETO_DB_USERNAME: xxxxxx
CHEVERETO_DB_PASSWORD: xxxxx
CHEVERETO_DB_NAME: xxxxx
CHEVERETO_DB_PREFIX: chv_
volumes:
- ./images:/var/www/html/images:rw
- ./php.ini:/usr/local/etc/php/php.ini:ro
ports:
- 8080:80
networks:
private:
配置
创建 chevereto 文件夹
为图床程序创建一个文件夹以存放配置文件
,图片文件夹
,数据库文件夹
.以便方便备份和迁移.博主推荐直接在root
目录下创建chevereto
文件夹.同时在chevereto
文件夹内创建docker-compose.yml
文件和php.ini
文件.
配置 php.ini 文件
配置 docker 服务可支持的最大上传限制.以下默认配置为100M
上传限制,请自行配置.
memory_limit = 256M;
upload_max_filesize = 100M;
post_max_size = 100M;
配置 docker-compose.yml 文件
配置数据库
依照上文docker-compose.yml
参考,修改对应的数据库信息.
MYSQL_ROOT_PASSWORD: xxxxx
# 自行创建数据库root密码
MYSQL_DATABASE: xxxxx
# 创建图床数据库名
MYSQL_USER: xxxxx
# 创建数据库用户名
MYSQL_PASSWORD: xxxxx
# 创建数据库用户密码
CHEVERETO_DB_USERNAME: xxxxxx
# 与MYSQL的数据库用户名保持一致
CHEVERETO_DB_PASSWORD: xxxxx
# 与MYSQL的数据库用户密码保持一致
CHEVERETO_DB_NAME: xxxxx
# 与MYSQL的数据库名保持一致
配置挂载路径
上文docker-compose.yml
样本参考中,博主已经配置好数据库文件夹database
和图片文件夹images
的路径为./当前目录
,即所有的配置和数据文件都存放在chevereto
目录中.以下为配置解说:
- ./database:/var/lib/mysql:rw
# 挂载数据库到当前目录下的database
- ./images:/var/www/html/images:rw
# 挂载图片文件夹到当前目录下的images
- ./php.ini:/usr/local/etc/php/php.ini:ro
# 挂载php.ini到容器内以配置上传文件大小限制
部署
运行 docker-compose
完成以上docker-compose.yml
和php.ini
文件的配置,运行以下命令即可启动服务.
# 启动命令
docker-compose up -d
# 容器正常运行中如需修改配置docker-compose.yml,执行以下停止命令,修改完毕后再次执行以上启动命令.
docker-compose down
docker容器启动后,chevereto
文件夹内会自动生成挂载的两个目录.分别为数据库的database
和图片文件夹images
.为使图床程序能够正常上传和删除图片,还需要配置images
文件夹权限.
chmod -R 777 images
配置域名及反向代理
配置域名,证书,301跳转HTTPS及反向代理至8080端口即可完成部署.
nginx示例
upstream dockername {
server 127.0.0.1:8080; # 端口改为docker容器提供的端口
}
server {
listen 80;
server_name www.yourdomain.com;
return 301 https://www.yourdomain.com$request_uri;
}
server {
listen 443 ssl;
server_name www.yourdomain.com;
gzip on;
ssl_certificate /usr/local/nginx/conf/ssl/www.yourdomain.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/www.yourdomain.com.key;
# access_log /var/log/nginx/dockername_access.log combined;
# error_log /var/log/nginx/dockername_error.log;
location / {
proxy_redirect off;
proxy_pass http://dockername;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
client_max_body_size 100m;
client_body_buffer_size 128k;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
迁移
场景一 : docker 环境之间迁移
首次部署是按照上文流程全新安装,后期如需迁移服务器,只需备份root
内的chevereto
文件夹至新服务器,运行docker-compose up -d
,并配置域名及反向代理即可完成迁移.方便快捷,这也是博主推荐和分享本文的初衷.
场景二 : 常规LNMP部署迁移至 docker compose 部署
备份数据库
登陆原服务器使用mysqldump
命令备份数据库.请确保你知道当初安装图床时所配置的数据库名
,数据库用户名
,数据库用户密码
.导出为database.sql
后拷贝至新服务器.
mysqldump -u user -p database > database.sql
# mysqldump -u 数据库用户名 -p 数据库名 > xxxx.sql
配置 docker-compose.yml 并运行
首先按照上文全新安装的流程
配置完毕,其中docker-compose.yml
文件内的数据库名
,数据库用户名
,数据库用户密码
与原有图床程序安装时的数据库信息一致.然后运行 docker-compose.
docker-compose up -d
拷贝数据库文件至容器内
将备份出来的数据库文件database.sql
并拷贝至mariadb
容器内根目录
.
docker cp database.sql mariadb:/
进入容器恢复数据库
执行命令进入mariadb
容器的根目录
docker exec -it mariadb /bin/bash
使用mysqldump
命令恢复数据库,其中user
为你的数据库用户名,database
为你的数据库名,执行后会提示输入数据库用户密码
.
mysqldump -u user -p database > database.sql
迁移原图床图片
迁移原图床程序的images
文件夹内所有文件夹及文件至docker-compose.yml所在目录
的images
文件夹内.迁移完成后执行以下命令配置权限.
chmod -R 777 images
配置域名及反向代理
依照上文教程为新服务器配置域名,证书,301跳转HTTPS及反向代理至8080端口即可完成迁移部署.
结语
本站还介绍过其他图床的安装教程,详情请参考以下链接:
13 条评论
我是通过内网部署chevereto的通过letsencrypt的Nginx反向代理,生成的图片连接默认带的是80端口,这个需要改哪里配置吗?server {
}
chevereto的环境变量表前缀名称变了,现在是 "CHEVERETO_DB_TABLE_PREFIX" 通过官方文档得知:https://chevereto-free.github.io/setup/system/environment.html#passing-values
使用原值迁移的话会造成新机器找不到旧数据库迁移过来的表。
[Wed Mar 02 14:14:08.288287 2022] [:crit] [pid 1] (38)Function not implemented: AH00141: Could not initialize random number generator
运行出错了。 影射地址改了。这样这可以么
volumes:
volumes:
可以
[...]某教程:docker compose 部署迁移 Chevereto 图床程序教程 – 思有云 – IOIOX[...]
上传png格式图片失败,接口提示400是什么原因呢
Disabled image format (webp)