#分享#Jank:一款基于Go语言的高效极简博客系统

#分享#Jank:一款基于Go语言的高效极简博客系统

前言 Jank 是一款将 现代技术栈(Go/Echo)与 极简主义 完美结合的博客系统。它的高性能特性,加上便捷的 Docker 部署方式,非常值得有兴趣的兄弟们尝试和体验。 有想玩 Go 语言博客的兄弟,强烈建议去 GitHub 仓库围观并尝试部署! 官方项目地址:https://github.c

前言

Jank 是一款将 现代技术栈(Go/Echo)与 极简主义 完美结合的博客系统。它的高性能特性,加上便捷的 Docker 部署方式,非常值得有兴趣的兄弟们尝试和体验。

有想玩 Go 语言博客的兄弟,强烈建议去 GitHub 仓库围观并尝试部署!

官方项目地址:https://github.com/Done-0/Jank

系统要求:

  • 操作系统:Debian 12.2 64位 UEFI版

  • CPU & 内存:2核(vCPU) 2 GiB

  • 公网带宽:1Mbps

  • 硬盘:40G SSD

安装 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
}

然后重启 Docker 服务:

systemctl restart docker

搭建 Jank

项目结构

backend/ # 后端项目
configs/ # 配置文件
frontend/ # 前端项目
ssl/ # SSL 证书
docker-compose.yml

如下图:

nginx 配置: configs/nginx.conf

  1. server_name: 域名,如果有多个域名请用空格分隔;

主要修改的部分为 fenderisfine.icu 和 www.cmnode.com,需要修改为自己的域名

  1. 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

  1. 邮箱_SMTP:请求改为自己的 SMTP 授权码,这个授权码只是做个示范,请使用自己的授权码

  2. FROM_EMAIL:请修改为自己的 邮箱

  3. DB_USER 和 DB_PSW:请修改为自己的数据库用户名和密码,这里只要跟 docker-compose 配置保持一致即可

  4. 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: "landon@vmrack.net" # 请修改为自己的邮箱

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

  1. baseURL: 请求基准 URL,请修改为自己的后端地址

主要修改的部分为 http://localhost:9010/api ,域名加 /api 后缀即可,例如 https://www.cmnode.com/api

/**
 * 默认请求配置
 * @param baseURL 请求基准 URL
 * @param timeout 请求超时时间
 * @param headers 请求头
 */
const defaultConfig = {
  baseURL: "http://www.cmnode.com:9010/api",
  timeout: 5000,
  headers: {
    'Content-Type': 'application/json',
  },
};

docker-compose配置: docker-compose.yml

  1. 此处修改的部分为 和 ,请修改为自己的数据库用户名和密码,这里只要跟后端的配置保持一致即可

services:
  postgres:
    image: postgres:15
    container_name: postgres_db
    restart: always
    environment:
      - POSTGRES_DB=jank_db
      - POSTGRES_USER=
      - POSTGRES_PASSWORD=
  1. zip 压缩项目文件,上传到服务器

  2. 解压到指定目录

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目录下; 如果不指定则解压缩到当前目录下.

  1. 进入项目目录启动 docker-compose

cd ./docker.jank.com
# 启动 docker-compose(新版本把 docker-compose 命令整合成了 docker compose)
docker compose up -d
  1. 请根据实际情况打开服务器的 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

如何使用

  1. 创建账号

这台演示机器使用的是阿里云服务器,25 和 465 端口不能使用,只有 587 端口能够发送邮件,注册完账号后请关闭该端口,这里给你一个示例:

backend/internal/utils/email_utils.go 修改配置,将 25 端口改为 587 端口。

const (
	SUBJECT         = "【Jank Blog】注册验证码"
	QqEmailSmtp     = "smtp.qq.com"
	QqEmailSmtpPort = ":587" # 此处修改为 587
)
  1. 发布文章

这里需要先登录账号,拿到 access_token,然后添加 access_token 到请求头中才能发布文章。

此处我使用的是 Postman 工具,你可以使用其他工具也可以,这里给你一个示范:

  1. 访问 :9010/api/v1/verification/sendImgVerificationCode?email= 获取图形验证码,拷贝 imgBase64 字段的值到浏览器查看验证码

  1. 访问 :9010/api/v1/account/loginAccount 填写你看到的图形验证码,登陆账号

{
  "email": "landon@vmrack.net",
  "password": "**********",
  "img_verification_code": "qhfs"
}
  1. 访问 :9010/api/v1/article/createArticle 把你刚刚获取到的 access_token 添加到请求头中,发布文章

总结

以上就是这篇文章的全部内容了,感兴趣或者是想动手尝试可以参考下。如有不懂的可以访问官方项目。

海外VPS选哪家呢,博主这边推荐 VMRack 、搬瓦工、DMIT 这几家老牌的海外VPS 厂商。博主还是主要推荐 VMRack 性价比超便宜的。

VMRack 机房在美国洛杉矶 Equinix LA4 金融级数据中心,主打配备全新 AMD EPYC 7K62 高性能处理器,CPU 核心数高达 192 个vCPU是1:1的资源配比性能稳定,采用分布式块存储和三副本机制,大大提高了磁盘读写能力,轻松应对超高IOPS需求现目前主要运营三条线路:三网精品CN2 GIA/9929/CMIN2)、三网优化163/10099/CMI)以及 美国原生Global BGP),三条线路基本满足绝大部分人群的日常使用需求以及中小企业日常的办公需求。可以说 VMRack 在线路方面是非常具有竞争优势的。三网精品直连为中国大陆用户提供了低延迟,高速度的优化网络体验,对于日常办公、娱乐、看视频以及海外电商都是非常适用的;三网优化具有非常大的带宽口子,非常满足需要大流量下载的应用场景,比如CND内容分发、影视站点播等;而美国原生则者主打极致性价比和全球连接性,作为美西落地机是非常具有性价比的。

Snipaste_2025-11-26_14-57-06.png

官网地址:https://www.vmrack.net/

TG交流群: https://t.me/vmrack_chat

评论