ohUrlShortener 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
ohUrlShortener 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
ohUrlShortener 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MulanPSL-2.0
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发网络工具包
开源组织
地区 国产
投 递 者 罗奇奇
适用人群 未知
收录时间 2022-04-06

软件简介

适合中小型社区网站使用的短链接服务系统,支持短链接生产、查询及302转向,并自带点击量统计、独立IP数统计、访问日志查询:

  1. 支持 Docker One Step Start 部署、Makefile 编译打包
  2. 支持短链接生产、查询、存储、302转向
  3. 支持访问日志查询、访问量统计、独立IP数统计
  4. 支持 HTTP API 方式新建短链接、禁用/启用短链接、查看短链接统计信息、新建管理员、修改管理员密码

部署及构建方式

1. Docker One Step Start

支持 Docker 一步启动所有服务,运行 docker/one_step_start.sh ,该命令将会:

  1. 拉取 baratsemet/ohurlshortener-admin 镜像(本地构建可查看 docker/admin.Dockerfile
  2. 拉取 baratsemet/ohurlshortener-portal 镜像(本地构建镜像可查看docker/portal.Dockerfile
  3. 通过 docker/pull_build.yml 其他描述内容构建 redispostgresql 镜像及服务,并对其运行状态做判断,等待缓存和数据库服务正常之后,再启动其他必要服务 (本地构建镜像请查阅 local_build.yml)
  4. 构建名为 network_ohurlshortener 的虚拟网络供上述服务使用
  5. 开启本机 90919092 端口分别应对 ohUrlShortener-PortalohUrlShortener-Admin 应用

2. 通过 Makefile 构建

构建 linux 平台对应的可执行文件:

make build-linux
 

压缩 linux 平台对应的可执行文件(压缩可执行文件需要 upx 支持):

make compress-linux
 

make help 查看说明文档

3. 使用 Go 编译

项目根目录下执行

go mod download && go build -o ohurlshortener .
 

启动参数说明

ohurlshortener [-c config_file] [-s admin|portal|<omit to start both>]

配置文件说明

根目录下 config.ini 中存放着关于 ohUrlShortener 短链接系统的一些必要配置,请在启动应用之前确保这些配置的正确性

[app]

应用是否以 debug 模式启动,主要作用会在go-gin 框架上体现(eg:日志输出等)
debug = false   

短链接系统本地启动端口
port = 9091

短链接系统管理后台本地启动端口
admin_port = 9092

短链接系统的完整 url 前缀,eg:https://t.cn/ 是前缀(不要忘记最后一个/符号)
url_prefix = http://localhost:9091/
 

Admin 后台默认帐号

默认帐号: ohUrlShortener
默认密码: -2aDzm=0(ln_9^1

数据库中存储的是加密后的密码,在 structure.sql 中标有注释,如果需要自定义其他密码,可以修改这里

加密规则 storage/users_storage.go

func PasswordBase58Hash(password string) (string, error) {
	data, err := utils.Sha256Of(password)
	if err != nil {
		return "", err
	}
	return base58.Encode(data), nil
}
 

亦可参照 storage/users_storage_test.go 中的 TestNewUser() 方法

短链接在应用启动时会存入 Redis 中

所有短链接再系统启动时会以 Key(short_url) -> Value(original_url) 的形式存储在 Redis 中。

1. 为什么要这么做?

当短链接的查询请求进入应用时,为了能够更快、更准确的将用户请求转向到目标链接,与传统的方式从数据库中查询相比,直接从 Redis 中获取目标链接就会显得更有价值。

2. 这种处理方式有什么缺点?

理论上来说,如果 Redis 所在的服务器的内存较大的话,存储10w个Key也是可以的。但是,硬件条件不允许的情况下,就需要控制 Redis 中的 Key 数量(主要是怕机器扛不住,Redis 本身的性能不会有问题)。这部分的功能扩展,考虑在将来的某个版本中实现并允许配置管理。

3. 万一

考虑到可扩展性,多封装了一层 service,以便需要的时候在业务逻辑层进行自定义扩展,eg:将 key 查询改成数据库查询等。

短链接生产过程相关代码

所在文件 core/short_url.go

func GenerateShortLink(initialLink string) (string, error) {
	if utils.EemptyString(initialLink) {
		return "", fmt.Errorf("empty string")
	}
	urlHash, err := utils.Sha256Of(initialLink)
	if err != nil {
		return "", err
	}
	number := new(big.Int).SetBytes(urlHash).Uint64()
	str := utils.Base58Encode([]byte(fmt.Sprintf("%d", number)))
	return str[:8], nil
}
 

定时器1分钟清理一次访问日志

所在文件 main.go

const ACCESS_LOG_CLEAN_INTERVAL = 1 * time.Minute 

func startTicker() error {
	ticker := time.NewTicker(ACCESS_LOG_CLEAN_INTERVAL)
	for range ticker.C {
		log.Println("[StoreAccessLog] Start.")
		if err := service.StoreAccessLogs(); err != nil {
			log.Printf("Error while trying to store access_log %s", err)
		}
		log.Println("[StoreAccessLog] Finish.")
	}
	return nil
}
 

Give Thanks To

由衷感谢以下开源软件、框架等(包括但不限于)

  1. gin-gonic/gin
  2. FomanticUI
  3. dchest/captcha
  4. Masterminds/sprig
  5. go-redis/redis
  6. jmoiron/sqlx
  7. go-ini/ini
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(2) 发布并加入讨论🔥
发表了资讯
2023/05/19 10:23

ohUrlShortener 短链接系统 v2.0 发布 | 指定「打开方式」功能支持

距上一次更新版本差不多两个月,ohUrlShortener 短链接系统与昨天晚上正式发布 v2.0 版本 这个版本主要的变化: 启动性能优化:在短链接数量持续上升之后,启动系统时需要的初始化过程优化 新增:在新建短链接时指定「打开方式」,方便在一些特殊场景需要 ohUrlShortener 是适合中小型社区网站使用的企业级短链接服务系统,支持短链接生产、查询及 302 转向,并自带点击量统计、独立 IP 数统计、访问日志查询: 支持 Docker One...

0
8
发表了资讯
2023/03/01 10:09

ohUrlShortener 短链接系统 v1.9 发布,Redis Cluster 集群支持

经过一段时间修改和测试,ohUrlShortener 短链接系统与昨天晚上正式发布了 v1.9 版本,此版本主要的变化是: 新增 Redis Cluster 集群支持 新增 Captcha 验证码 Redis Cluster 集群支持 处理上个版本中遗留的 bug 考虑到可能有部分朋友希望部署 ohUrlShortener 集群,在此版本做少量改动即可。 新版本下载 Gitee https://gitee.com/barat/ohurlshortener/releases/tag/v1.9 Github https://github.com/barats/ohUrlShortener/r...

3
9
发表了资讯
2023/02/16 10:05

ohUrlShortener 短链接系统 v1.8 发布,API 问题处理

感谢热心网友提交的 PR,ohUrlShortener 短链接系统升级处理了一个 API 接口的问题。 没有使用 HTTP API 接口的用户,可以忽略这个版本,但建议升级。 新版本下载: https://github.com/barats/ohUrlShortener/releases/tag/v1.8 https://gitee.com/barat/ohurlshortener/releases/tag/v1.8 适合中小型社区网站使用的短链接服务系统,支持短链接生产、查询及 302 转向,并自带点击量统计、独立 IP 数统计、访问日志查询: 支持 ...

0
12
发表了资讯
2022/09/21 11:59

ohUrlShortener 短链接系统 v1.7 发布,安全更新

今天凌晨以为热心网友在 Github 上提出 issue 反馈一个安全相关的问题,经测试发现后确实存在一定的安全隐患,故立马修改了版本并更新发布。 在此,向各位使用者及关注的朋友们致歉。 ohUrlShortener 从 v1.3 之后的版本可能都会受到影响,因此强烈建议大家升级到最新版本。 下载最新版本请访问:https://gitee.com/barat/ohurlshortener/releases/tag/v1.7 适合中小型社区网站使用的短链接服务系统,支持短链接生产、查询及 30...

1
9
发表了资讯
2022/08/22 10:03

ohUrlShortener 短链接系统 v1.6 发布,统计功能增强

上个版本发布之后,ohUrlShortener 短链接系统收到热心网友们提出的不少问题,这个版本中对遗留的 issue 进行了处理,主要变化内容包括: 重新设计了统计功能的实现方法,解决统计页面相应超时或卡顿等情况 升级 Base58 相关库 btcsuite/btcutil 到 btcd/btcutil 并升级版本 Dashboard 页面新增更加丰富的统计指标 处理批量新增短链接时可能出现的重复 bug 其他部分必要的改进 详细提交记录可以查阅 https://gitee.com/barat/oh...

0
5
发表了资讯
2022/08/21 19:47

ohUrlShortener v1.6 已经发布,短链接服务系统

ohUrlShortener v1.6 已经发布,短链接服务系统 此版本更新内容包括: 统计功能实现路径改进,侧重于性能方面优化。主要变化内容: 重新设计了统计功能的实现方法,解决统计页面相应超时或卡顿等情况 升级 Base58 相关库 btcsuite/btcutil 到 btcd/btcutil 并升级版本 Dashboard 页面新增更加丰富的统计指标 处理批量新增短链接时可能出现的重复 bug 其他部分必要的改进 详情查看:https://gitee.com/barat/ohurlshortener/rele...

1
4
发表了资讯
2022/07/05 14:49

ohUrlShortener 短链接系统,官网上线

为了能够更好的传播及服务,经过一段时间准备之后,ohUrlShortener 短链接系统官网,今天正式上线发布。 https://www.ohurls.cn 官网全部内容由 MKDocs 通过编写 Markdown 文件生成,做了部分细节调整和备案信息声明等,敬请各位体验。 ohUrlShortener 短链接系统,是一个适合中小型社区网站使用的短链接服务系统,支持短链接生产、查询及 302 转向,并自带点击量统计、独立 IP 数统计、访问日志查询: 支持 Docker One Step St...

0
12
发表了资讯
2022/06/24 10:03

ohUrlShortener 短链接系统 v1.5 发布,管理功能增强

距上一个版本更新快2个月了,ohUrlShortener 短链接系统今天正式发布 v1.5 版本,该版本主要的变化包括: 新增:短链接已,重复短链接的判断及提示 新增:删除短链接功能(界面及API) bugfix:修复了一处 SQL 视图,解决统计面板中数字不准确的问题 其他一些必要的系列更新 从这个版本开始,ohUrlShortener 将使用 GoReleaser 打包、checksum 制作、deb/rpm/tar.gz 等生成、及二进制程序签名。 在使用二进制下载包之前,强烈推...

0
7
发表了资讯
2022/05/09 09:55

ohUrlShortener 短链接系统 v1.4 正式发布

应网友提出的 Issue 需求,ohUrlShortener 短链接系统正式发布了 v1.4 版本。 此版本主要集中在 ohUrlShortener-Admin 管理端,内容包括: 「访问日志」页面查询功能增强,支持指定时间段查询访问日志 「访问日志」页面统计功能支持,支持指定时间段查询统计结果 Docker 版本升级提示: 在 {project}/docker 目录中,执行 ./stop_desotry.sh 停止运行的容器 在 {project}/docker 目录中,修改 vars.env 文件中 OH_ADMIN_VERSION...

0
10
发表了资讯
2022/04/28 11:23

ohUrlShortener 短链接系统 v1.3 发布,支持导出访问日志

ohUrlShortener 短链接系统,今天迎来第三个版本更新,主要变化是: 主要变化: 新增导出访问日志功能 数据统计页面展示短链接备注信息 其中,导出访问日志的功能由 Gitee 社区中热心开源爱好者 猫大哥 贡献,再次向他表达感谢及崇高的敬意。 最新分发版下载 https://gitee.com/barat/ohurlshortener/releases Docker 分发版已同步更新 https://hub.docker.com/r/baratsemet/ohurlshortener-portal https://hub.docker.com/r/b...

1
13
发表了资讯
2022/04/11 07:09

ohUrlShortener 短链接系统 v1.2 正式发布

应 Gitee 中不知名网友的 issue 提议,ohUrlShortener 发布了 v1.2 版本,主要的变化就是加入了 HTTP API 支持,完成以下操作: 新增短链接 POST /api/url 禁用/启用 短链接 PUT /api/url/:url/change_state 查询短链接统计数据 GET /api/url/:url 新建管理员 POST /api/account 修改管理员密码 PUT /api/account/:account/update Linux、Windows、Mac 等系统发行版下载: https://gitee.com/barat/ohurlshortener/releases/v1...

4
8
发表了资讯
2022/04/08 07:31

ohUrlShortener 短链接服务系统 1.0 发布

ohUrlShortener 是一款适合中小型社区网站使用的短链接服务系统,支持短链接成产、查询及302转向,并顺带简单的点击量统计。目前已经完备的功能有: 支持 Docker One Stop 部署、Makefile 编译打包 支持短链接生产、存储、302转向 支持短链接查询、访问日志查询、访问量统计、独立IP数统计 发行版下载,请访问 https://gitee.com/barat/ohurlshortener/releases/v1.0...

0
12
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
2 评论
93 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部