<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>DevOps on Micah&#39;s Space</title>
    <link>https://micah.wiki/posts/1.learning/a3.reflections/devops/</link>
    <description>Recent content in DevOps on Micah&#39;s Space</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 15 Mar 2024 21:38:06 +0800</lastBuildDate>
    <atom:link href="https://micah.wiki/posts/1.learning/a3.reflections/devops/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Mac安装homepage</title>
      <link>https://micah.wiki/posts/1.learning/a3.reflections/devops/mac_install_homepage/</link>
      <pubDate>Fri, 15 Mar 2024 21:38:06 +0800</pubDate>
      <guid>https://micah.wiki/posts/1.learning/a3.reflections/devops/mac_install_homepage/</guid>
      <description>&lt;h2 id=&#34;1-homepage介绍&#34;&gt;1. homepage介绍&lt;/h2&gt;&#xA;&lt;p&gt;官网地址：&lt;a href=&#34;https://gethomepage.dev/latest/&#34;&gt;这里&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;一个现代化、完全静态、快速、安全、完全代理、高度可定制的应用程序仪表板，集成了 100 多种服务，并可翻译成多种语言。通过 YAML 文件或 &lt;a href=&#34;coco://sendMessage?ext=%7B%22s%24wiki_link%22%3A%22https%3A%2F%2Fm.baike.com%2Fwikiid%2F1782721469276222823%22%7D&amp;amp;msg=Docker&#34;&gt;Docker&lt;/a&gt; 标签发现轻松配置。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;2-为什么要写这个&#34;&gt;2. 为什么要写这个？&lt;/h2&gt;&#xA;&lt;p&gt;因为官网提供的是docker、k8s等安装方式，并没有提供mac本地安装，而我想在自己电脑上有这么一个。所以就要用源码安装了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;3-普通安装会出来什么问题&#34;&gt;3. 普通安装会出来什么问题？&lt;/h2&gt;&#xA;&lt;p&gt;mac新版本用iTrem2的&lt;code&gt;nohup&lt;/code&gt;启动后，退出iTrem2后，Session会关闭，导致&lt;code&gt;nohup&lt;/code&gt;不成功&lt;/p&gt;&#xA;&lt;h2 id=&#34;4-如何处理&#34;&gt;4. 如何处理？&lt;/h2&gt;&#xA;&lt;h3 id=&#34;41-下载源码切换分支&#34;&gt;4.1 下载源码，切换分支&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/gethomepage/homepage.git HomePage&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git checkout tags/v0.8.9&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;42-确定node版本编译&#34;&gt;4.2 确定node版本，编译&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-shel&#34; data-lang=&#34;shel&#34;&gt;# 应该在18以上，我是20&#xA;# 到工作目录&#xA;npm install -g pnpm&#xA;pnpm install&#xA;pnpm build&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;43-创建plist&#34;&gt;4.3 创建plist&lt;/h3&gt;&#xA;&lt;p&gt;地址：&lt;code&gt;~/Library/LaunchAgents&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;名称：&lt;code&gt;wiki.micah.homepage.plist&lt;/code&gt; 注意，这里必须plist结尾的&lt;/p&gt;&#xA;&lt;p&gt;内容：&lt;code&gt;xxx&lt;/code&gt;表示你的用户目录&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;?xml version&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt; encoding&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt;?&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;!DOCTYPE plist PUBLIC &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-//Apple//DTD PLIST 1.0//EN&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;plist version&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;dict&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;string&amp;gt;wiki.micah.homepage&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;true/&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;key&amp;gt;KeepAlive&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;true/&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;key&amp;gt;ThrottleInterval&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;integer&amp;gt;60&amp;lt;/integer&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;key&amp;gt;EnvironmentVariables&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;dict&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &amp;lt;key&amp;gt;HOME_DIR&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &amp;lt;string&amp;gt;/Users/xxx&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &amp;lt;key&amp;gt;APP_DIR&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &amp;lt;string&amp;gt;/Users/xxx/gethomepage/homepage&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &amp;lt;key&amp;gt;HOMEPAGE_ALLOWED_HOSTS&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &amp;lt;string&amp;gt;homepage.xxxx,localhost:3000&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;/dict&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;array&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &amp;lt;string&amp;gt;/bin/zsh&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &amp;lt;string&amp;gt;-c&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &amp;lt;string&amp;gt;-l&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &amp;lt;string&amp;gt;source $HOME_DIR/.zshrc; /Users/micah/xxx/bin/pnpm start&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;/array&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;key&amp;gt;WorkingDirectory&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;string&amp;gt;/Users/xxx/gethomepage/homepage&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;key&amp;gt;StandardOutPath&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;string&amp;gt;/Users/xxx/homepage.micah.wiki.node.info.log&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;key&amp;gt;StandardErrorPath&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;string&amp;gt;/Users/xxx/logs/homepage.micah.wiki.node.error.log&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/dict&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/plist&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;44-加入到启动项目中&#34;&gt;4.4 加入到启动项目中&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 加入到启动项目&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;launchctl load ~/Library/LaunchAgents/wiki.micah.homepage.plist&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 从启动项目删除&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;launchctl unload ~/Library/LaunchAgents/wiki.micah.homepage.plist&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Ubuntu服务器初始化</title>
      <link>https://micah.wiki/posts/1.learning/a3.reflections/devops/ubuntu_init/</link>
      <pubDate>Sat, 30 Sep 2023 18:21:47 +0800</pubDate>
      <guid>https://micah.wiki/posts/1.learning/a3.reflections/devops/ubuntu_init/</guid>
      <description>&lt;h1 id=&#34;初始化需要的步骤&#34;&gt;初始化需要的步骤&lt;/h1&gt;&#xA;&lt;h2 id=&#34;1-更新&#34;&gt;1. 更新&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt upgrade&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;2-安装软件&#34;&gt;2. 安装软件&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get install nginx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 修改启动用户为root &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vi /etc/nginx/nginx.conf &lt;span style=&#34;color:#75715e&#34;&gt;# 第一行&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# user root;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Mac电脑如何配置有格式的文件夹</title>
      <link>https://micah.wiki/posts/1.learning/a3.reflections/devops/mac_use_system_localized/</link>
      <pubDate>Thu, 20 Apr 2023 09:01:37 +0800</pubDate>
      <guid>https://micah.wiki/posts/1.learning/a3.reflections/devops/mac_use_system_localized/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 文件名命名&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1. 从下面json多语言化中选择一个Key作为文件夹名&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2. 在新建的文件夹名下，创建一个文件&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;touch .localized&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 下面的文件地址： `/System/Library/CoreServices/SystemFolderLocalizations/zh_CN.lproj`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 现在是二进制的，需要转换为其他格式，命令如下：&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plutil -convert json SystemFolderLocalizations.strings &lt;span style=&#34;color:#75715e&#34;&gt;# 该命令需要有执行权限的地方，不如拷贝到download下&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 更改图标&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1. 右击查看“显示简介”&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2. 命令行cd到&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt; 然后输入 &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;open .&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;3. 找到最喜欢的图标，然后&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;cmd+c&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;，在简介中的最上面图标点击后&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;cmd+v&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Saved Searches&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;已存储的搜索&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Relocated Items&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;迁移的项目&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Deleted Users&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;已删除的用户&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Favorites&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;个人收藏&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Public&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;公共&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Compositions&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Compositions&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Groups&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;群组&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Documents&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;文稿&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Sites&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;站点&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Network&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;网络&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;System&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;系统&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;My Network&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;我的网络&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Shared Items&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;共享的项目&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;My Applications&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;我的应用程序&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Movies&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;影片&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Mail Downloads&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;邮件下载&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Servers&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;服务器&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Server&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;服务器&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Pictures&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;图片&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Shared&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;共享&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Recovered files&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;恢复的文件&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Configuration&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;配置&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Utilities&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;实用工具&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Security&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;安全性&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Incompatible Software&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;不兼容的软件&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Desktop&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;桌面&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Music&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;音乐&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Faxes&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;传真&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Downloads&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;下载&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Users&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;用户&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Guest&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;客人&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Drop Box&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;投件箱&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Web Receipts&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;网页收据&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Library&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;资源库&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Local&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;本地&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;Applications&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;应用程序&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>图片服务整体架构</title>
      <link>https://micah.wiki/posts/1.learning/a3.reflections/devops/pic-app/</link>
      <pubDate>Thu, 09 Jun 2022 15:09:21 +0800</pubDate>
      <guid>https://micah.wiki/posts/1.learning/a3.reflections/devops/pic-app/</guid>
      <description>&lt;h2 id=&#34;1背景&#34;&gt;1.背景&lt;/h2&gt;&#xA;&lt;p&gt;面向海外用户设计图片类app的后端架构。&lt;/p&gt;&#xA;&lt;h2 id=&#34;2-目标&#34;&gt;2. 目标&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;考虑跨地区访问图片列表。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;图片容灾和备份服务。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;用户访问突增的解决方案。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;海外服务政策相关注意事项。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;3-方案图片&#34;&gt;3. 方案（图片）&lt;/h2&gt;&#xA;&lt;p&gt;ps：这里先统一考虑图片的设计过程，图片解决后，再考虑业务后台过程&lt;/p&gt;&#xA;&lt;h3 id=&#34;31-自研&#34;&gt;3.1 自研&lt;/h3&gt;&#xA;&lt;h4 id=&#34;方案设计&#34;&gt;方案设计&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.shijinping.cn/picgo/202206101026771.png&#34; alt=&#34;v1.drawio&#34;&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;分布式文件系统：采用开源系统进行搭建分布式文件系统&lt;/li&gt;&#xA;&lt;li&gt;文件系统服务：可以新增图片时可以生成索引返回给业务，当业务只需要根据索引，就能查询到对应的文件内容&lt;/li&gt;&#xA;&lt;li&gt;业务层：上传服务主要负责图片的上传、而列表服务则是需要根据请求，获取列表及数据&lt;/li&gt;&#xA;&lt;li&gt;接入层：接收用户的请求，把请求代理到业务上&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这么设计，可以实现一个图片类的应用。在实际中会有什么问题？&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;不同区域的用户，体验不一样，用户离部署的节点越近，用户体验更好&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;因为根据之前的经验，地域对于网络的延迟影响很大。大致从ping上就能体现&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;地区1&lt;/th&gt;&#xA;          &lt;th&gt;地区2&lt;/th&gt;&#xA;          &lt;th&gt;ping时间&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;上海&lt;/td&gt;&#xA;          &lt;td&gt;广州&lt;/td&gt;&#xA;          &lt;td&gt;30ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;上海&lt;/td&gt;&#xA;          &lt;td&gt;上海&lt;/td&gt;&#xA;          &lt;td&gt;10ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;上海&lt;/td&gt;&#xA;          &lt;td&gt;美国&lt;/td&gt;&#xA;          &lt;td&gt;100ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;从终端的成功率上看，由于网络上的丢包、延迟，成功率会低很多，特别是图片（目前图片1～3M都是比较正常的），这么大的图片，在过程中，发生丢包、延迟，失败率可想而知，会特别的高。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这种场景，我们可以考虑下，访问国外某些网站的时候，经常是失败，体验非常差&lt;/p&gt;&#xA;&lt;h4 id=&#34;改进点&#34;&gt;改进点&lt;/h4&gt;&#xA;&lt;p&gt;那么需要怎么改进呢？&lt;/p&gt;&#xA;&lt;p&gt;比较容易想到的就是，既然是距离远，那么直接在对应的地方部署一个服务，不就行了么？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.shijinping.cn/picgo/202206101104619.png&#34; alt=&#34;v2.1.drawio&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这样各地的用户，通过dns的调度，访问对应的接入层，接入层只访问当前区域的服务（同一个区域），这样就减少了网络上的问题。解决了用户体验。但是，好像跟需求不是太耦合。。。需求是&lt;code&gt;跨区域访问&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;那么要怎么样实现跨区域访问呢？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.shijinping.cn/picgo/202206101109613.png&#34; alt=&#34;v2.3.drawio&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;从图上可以看出来，如果底层数据实现了数据同步，那么是不是就可以了？&lt;/p&gt;&#xA;&lt;p&gt;比如亚洲用户发布内容，那么我们把数据同步给其他集群，这样其他集群就可以访问到亚洲用户的信息了&lt;/p&gt;&#xA;&lt;p&gt;要怎么实现同步呢？目前了解到**&lt;code&gt;FastDFS&lt;/code&gt;**可以实现分布式任务系统的，他是采用binlog进行同步，在log中有个标志位用户记录该条记录是&lt;code&gt;C: 增加 D: 删除 A: 添加 M: 修改 U: 更新整个文件 T: 截断文件&lt;/code&gt; 等，当亚洲区域进行添加时，会发送日志给美洲、欧洲，他们也会根据binlog的日志添加，这里需要注意：同步数据采用的标识与写入的是不一样的，采用小写，目的是为了区别是否需要同步给其他集群。&lt;/p&gt;&#xA;&lt;p&gt;这里还没有对FastDFS跨区同步进行测试过，还不确定具体的延迟能够到达多少（有待验证）。&lt;/p&gt;&#xA;&lt;p&gt;理论上，上面的方案是可以实现的，那么我们会有什么问题呢？&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;所有图片数据，都存在多份，每个数据都需要进行公网的同步。&lt;/li&gt;&#xA;&lt;li&gt;文件传入与数据传输需要保证一致，不能有数据了，没有文件&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;那么我们有没有其他方案进行呢？下面我们来看下&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.shijinping.cn/picgo/202206101614227.png&#34; alt=&#34;v2.4.drawio&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;对于图片，可以采用CDN加速。&lt;/p&gt;&#xA;&lt;p&gt;对于API接口了解到市面上，有一种产品，叫做“全站加速”或者“动态加速”，也就是cdn不进行缓存，直接访问，这样的话，我们可以直接让用户访问，这样的话，所有数据都访问了中心区域的数据，通过“动态加速”把用户和源进行连接，核心是增加了数据传输的稳定性，降低失败率。&lt;/p&gt;&#xA;&lt;p&gt;这种方式存在什么问题：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;数据量问题：&lt;/p&gt;&#xA;&lt;p&gt;a) 扩容问题：这个也不算特别问题，是项目一般都会遇到&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
