hexo/posts/e48ebe86.html

759 lines
27 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN" data-default-color-scheme=auto>
<head>
<meta charset="UTF-8">
<link rel="apple-touch-icon" sizes="76x76" href="/img/logo.png">
<link rel="icon" href="/img/logo.png">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
<meta name="theme-color" content="#2f4154">
<meta name="author" content="浪子">
<meta name="keywords" content="DIY,黑苹果,分享,自由">
<meta name="description" content="Pleroma 是一个去中心化的社区程序,其基于 ActivityPub 协议。而 ActivityPub 包括 MastodonPawoo 等、Misskeymisskey.io 等、Pleroma 等等。在这些开源产品中Pleroma 实机上部署环境步骤复杂繁琐。但它是对服务器性能要求最低的微博客工具,它的配置要求多低呢?现在 docker 的出现大大简化了部署的方式,只需要简单三步">
<meta property="og:type" content="article">
<meta property="og:title" content="使用 Docker 构建 Pleroma 实例">
<meta property="og:url" content="https://blog.jkjoy.cn/posts/e48ebe86.html">
<meta property="og:site_name" content="提剑追梦">
<meta property="og:description" content="Pleroma 是一个去中心化的社区程序,其基于 ActivityPub 协议。而 ActivityPub 包括 MastodonPawoo 等、Misskeymisskey.io 等、Pleroma 等等。在这些开源产品中Pleroma 实机上部署环境步骤复杂繁琐。但它是对服务器性能要求最低的微博客工具,它的配置要求多低呢?现在 docker 的出现大大简化了部署的方式,只需要简单三步">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2023-07-24T21:57:00.000Z">
<meta property="article:modified_time" content="2024-05-09T01:19:01.621Z">
<meta property="article:author" content="浪子">
<meta property="article:tag" content="Docker">
<meta property="article:tag" content="Pleroma">
<meta name="twitter:card" content="summary_large_image">
<meta name="referrer" content="no-referrer-when-downgrade">
<title>使用 Docker 构建 Pleroma 实例 - 提剑追梦</title>
<link rel="stylesheet" href="https://lib.baomitu.com/twitter-bootstrap/4.6.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://lib.baomitu.com/github-markdown-css/4.0.0/github-markdown.min.css" />
<link rel="stylesheet" href="https://lib.baomitu.com/hint.css/2.7.0/hint.min.css" />
<link rel="stylesheet" href="https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.css" />
<!-- 主题依赖的图标库,不要自行修改 -->
<!-- Do not modify the link that theme dependent icons -->
<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_hj8rtnfg7um.css">
<link rel="stylesheet" href="//at.alicdn.com/t/c/font_4267870_i7km8ozxnbr.css">
<link rel="stylesheet" href="/css/main.css" />
<link id="highlight-css" rel="stylesheet" href="/css/highlight.css" />
<link id="highlight-css-dark" rel="stylesheet" href="/css/highlight-dark.css" />
<link rel="stylesheet" href="/css/mac.css">
<script id="fluid-configs">
var Fluid = window.Fluid || {};
Fluid.ctx = Object.assign({}, Fluid.ctx)
var CONFIG = {"hostname":"blog.jkjoy.cn","root":"/","version":"1.9.7","typing":{"enable":true,"typeSpeed":70,"cursorChar":"💡","loop":false,"scope":[]},"anchorjs":{"enable":true,"element":"h1,h2,h3,h4,h5,h6","placement":"left","visible":"hover","icon":" # "},"progressbar":{"enable":true,"height_px":3,"color":"#29d","options":{"showSpinner":false,"trickleSpeed":100}},"code_language":{"enable":true,"default":"TEXT"},"copy_btn":true,"image_caption":{"enable":true},"image_zoom":{"enable":true,"img_url_replace":["",""]},"toc":{"enable":true,"placement":"right","headingSelector":"h1,h2,h3,h4,h5,h6","collapseDepth":0},"lazyload":{"enable":true,"loading_img":"/img/loading.gif","onlypost":false,"offset_factor":2},"web_analytics":{"enable":false,"follow_dnt":false,"baidu":"9a59c9b2baa8e43c367f559cd7d9b86c","google":{"measurement_id":"G-EL6EBC27ES"},"tencent":{"sid":null,"cid":null},"woyaola":null,"cnzz":null,"leancloud":{"app_id":"qkYaRmrTvy9Og9bRIt4YTIiC-MdYXbMMI","app_key":"BnyRqKMFP7xp6xF0OTU7rC40","server_url":null,"path":"window.location.pathname","ignore_local":false}},"search_path":"/local-search.xml","include_content_in_search":true};
if (CONFIG.web_analytics.follow_dnt) {
var dntVal = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack;
Fluid.ctx.dnt = dntVal && (dntVal.startsWith('1') || dntVal.startsWith('yes') || dntVal.startsWith('on'));
}
</script>
<script src="/js/utils.js" ></script>
<script src="/js/color-schema.js" ></script>
<meta name="generator" content="Hexo 6.3.0"><link rel="alternate" href="/atom.xml" title="提剑追梦" type="application/atom+xml">
</head>
<body>
<header>
<div class="header-inner" style="height: 70vh;">
<nav id="navbar" class="navbar fixed-top navbar-expand-lg navbar-dark scrolling-navbar">
<div class="container">
<a class="navbar-brand" href="/">
<strong>提剑追梦</strong>
</a>
<button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<div class="animated-icon"><span></span><span></span><span></span></div>
</button>
<!-- Collapsible content -->
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ml-auto text-center">
<li class="nav-item">
<a class="nav-link" href="/" target="_self">
<i class="iconfont icon-home"></i>
<span>首页</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/archives/" target="_self">
<i class="iconfont icon-archive"></i>
<span>归档</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/categories/" target="_self">
<i class="iconfont icon-categories"></i>
<span>分类</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/tags/" target="_self">
<i class="iconfont icon-tags"></i>
<span>标签</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/links/" target="_self">
<i class="iconfont icon-link1"></i>
<span>友链</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/fcircle/" target="_self">
<i class="iconfont icon-friend"></i>
<span>圈子</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/memos/" target="_self">
<i class="iconfont icon-Chat"></i>
<span>说说</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/about/" target="_self">
<i class="iconfont icon-aboutme"></i>
<span>关于</span>
</a>
</li>
<li class="nav-item" id="search-btn">
<a class="nav-link" target="_self" href="javascript:;" data-toggle="modal" data-target="#modalSearch" aria-label="Search">
<i class="iconfont icon-search"></i>
</a>
</li>
<li class="nav-item" id="color-toggle-btn">
<a class="nav-link" target="_self" href="javascript:;" aria-label="Color Toggle">
<i class="iconfont icon-dark" id="color-toggle-icon"></i>
</a>
</li>
</ul>
</div>
</div>
</nav>
<div id="banner" class="banner" parallax=true
style="background: url('/img/default.png') no-repeat center center; background-size: cover;">
<div class="full-bg-img">
<div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
<div class="banner-text text-center fade-in-up">
<div class="h2">
<span id="subtitle" data-typed-text="使用 Docker 构建 Pleroma 实例"></span>
</div>
<div class="mt-3">
<span class="post-meta">
<i class="iconfont icon-date-fill" aria-hidden="true"></i>
<time datetime="2023-07-24 21:57" pubdate>
2023年7月24日 晚上
</time>
</span>
</div>
<div class="mt-1">
<span class="post-meta mr-2">
<i class="iconfont icon-chart"></i>
478 字
</span>
<span class="post-meta mr-2">
<i class="iconfont icon-clock-fill"></i>
4 分钟
</span>
<span id="busuanzi_container_page_pv" style="display: none">
<i class="iconfont icon-eye" aria-hidden="true"></i>
<span id="busuanzi_value_page_pv"></span>
</span>
</div>
</div>
<div class="scroll-down-bar">
<i class="iconfont icon-arrowdown"></i>
</div>
</div>
</div>
</div>
</div>
</header>
<main>
<div class="container-fluid nopadding-x">
<div class="row nomargin-x">
<div class="side-col d-none d-lg-block col-lg-2">
</div>
<div class="col-lg-8 nopadding-x-md">
<div class="container nopadding-x-md" id="board-ctn">
<div id="board">
<article class="post-content mx-auto">
<h1 id="seo-header">使用 Docker 构建 Pleroma 实例</h1>
<p id="updated-time" class="note note-info" style="">
本文最后更新于 2024年5月9日 凌晨
</p>
<div class="markdown-body">
<p>Pleroma 是一个去中心化的社区程序,其基于 ActivityPub 协议。<br>而 ActivityPub 包括 MastodonPawoo 等、Misskeymisskey.io 等、Pleroma 等等。<br>在这些开源产品中Pleroma 实机上部署环境步骤复杂繁琐。<br>但它是对服务器性能要求最低的微博客工具,它的配置要求多低呢?<br>现在 docker 的出现大大简化了部署的方式,只需要简单三步即可轻松搭建实例。</p>
<p>本文将介绍如何使用 docker 构建 Pleroma 实例。<br>以宝塔面板为例</p>
<h3 id="先安装docker"><a href="#先安装docker" class="headerlink" title="先安装docker"></a>先安装docker</h3><p>在应用商店中查找docker并安装</p>
<h3 id="获取-docker-compose-yml-模板"><a href="#获取-docker-compose-yml-模板" class="headerlink" title="获取 docker-compose.yml 模板"></a>获取 docker-compose.yml 模板</h3><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs awk">git clone https:<span class="hljs-regexp">//gi</span>t.pleroma.social<span class="hljs-regexp">/pleroma/</span>pleroma-docker-compose.git<br>cd pleroma-docker-compose <br></code></pre></td></tr></table></figure>
<p>接下来所有操作(除 nginx 配置)如果没有加以说明都在这个目录下进行。</p>
<h3 id="需要修改的内容"><a href="#需要修改的内容" class="headerlink" title="需要修改的内容"></a>需要修改的内容</h3><p>打开<code>./enviroments/pleroma/pleroma.env</code>,修改其中的配置:</p>
<figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-attr">DB_USER</span>=pleroma <span class="hljs-comment"># 数据库用户名</span><br><span class="hljs-attr">DB_PASS</span>=pleroma <span class="hljs-comment"># 数据库密码</span><br><span class="hljs-attr">DB_HOST</span>=pleroma-db <span class="hljs-comment"># 数据库地址</span><br><span class="hljs-attr">DB_NAME</span>=pleroma <span class="hljs-comment"># 数据库名</span><br><span class="hljs-attr">INSTANCE_NAME</span>=Pleroma <span class="hljs-comment"># 实例名</span><br><span class="hljs-attr">ADMIN_EMAIL</span>=admin@ops.pleroma.social <span class="hljs-comment"># 管理员邮箱</span><br><span class="hljs-attr">NOTIFY_EMAIL</span>=pleroma+admin@ops.pleroma.social <span class="hljs-comment"># 通知邮箱</span><br><span class="hljs-attr">DOMAIN</span>=s.pwq.app <span class="hljs-comment"># 实例域名</span><br><span class="hljs-attr">PORT</span>=<span class="hljs-number">4000</span> <span class="hljs-comment"># 实例运行端口</span><br></code></pre></td></tr></table></figure>
<p>只需要修改域名和邮箱即可<br>打开<code>./volumes/pleroma/config.exs</code><br>在下面添加</p>
<figure class="highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs arduino"><span class="hljs-keyword">import</span> Config<br>config :pleroma, configurable_from_database: <span class="hljs-literal">true</span><br></code></pre></td></tr></table></figure>
<h3 id="启动容器"><a href="#启动容器" class="headerlink" title="启动容器"></a>启动容器</h3><p>随后运行 </p>
<figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">docker-compose up -d</span><br></code></pre></td></tr></table></figure>
<p>启动容器。</p>
<h3 id="添加反向代理"><a href="#添加反向代理" class="headerlink" title="添加反向代理"></a>添加反向代理</h3><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-comment">#PROXY-START/</span><br><br><span class="hljs-section">location</span><span class="hljs-regexp"> ^~</span> /<br>&#123;<br> <span class="hljs-comment"># 4000 是你的实例容器运行端口,如果你修改过,记得改成你的端口。</span><br> <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:4000;<br> <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br> <span class="hljs-attribute">proxy_set_header</span> REMOTE-HOST <span class="hljs-variable">$remote_addr</span>;<br> <span class="hljs-attribute">proxy_set_header</span> Upgrade <span class="hljs-variable">$http_upgrade</span>;<br> <span class="hljs-attribute">proxy_set_header</span> Connection <span class="hljs-variable">$connection_upgrade</span>;<br> <span class="hljs-comment"># proxy_hide_header Upgrade;</span><br>&#125;<br></code></pre></td></tr></table></figure>
<h3 id="创建管理员账户"><a href="#创建管理员账户" class="headerlink" title="创建管理员账户"></a>创建管理员账户</h3><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs gradle">docker exec -it pleroma .<span class="hljs-regexp">/opt/</span>pleroma<span class="hljs-regexp">/bin/</span>pleroma_ctl user <span class="hljs-keyword">new</span> admin 邮箱 --admin<br></code></pre></td></tr></table></figure>
<p>运行后会出现一个链接,复制在浏览器即可重置密码.</p>
<h3 id="修改文件夹权限"><a href="#修改文件夹权限" class="headerlink" title="修改文件夹权限"></a>修改文件夹权限</h3><p><code>/root/pleroma-docker-compose/volumes/pleroma</code>下的<code>uploads</code>权限设置为<code>777</code><br>当然如果你用S3协议的对象存储则不需要修改<br>直接在后台设置S3即可.</p>
<h3 id="演示地址"><a href="#演示地址" class="headerlink" title="演示地址"></a>演示地址</h3><p><a target="_blank" rel="noopener" href="https://chaihu.top/">https://chaihu.top</a></p>
</div>
<hr/>
<div>
<div class="post-metas my-3">
<div class="post-meta mr-3 d-flex align-items-center">
<i class="iconfont icon-category"></i>
<span class="category-chains">
<span class="category-chain">
<a href="/categories/%E6%8E%A8%E8%8D%90/" class="category-chain-item">推荐</a>
</span>
</span>
</div>
<div class="post-meta">
<i class="iconfont icon-tags"></i>
<a href="/tags/Docker/" class="print-no-link">#Docker</a>
<a href="/tags/Pleroma/" class="print-no-link">#Pleroma</a>
</div>
</div>
<div class="post-prevnext my-3">
<article class="post-prev col-6">
<a href="/posts/88a97a51.html" title="如何在Fly.io部署Memos">
<i class="iconfont icon-arrowleft"></i>
<span class="hidden-mobile">如何在Fly.io部署Memos</span>
<span class="visible-mobile">上一篇</span>
</a>
</article>
<article class="post-next col-6">
<a href="/posts/bc338f20.html" title="群晖CPU和内存占满的排查记录">
<span class="hidden-mobile">群晖CPU和内存占满的排查记录</span>
<span class="visible-mobile">下一篇</span>
<i class="iconfont icon-arrowright"></i>
</a>
</article>
</div>
</div>
<article id="comments" lazyload>
<div id="twikoo"></div>
<script type="text/javascript">
Fluid.utils.loadComments('#comments', function() {
Fluid.utils.createScript('https://unpkg.com/twikoo/dist/twikoo.all.min.js', function() {
var options = Object.assign(
{"envId":"https://t.jkjoy.cn","region":null,"path":"window.location.pathname"},
{
el: '#twikoo',
path: 'window.location.pathname',
onCommentLoaded: function() {
Fluid.utils.listenDOMLoaded(function() {
var imgSelector = '#twikoo .tk-content img:not(.tk-owo-emotion)';
Fluid.plugins.imageCaption(imgSelector);
Fluid.plugins.fancyBox(imgSelector);
});
}
}
)
twikoo.init(options)
});
});
</script>
<noscript>Please enable JavaScript to view the comments</noscript>
</article>
</article>
</div>
</div>
</div>
<div class="side-col d-none d-lg-block col-lg-2">
<aside class="sidebar" style="margin-left: -1rem">
<div id="toc">
<p class="toc-header">
<i class="iconfont icon-list"></i>
<span>目录</span>
</p>
<div class="toc-body" id="toc-body"></div>
</div>
</aside>
</div>
</div>
</div>
<a id="scroll-top-button" aria-label="TOP" href="#" role="button">
<i class="iconfont icon-arrowup" aria-hidden="true"></i>
</a>
<div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
<div class="modal-content">
<div class="modal-header text-center">
<h4 class="modal-title w-100 font-weight-bold">搜索</h4>
<button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body mx-3">
<div class="md-form mb-5">
<input type="text" id="local-search-input" class="form-control validate">
<label data-error="x" data-success="v" for="local-search-input">关键词</label>
</div>
<div class="list-group" id="local-search-result"></div>
</div>
</div>
</div>
</div>
</main>
<footer>
<div class="footer-inner">
<div class="footer-content">
<link rel="stylesheet" href="https://cdnjs.sgcd.net/lxgw-wenkai-screen-webfont/lxgwwenkaigbscreen.css" /> <style> body { font-family: "LXGW WenKai Screen", sans-serif; } </style> <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a> <i class="iconfont icon-love"></i> <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a> <br> PowerBy 浪子 ©2024
</div>
<div class="statistics">
<span id="busuanzi_container_site_pv" style="display: none">
总访问量
<span id="busuanzi_value_site_pv"></span>
</span>
<span id="busuanzi_container_site_uv" style="display: none">
总访客数
<span id="busuanzi_value_site_uv"></span>
</span>
</div>
<!-- 备案信息 ICP for China -->
<div class="beian">
<span>
<a href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow noopener">
鄂ICP备16022970号-16
</a>
</span>
</div>
</div>
</footer>
<!-- Scripts -->
<script src="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.js" ></script>
<link rel="stylesheet" href="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.css" />
<script>
NProgress.configure({"showSpinner":false,"trickleSpeed":100})
NProgress.start()
window.addEventListener('load', function() {
NProgress.done();
})
</script>
<script src="https://lib.baomitu.com/jquery/3.6.4/jquery.min.js" ></script>
<script src="https://lib.baomitu.com/twitter-bootstrap/4.6.1/js/bootstrap.min.js" ></script>
<script src="/js/events.js" ></script>
<script src="/js/plugins.js" ></script>
<script src="https://lib.baomitu.com/typed.js/2.0.12/typed.min.js" ></script>
<script>
(function (window, document) {
var typing = Fluid.plugins.typing;
var subtitle = document.getElementById('subtitle');
if (!subtitle || !typing) {
return;
}
var text = subtitle.getAttribute('data-typed-text');
typing(text);
})(window, document);
</script>
<script src="/js/img-lazyload.js" ></script>
<script>
Fluid.utils.createScript('https://lib.baomitu.com/tocbot/4.20.1/tocbot.min.js', function() {
var toc = jQuery('#toc');
if (toc.length === 0 || !window.tocbot) { return; }
var boardCtn = jQuery('#board-ctn');
var boardTop = boardCtn.offset().top;
window.tocbot.init(Object.assign({
tocSelector : '#toc-body',
contentSelector : '.markdown-body',
linkClass : 'tocbot-link',
activeLinkClass : 'tocbot-active-link',
listClass : 'tocbot-list',
isCollapsedClass: 'tocbot-is-collapsed',
collapsibleClass: 'tocbot-is-collapsible',
scrollSmooth : true,
includeTitleTags: true,
headingsOffset : -boardTop,
}, CONFIG.toc));
if (toc.find('.toc-list-item').length > 0) {
toc.css('visibility', 'visible');
}
Fluid.events.registerRefreshCallback(function() {
if ('tocbot' in window) {
tocbot.refresh();
var toc = jQuery('#toc');
if (toc.length === 0 || !tocbot) {
return;
}
if (toc.find('.toc-list-item').length > 0) {
toc.css('visibility', 'visible');
}
}
});
});
</script>
<script src=https://lib.baomitu.com/clipboard.js/2.0.11/clipboard.min.js></script>
<script>Fluid.plugins.codeWidget();</script>
<script>
Fluid.utils.createScript('https://lib.baomitu.com/anchor-js/4.3.1/anchor.min.js', function() {
window.anchors.options = {
placement: CONFIG.anchorjs.placement,
visible : CONFIG.anchorjs.visible
};
if (CONFIG.anchorjs.icon) {
window.anchors.options.icon = CONFIG.anchorjs.icon;
}
var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
var res = [];
for (var item of el) {
res.push('.markdown-body > ' + item.trim());
}
if (CONFIG.anchorjs.placement === 'left') {
window.anchors.options.class = 'anchorjs-link-left';
}
window.anchors.add(res.join(', '));
Fluid.events.registerRefreshCallback(function() {
if ('anchors' in window) {
anchors.removeAll();
var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
var res = [];
for (var item of el) {
res.push('.markdown-body > ' + item.trim());
}
if (CONFIG.anchorjs.placement === 'left') {
anchors.options.class = 'anchorjs-link-left';
}
anchors.add(res.join(', '));
}
});
});
</script>
<script>
Fluid.utils.createScript('https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.js', function() {
Fluid.plugins.fancyBox();
});
</script>
<script>Fluid.plugins.imageCaption();</script>
<script src="/js/local-search.js" ></script>
<script defer src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" ></script>
<!-- 主题的启动项,将它保持在最底部 -->
<!-- the boot of the theme, keep it at the bottom -->
<script src="/js/boot.js" ></script>
<noscript>
<div class="noscript-warning">博客在允许 JavaScript 运行的环境下浏览效果更佳</div>
</noscript>
</body>
</html>