我开源了一个私人云盘——蓝眼云盘

蓝眼云盘

在线Demo (体验账号: demo@tank.eyeblue.cn 密码:123456)

后端tank地址

前端tank-front地址

简介

蓝眼云盘是 蓝眼系列开源软件 之一,也是蓝眼系列其他软件的基础服务软件。蓝眼博客具有以下几大特色:

1. 支持docker

  • 蓝眼云盘的docker镜像已经发布到了Docker Hub,可以一行指令运行。

2. 软件体积小,跨平台,运行简单

  • 蓝眼云盘安装包 6M左右,在windows linux mac OS操作系统中均可安装运行;
  • 蓝眼云盘为绿色软件,将安装包解压缩,修改配置文件后即可一行命令立即运行。

3. 使用方便,核心功能齐全

  • 蓝眼云盘主要支持pc web端,同时手机web也具有不错的响应性支持。
  • 蓝眼云盘实现了云盘(如:百度云盘微云 )的核心功能:文件夹管理,文件管理,上传文件,下载文件,文件分享等。
  • 蓝眼云盘提供能账号管理系统,超级管理员可以管理用户,查看用户文件,普通用户只能查看自己的文件,修改自己的资料。上面提供的体验账号就是一个普通用户的账号。

4. 支持接口编程

  • 蓝眼云盘提供了编程接口,实现了云存储(如:七牛云阿里云OSS )的核心功能,可以使用编程接口上传文件,作为其他网站、系统、app的资源存储器。可以在下载图片时对图片做缩放裁剪处理,可以有效地节省客户端流量。
  • 蓝眼系列开源软件之二的《蓝眼博客》 正是使用蓝眼博客作为第三方资源存储器。蓝眼博客中的所有图片,附件均是存储在蓝眼云盘中。

5. 前后端分离,文档丰富

  • 项目后端使用golang开发,前端使用vue套件开发。
  • 蓝眼云盘有详细的后台api文档 ,对于学习前端的童鞋而言可以快速部署一个正式而又具有丰富接口的后端供学习使用。
  • 后端技术栈使用 golang,没有使用任何web框架;初始化安装,生命周期控制,路由管理,路由匹配,日志管理,依赖注入,错误处理,panic拦截,打包,安装脚本等功能全采用纯手动打造,绿色环保,因此代码更精炼,更具有探讨学习的价值。

如果您觉得蓝眼云盘对您有帮助,请不要吝惜您的star

软件截图

PC端截图

手机端截图

Docker方式运行

蓝眼云盘在运行时依赖mysql数据库,因此最好的方式是使用docker-compose来运行,如果你对docker-compose不熟悉,可以参考这篇文章:《Docker Compose 项目》

1.准备 docker-compose.yml 文件
docker-compose.yml描述了镜像启动的数据卷,环境变量,启动方式,依赖项等。该文件位于项目的根目录下,内容如下:

#docker-compose版本,这里的3不要动
version: "3"
services:

   # 数据库的镜像信息
   # 使用mysql:5.7的镜像
   db:
     image: mysql:5.7
     volumes:
       # 数据库文件存放在宿主机的`~/data/mysql`位置,如果宿主机目录不存在,则会自动创建
       - ~/data/mysql:/var/lib/mysql
     # 如果启动失败,则总是会重启。因为镜像有依赖的情况,不停重启可以保证依赖项启动成功后自己再运行
     restart: always
     environment:
       # 指定root密码为`tank123`,并且创建一个新数据库`tank`,同时用户名和密码为`tank` `tank123`
       MYSQL_ROOT_PASSWORD: tank123
       MYSQL_DATABASE: tank
       MYSQL_USER: tank
       MYSQL_PASSWORD: tank123

   # 蓝眼云盘的镜像信息
   # 依赖 mysql:5.7 的镜像
   tank:
     image: eyeblue/tank:1.0.2
     depends_on:
       - db
     ports:
       # 端口映射关系,宿主机端口:镜像端口
       - "6010:6010"
     # 如果启动失败,则总是会重启。因为镜像有依赖的情况,不停重启可以保证依赖项启动成功后自己再运行
     restart: always
     environment:
       # mysql的端口
       TANK_MYSQL_PORT: 3306
       # Mysql的主机,和services的第一个节点一致。
       TANK_MYSQL_HOST: db
       # 数据库
       TANK_MYSQL_SCHEMA: tank
       # 数据库的用户名
       TANK_MYSQL_USERNAME: tank
       # 数据库的密码
       TANK_MYSQL_PASSWORD: tank123
       # 超级管理员的昵称。只能是英文或数字
       TANK_ADMIN_USERNAME: admin
       # 超级管理员邮箱,作为登录账号
       TANK_ADMIN_EMAIL: admin@tank.eyeblue.cn
       # 超级管理员密码,作为登录密码
       TANK_ADMIN_PASSWORD: 123456
     volumes:
       # 日志文件存放在宿主机的`~/data/tank/log`位置,如果宿主机目录不存在,则会自动创建
       - ~/data/tank/log:/data/log
       # 上传文件存放在宿主机的`~/data/tank/matter`位置,如果宿主机目录不存在,则会自动创建
       - ~/data/tank/matter:/data/matter

2.运行项目
首先保证当前目录是docker-compose.yml所在的目录,然后执行以下指令即可运行蓝眼云盘:

$ docker-compose up -d

3.验证

由于数据库启动需要一定的时间,因此大约20s后,打开浏览器访问http://127.0.0.1:6010,如果看到登录界面则表示运行成功。

4.停止项目

方法一:使用以下命令来停止蓝眼云盘

$ docker-compose stop

方法二:当然你也可以用停止容器的方式来停止蓝眼云盘

$ docker container ls

CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                    NAMES
f5f64735fc53        eyeblue/tank:1.0.2   "/go/bin/tank"           20 minutes ago      Up 13 seconds       0.0.0.0:6010->6010/tcp   tank_tank_1
3a859cad3e7e        mysql:5.7            "docker-entrypoint.s…"   20 minutes ago      Up 14 seconds       3306/tcp                 tank_db_1

$ docker container stop f5
$ docker container stop 3a

如果你比较关心如何使用docker来构建蓝眼云盘,请参考 《Docker 化你的开源项目》

常规安装

a) 准备工作

  1. 一台windows/linux服务器,当然你可以使用自己的电脑充当这台服务器
  2. 安装好Mysql数据库
  3. 在这里 下载服务器对应的安装包
  4. 在服务器上解压缩,修改配置文件conf/tank.json,各项说明如下:
{
   //服务器运行的端口,默认6010。如果配置为80,则可直接用http打开
  "ServerPort": 6010,//日志是否需要打印到控制台,默认false,主要用于调试
  "LogToConsole": false,//Mysql端口,默认3306
  "MysqlPort": 3306,//Mysql主机
  "MysqlHost": "127.0.0.1",//Mysql数据库名称
  "MysqlSchema": "tank",//Mysql用户名,建议为蓝眼云盘创建一个用户,不建议使用root
  "MysqlUserName": "tank",//Mysql密码
  "MysqlPassword": "tank123",//超级管理员用户名,只能是字母和数字
  "AdminUsername": "admin",//超级管理员邮箱,作为登录的账号
  "AdminEmail": "admin@tank.eyeblue.cn",//超级管理员密码
  "AdminPassword": "123456"
}

b) 运行

  • windows平台直接双击应用目录下的tank.exe
  • linux平台执行
cd 应用目录路径
./tank

如果你希望关闭shell窗口后,应用依然运行,请使用以下脚本启动和停止

# 启动应用
cd 应用目录路径/service
./startup.sh

# 停止应用
cd 应用目录路径/service
./shutdown.sh

c) 验证

浏览器中打开 http://127.0.0.1:6010 (127.0.0.1请使用服务器所在ip,6010请使用tank.json中配置的ServerPort) 可以看到登录页面,并且使用配置文件中的邮箱和密码登录成功后可以看到全部文件(见上文截图)即表示安装成功。

使用源代码自行打包

前端项目打包

  1. clone tank-front
  2. 安装依赖项
npm install
  1. 执行打包命令
npm run build
  1. 通过前面三步可以在dist文件夹下得到打包后的静态文件,将dist目录下的所有文件拷贝到后端项目的build/html文件夹下。(下文的工程目录中也有说明)

后端项目打包

  1. clone tank
  2. 安装Golang,环境变量GOPATH配置到工程目录,建议工程目录结构如下:
golang                       #环境变量GOPATH所在路径
├── bin                      #编译生成的可执行文件目录
├── pkg                      #编译生成第三方库
├── src                      #golang工程源代码
│ ├── github.com           #来自github的第三方库
│ ├── golang.org           #来自golang.org的第三方库
│ ├── tank                 #clone下来的tank根目录
│ │ ├── build            #用来辅助打包的文件夹
│ │ │ ├── conf         #默认的配置文件
│ │ │ ├── doc          #文档
│ │ │ ├── html         #前端静态资源,从项目tank-front编译获得
│ │ │ ├── pack         #打包的脚本
│ │ │ ├── service      #将tank当作服务启动的脚本
│ │ ├── dist             #运行打包脚本后获得的安装包目录
│ │ ├── rest             #golang源代码
  1. 准备项目依赖的第三方库
  • golang.org/x
  • github.com/disintegration/imaging
  • github.com/json-iterator/go
  • github.com/go-sql-driver/mysql
  • github.com/jinzhu/gorm
  • github.com/nu7hatch/gouuid

其中golang.org/x国内无法下载,默认会通过git clone 的方式从 这里下载。其余依赖项均会通过go get的方式下载。

  1. 打包
  • windows平台双击运行 tank/build/pack/build.bat,成功之后可在tank/dist下看到tank-x.x.x文件夹,该文件夹即为最终安装包。
  • linux平台运行如下命令:
cd tank/build/pack/
./build.sh

成功之后可在tank/dist下看到tank-x.x.x.linux-amd64.tar.gz

利用得到的安装包即可参考上文的安装一节进行安装。

相关文档

蓝眼云盘后端api

蓝眼云盘编程接口

快速使用Let's Encrypt开启个人网站的https

Docker 化你的开源项目

Contribution

感谢所有蓝眼云盘的贡献者 @zicla@seaheart@yemuhe@hxsherry

如果您也想参与进来,请尽情的fork,star,post issue,pull requests

License

MIT

Copyright (c) 2017-present,eyeblue.cn

原文发布于蓝眼博客 http://blog.eyeblue.cn/home/article/8953d493-f80a-4be0-bde2-50d3c5747430

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket让客户端和服务端之间的数据交换变得非常简单,且允许服务器主动向客户端推送数据,并且之后客户端和服务端所有的通信都依靠这个专用协议进行。 在websocket出现之前,一些网站为了实现消息的推送,采用最多的技术是A
使用gin框架编写服务端应用,配置路由接收websocket请求并处理。同时实现一个websocket命令行客户端用于与服务端通信。
## 前言 linux自带的crontab默认情况下只能精确到分钟,没法执行秒级任务。当然,也不是不行,比如: ```shell * * * * * for i in $(seq 1 11);do echo hello >> /home/heruos/tmp.txt;sleep 5;do
前言 代码参考自《Building Distributed Application in Gin》 需求:设计一个食谱相关的API,数据存放到切片中。 设计模型和API 模型 type Recipe struct { // 菜品名 Name string `json:"name"
前言 通过钉钉群机器人的webhook,实现消息推送。 本文代码仅示例markdown格式的消息。 示例代码 注意修改钉钉机器人的webhook package main import ( "bytes" "encoding/json" "fmt&q
golang-jwt是go语言中用来生成和解析jwt的一个第三方库,早先版本也叫jwt-go。本文中使用目前最新的v5版本。
## 前言 假设gRPC服务端的主机名为`qw.er.com`,需要为gRPC服务端和客户端之间的通信配置tls双向认证加密。 ## 生成证书 1. 生成ca根证书。生成过程会要求填写密码、CN、ON、OU等信息,记住密码。 ```shell openssl req -x509 -newkey rs
前言 在go语言中,因为字符串只能被访问,不能被修改,所以进行字符串拼接的时候,golang都需要进行内存拷贝,造成一定的性能消耗。 方式1:操作符 + 特点:简单,可读性良好。每次拼接都会产生内存拷贝,性能一般。仅适用于字符串类型的变量。 示例代码: str1 := "hello &qu
前言 正常情况下,主协程一旦退出,其子协程也会全部中止并退出。为了阻塞主协程,可以使用time.Sleep(),也可以使用WaitGroup。 用法说明 // 导入sync import "sync" // 定义一个sync.WaitGroup var wg sync.WaitG
前言 方便在内网环境中获取服务器本机IP,省了在脚本中过滤ip或ifconfig的结果。 如果内网中有nginx的话,通过nginx获取本机IP也很方便,可参考 借助nginx自动获取本机IP 示例代码 package main import ( "fmt" "net&
简介 logrus是一个第三方日志库,性能虽不如zap和zerolog,但方便易用灵活。logrus完全兼容标准的log库,还支持文本、JSON两种日志输出格式。 特点 相较于标准库,logrus有更细致的日志级别,从高到低分别是:trace > debug > info > wa
基于Gin框架编写的Web API,实现简单的CRUD功能,数据存放在MongoDB,并设置Redis缓存。
## 简介 借助 `github.com/hpcloud/tail` ,可以实时追踪文件变更,达到类似shell命令`tail -f`的效果。 ## 示例代码 以下示例代码用于实时读取nginx的`access.log`日志文件,读取到后输出到控制台。如果nginx日志做了json格式化,还可以解析
前言 go在操作MySQL时,可以使用ORM(比如gorm、xorm),也可以使用原生sql。本文以使用sqlx为例,简单记录步骤。 go version: 1.16 安装相关库 # mysql驱动 go get github.com/go-sql-driver/mysql # 基于MySQL驱动的
前言 某次在客户内网传输数据的时候,防火墙拦截了SSH的数据包,导致没法使用scp命令传输文件,tcp协议和http协议也只放开了指定端口,因此想了个用http传输的“曲线救国”方案。 假设要从192.168.1.23传输到192.168.2.34,因防火墙限制,只能从1.23访问2.34,不能从2
前言 go version: 1.18 本文主要包含JSON、Form、Uri、XML的数据解析与绑定。 JSON数据解析与绑定 go代码 package main import ( "net/http" "github.com/gin-gonic/gin"
## 前言 假设一个场景,服务端部署在内网,客户端需要通过暴露在公网的nginx与服务端进行通信。为了避免在公网进行 http 明文通信造成的信息泄露,nginx与客户端之间的通信应当使用 https 协议,并且nginx也要验证客户端的身份,也就是mTLS双向加密认证通信。 这条通信链路有三个角色
使用gin框架编写web程序作为alertmanager的webhook receiver,解析数据并发送到钉钉
前言 多阶段封装docker镜像,使用scratch镜像,尽量减小镜像包的体积。 封装用于编译的go镜像 Dockerfile FROM golang:1.20.1 AS builder WORKDIR /apps COPY . /apps/ ENV CGO_ENABLED=0 ENV GOOS=l
前言 标准库strconv提供了字符串类型与其他常用数据类型之间的转换。 strconv.FormatX()用于X类型转字符串,如strconv.FormatFloat()用于浮点型转字符串。 strconv.ParseX()用于字符串转X类型,如strconv.ParseFloat()用于字符串转