Featured image of post 使用Chevereto-free搭建私人图床

使用Chevereto-free搭建私人图床

使用chevereto和docker搭建免费的私人图床

缘起

在网上写博客时有可能同一篇文章要上传到不同的平台,例如有些文章既会放在本网站上,也会放在项目的GitHub仓库的README里。 这时如果文章中的图片使用本地图片的话,就需要在不同平台上各放一份,不易于统一更新和管理。因此就产生了搭建一个个人图床 来统一管理这些图片的想法。

使用私人图床,写文章引用图片时直接插入图片在私人图床中的链接,便于之后的统一管理。

前置条件

  • docker和docker compose
  • 域名(二级域名即可)
  • acme.sh (生成SSL证书)
  • nginx (反向代理)

关于上述软件和工具的安装和准备,详情请参见“使用Nextcloud和docker自建个人云网盘”

安装Chevereto

配置docker-compose

由于我们在上面已经生成了SSL证书并配置了nginx,因此在docker中我们只需要配置Chevereto即可。

这里我在服务器的硬盘上单独划了一个分区作为Chevereto的安装根目录。在Chevereto安装根目录下创建docker-compose.yml文件,写入以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
version: "3.2"

services:
  database:
    container_name: chevereto-free_database
    image: mariadb:focal
    networks:
      - chevereto_network
    volumes:
      - ./database:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: chevereto
      MYSQL_USER: chevereto
      MYSQL_PASSWORD: your_user_password

  chevereto:
    container_name: chevereto-free_app
    image: ghcr.io/rodber/chevereto-free:1.6
    networks:
      - chevereto_network
    volumes:
      - ./images:/var/www/html/images/
      - ./content:/var/www/html/content/
    ports:
      - 8810:80
    restart: always
    environment:
      CHEVERETO_TAG: "free"
      CHEVERETO_DB_HOST: database
      CHEVERETO_DB_USER: chevereto
      CHEVERETO_DB_PASS: your_chevereto_password
      CHEVERETO_DB_PORT: 3306
      CHEVERETO_DB_NAME: chevereto
      CHEVERETO_DISABLE_UPDATE_HTTP: 1
      CHEVERETO_DISABLE_UPDATE_CLI: 1
      CHEVERETO_HTTPS: 0

networks:
  chevereto_network:

这里需要把“MYSQL_ROOT_PASSSWORD”和“MYSQL_PASSWORD”改为你自己设置的数据库密码,也可以把“MYSQL_DATABASE”和“MYSQL_USER”的名字改掉。

用docker-compose生成容器

在Nextcloud安装根目录下执行如下命令来生成容器:

1
sudo docker-compose up -d

域名证书和反向代理

用acme.sh生成免费的域名证书

具体过程可参见个人网站的建立过程(二):使用Hugo框架搭建个人网站

主要步骤如下:

  1. 使用下面的命令生成证书:

    1
    
    acme.sh --issue --dns dns_ali -d your.domain.name
    
  2. 使用下面的命令将证书复制到你的nextcloud目录下,例如我在nextcloud安装目录下新建了一个文件夹cert来存放证书文件:

    1
    2
    3
    
    acme.sh --install-cert -d your.domain.name \
            --key-file your_cert_path/key.pem \
            --fullchain-file your_cert_path/cert.pem 
    

用nginx设置反向代理

在nginx的配置目录下创建一个新的配置文件nextcloud.conf作为云网盘的反向代理配置文件,文件内写入:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
upstream your.domain.name {  
    server 127.0.0.1:8810; 
}

server {
    listen 80;
    server_name  your.domain.name;
    return 301 https://your.domain.name$request_uri;
}

server {
    listen 443 ssl;
    server_name  your.domain.name;
    gzip on;    

    # ssl 配置
    ssl_certificate your_cert_path/cert.pem;
    ssl_certificate_key your_cert_path/key.pem;

    location / {
        proxy_redirect off;
        proxy_pass http://your.domain.name;

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

这里我使用8810端口作为Chevereto的服务端口,限制用户上传文件最大为100 M。SSL证书存放在上一步指定的位置。

配置完成后重启nginx服务使修改生效:

1
sudo service nginx restart

初始化和后续设置

完成上述步骤后就可以从浏览器访问自己的私人图床啦!在浏览器内输入图床的网址,例如我的是https://img.jinli.io。就会进入如下页面:

Chevereto Sign In

我忘记第一次进入这个页面是否还需要做额外的设置了,但只要按照提示应该就很容易完成。

然后按照提示创建用户名、密码,就可以登录进入了!

Licensed under CC BY-NC-SA 4.0
最后更新于 Jul 02, 2024 00:00 UTC
comments powered by Disqus