<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Memos on 资深网民孙先生</title>
    <link>https://blog.sunpeiwen.com/tags/memos/</link>
    <description>Recent content in Memos on 资深网民孙先生</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 15 Aug 2023 02:02:00 +0000</lastBuildDate>
    <atom:link href="https://blog.sunpeiwen.com/tags/memos/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>在fly.io部署Memos并自动备份数据库</title>
      <link>https://blog.sunpeiwen.com/posts/deploying-memos-on-fly_io-and-automating-database-backups/</link>
      <pubDate>Tue, 15 Aug 2023 02:02:00 +0000</pubDate>
      <guid>https://blog.sunpeiwen.com/posts/deploying-memos-on-fly_io-and-automating-database-backups/</guid>
      <description>&lt;h2 id=&#34;参考项目&#34;&gt;参考项目&lt;/h2&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&lt;a href=&#34;https://github.com/hu3rror/memos-on-fly&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34; &gt;https://github.com/hu3rror/memos-on-fly&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;准备工作&#34;&gt;准备工作&lt;/h2&gt;&#xA;&lt;p&gt;1.注册FLY.IO&#xA;用以部署memos&#xA;2.注册B2C&#xA;&#xA;&#xA;&#xA;&lt;a href=&#34;https://www.backblaze.com/cloud-storage&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34; &gt;https://www.backblaze.com/cloud-storage&lt;/a&gt;&#xA;&#xA;用以同步备份memos数据库&#xA;新建BUCKET,并获取&lt;code&gt;&amp;lt;keyId&amp;gt;&lt;/code&gt;和&lt;code&gt;&amp;lt;applicationKey&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装flyctl&#34;&gt;安装flyctl&lt;/h2&gt;&#xA;&lt;p&gt;Install flyctl&#xA;以WINDOWS为例&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pwsh -Command &amp;#34;iwr https://fly.io/install.ps1 -useb | iex&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;其他系统请参照官方&lt;/p&gt;&#xA;&lt;h2 id=&#34;新建app&#34;&gt;新建APP&lt;/h2&gt;&#xA;&lt;p&gt;初始化&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flyctl launch&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;按照提示选择会生成一个FLY.TOML文件&lt;/p&gt;&#xA;&lt;h2 id=&#34;编辑flytoml&#34;&gt;编辑FLY.TOML&lt;/h2&gt;&#xA;&lt;p&gt;添加以下内容&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[build]&#xA;  image = &amp;#34;ghcr.io/hu3rror/memos-litestream:latest&amp;#34;&#xA;#如果不需要备份数据库则可以选择官方的docker镜像ghcr.io/usememos/memos:latest&#xA;#使用官方镜像可以删掉env的部分&#xA;[env]&#xA;  # Details see: https://litestream.io/guides/backblaze/&#xA;  LITESTREAM_REPLICA_BUCKET = &amp;#34;B2C桶名称&amp;#34;     # change to your litestream bucket name&#xA;  LITESTREAM_REPLICA_ENDPOINT = &amp;#34;s3.us-east-005.backblazeb2.com&amp;#34;     # change to your litestream endpoint url&#xA;  LITESTREAM_REPLICA_PATH = &amp;#34;memos_prod.db&amp;#34;     # keep the default or change to whatever path you want&#xA;&#xA;[[mounts]]&#xA;  source = &amp;#34;memos_data&amp;#34;&#xA;  destination = &amp;#34;/var/opt/memos&amp;#34;&#xA;&#xA;[http_service]&#xA;  internal_port = 5230&#xA;  force_https = true&#xA;  auto_stop_machines = false&#xA;  auto_start_machines = true&#xA;  min_machines_running = 0&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;添加1g存储空间&#34;&gt;添加1g存储空间&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flyctl volumes create memos_data --region hkg --size 1&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;添加密钥&#34;&gt;添加密钥&lt;/h2&gt;&#xA;&lt;p&gt;将B2存储的密钥添加到fly的密钥存储中,&#xA;使用官方镜像可以忽略此步骤&lt;/p&gt;</description>
    </item>
    <item>
      <title>为Memos增加twikoo评论</title>
      <link>https://blog.sunpeiwen.com/posts/memos-twikoo/</link>
      <pubDate>Sat, 17 Jun 2023 06:42:00 +0000</pubDate>
      <guid>https://blog.sunpeiwen.com/posts/memos-twikoo/</guid>
      <description>&lt;h2 id=&#34;食用方法&#34;&gt;食用方法&lt;/h2&gt;&#xA;&lt;p&gt;适用于最新版本的memos 0.13&#xA;在Memos设置中加入以下&lt;/p&gt;&#xA;&lt;h2 id=&#34;自定义样式&#34;&gt;自定义样式&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#twikoo{padding: 1rem;background-color: rgb(63,63,70);margin: 1rem 0;border-radius: .5rem;color: #fff !important;}&#xA;.twicon{position: absolute;right: 1rem;}&#xA;.btns-container.space-x-2{margin-right:1.5rem;}&#xA;.action-button-container{color: #e5e7eb;}&#xA;.action-button-container a{display:none !important;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;自定义脚本&#34;&gt;自定义脚本&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;//添加 twikoo 评论 v2023.06.10 适用于最新版本的memos&#xA;var twikooENV = &amp;#39;https://twikoo.loliko.cn/&amp;#39;&#xA;function addTwikooJS() { &#xA;  var memosTwikoo = document.createElement(&amp;#34;script&amp;#34;);&#xA;  memosTwikoo.src = `https://cdn.staticfile.org/twikoo/1.6.16/twikoo.all.min.js`;&#xA;  var tws = document.getElementsByTagName(&amp;#34;script&amp;#34;)[0];&#xA;  tws.parentNode.insertBefore(memosTwikoo, tws);&#xA;};&#xA;function addComIcon(){&#xA;  var memoTwIcons = document.querySelectorAll(&amp;#39;.time-text&amp;#39;) || &amp;#39;&amp;#39;;&#xA;  if(memoTwIcons){&#xA;    for(var i=0;i &amp;lt; memoTwIcons.length;i++){&#xA;      //if(memoTwIcon[i].hasChildNodes == false){&#xA;        memoTwIcons[i].insertAdjacentHTML(&amp;#39;afterbegin&amp;#39;, &amp;#39;&amp;lt;div class=&amp;#34;twicon&amp;#34;&amp;gt;&amp;lt;svg class=&amp;#34;icon&amp;#34; viewBox=&amp;#34;0 0 1024 1024&amp;#34; xmlns=&amp;#34;http://www.w3.org/2000/svg&amp;#34; width=&amp;#34;16&amp;#34; height=&amp;#34;16&amp;#34;&amp;gt;&amp;lt;path d=&amp;#34;M896 138.667H128c-38.4 0-64 25.6-64 64v544c0 38.4 25.6 64 64 64h128v128c83.2 0 166.4-44.8 256-128h384c38.4 0 64-25.6 64-64v-544c0-38.4-25.6-64-64-64zm0 608H486.4l-19.2 19.2c-51.2 51.2-102.4 83.2-147.2 96v-115.2H128v-544h768v544z&amp;#34; fill=&amp;#34;#8a8a8a&amp;#34;/&amp;gt;&amp;lt;path d=&amp;#34;M256 477.867a64 64 0 1 0 128 0 64 64 0 1 0-128 0zM448 477.867a64 64 0 1 0 128 0 64 64 0 1 0-128 0zM640 477.867a64 64 0 1 0 128 0 64 64 0 1 0-128 0z&amp;#34; fill=&amp;#34;#8a8a8a&amp;#34;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;);&#xA;      //}&#xA;    }&#xA;  }&#xA;};&#xA;function startTwikoo() {&#xA;  start = setInterval(function(){&#xA;    var twikooDom = document.getElementById(&amp;#39;twikoo&amp;#39;) || &amp;#39;&amp;#39;;&#xA;    var memoTw = document.querySelector(&amp;#39;.memo-wrapper&amp;#39;) || &amp;#39;&amp;#39;;&#xA;    var memoLoading = document.querySelector(&amp;#39;.action-button-container&amp;#39;) || &amp;#39;&amp;#39;;&#xA;    var memoLoadingA = document.querySelector(&amp;#39;.action-button-container a&amp;#39;) || &amp;#39;&amp;#39;;&#xA;    var memoTwIcons = document.querySelectorAll(&amp;#39;.time-text .twicon&amp;#39;) || &amp;#39;&amp;#39;;&#xA;    var nowHref = window.location.href;&#xA;    if( nowHref.replace(/^.*\/(m)\/.*$/,&amp;#39;$1&amp;#39;) == &amp;#34;m&amp;#34; &amp;amp;&amp;amp; memoLoadingA){&#xA;      memoLoading.innerHTML = &amp;#34;评论加载中……&amp;#34;&#xA;    }&#xA;    if( nowHref.replace(/^.*\/(m)\/.*$/,&amp;#39;$1&amp;#39;) == &amp;#34;m&amp;#34; &amp;amp;&amp;amp; !twikooDom){&#xA;      addTwikooJS()&#xA;      if(memoTw){&#xA;        clearInterval(start)&#xA;        memoTw.insertAdjacentHTML(&amp;#39;afterend&amp;#39;, &amp;#39;&amp;lt;div id=&amp;#34;mtcomment&amp;#34;&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;);&#xA;        setTimeout(function() {&#xA;          twikoo.init({&#xA;            envId: twikooENV,&#xA;            el: &amp;#39;#mtcomment&amp;#39;,&#xA;            path: nowHref.replace(/^(.*\/m\/[0-9]+).*$/,&amp;#39;$1&amp;#39;),&#xA;            onCommentLoaded: function () {&#xA;              //console.log(&amp;#39;评论加载完成&amp;#39;);&#xA;              memoLoading.innerHTML = &amp;#39;&amp;#39;&#xA;              startTwikoo()&#xA;            }&#xA;          })&#xA;        }, 1000)&#xA;      }&#xA;    }&#xA;    if(nowHref.replace(/^.*\/(explore).*$/,&amp;#39;$1&amp;#39;) == &amp;#34;explore&amp;#34; || nowHref.replace(/^.*\/(u).*$/,&amp;#39;$1&amp;#39;) == &amp;#34;u&amp;#34;){&#xA;      memoTwIcons.forEach(memoTwIcon =&amp;gt; {memoTwIcon.remove();});&#xA;      addComIcon()&#xA;      //console.log(&amp;#39;图标添加成功&amp;#39;);&#xA;    }&#xA;    //console.log(window.location.href);&#xA;  }, 1000)&#xA;}&#xA;startTwikoo();&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
  </channel>
</rss>
