【本地图床搭建】宝塔+Docker+MinIO+PicGo+cpolar:打造本地化“黑科技”图床方案

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除!


文章目录

  • 前言
  • 宝塔安装Docker
  • MinIO 安装与设置
  • cploar内网穿透
  • PicGo下载与安装
  • typora安装
  • 总结
  • 互动
  • 致谢
  • 参考
  • 目录导航


前言

在博客创作过程中,图片管理是不可或缺的重要环节。对于众多依赖 WordPress 搭建博客网站的用户而言,每次上传媒体文件都需要在后台手动操作,流程繁琐且效率低下。而选择公开图床虽能暂时解决存储问题,但数据安全与稳定性始终是悬而未决的隐患——一旦图床服务商关闭或数据丢失,辛苦积累的视觉素材可能瞬间化为乌有。

为破解这一困境,本地化图床方案应运而生。通过服务器环境中的宝塔面板,可快速部署 Docker 容器化服务,实现存储与应用的物理隔离。在此基础上,采用 MinIO 构建高性能、S3 协议兼容的对象存储系统,既能满足海量图片的分布式存储需求,又可通过标准化接口与第三方工具无缝对接。同时,借助 PicGo 实现便捷的客户端上传功能,并配合 cpolar 内网穿透技术,将本地服务映射为公网可访问的静态资源地址以实现图片资产的自主掌控与高效管理。

东荷新绿的博客网站 - 【本地图床搭建】宝塔+Docker+MinIO+PicGo+cpolar:打造本地化“黑科技”图床方案

访问密码:dhxl
若无法访问,就是笔记本关机了
若图片无法显示,就是图床失效了


宝塔安装Docker

  • 在宝塔面板进行Docker安装
    image-20250413115158697

注意:虚拟机的宝塔面板的无法实现外网访问。

  • 授权特定IP也不行。

    image-20250413143630639

  • phpmyadmin 启动异常也不影响

    image-20250413143931251

  • 建议修改虚拟机的网络模式为桥接模式:NAT模式只能本机访问,桥接可局域网访问,相对方便点。

    image-20250413144352453


MinIO 安装与设置

  • 搜索MinIO插件
    image-20250413115437135

  • 记住账号密码
    image-20250413115916074

  • 查看日志
    image-20250413120059670

  • 登录MinIO:127.0.0.1:19001

image-20250413120329300

  • 创建桶
    image-20250413120410174
    image-20250413120624917

image-20250413120650983

  • 设置桶权限
    image-20250413121141625

image-20250413121408741

  • 测试上传
    image-20250413121800704

  • 创建访问密钥:后续PicGo会用到。

image-20250413122257595


cploar内网穿透

cploar官网:https://www.cpolar.com/,当然你需要一个注册一个号。

  • 登陆后如下图,linux不推荐这样安装,浏览器可能无法访问cpolar web UI管理界面

image-20250413134717233

上述操作,配置文件在/home/用户名/.cpolar/cpolar.yml,无法配置系统服务,即cpolar http 80会报错找不到cpolar,进而向系统添加、启动、查看cpolar服务:sudo systemctl enable cpolarsudo systemctl start cpolarsudo systemctl status cpolar都会提示没有该服务。

笔者也尝试过创建cpolar.service、将cpolar可执行文件移动到/usr/lccal/bin等,甚至添加环境变量,编辑./bash_bashrc等等,网上找了一堆解决办法都不行,甚至一度怀疑是不是虚拟机的问题。

最后发现是安装有问题,于是卸载cpolar进行重新安装。

卸载: curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash -s -- --remove

  • linux正确的安装方法

    需要切换到root账户:sudo -s

    cpolar 安装:curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

    查看版本: cpolar version

    token认证: cpolar authtoken x你的authtokenx

    image-20250413140404808

    添加系统服务:sudo systemctl enable cpolar

    启动服务:sudo systemctl start cpolar

    查看服务:sudo systemctl start cpolar

    image-20250413140724628


PicGo下载与安装

PicGo下载Gitee: PicGo,不推荐Github的下载方式,国内访问受限或者需要科学上网。

  • 推荐山东大学的镜像站,速度很快。

image-20250413130616453

  • 下载AppImage结尾的文件

image-20250413130951224

  • 可执行文件右键修改执行权限

    image-20250413131224270

  • 运行PicGo-2.3.1.AppImage

./PicGo-2.3.1.AppImage

可能会遇到报错:dlopen(): error loading libfuse.so.2,AppImages require FUSE to run.You might still be able to extract the contents of this AppImage,if you run it with the --appimage-extract option.See https://github.com/AppImage/AppImageKit/wiki/FUSE for more information

image-20250413131642385

  • 解决办法: sudo apt install libfuse2

    image-20250413131655744

  • PicGo插件下载

    下载地址:picgo-plugin-minio

    可以 git clone https://gitee.com/wanghuya/picgo-plugin-minio.git

    可以下载zip, 然后使用unzip picgo-plugin-minio.zip 进行解压。

  • picgo-plugin-minio 安装

sudo apt install npm
cd picgo-plugin-minio
npm install

image-20250413132817499

  • PicGo配置

    image-20250413133204353

    image-20250413134013564


typora安装

由于多数博客均是使用markdown语法,并非使用html进行编辑。因此在本地编辑希望将插入的图像直接转成对应的公网可访问的图片连接避免一个个替换,typora恰好提供了这样的功能。

  • typora下载: ​ https://typoraio.cn/releases/all

image-20250413141635822

image-20250413141724915

  • 安装typora

    sudo dpkg -i typora_1.10.8_amd64.deb

    image-20250413141926128

  • 偏好设置

    image-20250413142048167

    image-20250413142130093

    image-20250413143028582

  • 插入效果
    image-20250413150529805


总结

总结: 本文通过宝塔面板安装Docker,提供MinIO服务以实现对象存储,进一步使用PicGo上传MinIO,并以cpolar实现内网穿透的同时提供公网访问的图像IP以搭建本地图床。


互动

  • 上述内容对你有用吗?

欢迎在评论区解答上述问题,分享你的经验和疑问!

当然,也欢迎一键三连给我鼓励和支持:👍点赞 📁 关注 💬评论 💰打赏。


致谢

欲尽善本文,因所视短浅,怎奈所书皆是瞽言蒭议。行文至此,诚向予助与余者致以谢意。


参考

[1] https://www.cpolar.com/
[2] 山东大学的镜像站
[3] PicGo
[4] picgo-plugin-minio
[5] https://typoraio.cn/releases/all
[6] https://cloud.tencent.com/developer/article/2446060


目录导航

  • 【博客目录】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/901439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos-LLM-生物信息-BioGPT-使用1

参考: GitHub - microsoft/BioGPT https://github.com/microsoft/BioGPT BioGPT:用于生物医学文本生成和挖掘的生成式预训练转换器 |生物信息学简报 |牛津学术 — BioGPT: generative pre-trained transformer for biomedical text generation and mini…

高效爬虫:一文掌握 Crawlee 的详细使用(web高效抓取和浏览器自动化库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Crawlee概述1.1 Crawlee介绍1.2 为什么 Crawlee 是网页抓取和爬取的首选?1.3 为什么使用 Crawlee 而不是 Scrapy1.4 Crawlee的安装二、Crawlee的基本使用2.1 BeautifulSoupCrawler的使用方式2.2 ParselCrawler的使…

架构总览怎么写,才算工业级?

📈系统架构文档是整个项目最重要的起点,但很多人第一章就“写穿了”: 不是写得太细,就是没有重点。想要写出高质量、能协作、能传承的架构文档,这一篇会告诉你应该怎么做—— ✅ 架构总览的终极目标 明确边界、定义角色、画清数据流 别讲执行细节,别深入函数调用。 ✅ 架…

优先级队列(堆二叉树)底层的实现:

我们继续来看我们的优先级队列: 优先级队列我们说过,他也是一个容器适配器,要依赖我们的容器来存储数据; 他的第二个参数就是我们的容器,这个容器的默认的缺省值是vector,然后他的第三个参数,我…

GIC驱动程序分析

今天呢,我们就来具体的讲一下GIC的驱动源码啦,这个才是重点来着,我们来看看: GIC中的重要函数和结构体: 沿着中断的处理流程,GIC涉及这4个重要部分: CPU从异常向量表中调用handle_arch_irq&am…

java操作redis库,开箱即用

application.yml spring:application:name: demo#Redis相关配置redis:data:# 地址host: localhost# 端口,默认为6379port: 6379# 数据库索引database: 0# 密码password:# 连接超时时间timeout: 10slettuce:pool:# 连接池中的最小空闲连接min-idle: 0# 连接池中的最…

Cribl 通过Splunk search collector 来收集数据

今天利用Spliunk search collector 来收集数据啦:还是要先cribl 的官方文档: Splunk Search Collector | Cribl Docs Splunk Search Collector Cribl Stream supports collecting search results from Splunk queries. The queries can be both simple and complex, as well a…

What Was the “Game Genie“ Cheat Device, and How Did It Work?

什么是“Game Genie”作弊装置,它是如何工作的? First released in 1991, the Game Genie let players enter special codes that made video games easier or unlocked other functions. Nintendo didnt like it, but many gamers loved it. Heres wha…

位运算题目:连接连续二进制数字

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:连接连续二进制数字 出处:1680. 连接连续二进制数字 难度 5 级 题目描述 要求 给定一个整数 n \texttt{n} n,将 1 \text…

第十六届蓝桥杯Java b组(试题C:电池分组)

问题描述: 输入格式: 输出格式: 样例输入: 2 3 1 2 3 4 1 2 3 4 样例输出: YES NO 说明/提示 评测用例规模与约定 对于 30% 的评测用例,1≤T≤10,2≤N≤100,1≤Ai​≤10^3。对于 100…

63. 评论日记

2025年4月14日18:53:30 雷军这次是真的累了_哔哩哔哩_bilibili

电商中的订单支付(内网穿透)

支付页面 接口文档 Operation(summary"获取订单信息") GetMapping("auth/{orderId}") public Reuslt<OrderInfo> getOrderInfo(Parameter(name"orderId",description"订单id",requiredtrue) PathVaariable Long orderId){OrderI…

MySQL表的使用(4)

首先回顾一下之前所学的增删查改&#xff0c;这些覆盖了平时使用的80% 我们上节课中学习到了MySQL的约束 其中Primary key 是主键约束&#xff0c;我们今天要学习的是外键约束 插入一个表 外键约束 父表 子表 这条记录中classid为5时候&#xff0c;不能插入&#xff1b; 删除…

Kotlin作用域函数

在 Kotlin 中&#xff0c;.apply 是一个 作用域函数&#xff08;Scope Function&#xff09;&#xff0c;它允许你在一个对象的上下文中执行代码块&#xff0c;并返回该对象本身。它的设计目的是为了 对象初始化 或 链式调用 时保持代码的简洁性和可读性。 // 不使用 apply va…

C#集合List<T>与HashSet<T>的区别

在C#中&#xff0c;List和HashSet都是用于存储元素的集合&#xff0c;但它们在内部实现、用途、性能特性以及使用场景上存在一些关键区别。 内部实现 List&#xff1a;基于数组实现的&#xff0c;可以包含重复的元素&#xff0c;并且元素是按照添加的顺序存储的。 HashSet&…

Python 实现的运筹优化系统数学建模详解(最大最小化模型)

一、引言 在数学建模的实际应用里&#xff0c;最大最小化模型是一种极为关键的优化模型。它的核心目标是找出一组决策变量&#xff0c;让多个目标函数值里的最大值尽可能小。该模型在诸多领域&#xff0c;如资源分配、选址规划等&#xff0c;都有广泛的应用。本文将深入剖析最大…

数据库的种类及常见类型

一&#xff0c;数据库的种类 最常见的数据库类型分为两种&#xff0c;关系型数据库和非关系型数据库。 二&#xff0c;关系型数据库介绍 生产环境主流的关系型数据库有 Oracle、SQL Server、MySQL/MariaDB等。 关系型数据库在存储数据时实际就是采用的一张二维表&#xff0…

PE文件(十五)绑定导入表

我们在分析Windows自带的一些程序时&#xff0c;常常发现有的程序&#xff0c;如notepad&#xff0c;他的IAT表在文件加载内存前已经完成绑定&#xff0c;存储了函数的地址。这样做可以使得程序是无需修改IAT表而直接启动&#xff0c;这时程序启动速度变快。但这种方式只适用于…

计算机网络分层模型:架构与原理

前言 计算机网络通过不同的层次结构来实现通信和数据传输&#xff0c;这种分层设计不仅使得网络更加模块化和灵活&#xff0c;也使得不同类型的通信能够顺利进行。在网络协议和通信体系中&#xff0c;最广为人知的分层模型有 OSI模型 和 TCP/IP模型。这两种模型分别定义了计算…

Ollama模型显存管理机制解析与Flask部署方案对比

一、Ollama显存释放机制 Ollama部署模型后&#xff0c;显存占用分为两种情况&#xff1a; 首次调用后短暂闲置&#xff08;约5分钟内&#xff09;&#xff1a; • 释放KV Cache等中间计算数据&#xff08;约回收30%-50%显存&#xff09;。 • 模型权重仍保留在显存中&#xf…