借助gitee仓库构建私有图床

借助gitee仓库构建私有图床

架构和准备

  1. 创建gitee服务端仓库
  2. 创建gitee图床仓库
  3. 日常图片存储gitee仓库,通过git提交,保障本地电脑和云上备份双份
  4. 创建spring-boot服务端应用,实现预览图片路径为gitee图床
  5. 创建spring-boot客户端应用,实现远程服务端同步git pull命令
  6. 部署服务通过nginx域名代理
  7. 服务端部署

具体实现细节

仓库和源码地址

gitee 图片仓库https://gitee.com/kcnf_open/wiki

gitee 服务端仓库https://gitee.com/kcnf_open/kcnf-wiki

服务端
复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
yaml配置
复制代码
#app
server:
  port: 8086
  servlet:
    context-path: /
#spring
spring:
  main:
    allow-bean-definition-overriding: true
  devtools:
    restart:
      enabled: false
  profiles:
    active: dev
  web:
    resources:
      static-locations: file:${IMAGE_BASE_PATH:/data/wiki}/, classpath:/static/
启动类
复制代码
package com.jysemel.kcnf;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.annotation.EnableScheduling;

/**
 * @author jysemel
 */
@Slf4j
@EnableScheduling
@SpringBootApplication
public class WikiApplication implements CommandLineRunner {

	@Autowired
	private ApplicationContext context;

	public static void main(String[] args) {
		log.info("砍材农夫	开始启动........................................");
		SpringApplication.run(WikiApplication.class, args);
		log.info("砍材农夫	启动成功........................................");
	}


	@Override
	public void run(String... args) throws Exception {
		// 更简单的方法:直接输出配置值
		String path = context.getEnvironment().getProperty("IMAGE_BASE_PATH");
		log.info(">>> IMAGE_BASE_PATH {}", path);
		log.info(">>> static-locations {}" , context.getEnvironment().getProperty("spring.web.resources.static-locations"));
	}

}
同步git 云图
复制代码
package com.jysemel.kcnf.controller;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@Slf4j
@RestController
public class GitController {

    @Autowired
    private ApplicationContext context;


    @SneakyThrows
    @GetMapping("/admin/pull")
    public String pull() throws IOException {
        String path = context.getEnvironment().getProperty("IMAGE_BASE_PATH");
        log.info(">>> IMAGE_BASE_PATH {}", path);
        Process process = Runtime.getRuntime().exec("git -C "+ path +" pull");
        int code = process.waitFor();
        return code == 0 ? "success" : "failed";
    }
}

演示

相关推荐
71777715 小时前
国内组件安全扫描工具选哪家:2026年主流方案对比与选型指南
人工智能·gitee
tryCbest15 小时前
git实现前后端分离项目提交同一个仓库
git·gitee
Mr.朱鹏16 小时前
Git 仓库同时推送到 Gitee 与 GitHub 配置指南
git·gitee·开源·github
71777716 小时前
GitHub 企业国产替代选型:Gitee 与主流平台对比及迁移要点
人工智能·gitee
7177771 天前
中小团队 DevOps 平台选哪家:2026 年主流平台对比与 Gitee 本土化方案解析
人工智能·gitee
泡泡鱼(敲代码中)1 天前
MySQL 学习笔记:DCL、函数与约束 —— 安全、效率、完整性的三板斧
开发语言·笔记·sql·学习·mysql·gitee
7177772 天前
金融行业研发平台推荐:Gitee 与主流方案对比及选型指南
人工智能·gitee
东小黑2 天前
Git 仓库操作与 VSCode 使用指南
git·vscode·gitee
7177773 天前
有没有国产 GitLab?Gitee 与极狐 GitLab 等主流替代方案对比
人工智能·gitee
7177773 天前
Git自建用什么工具比较好?2025主流方案对比与选型指南
人工智能·gitee