使用North自部署图床服务

图床

图床可以把图片转为链接,从而方便我们书写、分享博客,目前图床主要分为以下几类:

  • 利用 Git 仓库存储
  • 对象存储(OSS、COS、七牛云等)
  • 免费公共图床(SM.MS、聚合图床、ImgTP、Postimage等)

但上述图床都有些不尽人意

  • 公共图床的稳定性未知,往往会开启审查机制、限制上传图片的尺寸
  • Github 国内访问速度堪忧,并且官方明令禁止将 GithubGitee 仓库作为图床
  • 对象存储的容量和访问速度还不错,但流量较贵

图床服务并不需要高性能的服务器去承载,现在云服务器的价格也并不昂贵,因此搭建个人图床也许是不错的选择。github上的一个开源项目North 可以很方便的帮助我们自部署图床服务.
开源地址:
North:一个易于搭建的图床服务

Feature

  • 剪贴板图片上传、链接自动复制
  • 可视化图片管理
  • 安全可靠,图片完全存储在主机
  • 无图片尺寸、数量、带宽限制(取决于环境)
  • 跨平台,可在 windowsLinuxMacOS 部署
  • image-20221202212357589
    image-20221202212640017

安装

Requirement
  • .NET Runtime (必需)
    • 在 Windows 上安装
    • 在 Linux 上安装 .NET
    • 在 macOS 上安装 .NET
  • Nginx (可选)
本地搭建

版本: Windows 11 家庭中文版 (21H2)

  1. 前往 ImageBed主页 下载资源包

    image-20220506144854125

  2. 解压资源包 (图片存储路径为 Data/Resources/Images)

    Z62J08FN

  3. 双击 ImageBed.exe 运行服务

    V6X4644N

  4. 浏览器地址栏输入 localhost:12121

    8PD0X4VR

  5. 点击上传图片

    RJ6V26VJ

    F4TNFTTD

  6. 安装完成

服务器搭建

版本: Ubuntu 18.04.4 LTS(GNU/Linux 4.15.0-159-generic x86_64)

  1. 将资源包解压后上传至云服务器

    08HLTD88

  2. 进入 ImageBed 文件夹,运行 ImageBed.dll

    nohup dotnet ImageBed.dll &
    

    该命令会在后台运行 ImageBed.dll,若要关闭 ImageBed 服务,需要先查询 ImageBed 服务的 pid,之后用 kill 命令关闭

    # 查询ImageBed服务pid
    ps -ef | grep dotnet
    
    # pid为4363
    ubuntu    4363  1636  0 19:32 pts/0    00:00:01 dotnet ImageBed.dll
    ubuntu   31389 30239  0 21:47 pts/2    00:00:00 grep --color=auto dotnet
    
    # 关闭ImageBed服务
    ubuntu@VM-0-16-ubuntu:~$ sudo kill 4363
    
  3. 浏览器地址栏输入 {ip}:12121 即可访问图床服务,其中 {ip} 为云服务器公网 ip

  4. 安装完成

Nginx 反向代理

反向代理概念、原理、功能请 移步,这里不再赘述。下面主要叙述如何在 Linux 上搭建 Nginx 反相代理

  1. 安装 nginx

    sudo apt-get install nginx
    
  2. 打开 /etc/nginx/nginx.conf,修改相关设置

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    
    events {
    	  worker_connections 768;
    }
    
    http {
       sendfile on;
       tcp_nopush on;
       tcp_nodelay on;
       keepalive_timeout 65;
       types_hash_max_size 20480;
    
       include /etc/nginx/mime.types;
       default_type application/octet-stream;
    
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
       ssl_prefer_server_ciphers on;
    
       access_log /var/log/nginx/access.log;
       error_log /var/log/nginx/error.log;
    
       gzip on;
    
       map $http_connection $connection_upgrade {
         "~*Upgrade" $http_connection;
         default keep-alive;
       }
    
       # ========================== 重点看这里========================
       server {
           listen 80;
           server_name xxx.xxx.xxx.xxx;				                    # 云服务器公网ip (或域名)     
    
           location / {
               client_max_body_size 100m;                          		# html报文尺寸限制
               
               proxy_pass http://127.0.0.1:12121;
    
               # Configuration for WebSockets
               proxy_set_header Upgrade $http_upgrade;
                     proxy_set_header Connection $connection_upgrade;
                     proxy_cache off;
                # WebSockets were implemented after http/1.0
               proxy_http_version 1.1;
    
               # Configuration for ServerSentEvents
               proxy_buffering off;
    
               # Configuration for LongPolling or if your KeepAliveInterval is longer than 60 seconds
               proxy_read_timeout 100s;
    
               proxy_set_header Host $host;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_set_header X-Forwarded-Proto $scheme;
           }
       }
    
    	  include /etc/nginx/conf.d/*.conf;
    	  include /etc/nginx/sites-enabled/*;
    }
    
  3. 检查 nginx.conf 语法是否正确

    sudo nginx -t
    

    若格式正确则输出

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
  4. 关闭防火墙并重新加载 nginx

    sudo systemctl stop firewalld
    sudo systemctl start girewalld
    sudo firewall-cmd --reload
    sudo nginx -s reload
    

用法

上传

web 界面上传

web界面上传

剪贴板上传

剪贴板上传

删除

删除图片

导入导出

导入图片

导入图片

导出图片

导出图片

视图切换

视图切换

API

该图床服务器包含三个API(上传、下载、删除),控制器为 Controllers/ImageController

上传图片

HTTP POST /api/image

Body 请求参数 Form-data

参数名类型必填说明
*[file]图片文件

返回参数 JSON 最外层结构为: Object

参数名类型必含说明
statusCode[int]状态码
message[string]提示信息
res[array]图片链接

下载图片

HTTP GET /api/image/{imageName}

REST参数

参数名类型必填说明
imageName[string]图片名称

返回参数 Binary

图片文件

删除图片

HTTP DELETE /api/image/{imageName}

REST参数

参数名类型必填说明
imageName[string]图片名称

返回参数 JSON 最外层结构为: Object

参数名类型必含说明
statusCode[int]状态码
message[string]提示信息
res[object]恒为null

Q & A

S1. 局域网用户如何上传图片?

局域网内用户在浏览器输入 {ip}:12121 即可访问图床服务器,其中 {ip} 为服务器的 局域网IP

S2. 如何对接Picgo?

PicGo 是一款图床管理软件,支持多种图床。使用 picgo 可大大简化我们上传图片的流程,笔者在此开发了 picgo 插件 picgo-plugin-imagebed 以供大家使用

S3. 导入图片压缩包无响应?

请尝试直接压缩图片,而不是包含图片的文件夹

S4. 通知设置中的邮箱授权码如何获取?

请移步 这里

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024软件设计师笔记之考点版(一考就过):11-25

软件设计师之一考就过:成绩版 考点11:防火墙、入侵检测 真题1:(专家系统、模型检测、简单匹配)属于入侵检测;而漏洞扫描不属于。 真题2:防火墙特性包括(控制进出网络的数据包和数据流向、提供流量信息的日志和审计、隐藏内部IP以及网络结构细节),但不包括提供漏洞扫…

恋爱脑?No,爱情保镖还得靠AI!

本文由 ChatMoney团队出品 你是否曾经想过,为什么我们会在恋爱中变得如此“上头”,仿佛整个世界都围绕着那个TA旋转? 恋爱脑,通常是指一个人在恋爱中过度投入、过度依赖对方,甚至无法自拔的心理状态。 你会发现自己时时刻刻都在…

屏幕翻译下载哪个软件好?好用的屏幕翻译推荐

想象一下,当我们在阅读外文文档或是观看外语电影时,如果能有一款翻译工具同步提供译文,那将是多么令人愉悦的体验! 如果这种翻译服务能够在不影响其他应用的情况下进行,那就是double快乐了。 其实,现在要…

分享一套基于SSM的美食推荐管理系统(源码+文档+部署)

大家好,今天给大家分享一套基于SSM的美食推荐管理系统 开发语言:Java 数据库:MySQL 技术:SpringSpringMvcMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 博主介绍: 一名Java全栈工程师,专注于Jav…

各大广告商竞相厮杀下,诞生了一个偏门的副业方式

前段时间,想买摩托车,但是媳妇不让买,所以我打算偷偷买,然后萌生了去摆摊赚钱的想法,但是还没有实施就在网上接触到了“某赚”APP,于是一发不可收拾,用我的话来说,我做的不是副业&am…

腾讯云 轻量应用服务器 部署私有化大模型

1. 进入控制台后,找到我们购买的服务器,然后点击登录 服务器 - 轻量云 - 控制台 (tencent.com) 2. 安装系统 面板输入 curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh 命令解释: 从F…

解密城市酷选为何异军突起!打造消费新潮流的排队免单模式

一、城市酷选平台简介 在数字化浪潮席卷全球的今天,城市酷选作为一个前沿的消费平台,凭借其独特的排队免单模式,成功吸引了众多消费者和商家的目光。该平台不仅整合了线上线下的资源,更通过数字化手段,为消费者提供了…

一文读懂RSTP流媒体传输原理

什么是流? 流(Streaming):近年在Internet上出现的新概念,定义非常广泛,主要是指通过网络传输多媒体数据的技术总称。 流式传输分为两种:顺序流式传输 (Progressive Streaming)和实时流式传输 (R…

408数据结构-图的应用1-最小生成树 自学知识点整理

前置知识:图的遍历 图的应用是408初试历年考查的重点。不过一般而言,这部分内容直接以算法设计题形式考查的可能性极小,更多的是结合图的实例来考查算法的具体操作过程,要求掌握的是手推模拟给定图的各个算法执行过程。此外&#…

华为Pura70支持5G功能吗?看完你就清楚了

随着 5G 技术的普及,现在智能手机市场中的大部分新品都已经支持 5G 网络。相较于 4G,5G 不仅带来了更快的网速,更为用户带来了全新的使用体验。 然而,华为作为智能手机市场的佼佼者,其产品线中的部分手机在配置上却有…

程序运行包与源码的区别

在软件开发和信息技术领域,程序运行包(Executable Package)与源码(Source Code)是两个至关重要的概念。它们各自在软件开发、部署和维护过程中扮演着不同的角色,且有着显著的区别。本文旨在深入探讨程序运行…

数字图像分析(第二部分)

文章目录 第8章 图像分割图像分割定义阈值分割依赖像素的阈值选取Otsus方法依赖区域的阈值选取依赖坐标的阈值选取变化阈值法区域生长法分裂合并方法分水岭算法聚类分割算法K-meansAP算法Graph cut第9章 图像特征表达基于全局特征的图像表达直方图GIST基于局部特征的图像表达简…

【ppt技巧】有哪些方法可以实现?PPT转换为图片!

将ppt文件转换为图片都有哪些方法可以实现?其实很简单,一起来看一下如何操作吧! 方法一: 使用格式转换器,有些文件格式转换器,支持ppt转换为图片。 方法二: 不需要转换器,直接在…

最长上升子序列模型——AcWing 272. 最长公共上升子序列

最长上升子序列模型 定义 给定一个序列,如整数序列或字符序列,最长上升子序列是指其中最长的子序列,满足子序列中的元素依次递增。最长上升子序列模型是一种在给定序列中寻找最长上升子序列的问题模型。 运用情况 该模型常用于解决与序列…

44岁过气港姐晚晚熬通宵开直播,情路坎坷生两胎老公身份成迷

曾经的「9料」港姐冠军杨思琦近年将工作重心转向内地,狠心抛下一儿一女在香港,只身一人定居广州靠当主播维持生计。 相信有不少网友都留意到,杨思琦几乎晚晚都通宵直播,睡觉前看她在卖力劲歌热舞与其他直播主PK赚钱,一…

jenkins环境搭建--关于jenkins在Ubuntu下的安装篇(一)

在ubuntu下使用命令进行下载安装包: 关于jenkins的安装有多种,可以借助docker容器进行安装,也可以通过传统方法手动一步步的进行安装,以下介绍手动一步步的安装方法,后续我们将解释关于jenkins的相关配置以及实战使用…

Linux系统中文件权限详解

一、Linux文件权限设计 Linux系统中任何内容都可以用文件表示,其对文件设计了一套权限进行管理;文件权限共有11个字符,从左向右共分为5段(每段的具体说明如下表Linux权限设计说明所示): Linux权限设计说明 …

基于SSM+Jsp的雅博书城在线系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

基于FreeRTOS+STM32CubeMX+LCD1602+MCP4141(SPI接口)的数字电位器Proteus仿真

一、仿真原理图: 二、运行效果: 三、软件部分: 1)、SPI读写: 2)、初始化部分: void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the CPU, AHB and APB busses clocks …

STM32存储左右互搏 模拟U盘桥接QSPI总线FATS读写FLASH W25QXX

STM32存储左右互搏 模拟U盘桥接QSPI总线FATS读写FLASH W25QXX STM32的USB接口可以模拟成为U盘,通过FATS文件系统对连接的存储单元进行U盘方式的读写。 这里介绍STM32CUBEIDE开发平台HAL库模拟U盘桥接Quad SPI总线FATS读写W25Q各型号FLASH的例程。 FLASH是常用的一种…