Giter Club home page Giter Club logo

fesiong / goblog Goto Github PK

View Code? Open in Web Editor NEW
463.0 10.0 108.0 54 MB

AnQiCMS is an enterprise content management system developed with GoLang based on the iris framework. It is easy to deploy, and the software is more secure than the traditional PHP-developed content management system. It has an elegant, compact interface and fast execution speed.

Home Page: https://www.anqicms.com/

License: Other

Go 89.26% JavaScript 0.08% HTML 2.98% Shell 0.08% Makefile 0.07% Batchfile 0.04% XSLT 0.49% PHP 5.49% CSS 1.50%
goblog iris go blog website seo seo-friendly anqicms

goblog's Introduction

更新日志 · English · 中文

AnQiCMS

介绍

安企内容管理系统(AnqiCMS)的前身是GoBlog,一款基于 iris 框架,使用 golang 开发的简洁版个人博客系统

GoBlog是一个由 golang 编写的开源个人博客系统,界面优雅,小巧、执行速度飞快,并且对seo友好,可以满足日常博客需求。它的使用很简单,部署非常方便,pc和移动端自适应,页面模板使用类似blade模板引擎语法,上手非常容易,适合个人博客使用。

安企内容管理系统(AnqiCMS),是一款基于 iris 框架,使用 GoLang 开发的企业内容管理系统。它部署简单,软件相对于传统的PHP开发的内容管理系统更加安全,界面优雅,小巧,执行速度飞快,使用 AnqiCMS 搭建的网站可以防止众多常见的安全问题发生。AnqiCMS 的设计对SEO友好,并且内置了大量企业站常用功能,对网站优化有很好的帮助提升,对企业管理网站一定程度上提提高了办事效率,提高企业的竞争力。

AnqiCMS 除了适合做企业站,也适合做营销型网站、企业官网、商品展示站点、政府网站、门户网站、个人博客等等各种类型的网站。

AnqiCMS 支持 Django 模板引擎语法,该语法类似 blade 语法,可以非常容易上手模板制作。网站模式支持 自适应、代码适配、PC+mobile 独立站点 三种模式,根据不用需求,可以选择适合自己的搭配方式来建站。

我们的追求:让天下都是安全的网站。

我们一直朝着网站安全的方向前进,让 AnqiCMS 为你的网站安全护航。

欢迎您使用 AnqiCMS。

快速开始

下载最新的 AnqiCMS
安装一个新的站点
查看模板使用教程
查看后台使用帮助
查看接口文档

温馨提示:大多数文档的编写语言为中文,如果您是英文用户,请使用浏览器自带翻译功能自行翻译。

网站特色功能

  • 自定义文档模型
  • 自定义页面导航
  • 富文本、Markdown 编辑器支持
  • Webp 图片支持
  • 多模板自定义支持
  • 多站点支持
  • 数据统计详细记录
  • 自定义伪静态规则
  • 多个搜索引擎主动推送
  • Sitemap管理
  • Robots.txt管理
  • 友情链接管理
  • 内容评论管理
  • 自动锚文本功能
  • 网站留言管理
  • 关键词库管理
  • 内容素材管理
  • 邮件提醒功能
  • 文章采集功能
  • 文章组合功能
  • 文章导入功能
  • 自定义301跳转功能
  • 网站内容迁移功能
  • 静态页面功能
  • 自定义资源存储
  • 用户管理
  • 用户组管理
  • 小程序支持
  • 全文搜索支持
  • 备份与恢复
  • 文章自动配图支持
  • AI自动写作功能
  • 定时发布/更新功能
  • 防采集干扰功能
  • 图片水印功能

AnQiCMS 发展历程

  • 最新

    我们一直在努力,不断的探索,持续迭代优化,争取给用户们有更好的使用体验。

  • 2024年 5月 1日,v3.3.5 发布

    支持图片水印功能

  • 2023年10月24日,v3.2.5 发布

    支持多语言翻译功能,支持 Markdown 编辑器

  • 2023年 4月15日,v3.1.1 发布

    接入AI自动写作功能

  • 2022年12月 5日,v3.0.0 发布

    开始支持多站点模式,简化和降低了 AnQiCMS 的部署难度,新增更多丰富的企业站常用功能

  • 2022年 5月30日,v2.1.0 发布

    正式更名为 AnQiCMS,标志着 AnQiCMS 已具备常用的内容管理系统必备功能

  • 2021年 2月16日,v2.0.0-alpha 发布

    开始逐步由单纯的博客功能,过度到更全面的内容管理系统,逐步开发并完善企业站功能

  • 2021年 1月21日,GoBlog v1.0.0 发布

    博客完善版,在基础版的基础上,增加了后台管理、seo功能等。

  • 2020年12月 1日,GoBlog v0.5 发布

    重构版本,采用iris框架重写,减少技术栈,改用iris自带的template模板引擎。实现了最基础的博客功能。

  • 2019年11月19日 GoBlog v0.1 发布

    Gin版本,前后端分离,后端使用go、gin、gorm,前端使用Next.js。

使用的包

访问管理后台

如果你从 GitHub 上克隆下载的代码,自行编译运行的话,需要先编译后台的管理代码,后台管理代码在 https://github.com/fesiong/anqicms-admin 。 你也可以从 后台管理代码的release中,下载最新的release,将system.zip 解压到项目根目录下的system文件夹。

后台地址默认为 http://127.0.0.1:8001/system

如果你不是通过安装初始化的话,可能没有设置管理员账号,如果没有设置管理员账号,默认的管理员账号密码分别是:

账号:admin

密码:123456

示例网站 & 开发文档

示例网站 - https://www.anqicms.com/

👥问题反馈

遇到问题, 请在Github上开issue。
也可以加我的微信:websafety

扫码加入golang开发学习群

扫码入群讨论

License

AnqiCMS 最终用户授权协议

Copyright (c) 2019-NOW Fesion [email protected]

goblog's People

Contributors

aschenmaker avatar fesiong avatar firma 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  avatar  avatar  avatar  avatar  avatar  avatar

goblog's Issues

用户获取id逻辑有问题

标签用法:{% userDetail with name="Id" %},自动获取当前用户的id,但是获取不到,userDetail 的id参数又是必须的,这是什么逻辑?

根据分类添加文章,点击首页导航分类显示404

这个问题在最后一次提交之前也是存在的,
找了一下bug,主要是因为那个rewrite的动态路由造成的
因为后台在添加导航时,挂在分类下,那个link为空白,前端自动添加了link,格式为:类似(http://localhost:8001/c/1)这样的路由
然后这个路由被rewrite获取到,被当成了伪静态的路由进行处理,但是伪静态的地址是加了.html的后缀,
但是出现了服务重启也能打开,再次重启又404的奇怪现象.
我看那个blog版本下添加导航挂载分类下直接分配了link的,格式是category/id,在路由中也有category/{id}的路由,
还有一处bug,controller/category.go 文件中func CategoryArticlePage(ctx iris.Context) {}方法中categoryId 一直为0
,if categoryVal == nil { categoryId = 0 } else { category, _ = categoryVal.(*model.Category) //应该在此处添加一下下面的代码 categoryId = category.Id }

linux 下编译报错,

不错的项目,下载下来在centos环境下编译 go build -o anqicms main/main.go 报错,不知道什么原因

/usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-link-1136416180/000000.o: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status

盒子添加文章测试,程序崩溃

载入sego词典 /opt/1panel/apps/openresty/openresty/www/sites/web/dictionary.txt
2024/04/26 12:57:37 sego词典载入完毕
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x180 pc=0x1092728]

goroutine 132 [running]:
github.com/golang/freetype/truetype.(*Font).Index(0x0?, 0x1?)
github.com/golang/[email protected]/truetype/truetype.go:394 +0x8
kandaoni.com/anqicms/provider.(*TitleImage).getLettersLen(0xc000f3cb40, {0xc000e59d10, 0x1, 0x0?}, 0x20)
kandaoni.com/anqicms/provider/titleImage.go:274 +0x47
kandaoni.com/anqicms/provider.(*TitleImage).drawTitle(0xc000f3cb40, {0x1ea2490, 0xc0014bcd40?}, {0xc00161a3c0, 0x2e})
kandaoni.com/anqicms/provider/titleImage.go:234 +0x445
kandaoni.com/anqicms/provider.(*TitleImage).DrawTitles(0xc000f3cb40, {0xc00161a3c0, 0x2e}, {0xc000d4e6c0, 0x218})
kandaoni.com/anqicms/provider/titleImage.go:67 +0x7e
kandaoni.com/anqicms/provider.(*Website).SaveArchive.func5()
kandaoni.com/anqicms/provider/archive.go:726 +0x78
created by kandaoni.com/anqicms/provider.(*Website).SaveArchive in goroutine 121
kandaoni.com/anqicms/provider/archive.go:725 +0x276b

建议,是不是可以把筛选参数放对应的分类里去定义设置

建议,是不是可以把筛选参数放对应的分类里去定义设置,在使用过程中就遇到这样的情况了,放在模型中设置灵活性不高,有的模型对应的分类很多,但筛选参数全部上去都真的是一个乱。结果就设置了N个模型,但模型又直接绑定了顶级分类。

高老师,加油!

要是有会员系统更好了,可以认证会员资质、充值、购买商品、优惠卷、关注粉丝,积分、获赞、评论、收藏等会员功能,辛苦了。

centos 编译的时候报错

go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-link-4275926408/000000.o: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
image
这个怎么解决?

markdown 部分未正常解析问题

如二级标题前面有空格则无法成功解析markdown

如以下例子可正常解析
## 二级标题 

如以下例子无法正常解析出,直接输出{   ## 二级标题}
     ## 二级标题  

如何访问前台代码?

我编译了后台代码,运行enterprise分支,如何访问前台?我访问的地址会跳到后台登陆界面;已完成初始化

关于性能和使用体验的一些小建议

  1. 增加sqlite和pgsql支持,sqlite用于小型网站和测试,pgsql用于海量数据大型站点.

  2. 自动收集404死链: 判断搜索引擎机器人访问时产生的404状态,写入到指定目录下(如根目录)的badlinks.txt, 仅对文章、标签、分类、单页、专题等SEO重要URL收集而不对其他SEO无关紧要的URL收集.

  3. 使用redis+memached缓存优化,提升后端并发性能.

  4. 静态化支持,提升前端性能:支持本地化生成HTML和上传到远程(OSS/FTP/SFTP/GitHub Pages)

写错了

运行时报错,包正常引入

github.com/chai2010/webp

..\vendor\github.com\chai2010\webp\webp.go:22:9: undefined: webpGetInfo
..\vendor\github.com\chai2010\webp\webp.go:26:20: undefined: webpDecodeGray
..\vendor\github.com\chai2010\webp\webp.go:39:20: undefined: webpDecodeRGB
..\vendor\github.com\chai2010\webp\webp.go:52:20: undefined: webpDecodeRGBA
..\vendor\github.com\chai2010\webp\webp.go:68:14: undefined: webpDecodeGrayToSize
..\vendor\github.com\chai2010\webp\webp.go:82:14: undefined: webpDecodeRGBToSize
..\vendor\github.com\chai2010\webp\webp.go:96:14: undefined: webpDecodeRGBAToSize
..\vendor\github.com\chai2010\webp\webp.go:109:7: undefined: toGrayImage
..\vendor\github.com\chai2010\webp\webp.go:110:14: undefined: webpEncodeGray
..\vendor\github.com\chai2010\webp\webp.go:119:14: undefined: webpEncodeRGB
..\vendor\github.com\chai2010\webp\webp.go:119:14: too many errors (exit status 1)

站群模式下,AI自动发布貌似有问题

现象: 配置好ai接口后,如果站群中已有一个站开启AI自动发布,同一套程序中无法开启AI自动发布,只能手动点单个关键词自动AI发布。。求助下哪里可以配置,站群中的每个站都可以AI自动发布

官网崩了??

官网崩了,建议使用手册和开发文档资料托管到Github Pages上来

我用預設的帳號與密碼無法登入

目前有建立預設的帳號與密碼,但是無法登入
帳號:admin
密碼:123456

資料庫內的的密碼 :
$2a$04$oHBNr3IxvjMaJ9kX45QhZuIfMZuEnodZOIdyj35WCCh/L8QFX7zzW

你好,请教怎么在列表调用内容?

目前提供的item的for字段里没有content字段,只是{{item.Description}},我想直接调用{{item.Content}},应该怎么写?

后台模型管理里关了产品模型,但是添加栏目那里还会显示

MAC M1 编译不过

% go build -o anqicms main/main.go

command-line-arguments

/opt/homebrew/Cellar/go/1.21.3/libexec/pkg/tool/darwin_arm64/link: running cc failed: exit status 1
ld: unknown file type in '/private/var/folders/79/_92pblyn2hqg13wk1_n02xpw0000gn/T/go-link-1685129928/000000.o'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

大佬 可以加入博客加密功能吗

1

image

在发布博客的时候可以设置密码 其他人需要查看则需要输入正确的密码才能阅读

有时候自己的有些博客比较隐私所有就不方便所有人阅读 只有输入正确密码的人才能阅读

博客无法评论

我是在这个网站https://www.kandaoni.com/news/7733.html 来到这里的,我不知道网站站长是不是就是这个博客的开发者?目前https://www.kandaoni.com/news/7733.html 无法评论,一评论就报错

image

另外我对这篇文章中的download方法有疑问(新手),download方法都是在goroutine中运行的go d.Download(resource, p),那么该方法中return的err真的有用吗?我感觉没用吧,需要通过channel传出来才行吧?

package main
import (
    "fmt"
    "github.com/vbauerster/mpb/v5"
    "github.com/vbauerster/mpb/v5/decor"
    "io"
    "net/http"
    "os"
    "runtime"
    "strconv"
    "sync"
)
type Resource struct {
    Filename string
    Url      string
}
type Downloader struct {
    wg         *sync.WaitGroup
    pool       chan *Resource
    Concurrent int
    HttpClient http.Client
    TargetDir  string
    Resources  []Resource
}
func NewDownloader(targetDir string) *Downloader {
    concurrent := runtime.NumCPU()
    return &Downloader{
        wg:         &sync.WaitGroup{},
        TargetDir:  targetDir,
        Concurrent: concurrent,
    }
}
func (d *Downloader) AppendResource(filename, url string) {
    d.Resources = append(d.Resources, Resource{
        Filename: filename,
        Url:      url,
    })
}
func (d *Downloader) Download(resource Resource, progress *mpb.Progress) error {
    defer d.wg.Done()
    d.pool <- &resource
    finalPath := d.TargetDir + "/" + resource.Filename
    // 创建临时文件
    target, err := os.Create(finalPath + ".tmp")
    if err != nil {
        return err
    }
    // 开始下载
    req, err := http.NewRequest(http.MethodGet, resource.Url, nil)
    if err != nil {
        return err
    }
    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        target.Close()
        return err
    }
    defer resp.Body.Close()
    fileSize, _ := strconv.Atoi(resp.Header.Get("Content-Length"))
    // 创建一个进度条
    bar := progress.AddBar(
        int64(fileSize),
        // 进度条前的修饰
        mpb.PrependDecorators(
            decor.CountersKibiByte("% .2f / % .2f"), // 已下载数量
            decor.Percentage(decor.WCSyncSpace),     // 进度百分比
        ),
        // 进度条后的修饰
        mpb.AppendDecorators(
            decor.EwmaETA(decor.ET_STYLE_GO, 90),
            decor.Name(" ] "),
            decor.EwmaSpeed(decor.UnitKiB, "% .2f", 60),
        ),
    )
    reader := bar.ProxyReader(resp.Body)
    defer reader.Close()
    // 将下载的文件流拷贝到临时文件
    if _, err := io.Copy(target, reader); err != nil {
        target.Close()
        return err
    }
    // 关闭临时并修改临时文件为最终文件
    target.Close()
    if err := os.Rename(finalPath+".tmp", finalPath); err != nil {
        return err
    }
    <-d.pool
    return nil
}
func (d *Downloader) Start() error {
    d.pool = make(chan *Resource, d.Concurrent)
    fmt.Println("开始下载,当前并发:", d.Concurrent)
    p := mpb.New(mpb.WithWaitGroup(d.wg))
    for _, resource := range d.Resources {
        d.wg.Add(1)
        go d.Download(resource, p)
    }
    p.Wait()
    d.wg.Wait()
    return nil
}

内容导入接口参数不生效

  1. draft为true的时,同时传入cover为false,如内容相同,也能发布成功,不提示错误
  2. draft为false的时,同时传入cover为false,如内容相同,不发布成功,可提示错误
    是否可以改为当设置draft为true的时,同时传入cover为false,如内容相同,不让其发布成功,同时提示错误

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.