前期准备

  1. 需要有一台服务器(可以在公网直接访问的)
  2. 一个域名(可以通过 DNS 解析访问到你的服务器的)
  3. docker 环境
  4. docker-compose
  5. nginx 服务

搭建 minio

minio 配置

docker-compose文件

version: "3"
services:
    minio:
	    image: minio/minio:RELEASE.2024-02-26T09-33-48Z
		restart: always
		container_name: minio
		ports:
			- 9001:9001
			- 9000:9000
        command: server /data --console-address :9001 --address :9000
        environment:
            MINIO_BROWSER: "on" # 是否开启 webui
            MINIO_BROWSER_LOGIN_ANIMATION: "on" # webui 登录动画
            MINIO_BROWSER_REDIRECT_URL: https://file.domain.com
            MINIO_BROWSER_SESSION_DURATION:  # minio 会话持续时间
            MINIO_ROOT_PASSWORD: admin # minio 登录密码
            MINIO_ROOT_USER: admin # minio 登录用户
            MINIO_SERVER_URL: https://console.domain.com
        volumes:
            - ./data:/data

nginx 配置

minio console 页面配置

server {
    server_name console.domain.com;
    client_max_body_size 100m; # 设置文件上传最大大小,nginx 默认最大 1MB
    location / {
        proxy_pass http://localhost:9000;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/console.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/console.domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

}
server {
    if ($host = console.domain.com) {
        return 301 https://$host$request_uri;
    }
    listen 80;
    server_name console.domain.com;
    return 404;
}

minio api 页面配置

server {
    server_name file.domain.com;
    client_max_body_size 100m; # 设置文件上传最大大小,nginx 默认最大 1MB
    location / {
        proxy_pass http://localhost:9001;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/file.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/file.domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

}
server {
    if ($host = file.domain.com) {
        return 301 https://$host$request_uri;
    }
    listen 80;
    server_name file.domain.com;
    return 404;
}

PS:这里我的 ssl 证书是使用 certbot 进行生成的

注意:如果有上传大文件的需求,需要在 nginx 配置中设置 client_max_body_size,否则最大上传大小为 1MB

minio 测试

登录到 minio console 界面中

输入前面 compose 中设置的用户名和密码 admin

console-login-page

创建一个 bucket

image.png

将 bucket 设置为 public 公共读

image.png

手动上传一张图片

此时可以看到此 bucket 的权限是公共的,所以他可以通过 url 进行公共读

image.png

获取 minio 的 key 和密钥

注意:此处创建完之后生成的 密钥只会出现一次,后续无法进行复制,请生成的时候进行保存即可

image.png

picgo-core 配置 minio

安装 minio 插件

picgo install picgo-plugin-minio

image.png

配置 minio 插件

image.png

使用 picgo 上传文件

image.png

此处可以看到可以使用 picgo 命令进行文件上传,然后我们将链接复制到浏览器中进行查看,是可以看到有文件上传上去的

image.png