使用North自部署图床服务

图床

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

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

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

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

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

开源地址:
North:一个易于搭建的图床服务

Feature

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

安装

Requirement
本地搭建

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

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

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

  3. 双击 ImageBed.exe 运行服务

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

  5. 点击上传图片

  6. 安装完成

服务器搭建

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

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

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

    shell 复制代码
    nohup dotnet ImageBed.dll &

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

    shell 复制代码
    # 查询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

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

    nginx 复制代码
    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 语法是否正确

    shell 复制代码
    sudo nginx -t

    若格式正确则输出

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

    shell 复制代码
    sudo systemctl stop firewalld
    sudo systemctl start girewalld
    sudo firewall-cmd --reload
    sudo nginx -s reload

用法

上传

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. 通知设置中的邮箱授权码如何获取?

请移步 这里

相关推荐
牛奶咖啡131 小时前
shell脚本编程(六)
linux·shell脚本编程·shell中的判断·if/else结构·if/elif/else结构·case选择语句·shell各种判断的语法及示例
sim20201 小时前
创建FTP账号
linux
Ha_To1 小时前
2026.1.12 Linux提升账户权限
linux·运维·服务器
OopspoO1 小时前
Linux内存分析工具
linux·运维
oMcLin2 小时前
如何在Ubuntu 20.04上配置并调优Kubernetes集群,确保在多租户环境下的高可用性与资源分配?
linux·ubuntu·kubernetes
石头5302 小时前
Service 详解
linux
小鸡脚来咯2 小时前
Linux 服务器问题排查指南(面试标准回答)
linux·服务器·面试
末日汐2 小时前
磁盘与文件系统
linux·运维·数据库
水天需0102 小时前
Linux PS4 环境变量详解
linux
小新ya2 小时前
vscode增删改查文件,一直等待中...
linux·vscode