今天有大佬在LOC里分享他开发的Go语言博客,以下在大佬自己写的简介:Jank是一款采用Go语言和Echo框架开发的轻量级博客系统,设计理念强调极简架构、高性能与模块化扩展。该项目由开发者Fenderisfine和AlexeiLeery等贡献者共同维护,已收获GitHub 179+ star,适用于个人博客搭建、技术社区建设等场景。
博主看了一下演示站,挺不错的,而且直接可以使用docker部署,非常方便,有想玩的兄弟可以试试。
官方项目地址
https://github.com/Done-0/Jank
官方部署教程
基础设施
- 操作系统:Debian 12.2 64位 UEFI版
- CPU & 内存:2核(vCPU) 2 GiB
- 公网带宽:1Mbps
- 硬盘:40G SSD
docker 篇
使用官方源安装 Docker
以下操作需要在 root 用户下完成,请使用 sudo -i
或 su root
切换到 root 用户进行操作。
首先,安装一些必要的软件包:
apt update
apt upgrade -y
apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates
然后加入 Docker 的 GPG 公钥和 apt 源:
curl -sSL https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list
国内机器可以用清华 TUNA 的国内源:
curl -sS https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list
然后更新系统后即可安装 Docker CE 和 Docker Compose 插件:
apt update
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
此时可以使用 docker version 命令检查是否安装成功:
root@debian ~ # docker version
Client: Docker Engine - Community
Version: 28.0.1
API version: 1.48
Go version: go1.23.6
Git commit: 068a01e
Built: Wed Feb 26 10:41:16 2025
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 28.0.1
API version: 1.48 (minimum version 1.24)
Go version: go1.23.6
Git commit: bbd0a17
Built: Wed Feb 26 10:41:16 2025
OS/Arch: linux/amd64
Experimental: true
containerd:
Version: 1.7.25
GitCommit: bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
runc:
Version: 1.2.4
GitCommit: v1.2.4-0-g6c52b3f
docker-init:
Version: 0.19.0
GitCommit: de40ad0
安装 Docker Compose
因为我们已经安装了 docker-compose-plugin
,所以 Docker 目前已经自带 docker compose
命令,基本上可以替代 docker-compose:
root@debian ~ # docker compose version
Docker Compose version v2.27.1
修改 Docker 配置
以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘 (泪的教训):
cat > /etc/docker/daemon.json << EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
},
"ipv6": true,
"fixed-cidr-v6": "fd00:dead:beef:c0::/80",
"experimental":true,
"ip6tables":true
}
EOF
然后重启 Docker 服务:
systemctl restart docker
docker 换源[国内环境]
sudo mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
"registry-mirrors" : ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"debug": true,
"experimental": false
}
重载配置并重启 docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
查看是否配置成功
docker info
root@ubuntu-database:/etc/docker# docker info
Client: Docker Engine - Community
Version: 27.3.1
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.17.1
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.29.7
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 27.3.1
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 57f17b0a6295a39009d861b89e3b3b87b005ca27
runc version: v1.1.14-0-g2c9f560
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: builtin
cgroupns
Kernel Version: 6.8.0-49-generic
Operating System: Ubuntu 24.04 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.709GiB
Name: ubuntu-database
ID: acb5a888-7140-4e43-8924-6fc325481944
Docker Root Dir: /var/lib/docker
Debug Mode: true
File Descriptors: 23
Goroutines: 40
System Time: 2024-11-27T13:09:10.861401847Z
EventsListeners: 0
Experimental: false
Insecure Registries:
docker.mirrors.ustc.edu.cn
registry.docker-cn.com
127.0.0.0/8
Registry Mirrors:
https://docker.registry.cyou/
https://docker-cf.registry.cyou/
https://dockercf.jsdelivr.fyi/
https://docker.jsdelivr.fyi/
https://dockertest.jsdelivr.fyi/
https://mirror.aliyuncs.com/
https://dockerproxy.com/
https://mirror.baidubce.com/
https://docker.m.daocloud.io/
https://docker.nju.edu.cn/
https://docker.mirrors.sjtug.sjtu.edu.cn/
https://docker.mirrors.ustc.edu.cn/
https://mirror.iscas.ac.cn/
https://docker.rainbond.cc/
https://do.nark.eu.org/
https://dc.j8.work/
https://gst6rzl9.mirror.aliyuncs.com/
https://registry.docker-cn.com/
http://hub-mirror.c.163.com/
http://mirrors.ustc.edu.cn/
https://mirrors.tuna.tsinghua.edu.cn/
http://mirrors.sohu.com/
Live Restore Enabled: false
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
项目篇
项目结构
backend/ # 后端项目
configs/ # 配置文件
frontend/ # 前端项目
ssl/ # SSL 证书
docker-compose.yml
示例如下:
nginx 配置: configs/nginx.conf
- server_name: 域名,如果有多个域名请用空格分隔;
主要修改的部分为 fenderisfine.icu 和 www.fenderisfine.icu,需要修改为自己的域名
- ssl_certificate 和 ssl_certificate_key: 证书路径和密钥路径,请修改为自己的证书路径和密钥路径
主要修改的部分为 fenderisfine.icu.pem 和 fenderisfine.icu.key,需要与项目根目录下 ssl 文件夹内的证书文件名保持一致
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name fenderisfine.icu www.fenderisfine.icu; # 请修改为自己的域名
return 301 https://$host$request_uri;
}
# HTTPS 服务器配置
server {
listen 443 ssl;
server_name fenderisfine.icu www.fenderisfine.icu; # 请修改为自己的域名
ssl_certificate /etc/ssl/fenderisfine.icu.pem; # 请修改为自己的证书路径
ssl_certificate_key /etc/ssl/fenderisfine.icu.key; # 请修改为自己的证书密钥路径
后端配置: backend/configs/config.yml
- QQ_SMTP:请求改为自己的 SMTP 授权码,这个授权码只是做个示范,请使用自己的授权码
- FROM_EMAIL:请修改为自己的 QQ 邮箱
- DB_USER 和 DB_PSW:请修改为自己的数据库用户名和密码,这里只要跟 docker-compose 配置保持一致即可
- REDIS_HOST 和 REDIS_PORT:请修改为自己的 Redis 地址和端口,这里只要跟 docker-compose 配置保持一致即可
# 应用相关
app:
APP_NAME: "JANK_BLOG"
APP_HOST: "0.0.0.0"
APP_PORT: "9010"
QQ_SMTP: "djxhwqvipodabegd" # 请求改为自己的 SMTP 授权码,这个授权码只是做个示范,请使用自己的授权码
FROM_EMAIL: "927171598@qq.com" # 请修改为自己的 QQ 邮箱
database:
DB_NAME: "jank_db"
DB_HOST: "postgres_db"
DB_PORT: "5432"
DB_USER: "" # 请修改为自己的数据库用户名
DB_PSW: "" # 请修改为自己的数据库密码
# Redis 相关
redis:
REDIS_HOST: "redis_db"
REDIS_PORT: "6379"
REDIS_DB: "0"
REDIS_PSW: ""
前端配置: frontend/src/lib/axios/index.ts
- baseURL: 请求基准 URL,请修改为自己的后端地址
主要修改的部分为 http://localhost:9010/api ,域名加 /api 后缀即可,例如 https://fenderisfine.icu/api
/**
* 默认请求配置
* @param baseURL 请求基准 URL
* @param timeout 请求超时时间
* @param headers 请求头
*/
const defaultConfig = {
baseURL: "http://localhost:9010/api",
timeout: 5000,
headers: {
'Content-Type': 'application/json',
},
};
因为前端是未完成的项目,还不支持很灵活的定制,例如页面的定制、路由的配置等,这里只能自己码起来了
docker-compose配置: docker-compose.yml
- 此处修改的部分为 和 ,请修改为自己的数据库用户名和密码,这里只要跟后端的配置保持一致即可
services:
postgres:
image: postgres:15
container_name: postgres_db
restart: always
environment:
- POSTGRES_DB=jank_db
- POSTGRES_USER=
- POSTGRES_PASSWORD=
部署篇
- zip 压缩项目文件,上传到服务器
- 解压到指定目录
Debian 下的压缩 (zip) 解压缩 (unzip) 命令
# 更新软件源
sudo apt update
# 安装 zip
apt install -y zip
# 解压到指定目录,例如解压home目录下的项目文件到当前目录,unzip -o -d ./ docker.jank.com.zip
unzip -o -d /path filename.zip
-o: 不提示的情况下覆盖文件;
-d: -d /path 指明将文件解压缩到/path目录下; 如果不指定则解压缩到当前目录下.
- 进入项目目录启动 docker-compose
cd ./docker.jank.com
# 启动 docker-compose(新版本把 docker-compose 命令整合成了 docker compose)
docker compose up -d
- 请根据实际情况打开服务器的 9010、80、443、5432 和 6379 和 587 端口,
预计等待时间 640s 左右,具体时间视网络环境和硬件配置而定。
如果出现错误,请检查检查配置是否正确,并删除所有docker缓存镜像和容器,然后重新启动 docker-compose。
如果你的服务器什么都还没有,那么这些代码可能帮你快速解决问题:
# 停止并清空你的docker,让他焕然一新
docker rm $(docker ps -aq) 2>/dev/null || true && docker rmi $(docker images -q) -f 2>/dev/null || true && docker volume prune -f && docker network prune -f && docker builder prune -af && docker system prune -af
# 强制重新构建镜像并启动 docker-compose
docker compose up -d --build --force-recreate
使用篇
- 创建账号
这台演示机器使用的是阿里云服务器,25 和 465 端口不能使用,只有 587 端口能够发送邮件,注册完账号后请关闭该端口,这里给你一个示例:
backend/internal/utils/email_utils.go 修改配置,将 25 端口改为 587 端口。
const (
SUBJECT = "【Jank Blog】注册验证码"
QqEmailSmtp = "smtp.qq.com"
QqEmailSmtpPort = ":587" # 此处修改为 587
)
- 发布文章
这里需要先登录账号,拿到 access_token,然后添加 access_token 到请求头中才能发布文章。
此处我使用的是 Postman 工具,你可以使用其他工具也可以,这里给你一个示范:
是不是觉得很麻烦,我也这样觉得的,等前端出来了就不用这么折磨人了。
- 访问 :9010/api/v1/verification/sendImgVerificationCode?email= 获取图形验证码,拷贝 imgBase64 字段的值到浏览器查看验证码
其中 是你的服务器 IP, 是你的邮箱。
- 访问 :9010/api/v1/account/loginAccount 填写你看到的图形验证码,登陆账号
其中 是你的服务器 IP。
{
"email": "927171598@qq.com",
"password": "**********",
"img_verification_code": "qhfs"
}
- 访问 :9010/api/v1/article/createArticle 把你刚刚获取到的 access_token 添加到请求头中,发布文章
其中 是你的服务器 IP。
转载请注明:开心VPS测评 » #分享#Jank:一款基于Go语言的高效极简博客系统