Sehlani
Sehlani
发布于 2025-09-22 / 47 阅读
0
0

自建S3,Minio,并通过挂载网盘备份

最近又把底层换成了FNos,然后飞牛可以持续挂载网盘,这样我终于可以摆脱Alist或者Openlist用的第三方不稳定的挂载了。

这个时候又接触了思源笔记,需要稳定的同步服务器,加上手里的云服务器越来越多,我需要一个稳定的内容服务器来负责备份和同步节点。那么现在最好的就是S3存储了。

第一步:自建方案的选择

我们第一步需要找到一个合适的自建S3的方案。我之前就知道Minio,用的人也不少。

但是当我第一次按照别人的教程部署完成之后,我发现我的版本少了一大块内容。原来竟然是2025年四月的一次更新,Minio 竟然把管理界面给删除了!令我十分生气。好在我们可以安装删除的前一个版本。

(我尝试了另外一个方案,rustfs,但是它还在开发中,然后它的复制容器竟然需要四个存储和纠错作为基础。暂时没搞明白,蒜鸟蒜鸟。)

第二步:具体怎么干-很不优雅但能行?

然后就是理想情况是,我们建造一个Minio,然后建立两个桶,然后一个桶放在服务器上,一个桶放在网盘挂载的位置上。

但是!我发现Minio一个容器好像只能安排一个路径来存放这个桶。所以曲线救国,(谁叫我是新手呢)我们弄两个Minio,安排两个路径不久好了!

(我真是个天才)叉腰

第三步:部署X2

  1. 先让我们弄一个本地放置S3的持久化地址

  2. 然后创建两个文件在这个地址里

    1. 第一个文件是 .env ,这个样子可以方便大家复制,改这个就行。

CONTAINER_NAME='1Panel-minio-1' #名称
CPUS=0
HOST_IP=''                      #应该可以留空
MEMORY_LIMIT=0
MINIO_BROWSER='on'              #开启前台方便管理
MINIO_BROWSER_LOGIN_ANIMATION='on'
MINIO_BROWSER_SESSION_DURATION='12h'
PANEL_APP_PORT_API=49000        #外面访问S3的端口
PANEL_APP_PORT_HTTP=49001       #前台管理端口
PANEL_MINIO_ROOT_PASSWORD='abcd123' #密码记好
PANEL_MINIO_ROOT_USER='Sehlani'     #账号记好
MINIO_BROWSER_REDIRECT_URL='https://你的域名:反向代理的端口/' #重要:Console 对外地址(走你 Nginx/OpenResty 的 HTTPS 域名;注意末尾 /)
data_address='/vol02/minio/data'    #你刚才的地址,持久化,刚才第一步让你准备的那个

2.第二个文件是 docker-compose.yml

networks:
    1panel-network:
        external: true
services:
    minio:
        command: server /data --console-address :9001 --address :9000
        container_name: ${CONTAINER_NAME}
        deploy:
            resources:
                limits:
                    cpus: ${CPUS}
                    memory: ${MEMORY_LIMIT}
        environment:
            MINIO_BROWSER: ${MINIO_BROWSER}
            MINIO_BROWSER_LOGIN_ANIMATION: ${MINIO_BROWSER_LOGIN_ANIMATION}

            MINIO_BROWSER_REDIRECT_URL: ${MINIO_BROWSER_REDIRECT_URL}
            MINIO_BROWSER_SESSION_DURATION: ${MINIO_BROWSER_SESSION_DURATION}
            MINIO_ROOT_PASSWORD: ${PANEL_MINIO_ROOT_PASSWORD}
            MINIO_ROOT_USER: ${PANEL_MINIO_ROOT_USER}

        image: minio/minio:RELEASE.2025-04-22T22-12-26Z #最后一个版本有admin的
        labels:
            createdBy: Apps
        logging:
            driver: json-file
            options:
                max-file: "10"
                max-size: 5M
        networks:
            - minio-network #同一个网络就行,这里的名字可改
        ports:
            # 面向本机的明文端口(由 OpenResty 反代到这里)
            - ${HOST_IP}:${PANEL_APP_PORT_HTTP}:9001
            - ${HOST_IP}:${PANEL_APP_PORT_API}:9000
        restart: always
        volumes:
            - ${data_address}:/data
            # ⚠ 若仅由 OpenResty 终止 TLS,不要在容器里放证书,否则 MinIO 会启用自身 TLS。
            # 如该目录为空可保留;若有 cert/key,请注释掉下一行或清空目录。
            # - ./certs:/root/.minio/certs
  1. 运行这个docker-compose。cd 到你的文件夹,然后docker-compose up -d

第四步:重复第三步

  1. 记得先更换成你网盘挂载的地址。

  2. 然后创建两个文件在这个地址里。(如上)

    1. 记得更换反向代理的网站。

    2. 记得更换 CONTAINER_NAME='1Panel-minio-1' #名称

    3. 记得更换两个端口

第五步:(建议但可选)反向代理X2组

  1. nginx也得配置,即使你用的是1panel的自动配置,也得改

  2. 案例(你可以喂给GPT或者deepseek 让它适配下你的情况)

  3. 反向代理面板

server {
    listen 8080;           # 非SSL端口
    listen 8888 ssl;       # SSL端口
    http2 on;              # 开启 HTTP/2

    server_name 你的域名; # 记得改成你的域名

    location / {
        proxy_http_version 1.1;

        # WebSocket 支持(无需 map)
        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header Host              $http_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_read_timeout 86400s;
        proxy_send_timeout 86400s;
        chunked_transfer_encoding off;

        proxy_pass http://127.0.0.1:49001; # 你的后端服务地址和端口
    }

    # 自动跳转到 https
    if ($scheme = http) { 
        return 301 https://$host$request_uri; 
    }

    # SSL证书配置(记得改成你自己的)
    ssl_certificate     /你的ssl地址/ssl/fullchain.pem;
    ssl_certificate_key /你的ssl地址/ssl/privkey.pem;
    ssl_protocols       TLSv1.3 TLSv1.2;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # 日志路径(记得改成你自己的)
    access_log /你的log地址/log/access.log main;
    error_log  /你的log地址/log/error.log;
}
  1. 反向代理S3访问端口

server {
    listen 8080;                # http端口
    listen 8888 ssl http2;      # https端口
    server_name 你的域名不带端口; # 你的域名不带端口

    # 大文件/长连接
    client_max_body_size 0;
    proxy_request_buffering off;
    proxy_buffering off;
    proxy_read_timeout 86400s;
    proxy_send_timeout 86400s;
    send_timeout 86400s;

    # 根路径直达 S3 API
    location / {
        proxy_http_version 1.1;
        proxy_set_header Host              $http_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_set_header Connection        "";
        chunked_transfer_encoding off;

        proxy_pass http://127.0.0.1:49000; #你的本地IP和端口
    }

    if ($scheme = http) { return 301 https://$host$request_uri; }

    ssl_certificate     /你的ssl地址/ssl/fullchain.pem; #记得改
    ssl_certificate_key /你的ssl地址/ssl/privkey.pem;   # 记得改
    ssl_protocols       TLSv1.3 TLSv1.2;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    access_log /你的log地址/log/access.log main;   #记得改
    error_log  /你的log地址/log/error.log;        # 记得改
}

第六步:设置Minio

  1. 输出你设置的账号密码进去

  2. 在服务器本地点击新建一个桶,记得一定打开版本,versioned

    1. 设置Access Keys-1,记得保存

  3. 在网盘目录上建立的Minio点击新建另外一个桶,versioned。

    1. 设置Access Keys-2,记得保存

  4. 设置本地服务器的Minio的Repication的复制

那个Use TLS记得关一下,内网访问不用TLS。你要是部署到外网VPS记得换成反向代理的地址和端口,开这个TLS。

注意一个大坑!那个URL不要加http或者https!

然后就结束了!

你可以快乐的通过你配置的反向代理的S3地址,备份思源笔记,备份你的服务器什么的了。

哦哦,你的Key和Secret 全是你的panel 的账户密码也可以。可以不用弄个新的。


评论