Picgo+minnio搭建个人图床

利用docker在云服务器搭建

一、介绍

云服务器以docker技术用minio搭建对象储存,以picgo作为图床管理,集成以上四者的优点。

  • 阿里云服务器提供固定带宽模式,可以有效防止被“恶意刷流量”。

  • docker技术可以有效降低学习难度和搭建成本。

  • minio免费、高效、配置需求低的特点。

  • picgo好用不多说。

二、步骤

1、准备一台云服务器,登录

于服务器安全组开启相应端口

2、安转docker

菜鸟教程或参考以下步骤

安转docker

1
2
 curl -fsSL https://get.docker.com -o get-docker.sh
 sudo sh get-docker.sh

启动 docker 并设置开机自启

安装完成后,启动 Docker 服务,并设置它在系统重启时自动启动:

1
2
sudo systemctl start docker
sudo systemctl enable docker

验证安装

通过运行简单的测试容器来验证 docker 是否正确安装并正常工作:

1
sudo docker run hello-world

3、docker部署minio

拉取minio镜像

1
docker pull minio/minio

创建挂载点目录

在服务器上创建两个目录:一个用于存储 MinIO 的配置文件,另一个用于存放实际的数据。

1
2
mkdir -p /usr/local/minio/config
mkdir -p /usr/local/minio/data

创建并启动 MinIO 容器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
docker run -d \
  --name minio \
  -p 9000:9000 \
  -p 9001:9001 \
  --privileged=true \
  -e "MINIO_ROOT_USER=admin" \#minio的登录名
  -e "MINIO_ROOT_PASSWORD=admin123" \#minio的密码
  -v /usr/local/minio/data:/data \
  -v /usr/local/minio/config:/root/.minio \
  minio/minio server \
  --console-address ":9000" \
  --address ":9001" /data

其中9001端口为控制台端口,9000端口为api端口。

自己替换设置账密

4、minio控制台设置

  • 用ip:9001登录控制台 输入设置的账密

  • 创建储存桶

  • 更改该权限为公共只读

  • 创建登录密钥 记住access key 和secrt key

  • 在桶的界面上传图片和分享图片 测试是否能用

5、安转配置picgo

以windows举例

  • 安装node.js,插件需要其支持,官网下载

  • 安装picgo官网下载、安装对应系统版本

  • 在picgo中搜索安装minio插件

  • 配置图床

可参考官方配置说明或以下设置

endPoint 服务器的ip地址

port api端口 9000

accessKeysecretKey填写之前创建的密钥

bucket 存储桶的名字

  • 测试是否成功

三、自定义图床域名

1、利用nignx反代

  • 反代控制台域名
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
server {
    listen 80;
    server_name ksvi.com;

    location / {
        proxy_pass http://localhost:19001; # MinIO 控制台地址
        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_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
  • 反代api域名
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
server {
    listen 80;
    server_name api.com;

    location / {
        proxy_pass http://localhost:19000; # MinIO API 地址
        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_set_header X-Forwarded-Proto $scheme;
   }
}

2、picgo设置自定义域名

为控制台域名

四、错误与解决

1、问题:因为反代缓存导致minio拒绝picgo的上传

原因:反代缓存会把head请求转换为get请求

解决:禁用反代缓存

 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
 # 确保不会将 HEAD 请求转换为 GET 请求
            proxy_cache_convert_head off;

            # 关闭缓冲以避免任何潜在的缓存行为
            proxy_buffering off;

            # 设置超时时间
            proxy_connect_timeout 60s;
            proxy_send_timeout 600s;
            proxy_read_timeout 600s;

            # WebSocket 支持
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;

            # 禁用缓存规则
            if ($request_method = POST) {
                set $no_cache 1;
            }
            if ($query_string != "") {
                set $no_cache 1;
            }
            proxy_no_cache $no_cache;
            proxy_cache_bypass $no_cache;

2、问题:minio图片无法访问

原因:minio控制台直接设置桶为匿名只读时,桶的策略出错,仍为私密。

解决:先将桶的策略改为公共,再改为匿名只读,重复几次。

使用 Hugo 构建
主题 StackJimmy 设计

1.77k 字
3篇文章