基于Gin + Vue开发的前后端分离的博客,前端由风宇巨佬开发,本人用Go语言对该博客进行后端全面改写。
项目预览地址 |目录结构|项目特点|技术介绍|运行环境|开发环境|项目截图|部署方法
项目访问地址: https://axiszql.com
Github地址: https://github.com/AxisZql/axis-blog
.
├── Dockerfile
├── cmd
│ ├── axapi.go # 接口定义
│ ├── inti.go # cmd包下全局变量
│ └── root.go # 服务启动
├── common
│ ├── conf.go # 读取config.toml中的配置
│ ├── curd.go # 数据库操作抽象
│ ├── curd_interface.go # 数据库操作接口定义
│ ├── database.go # 视图、表等初始化相关
│ ├── errorcode # 业务错误码定义
│ ├── init.go # common包下全局变量
│ ├── log.go # 日志记录器初始化
│ ├── models.go # 数据库模型定义
│ ├── redis.go # redis相关
│ ├── rediskey # redis 相关key定义
│ ├── tools # 工具包
│ │ ├── senitive_word.go # 敏感词检测
│ │ └── senitive_word_test.go # 敏感词检测测试
│ ├── utils.go # 工具类
│ └── utils_test.go # 每个工具方法的测试
├── config.toml # 配置文件
├── controllers # 所有RESTful API处理方法的接口定义
│ ├── article.go
│ ├── blog_info.go
│ ├── category.go
│ ├── comment.go
│ ├── friend_link.go
│ ├── logger.go
│ ├── login.go
│ ├── menu.go
│ ├── message.go
│ ├── page.go
│ ├── photo.go
│ ├── photo_album.go
│ ├── resource.go
│ ├── role.go
│ ├── tag.go
│ ├── talk.go
│ ├── user_auth.go
│ ├── user_info.go
│ └── websocket.go
├── deployment # 部署相关
│ ├── blog-mysql8.sql #数据库备份
│ └── nginx # nginx配置相关
│ ├── Dockerfile # nginx 容器的Dockerfile文件
│ ├── cert # https 证书存放位置
│ ├── frontend # 前端打包文件存放位置
│ └── nginx.conf # nginx配置文件
├── docker-compose.yml # 项目部署的docker-compose文件
├── go.mod
├── go.sum
├── main.go # 项目入口
├── sensitive-words.txt # 敏感词库
├── service # 所有RESTful API处理方法的接口实现
├── article.go
├── blog_info.go
├── category.go
├── comment.go
├── friend_link.go
├── init.go
├── logger.go
├── login.go
├── menu.go
├── message.go
├── page.go
├── photo.go
├── photo_album.go
├── resource.go
├── role.go
├── tag.go
├── talk.go
├── user_auth.go
├── user_info.go
├── utils.go
└── websocket.go
- 文章发布采用Markdown编辑器,高效简单
- 支持20余种表情进行评论和回复
- 使用WebSocket实现支持多人在线实时聊天
- 支持准确率极好的敏感词检测,确保聊天室、评论区、留言区出现不当言论
- 支持文章搜索关键词高亮操作
- 支持在线播放网易云热门音乐
- 留言采用弹幕形式
- 项目前后端分离部署
- 支持文章代码高亮功能
前端: vue + vuex + vue-router + axios + vuetify + element + echarts
后端: Gin + nginx + docker + gorm +Mysql + Redis + Websocket+Elasticsearch
服务器: 阿里云2核2G CentOS8.2(最低配置)
开发工具 | 说明 |
---|---|
GoLand | Go开发工具IDE |
VSCode | Vue开发工具IDE |
GoLand | GoLand自带MySQL远程连接工具 |
Another Redis Desktop Manager | Redis远程连接工具 |
Tabby | Linux远程连接工具 |
Transmit | Linux文件上传工具 |
Mac OS | 操作系统 |
开发环境 | 版本 |
---|---|
Go | 1.17.2 |
MySQL | 8.0+ |
Redis | 6.2.6 |
先创建一个数据库然后把blog-mysql8.sql中的所有数据导入该新建数据库中
Nginx 配置:
server {
listen 443 ssl;
server_name 你的前台域名;
ssl on;
ssl_certificate 你的前台域名pem证书位置;
ssl_certificate_key 你的前台域名key证书位置;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html/vue/blog;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ^~ /api/ {
proxy_pass http://axisblog:9080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name 你的前台域名;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name 你的后台子域名;
ssl on;
ssl_certificate 你的后台子域名pem证书位置;
ssl_certificate_key 你的后台子域名key证书位置;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html/vue/admin;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ^~ /api/ {
proxy_pass http://axisblog:9080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name 你的后台子域名;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name 你的静态文件服务子域名;
ssl on;
ssl_certificate 你的静态文件服务子域名pem证书位置;;
ssl_certificate_key 你的静态文件服务子域名key证书位置;;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#charset koi8-r;
location / {
root /usr/share/upload/static/;
}
}
server {
listen 80;
server_name 你的静态文件服务子域名;
rewrite ^(.*)$ https://$host$1 permanent;
}
#
server {
listen 443 ssl;
server_name 你的websocket服务子域名;
ssl on;
ssl_certificate 你的websocket服务子域名pem证书位置;
ssl_certificate_key 你的websocket服务子域名key证书位置;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://axisblog:9080/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name 你的websocket服务子域名;
rewrite ^(.*)$ https://$host$1 permanent;
}
服务启动:
-
构建镜像
docker-compose build
-
启动容器
docker-compose up -d