跳到主要内容

搭建自己的图床

前言

使用别人的图床实在太不爽了,又慢,又诸多限制,且还需要随时担心服务商跑路,因此这里自己搭建一个图床服务器,把服务器的带宽利用起来

Chevereto

Chevereto-Free 是一个图像托管软件

先拉取它的 docker 镜像

docker pull mariadb:latest
docker pull nmtan/chevereto:latest

注意:官方的那个容器有点问题,yaml 文件改成下面这样的

version: '3'

services:
db:
image: mariadb
volumes:
# 挂载容器中的mysql数据卷到本地database文件夹
# - ./database:/var/lib/mysql:rw
- ./database/config/my.cnf:/etc/mysql/conf.d/my.cnf
- ./database/data:/var/lib/mysql/
- ./database/data/init/:/docker-entrypoint-initdb.d/
- ./database/log/:/var/log/mysql/
restart: always
networks:
- private
environment:
# 设置容器中的mysql的root用户密码以及其他用户
MYSQL_ROOT_PASSWORD: chevereto_root
MYSQL_DATABASE: chevereto
MYSQL_USER: chevereto
MYSQL_PASSWORD: chevereto

chevereto:
depends_on:
- db
image: nmtan/chevereto
restart: always
networks:
- private
# 设置CHEVERETO_DB的一些参数
environment:
CHEVERETO_DB_HOST: db
CHEVERETO_DB_USERNAME: chevereto
CHEVERETO_DB_PASSWORD: chevereto
CHEVERETO_DB_NAME: chevereto
CHEVERETO_DB_PREFIX: chv_
volumes:
# 挂载容器中的images文件夹到本地的chevereto_images文件夹,以及
# 将本地的conf/upload.ini配置文件挂载到容器的/usr/local/etc/php/conf.d/中
- ./chevereto_images:/var/www/html/images:rw
- ./conf/chevereto.ini:/usr/local/etc/php/conf.d/chevereto.ini
- ./conf/upload.ini:/usr/local/etc/php/conf.d/upload.ini:ro
ports:
- 9785:80

networks:
private:
volumes:
database:
chevereto_images:

配置好后

# &:是指在后台运行,当用户退出(挂起)的时候,命令自动跟着结束

# nohup 不挂断的运行,注意并没有后台运行的功能,就是指用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系
# 例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

# disown 命令可以把当前 Shell 内的作业全部移除,这样就可以避免当前 Shell 关闭时发送 SIGHUP 信号关闭了当前进程

# 因此将 nohup 和 & 结合使用,就可以实现使命令永久地在后台执行的功能

# 这里没有使用 -d 挂后台就是为了让它输出日志
nohup docker-compose up &> run.log & disown

然后进入这个 chevereto 容器给 images 目录设置权限

chmod 777 /var/www/html/images

别忘了配置下 nginx

# 配置图床
server
{
listen 80;
server_name images.alsritter.icu;
location / {
client_max_body_size 20M; # 最大上传大小
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:9785;
}
}

如果使用了 HTTPS

# 配置图床
server
{
server_name images.alsritter.icu;

gzip on;

location / {
proxy_pass http://localhost:9785;

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;
}

listen 443 ssl; # managed by Certbot
ssl_certificate 证书地址 # managed by Certbot
ssl_certificate_key 证书地址 # managed by Certbot
include 证书地址 # managed by Certbot
ssl_dhparam 证书地址 # managed by Certbot

}

server
{
if ($host = images.alsritter.icu) {
return 301 https://$host$request_uri;
} # managed by Certbot


listen 80;
server_name images.alsritter.icu;
return 404; # managed by Certbot


}

References