Giter VIP home page Giter VIP logo

webstack-go's Introduction

webstack-go 网址导航后台系统

基于 Golang 开源的网址导航网站项目,具备完整的前后台,您可以拿来制作自己平日收藏的网址导航。

原有后端项目基础上新增功能:

  • 新增 webstack - 导航首页
  • 新增 系统管理员 - 网站分类
  • 新增 系统管理员 - 网站列表
  • 网站新增支持自动获取标题、Logo、网站描述、一键同步
  • 新增 docker-compose.yml 一键安装各组件
  • 批量添加网址
  • 优化: 由 gorm-gen 代码生成提供支持的友好且更安全的 GORM

快速开始

一、运行环境

安装 Golang、Mysql、Redis

  • Golang 1.16+ 因为使用了 //go:embed 特性;
  • MySQL
    • 连接地址,例如:127.0.0.1:3306;
    • 数据库名,例如:webstack,会在此数据库下初始化数据表;
    • 用户名,不可为空;
    • 密码,不可为空;
  • Redis
    • 连接地址,例如:127.0.0.1:6379;
    • 密码,可为空;
    • 连接DB,默认是 0 ;

二、启动服务

两种方式运行 1. 源码启动服务 2. Docker启动服务

一、源码运行服务

  1. 目录下执行 go mod tidy 拉取项目依赖库

  2. 安装完依赖执行 go run main.go 首次启动程序之后,会在浏览器中自动打开安装界面,链接地址:http://127.0.0.1:9999/install

  3. 点击 初始化项目 会看到如下图所示, 如果提示重新运行服务说明项目初始化完成, 只需重新运行服务就 OK 了!

二、Docker运行服务

包含两部分 1. 基础服务(Mysql、Redis、Service) 2. 监控服务(Prometheus、Grafana)

一、基础服务

  1. 目录下执行 docker-compose -f docker-compose.yml up -d 等待基础组件启动 (Mysql、Redis、Service)

    $ docker-compose -f docker-compose.yml up -d
    [+] Running 4/4
    ✔ Network webstack-go            Created                                                                                                                0.1s
    ✔ Container webstack-go-mysql    Healthy                                                                                                               12.9s
    ✔ Container webstack-go-redis    Healthy                                                                                                               13.4s
    ✔ Container webstack-go-service  Started  
  2. 执行docker-compose -f docker-compose.yml ps 服务正常运行如下

    NAME                  IMAGE                             COMMAND                  SERVICE               CREATED             STATUS                   PORTS
    webstack-go-mysql     mysql/mysql-server:5.7            "/entrypoint.sh mysq…"   webstack-go-mysql     2 minutes ago       Up 2 minutes (healthy)   0.0.0.0:3306->3306/tcp, 33060/tcp
    webstack-go-redis     redis:6.2.4                       "docker-entrypoint.s…"   webstack-go-redis     2 minutes ago       Up 2 minutes (healthy)   0.0.0.0:6379->6379/tcp
    webstack-go-service   webstack-go-webstack-go-service   "./webstack-go -env …"   webstack-go-service   2 minutes ago       Up 2 minutes (healthy)   0.0.0.0:9999->9999/tcp
  3. docker container 正常运行后, 在浏览器中打开安装界面,链接地址:http://127.0.0.1:9999/install

  4. 点击 初始化项目 会看到如下图所示, 如果提示重新运行服务说明项目初始化完成, 只需重新运行 webstack-go-service 容器服务就 OK 了!

二、prometheus、grafana监控服务

注: 监控服务看自己是否需要, 不运行也不影响正常使用

  1. 目录下执行 docker-compose -f docker-compose-prometheus.yml up -d 等待监控组件启动 (Prometheus、Grafana)
    [+] Running 4/4
    ✔ Container webstack-go-prometheus  Started                                                                                                             4.0s
    ✔ Container webstack-go-loki        Started                                                                                                             3.6s
    ✔ Container webstack-go-grafana     Started                                                                                                             4.3s
    ✔ Container webstack-go-promtail    Started  
  2. 执行docker-compose -f docker-compose-prometheus.yml ps 服务正常运行如下
      NAME                     IMAGE                              COMMAND                  SERVICE                  CREATED             STATUS                   PORTS
      webstack-go-grafana      grafana/grafana-enterprise:9.4.3   "/run.sh"                webstack-go-grafana      2 minutes ago       Up 2 minutes             0.0.0.0:3000->3000/tcp
      webstack-go-loki         grafana/loki:2.7.3                 "/usr/bin/loki -conf…"   webstack-go-loki         2 minutes ago       Up 2 minutes             0.0.0.0:3100->3100/tcp
      webstack-go-mysql        mysql/mysql-server:5.7             "/entrypoint.sh mysq…"   webstack-go-mysql        3 minutes ago       Up 3 minutes (healthy)   0.0.0.0:3306->3306/tcp, 33060/tcp
      webstack-go-prometheus   prom/prometheus:latest             "/bin/prometheus --c…"   webstack-go-prometheus   2 minutes ago       Up 2 minutes             0.0.0.0:9090->9090/tcp
      webstack-go-promtail     grafana/promtail:2.7.3             "/usr/bin/promtail -…"   webstack-go-promtail     2 minutes ago       Up 2 minutes             
      webstack-go-redis        redis:6.2.4                        "docker-entrypoint.s…"   webstack-go-redis        3 minutes ago       Up 3 minutes (healthy)   0.0.0.0:6379->6379/tcp
      webstack-go-service      webstack-go-webstack-go-service    "./webstack-go -env …"   webstack-go-service      3 minutes ago       Up 3 minutes (healthy)   0.0.0.0:9999->9999/tcp

Star History

Star History Chart

效果图

首页

网站分类

新增网站

网站信息

监控组件

grafana.png

webstack-go's People

Contributors

ch3nnn avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

webstack-go's Issues

安装问题

执行go mod tidy 拉去依赖库后 go run main.go 命令行执行警报 :
Warning: '-env' cannot be found, or it is illegal. The default 'fat' will be used.

请问大佬 env包没获取还是需要自建env文件 go语言新手 希望大佬能给出解决方案。

请问如何修改docker部署的mysql的密码

你好,首先感谢你的辛勤工作,做出这个项目。
我在尝试能修改docker部署的mysql密码,修改后部署,但是在install之后,重启容器,webstack-go-service 无法启动,查看logs,提示是 Access denied for user 'root'@'192.168.80.4' (using password: YES),如果还原为123456就可以正常工作。
请问该如何修改密码,谢谢。

Debian12下使用docker部署报错

操作系统:
debian12
OS: Debian GNU/Linux 12 (bookworm) x86_64
Host: N8xEJEK
Kernel: 6.1.0-18-amd64
Docker-compose:v2.26.1
报错信息:

5.233 ERROR: unable to select packages:
5.233 tzdata (no such package):
5.233 required by: world[tzdata]

failed to solve: process "/bin/sh -c apk --no-cache add tzdata && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone" did not complete successfully: exit code: 1

安装中端口占用问题

如题,我安装mysql与redis之后,3306与6379都被使用了,这个时候我应该暂停服务,还是应该修改docker-compose.yml文件换成其他端口,我尝试暂停服务,然后使用默认端口,但是都会提示“错误码:10114 错误信息:Redis 连接失败”。

网站logo建议缓存在服务端

对于自动获取的logo,每次打开导航站会访问logo所在网站获取。如果网络环境差的情况,会花不少时间去获取logo,并且可能出现获取不到logo的情况,影响到导航站的展示,拖累性能。
建议获取一次logo后,可以保存在服务端,从服务端拉取logo。

项目初始化失败

老哥我初始化项目填上了我的mysql和redis信息后初始化成功,根据页面提示重启容器
然后就拉闸了
2024/02/01 05:25:47 /go/src/github.com/ch3nnn/webstack-go/internal/repository/mysql/mysql.go:98
2024-01-31T21:25:47.641019695Z [error] failed to initialize database, got error dial tcp: lookup webstack-go-mysql on 127.0.0.11:53: no such host
这个问题我看了代码不过看不太懂,不知道应该改哪里,麻烦尽快回复下

预警邮件设置问题

我是打包好,放到服务器上的。但是在运行过程中报错:
{"code":10101,"message":"内部服务器错误"}
查看日志 看到:

{"level":"error","time":"2023-07-04 22:17:49","caller":"core/core.go:377","msg":"got panic","domain":"go-gin-api[fat]","panic":"runtime error: invalid memory address or nil pointer dereference", ....

{"level":"error","time":"2023-07-04 22:17:49","caller":"alert/alert.go:21","msg":"Mail config error","domain":"go-gin-api[fat]"}

但是,我的邮件设置是默认的,我在本地跑起来没问题,

希望可以增加上传logo的功能

增加网址时为自动获取logo,但是存在各种原因导致无法获取logo,所以希望可以增加手动上传logo图片的功能。感谢!

启动问题

启动后第一次跳转到/install界面,安装好初始化后重启服务一直跳转到这个/install界面。麻烦帮忙看下。
日志告警:

{"level":"error","time":"2023-09-08 17:47:49","caller":"core/core.go:377","msg":"got panic","domain":"go-gin-api[docker]","panic":"runtime error: invalid memory address or nil pointer dereference","stack":"goroutine 38 [running]:\nruntime/debug.Stack()\n\t/usr/local/go/src/runtime/debug/stack.go:24 +0x65\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func2.1()\n\t/var/jenkins_home/workspace/public-webstack-online/internal/pkg/core/core.go:376 +0x14c\npanic({0x11a29a0, 0x3b22cc0})\n\t/usr/local/go/src/runtime/panic.go:838 +0x207\ngithub.com/ch3nnn/webstack-go/internal/services/category.(*service).Tree(0x134aa52?, {0x206f498?, 0xc00029a040?})\n\t/var/jenkins_home/workspace/public-webstack-online/internal/services/category/service_tree.go:33 +0xa4\ngithub.com/ch3nnn/webstack-go/internal/api/index.(*handler).Index.func1({0x206f498, 0xc00029a040})\n\t/var/jenkins_home/workspace/public-webstack-online/internal/api/index/func_index.go:25 +0xa5\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.wrapHandlers.func1(0xc000242200)\n\t/var/jenkins_home/workspace/public-webstack-online/internal/pkg/core/core.go:214 +0xbe\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:174\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func3(0xc000242200)\n\t/var/jenkins_home/workspace/public-webstack-online/internal/pkg/core/core.go:547 +0x268\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:174\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func2(0xc000242200)\n\t/var/jenkins_home/workspace/public-webstack-online/internal/pkg/core/core.go:529 +0x29f\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:174\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func1(0xc000242200)\n\t/var/jenkins_home/workspace/public-webstack-online/internal/pkg/core/core.go:333 +0x6d\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:174\ngithub.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000581d40, 0xc000242200)\n\t/go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:620 +0x671\ngithub.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000581d40, {0x2062210?, 0xc0003082a0}, 0xc000242100)\n\t/go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:576 +0x1dd\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.(*mux).ServeHTTP(0x0?, {0x2062210?, 0xc0003082a0?}, 0xc000071800?)\n\t/var/jenkins_home/workspace/public-webstack-online/internal/pkg/core/core.go:234 +0x26\nnet/http.serverHandler.ServeHTTP({0xc0002c0120?}, {0x2062210, 0xc0003082a0}, 0xc000242100)\n\t/usr/local/go/src/net/http/server.go:2916 +0x43b\nnet/http.(*conn).serve(0xc000124280, {0x2063160, 0xc0003b1530})\n\t/usr/local/go/src/net/http/server.go:1966 +0x5d7\ncreated by net/http.(*Server).Serve\n\t/usr/local/go/src/net/http/server.go:3071 +0x4db\n"}

一个网站能否添加多个URL

一个网站内分了多个子模块的页面,或者分了多地区不同的站点。
希望能在导航页快速跳转到子页面和对应的站点,现在的话要加多个同类的网站,展示上会比较冗余。
能否在导航页的一个网页块中,通过下拉等方式,选择不同的网站?

docker-compose -f docker-compose.yml up -d执行报错

[root@localhost /data/webapp/webstack-go ]$docker-compose -f docker-compose.yml up -d
[+] Building 4.7s (1/1) FINISHED
=> ERROR [webstack-go-service internal] booting buildkit 4.7s
=> => pulling image moby/buildkit:buildx-stable-1 4.6s
=> => creating container buildx_buildkit_default 0.0s

[webstack-go-service internal] booting buildkit:


Error response from daemon: No such image: moby/buildkit:buildx-stable-1

一个部署优化的小建议

数据库可以增加支持使用sqlite,支持关闭缓存不使用redis,这样最小的部署要求只要一个容器就可以,不需要另外redis和mysql的组件,更加轻量化和方便部署,需要的资源也更少。我自己也在尝试修改看看

删除webstack-go-service容器,重新启动会报错

修改webstack-go-service的代码重新打包启动会报错

{"level":"error","time":"2023-09-07 15:28:09","caller":"core/core.go:377","msg":"got panic","domain":"go-gin-api[docker]","panic":"runtime error: invalid memory address or nil pointer dereference","stack":"goroutine 13 [running]:\nruntime/debug.Stack()\n\t/usr/local/go/src/runtime/debug/stack.go:24 +0x5e\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func2.1()\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:376 +0x13a\npanic({0x1198c80?, 0x3b98c10?})\n\t/usr/local/go/src/runtime/panic.go:914 +0x21f\ngithub.com/ch3nnn/webstack-go/internal/services/category.(*service).Tree(0x0?, {0x2086918?, 0xc00188a038?})\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/services/category/service_tree.go:33 +0xac\ngithub.com/ch3nnn/webstack-go/internal/api/index.(*handler).Index.func1({0x2086918, 0xc00188a038})\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/api/index/func_index.go:19 +0x4d\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.(*router).GET.wrapHandlers.func1(0x3ba12a0?)\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:214 +0x6a\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/[email protected]/context.go:174\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func3(0xc0002c8700)\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:547 +0x266\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/[email protected]/context.go:174\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func2(0xc0002c8700)\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:529 +0x29c\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/[email protected]/context.go:174\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func1(0xc0002c8700)\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:333 +0x66\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/[email protected]/context.go:174\ngithub.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000581380, 0xc0002c8700)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:620 +0x65b\ngithub.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000581380, {0x206ef28?, 0xc0000dc1c0}, 0xc000125500)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:576 +0x1dd\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.(*mux).ServeHTTP(0x3c0ddc0?, {0x206ef28?, 0xc0000dc1c0?}, 0xc000177b50?)\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:234 +0x25\nnet/http.serverHandler.ServeHTTP({0xc001874e10?}, {0x206ef28?, 0xc0000dc1c0?}, 0x6?)\n\t/usr/local/go/src/net/http/server.go:2938 +0x8e\nnet/http.(*conn).serve(0xc000170b40, {0x2072a38, 0xc0018881b0})\n\t/usr/local/go/src/net/http/server.go:2009 +0x5f4\ncreated by net/http.(*Server).Serve in goroutine 10\n\t/usr/local/go/src/net/http/server.go:3086 +0x5cb\n"}

[建议] 将一些设置在代码里的参数,改成可配置参数

例如,ip,端口,我在使用docker部署时,由于网络问题,我的公网只有ipv6,docker部署时,我只能使用host模式,这时我若想使用,只能再建一个反向代理,并且还要确保已经默认的端口不能跟其他程序的端口冲突。

疑似项目在数据库连接方面,没有完全设计好

是这样的 我在打开的时候 我根据教程 在网页执行安装
但在MySQL这块 我使用了自定义用户名
提示安装完毕了 但是在重新打开的时候 却提示
image
就很疑惑
版本项目是最新的Release版本 也就是那个 v1.1.0

希望添加一个网址排序的功能

添加新的网址,想把这个网址放到前面展示,发现在同一分类下没法让调整网址排序,希望能增加一个网址排序功能,谢谢~

docker部署报错

docker部署成功,运行一段时间后:

  1. mysql意外关闭 :Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.2.0).

  2. 重启mysql后webstack-go-service报错:/go/src/github.com/ch3nnn/webstack-go/internal/repository/mysql/query/site.gen.go:403 Error 1049 (42000): Unknown database 'webstack-go'

  3. 重启webstack-go-service后报错:/go/src/github.com/ch3nnn/webstack-go/internal/repository/mysql/mysql.go:98
    [error] failed to initialize database, got error Error 1049 (42000): Unknown database 'webstack-go'

扩展功能建议

不够用,建议扩展出一个站点主题。
在分类的基础上再加一层,(站点主题) 比如这个站点主题可以有 AI相关,财经相关,IT相关。 可切换站点达到更好的效果。不用额外建站,望采纳

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.