借助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年主流SCA工具选型与Gitee生态实践指南
gitee
小白的码BUG之路18 小时前
Jenkins -- 连接gitee
运维·gitee·jenkins
智碳能碳管理平台10 天前
碳排放核算软件如何支撑工业能碳大数据与节能优化
gitee·能碳管理系统·智碳能碳管理平台·企业能碳管理系统·碳排放核算软件·绿色工厂申报saas·能碳管理 ems
yubang322311110 天前
Android保活sdk
android·gitee·保活
cakeism82510 天前
金融行业 DevOps 平台推荐:2026年主流方案对比与 Gitee 选型解析
金融·gitee·devops
71777718 天前
研发平台选哪家比较好:2026年主流平台对比与Gitee选型指南
人工智能·gitee
ai大模型-探索者18 天前
Git在PyCharm中的使用完全指南
pycharm·gitee
明天…ling18 天前
gitee与vscode远程连接
vscode·gitee
我命由我1234519 天前
Git 推送报错:error: src refspec main does not match any
运维·git·gitee·github·运维开发·学习方法·版本控制