使用Minio搭建自己的图床

最近自己想搭建一下自己的个人博客,然后发布到各个平台上面,包括自己的私欲流量,掘金,微信公众号等平台。目前的一个想法是先Typora本地写好文档,然后git上存一份,并且通过脚本统一发布到各个平台。

我们先来实现第一步,搭建一个个人的图床,这样就不会有各个平台的水印了

实验条件:

  1. 一台个人服务器
  2. Typora
  3. 了解docker,nginx的使用

创建Minio

  1. 通过docker直接安装Minio
bash 复制代码
docker pull minio/minio
  1. 创建目录

我们创建了两个目录,用类做数据映射

bash 复制代码
# 存储文件位置
mkdir -p /usr/local/minio/data
​
# 配置文件位置
mkdir -p /usr/local/minio/config
  1. 启动容器 运行Minio

在做数据映射的时候,记得映射一下登录的账号和密码,比如我们将用户名设置为admin,密码为123456

bash 复制代码
docker run \ 
 --name minio \  #docker 镜像名称
  -p 9000:9000  \ #服务端口号
  -p 9001:9001  \ #映射端口号
  -d --restart=always \ #docker设置容器随系统开机启动 minio
  -e "MINIO_ACCESS_KEY=admin"  \ #登录用户名
  -e "MINIO_SECRET_KEY=123456"  \ #登录密码
  -v "/usr/local/minio/data":"/data" \  # 存储文件位置
  -v "/usr/local/minio/config":"/root/.minio"  \ # 配置文件位置
  minio/minio server /data --console-address ":9001"  \  #启动服务对外端口号 访问主机ip+9001 就能打开

注意 :新版本的Minio需要做两个端口映射,分别是控制台端口号api端口号

控制台端口号是指当我们输入ip + 端口的时候,可以访问Minio的控制台,这个端口号被成为控制台端口号

api端口号好像现在java连的话必须使用api端口号

  1. 查看容器启动状态
bash 复制代码
docker ps
​
root@VM-16-6-ubuntu:~# docker ps
CONTAINER ID   IMAGE   COMMAND     CREATED       STATUS       PORTS      NAMES
9a0e09291de0   minio/minio   "/usr/bin/docker-ent..."   3 hours ago   Up 3 hours   0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp   minio

上传图片到Minio

使用我们做数据映射时的账号密码,就可以登录进去,然后创建Buckets,记得要将Access Policy设置成为Public,这样才能通过url访问图片

输入ip + api端口 + 桶名 + 文件名 即可访问图片

Typora + Minio

Minio保存图片已经没有问题了,我们现在开始将Typora和Minio结合起来,当我们插入图片的时候就上传到服务器上面,我们通过js脚本来实现,因为自己对js比较熟悉一点

  1. 本地创建项目

    bash 复制代码
    mkdir Typora-Minio
    cd Typora-Minio
    npm init
  2. 安装minio

    npm install minio
    
  3. 写js脚本,新建一个upload.js,注意替换注释的部分

    javascript 复制代码
    /* 
     * typora插入图片调用此脚本,上传图片到图床
     */
    ​
    const path = require('path')
    // minio for node.js
    const Minio = require('minio') 
    ​
    ​
    // 解析参数, 获取图片的路径,有可能是多张图片
    const parseArgv = () => {
      const imageList = process.argv.slice(2).map(u => path.resolve(u))
      console.log(imageList)
      return imageList
    }
    ​
    // 入口
    const uploadImageFile = async (imageList = []) => {
      // 创建连接
      const minioClient = new Minio.Client({
        // 这里填写你的minio后台域名
        endPoint: 'x.x.x.x',
        // api端口号
        port: 9000,
        useSSL: false,
        // 下面填写你的accessKey和secretKey
        accessKey: 'xxxxxxxxx',
        secretKey: 'xxxxxxxxxxxxxxxxxxx'
      })
    ​
      // 开始上传图片
      const metaData = {}
      const tasks = imageList.map(image => {
        return new Promise(async (resolve, reject) => {
          try {
            // 图片重命名,这里采用最简单的,可以根据自己需求重新实现
            const name = `${Date.now()}${path.extname(image)}`
            // 具体请看Minio的API文档,这里是将图片上传到blog这个bucket上
            const res = await minioClient.fPutObject('blog', name, image, metaData)
            resolve(name)
          } catch (err) {
            console.log(err)
            reject(err)
          }
        })
      })
    ​
      const result = await Promise.all(tasks)
      
      // 返回图片的访问链接
      result.forEach(name => {
        // const url = `http://ip+api端口号/桶名/${name}`
          const url = `http://x.x.x.x:9000/blog/${name}`
        // Typora会提取脚本的输出作为地址,将markdown上图片链接替换掉
        console.log(url)
      })
    }
    ​
    // 执行脚本
    uploadImageFile(parseArgv())
  4. Typora插入图片

    文件 ---> 偏好设置 ---> 图像,设置上传图片时执行js脚本,可以点击旁边的验证图片上传选择一下,无问题的话就大功告成

相关推荐
hong_zc2 分钟前
初始 html
前端·html
小小吱7 分钟前
HTML动画
前端·html
糊涂涂是个小盆友29 分钟前
前端 - 使用uniapp+vue搭建前端项目(app端)
前端·vue.js·uni-app
浮华似水1 小时前
Javascirpt时区——脱坑指南
前端
王二端茶倒水1 小时前
大龄程序员兼职跑外卖第五周之亲身感悟
前端·后端·程序员
_oP_i1 小时前
Web 与 Unity 之间的交互
前端·unity·交互
钢铁小狗侠1 小时前
前端(1)——快速入门HTML
前端·html
凹凸曼打不赢小怪兽1 小时前
react 受控组件和非受控组件
前端·javascript·react.js
狂奔solar2 小时前
分享个好玩的,在k8s上部署web版macos
前端·macos·kubernetes
qiyi.sky2 小时前
JavaWeb——Web入门(8/9)- Tomcat:基本使用(下载与安装、目录结构介绍、启动与关闭、可能出现的问题及解决方案、总结)
java·前端·笔记·学习·tomcat