欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > 使用North自部署图床服务

使用North自部署图床服务

2024/10/28 2:19:11 来源:https://blog.csdn.net/weixin_43817712/article/details/139981153  浏览:    关键词:使用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: POODLEssl_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 WebSocketsproxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;proxy_cache off;# WebSockets were implemented after http/1.0proxy_http_version 1.1;# Configuration for ServerSentEventsproxy_buffering off;# Configuration for LongPolling or if your KeepAliveInterval is longer than 60 secondsproxy_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. 通知设置中的邮箱授权码如何获取?

请移步 这里

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com