Pipe 用户指南

本贴最后更新于 1520 天前,其中的信息可能已经时移世改

Pipe

小而美的博客平台,为未来而构建





English

💡 简介

Pipe 是一款小而美的开源博客平台,专为程序员设计。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

欢迎到 Pipe 官方讨论区了解更多。同时也欢迎关注 B3log 开源社区微信公众号 B3log开源

b3logos.jpg

🗃 案例

✨ 功能

  • 多用户博客平台
  • Markdown 编辑器支持三种编辑模式:所见即所得 / 即时渲染 / 分屏预览
  • 聚合分类 / 标签
  • 自定义导航
  • 多主题 / 多语言
  • Atom / RSS / Sitemap
  • 文章搜索
  • Hexo/Jekyll 导入 / 导出
  • 可配置动静分离
  • 支持 SQLite / MySQL / PostgreSQL

🎨 界面

开始使用

start.png

管理后台

console.png

编辑文章

post.png

主题选择

theme.png

主题 Gina

gina.png

🛠️ 安装

Pipe 仅支持通过 Docker 进行部署,如果你需要从源码构建可参考这里

Docker 部署

获取最新镜像:

docker pull b3log/pipe
  • 使用 MySQL
    先手动建库(库名 pipe ,字符集使用 utf8mb4 ,排序规则 utf8mb4_general_ci ),然后启动容器:

    docker run --detach --name pipe --network=host \
        b3log/pipe --mysql="root:123456@(127.0.0.1:3306)/pipe?charset=utf8mb4&parseTime=True&loc=Local&timeout=1s" --runtime_mode=prod --port=5897 --server=http://localhost:5897
    

    为了简单,使用了主机网络模式来连接主机上的 MySQL。

  • 使用 SQLite

    docker run --detach --name pipe --volume ~/pipe.db:/opt/pipe/pipe.db --publish 5897:5897 \
        b3log/pipe --sqlite="/opt/pipe/pipe.db" --runtime_mode=prod --port=5897 --server=http://localhost:5897
    

启动参数说明:

  • --port:进程监听端口
  • --server:访问时的链接

完整启动参数的说明可以使用 -h 来查看。

Docker 升级

  1. 拉取最新镜像
  2. 重启容器

可参考这里编写一个重启脚本,并通过 crontab 每日凌晨运行来实现自动更新。

NGINX 反代

upstream pipe {
    server localhost:5897;
}

server {
    listen 80;
    server_name pipe.b3log.org; # 配置为你自己的域名

    location / {
        proxy_pass http://pipe$request_uri;
        proxy_set_header  Host $host:$server_port;
        proxy_set_header  X-Real-IP  $remote_addr;
        client_max_body_size  10m;
    }
}

另外,可以参考 Pipe 安装补充说明 进行配置。

📜 文档

🏘️ 社区

📄 授权

Pipe 使用 木兰宽松许可证, 第 2 版 开源协议。

🙏 鸣谢

  • jQuery:JavaScript 工具库,用于主题页面
  • Vue.js:渐进式 JavaScript 框架
  • Nuxt.js:Vue.js 框架
  • Vuetify:Vue.js 的 Material 组件框架
  • Vditor: 浏览器端的 Markdown 编辑器
  • Gin:又快又好用的 golang HTTP Web 框架
  • GORM:极好的 golang ORM 库
  • SQLite:使用广泛的嵌入式 SQL 引擎
  • GCache:golang 缓存库
  • Gulu:Go 语言常用工具库,这个轱辘还算圆
  • Lute:一款结构化的 Markdown 引擎,支持 Go 和 JavaScript

特性说明

发布文章

Pipe 的文章编辑器支持 Markdown,并支持复制/粘贴图片、粘贴 HTML 自动转换 Markdown、流程图、数学公式等。

另外,可以为文章启用自动配图,会自动在文章最前面插入所选择的配图。

聚合分类

Pipe 使用“自底向上”的分类方式:

  1. 定义分类,并配置该分类包含的标签
  2. 查询某个分类文章列表时通过分类-> 标签集-> 标签关联的文章进行聚合

也就是说一篇文章在编辑时只需要打标签,访问分类时会根据该分类包含的标签将文章关联出来。这是一个自底向上的信息架构,在使用时更灵活一些,可以随时调整分类而不必重新更新文章。

域名绑定

在 Pipe 平台上的每个博客都可以配置域名,需要博主和服务器运维者分别操作:

  1. 博主在设置 -> 基础配置 -> 博客地址一栏填写域名
  2. 运维者通过配置 NGINX 实现域名到 /blogs/{username} 的反向代理
server {
    listen 80;
    server_name vanessa.b3log.org;

    location / {
        proxy_pass http://pipe/blogs/Vanessa/;
    }
}

导入 / 导出

Pipe 支持导入 Hexo/Jekyll 的 Markdown 文件,将需要导入的 Markdown 文件使用 zip 压缩上传即可。导入时会按标题去重,并自动按原文章的创建时间生成存档。

同样地,Pipe 也支持 Markdown 导出,格式为 Hexo。

链滴

在 Pipe 上发布文章时可选择是否自动推送到链滴上,这样能让更多人看到你创作的内容,更容易引起大家的关注和互动。

运维

数据库

Pipe 使用 SQLite3 数据库引擎,数据文件默认情况下存放在 ~/pipe.db,可以通过修改 pipe.json 的 DataFilePath 指定新的存放路径。

建议定期备份数据文件,避免意外情况导致数据丢失。

版本升级

在管理后台的关于中可以检查版本更新,如果提示有更新请尽快升级,一般来说升级只需要下载新的发布包然后部署重启,实际升级方式以每次版本发布公告为准。

FAQ

如何做友链页面?

Pipe 没有单独的友链管理功能。可以通过发一篇文章,然后在导航管理中新建一个友链导航跳转过去。

结语

  • 如果你在使用 Pipe 的过程中碰到问题或者有需求要提,欢迎跟帖,我们会在第一时间回复 😄
  • 如果你想自己开发 Pipe,请参考 Pipe 开发指南
  • 如果你想自己开发 Pipe 主题,请参考 Pipe 主题开发指南
6 操作
88250 在 2020-05-24 08:54:03 更新了该帖
88250 在 2020-04-13 11:29:41 更新了该帖
88250 在 2020-04-13 11:07:12 更新了该帖
88250 在 2020-04-02 19:34:08 更新了该帖 88250 在 2020-01-25 15:45:53 更新了该帖 88250 在 2019-12-22 18:28:15 更新了该帖

相关帖子

优质回帖
  • itstudying 1 赞同

    请教下 怎么配置一级域名直接到我的博客,而不是跳转到受欢迎的博客那页呢。

  • zonghua 1 1 赞同

    trollface 去掉了所有 /blogs/{username} 前缀,不让 D 大的阴谋得逞。trollface

        rewrite ^/(?!theme|console|admin|api|init) /blogs/zohar$request_uri break;
    
        location /{
            proxy_pass http://pipe/;
            proxy_set_header  Host $host:$server_port;
            proxy_set_header  X-Real-IP  $remote_addr;
            client_max_body_size  10m;
        }
    
  • nzmd 1

    请问下 1.89 版本 fara 主题,添加新的导航,没有配置图标,样式似乎有些问题
    微信截图 20191119115528.png

138 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • meizhaohui

    为何我按"docker run --detach --name pipe --network=host
    b3log/pipe --mysql="root:123456@(127.0.0.1:3306)/pipe?charset=utf8mb4&parseTime=True&loc=Local" --runtime_mode=prod --port=5897 --server=http://localhost:5897"
    这条命令替换成自己的域名执行后,docker ps 查看不到正在运行的容器,浏览器也不能访问 http://mydomain.com:5897

    希望楼主能改进一下用户指导手册,对小白更有帮助。谢谢。

    1 回复
  • 88250

    docker logs 看下日志。

    1 回复
  • meizhaohui

    查看 log 发现提示"Index column size too large. The maximum column size is 767 bytes",是 mysql 建表异常。非常感谢。

    1 回复
  • 88250

    MySQL 请用 5.7+

  • nzmd
    该回帖仅作者和楼主可见
    1 回复
  • 88250

    这个问题应该是社区系统限流导致,2 小时后再试。如果还不行麻烦私信我。

    1 回复
  • nzmd

    好的,我 2 小时后再试

  • nzmd 2 评论

    启用了 https 后,发现有个请求还是 http,请问这个该怎么调整
    https.png

    你看一下后台博客地址的设置是不是 https 的
    Vanessa 1
    谢谢,设置成 https 就好了
    nzmd
  • wuzhihang0

    D 大,怎么没看见 mysql 语句呢?这个放在哪里了

    2 回复
  • 88250

    orm 组件自动生成的。

  • xhaoxiong

    image.png

    docker 部署后 访问直接 302 条转到 localhost:5897/start??? 是我哪儿少了配置嘛
    @88250

    1 回复
  • 88250

    跳到这里应该是因为判断为没有初始化。

    1 回复
  • xhaoxiong

    image.png
    docker 拉到本地后 前端目录请求里面是使用的 localhost ? 使用 docker 后也没法修改前端配置了呀?

    1 回复
  • 88250 2 评论

    --server 参数配置成最终访问的链接

    2 回复
    服务器的公网 IP 吗?
    will-mei
    @will-mei IP 或者域名都行
    88250
  • liqingyou

    好使 666

  • aawujie

    model

  • wuxuelin

    是不是不支持 MySQL8.0+

    1 回复
  • 88250

    支持的,碰到什么问题了么?

  • will-mei

    容器的启动命令用的是:

    docker run --detach --name pipe --volume /root/pipe-blog/sqlitedb/pip.db:/opt/pipe/pipe.db --publish 5897:5897 b3log/pipe --sqlite=/opt/pipe/pipe.db --runtime_mode=prod --port=5897 --server=http://www.iterdaily.com:5897
    

    nginx 配置是

    upstream pipe {
        server localhost:5897;
    }
    
    server {
        listen 80;
        server_name www.iterdaily.com;
    
        location / {
            proxy_pass http://pipe$request_uri;
            proxy_set_header  Host $host:$server_port;
            proxy_set_header  X-Real-IP  $remote_addr;
            client_max_body_size  10m;
        }
    }
    

    站点打不开是我配错了吗?

    1 回复
  • 88250 1

    用了 NGINX 反代的话 --server 的端口不用配置。

    1 回复
  • will-mei 1 2 评论

    我也弄清楚了, 之前没有弄过 web 服务器, 看这个文档的确很让我迷糊 (底子差没办法 😂 ), 我的容器的启动命令用的是:

    docker run --detach \
    	--name pipe --volume /root/pipe-blog/sqlitedb/pip.db:/opt/pipe/pipe.db \
    	--publish 5897:5897 b3log/pipe \
    	--sqlite=/opt/pipe/pipe.db \
    	--runtime_mode=prod \
    	--port=5897 \
    	--server=http://www.iterdaily.com:5897
    

    然后解析没有问题, 但是无法打开页面, 一脸懵逼我还是很郁闷的 😭 , 打开浏览器 Ctrl+Shift+e 发现实际资源都请求到了 类似于:

    http://www.iterdaily.com:5897/theme/x/Littlewin/css/common.css?1579081934334
    

    这样的地址上了 😂

    显然我的浏览器不应该再使用 5897 访问任何服务器中的资源了, 也就是在 --server=http://www.iterdaily.com:5897 中这个参数中的端口应该是 跟 nginx 反向代理的端口是一致

    我这样的小白用户而言, 它的格式更容易理解的描述, 可以是这样:

    --server=http://<网站的FQDN/外部用户可访问的IP地址>:<用户请求页面的端口>
    

    终于弄清楚了, 改成 --server=http://www.iterdaily.com:80

    我想如果需要调整已经搭建好的 pipe 博客的端口, 比如博客原来在 8080, 现在更换到 80 端口这就要使用新参数再重新起一个容器就可以了吧,不知道是不是我理解的这样.

    当然我对 nginx 也不熟, 不知道配反向代理的情况下不用写端口 😂 😂 , 希望这个留言因该对跟我一样的小白有用吧.

    80 和 443 属于默认端口,建议去掉。
    88250
    @88250 了解了, 🙏
    will-mei
  • MrLaibin

    牛逼,多谢!!

  • will-mei

    有没有人觉得发文章的编辑框太小了了, 如果是用大显示器, 最终能编辑文字的面积只有不到页面三分之一的地方, 不太舒服啊, 能不能考虑调大一点呢。

    1 回复
  • 88250

    请升级到最新版,默认所见即所得编辑模式。

    1 回复
  • will-mei

    所见即所得的面积也好像不太大啊, 并且 docker 镜像的标签是不是只有 latest 啊, 更新了之后页面就不正常了, 页面上有部分元素 404 和 veditor not defined.

    1 回复
  • 88250 7 评论

    重新拉取一次应该就修复了。所见即所得没有分屏,所以编辑区大了很多,如果还是不够的话可以全屏。

    现在正常了, Thanks♪(・ω・)ノ
    will-mei
    更新后的帖子好像都没正常同步到社区, 怎么看是哪里的问题呢.
    will-mei
    @will-mei 看下日志,里面应该有输出原因
    88250
    I 2020/02/16 00:32:31 articlesrv.go:371: push an article to Rhy result: &{Code:-1 Msg:[article.content] contains invalid image host Data:} 里面的图片使用的链接而不是上传的图片这个有影响吗?
    will-mei
    @will-mei 有影响,有外链图片的话不支持推送到社区。
    88250
    好吧, 只能从本地上传图片是吧.
    will-mei
    @will-mei 目前是这样的,因为外链的图片经常挂掉,这会给后来的浏览者造成不良体验,所以干脆禁止了。
    88250
  • 6859
    docker run --detach --name pipe --volume ~/pipe.db:/opt/pipe/pipe.db --publish 5897:5897 b3log/pipe --sqlite="/opt/pipe/pipe.db" --runtime_mode=prod --port=5897 --server=http://localhost:5897
    

    运行上面 docker 命令后,遇到如下错误,请问该怎么解决:

    docker logs --since 30m  428f103d5ee5
    D 2020/03/24 19:22:59 confs.go:130: ${home} [/root]
    D 2020/03/24 19:22:59 confs.go:148: ${time} [1585048979162434350]
    D 2020/03/24 19:22:59 confs.go:183: configurations [&model.Configuration{Server:"http://localhost:5897", StaticServer:"http://localhost:5897", StaticResourceVersion:"1584632121767", LogLevel:"debug", ShowSQL:false, SessionSecret:"Zzr2pzi9CWE7sJ2qMhZFOet1VqYtYhx9", SessionMaxAge:86400, RuntimeMode:"prod", SQLite:"/opt/pipe/pipe.db", MySQL:"user:password@(localhost:3306)/pipe?charset=utf8mb4&parseTime=True&loc=Local&timeout=1s&readTimeout=16s&writeTimeout=16s", Port:"5897", AxiosBaseURL:"/api", MockServer:"http://localhost:8888"}]
    D 2020/03/24 19:22:59 themes.go:43: loaded [7] themes
    F 2020/03/24 19:22:59 db.go:44: opens database failed: unable to open database file: is a directory 
    
    1 回复
  • 88250

    看报错日志可能是因为数据库文件路径有问题导致,不熟悉 SQLite 的话建议用 MySQL。

    1 回复
  • henryspace

    反手就是一个 666😂

  • henryspace 1

    文档里安装教程的用 mysql 那一行 docker 命令有书写错误,“charset=utf8mb4&parseTime“ 中间有字母被写成了//, 这种错误还是尽早改掉吧,我照教程安装时排错看了好久才发现是文档写错了 😂

    1 回复
  • 88250

    感谢反馈,这是编辑器的一个 bug,稍后修复。

  • henryspace

    这个 rewrite 对分页和搜索好像还有点问题

  • henryspace

    request_uri换成uri 即可

    image.png

  • 000000

    pipe 竟然不支持主站的清风明月啊

  • bjsj

    怎么加 ICP 备案号呀

  • linker 1 评论

    console build 出错:

    ERROR in ./assets/scss/main.scss
    Module build failed (from ./node_modules/extract-css-chunks-webpack-plugin/dist/loader.js):
    ModuleBuildError: Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
    
    @import '~vditor/src/assets/scss/index';
           ^
          Can't find stylesheet to import.
    1 │ @import '~vditor/src/assets/scss/index';
      │         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      assets/scss/_editor.scss 1:9  @import
      stdin 4:9                     root stylesheet
        
    
    这个最近还没有空修复的。后面会修复
    Vanessa 1
  • 在服务器上部署 pipe docker 的时候,遇到一个 --server=https://xxx.net 不生效的问题。

    从 chrome 的控制台看到,是资源还是请求了 localhost:5897 ,但是我已经制定了 --server=https://xxx.net 了呀。

    @88250

  • 我用最新的 docker 版本的 pipe:

    
    jdocker run --detach -p 5897:5897 --name pipe \
        b3log/pipe —link=mysql --mysql="root:123456@(127.0.0.1:3306)/pipe?charset=utf8mb4&parseTime=True&loc=Local&timeout=1s" --runtime_mode=prod --port=5897 --server=https://jieyibu.net
    

    结果 chrome 控制台里看到前端还在请求 http://localhost:5897 端口。当然这肯定就是下载不了资源文件里。

请输入回帖内容 ...