<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:wfw="http://wellformedweb.org/CommentAPI">
<channel>
<title>jcjyxjs</title>
<link>https://elstec.cn</link>
<atom:link href="https://elstec.cn/feed" rel="self" type="application/rss+xml" />
<language>zh-CN</language>
<description>永远年轻，永远热泪盈眶。</description>
<lastBuildDate>Tue, 21 Apr 2026 02:01:47 +0800</lastBuildDate>
<pubDate>Tue, 21 Apr 2026 02:01:47 +0800</pubDate>

<item>
<title>语法与排版展示</title>
<link>https://elstec.cn/archives/typography</link>
<guid>https://elstec.cn/archives/typography</guid>
<pubDate>Sat, 21 Feb 2026 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[这篇文章用于集中展示 Monika 支持的 Markdown 语法和扩展能力。你可以把它当作写作模板。

这篇文章用于集中展示 Monika 支持的 Markdown 语法和扩展能力。你可以把它当作写作模板。






标题层级
一级标题
二级标题
三级标题
四级标题
五级标题
六级标题
文本样式
普通文本用于正文叙述。
加粗文本
斜体文本
加粗斜体
删除线
行内代码
链接示例
代码块
def ...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<div class="notice-box">这篇文章用于集中展示 Monika 支持的 Markdown 语法和扩展能力。你可以把它当作写作模板。</div>

<div class="warn">这篇文章用于集中展示 Monika 支持的 Markdown 语法和扩展能力。你可以把它当作写作模板。</div>

<div id="aplayer">
<meting-js
server="netease"
type="song"
id="551400874"
autoplay="false">
</meting-js>
</div>

<h2 id="_1">标题层级</h2>
<h1 id="_2">一级标题</h1>
<h2 id="_3">二级标题</h2>
<h3 id="_4">三级标题</h3>
<h4 id="_5">四级标题</h4>
<h5 id="_6">五级标题</h5>
<h6 id="_7">六级标题</h6>
<h2 id="_8">文本样式</h2>
<p>普通文本用于正文叙述。</p>
<p><strong>加粗文本</strong></p>
<p><em>斜体文本</em></p>
<p><strong><em>加粗斜体</em></strong></p>
<p><del>删除线</del></p>
<p><code>行内代码</code></p>
<p><a href="https://elstec.cn">链接示例</a></p>
<h2 id="_9">代码块</h2>
<pre><code class="language-python">def quicksort(arr):
    if len(arr) &lt;= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x &lt; pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x &gt; pivot]
    return quicksort(left) + middle + quicksort(right)

if __name__ == &quot;__main__&quot;:
    nums = [3, 6, 8, 10, 1, 2, 1]
    print(f&quot;原始数组: {nums}&quot;)
    print(f&quot;排序后: {quicksort(nums)}&quot;)
</code></pre>
<h2 id="_10">引用</h2>
<blockquote>
<p>极简主义不是缺少内容，而是去掉冗余。</p>
<blockquote>
<p>少即是多。</p>
</blockquote>
</blockquote>
<h2 id="_11">列表</h2>
<p>无序列表示例：</p>
<ul>
<li>前端开发</li>
<li>HTML / CSS</li>
<li>JavaScript</li>
<li>后端开发</li>
</ul>
<p>有序列表示例：</p>
<ol>
<li>安装依赖</li>
<li>本地预览</li>
<li>部署上线</li>
</ol>
<h2 id="_12">表格</h2>
<table>
<thead>
<tr>
<th>功能</th>
<th>状态</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>Markdown</td>
<td>✅</td>
<td>常用语法</td>
</tr>
<tr>
<td>代码高亮</td>
<td>✅</td>
<td>多语言支持</td>
</tr>
<tr>
<td>深浅色主题</td>
<td>✅</td>
<td>自动切换</td>
</tr>
</tbody>
</table>
<h2 id="_13">分割线</h2>
<hr />
<h2 id="_14">图片</h2>
<h3 id="_15">单图</h3>
<figure><img src="https://cdn.elstec.cn/39/8.jpg" alt="风景" loading="lazy" decoding="async"><figcaption>风景</figcaption></figure>

<h3 id="_16">图集</h3>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/8.jpg" alt="图1" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/8.jpg" alt="图2" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/8.jpg" alt="图3" loading="lazy" decoding="async"></figure>
</div>
</div>

<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/1.jpg" alt="图1" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/9.jpg" alt="图2" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/10.jpg" alt="图3" loading="lazy" decoding="async"></figure>
</div>
</div>

<h2 id="_17">链接卡片</h2>
<div class="links-list">
<a href="https://elstec.cn" class="link-item" target="_blank" rel="noopener">
    <img src="https://cdn.elstec.cn/icon" alt="JCJYXJS" class="link-avatar" width="40" height="40" loading="lazy" decoding="async">
    <span class="link-name">JCJYXJS</span>
</a>
</div>

<h2 id="_18">数学公式</h2>
<p>KaTeX 支持行内公式和块级公式。</p>
<p>行内公式：$E = mc^2$</p>
<p>块级公式：</p>
<div class="math-block">$$
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
$$</div>

<h2 id="_19">拼音标注</h2>
<p>使用 <code>{pīn yīn}(汉字)</code> 语法：</p>
<p><ruby>汉字<rp>(</rp><rt>hàn zì</rt><rp>)</rp></ruby> 是世界上最古老的文字之一。<ruby>北京<rp>(</rp><rt>běi jīng</rt><rp>)</rp></ruby>、<ruby>上海<rp>(</rp><rt>shàng hǎi</rt><rp>)</rp></ruby>、<ruby>西湖<rp>(</rp><rt>xī hú</rt><rp>)</rp></ruby>。</p>
<h2 id="_20">图表</h2>
<p>图表短代码支持 <code>bar</code> 和 <code>pie</code> 两种类型。</p>
<h3 id="_21">参数格式</h3>
<pre><code class="language-text">[chart type=&quot;bar|pie&quot; data=&quot;标签:值,标签:值&quot; title=&quot;标题&quot; xlabel=&quot;X轴&quot; ylabel=&quot;Y轴&quot;]
</code></pre>
<h3 id="_22">参数说明</h3>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
<th>必填</th>
</tr>
</thead>
<tbody>
<tr>
<td>type</td>
<td><code>bar</code> 或 <code>pie</code></td>
<td>✅</td>
</tr>
<tr>
<td>data</td>
<td><code>标签:值,标签:值</code></td>
<td>✅</td>
</tr>
<tr>
<td>title</td>
<td>图表标题</td>
<td>❌</td>
</tr>
<tr>
<td>xlabel</td>
<td>X 轴标签（柱状图）</td>
<td>❌</td>
</tr>
<tr>
<td>ylabel</td>
<td>Y 轴标签（柱状图）</td>
<td>❌</td>
</tr>
</tbody>
</table>
<h3 id="_23">柱状图</h3>
<div class="chart-container"><div class="chart-title">编程语言流行度</div><canvas id="chart-1120" data-type="bar" data-chart='[{"label":"JavaScript","value":85},{"label":"Python","value":72},{"label":"Java","value":80},{"label":"C++","value":75},{"label":"C#","value":68},{"label":"TypeScript","value":65},{"label":"PHP","value":55},{"label":"Kotlin","value":58},{"label":"Go","value":45},{"label":"Swift","value":42},{"label":"Ruby","value":50},{"label":"Rust","value":38},{"label":"Scala","value":48}]'></canvas></div>

<h3 id="_24">饼图</h3>
<div class="chart-container"><div class="chart-title">团队技能分布</div><canvas id="chart-91422" data-type="pie" data-chart='[{"label":"前端","value":35},{"label":"后端","value":40},{"label":"运维","value":15},{"label":"设计","value":10}]'></canvas></div>

<h3 id="_25">带坐标轴标签</h3>
<div class="chart-container"><div class="chart-title">月度访问量</div><canvas id="chart-60227" data-type="bar" data-chart='[{"label":"一月","value":120},{"label":"二月","value":150},{"label":"三月","value":180},{"label":"四月","value":200},{"label":"五月","value":160},{"label":"六月","value":220}]' data-xlabel="月份" data-ylabel="访问量"></canvas></div>

<h2 id="_26">按需加载说明</h2>
<ul>
<li>页面包含公式时才加载 KaTeX</li>
<li>页面包含图表时才加载 G2</li>
</ul>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/typography#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/typography</wfw:commentRss>
</item>
<item>
<title>阿里云ESA（边缘安全加速）+IPV6一键回程访问NAS资源</title>
<link>https://elstec.cn/archives/20260105</link>
<guid>https://elstec.cn/archives/20260105</guid>
<pubDate>Mon, 05 Jan 2026 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[近期阿里云上线了ESA的免费套餐，不限流量，全球加速，且国内能正常使用，自定义规则，与CF类似。刚好家中有NAS带IPV6公网，于是赶紧接入折腾了。

通过NS方式接入其实也方便，原先域名托管在腾讯云，直接导出Zone文件再导入ESA就开始运作了

前期需要有一个域名DDNS到IPV6的地址。然后直接在DNS添加一条CNAME记录。源站选域名以及跟随源站域名即可。下一步后会选择是静态资源加速还是音...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>近期阿里云上线了ESA的免费套餐，不限流量，全球加速，且国内能正常使用，自定义规则，与CF类似。刚好家中有NAS带IPV6公网，于是赶紧接入折腾了。</p>
<p><img src="/static/images/20260105/1.png" alt="" loading="eager" decoding="async" width="1738" height="1268" fetchpriority="high"></p>
<p>通过NS方式接入其实也方便，原先域名托管在腾讯云，直接导出Zone文件再导入ESA就开始运作了</p>
<p><img src="/static/images/20260105/2.png" alt="" loading="lazy" decoding="async" width="2014" height="886"></p>
<p>前期需要有一个域名DDNS到IPV6的地址。然后直接在DNS添加一条CNAME记录。源站选域名以及跟随源站域名即可。下一步后会选择是静态资源加速还是音视频还是其他加速，根据需求选择。NAS主页静态资源，emby这类就选择音视频，非常简单。</p>
<p><img src="/static/images/20260105/3.png" alt="" loading="lazy" decoding="async" width="2018" height="1034"></p>
<p>一般NAS中的资源都是非标准端口，即非80/443，到也问题不大。添加完加速后，进入规则加一条回源规则。直接指定回源协议以及回源端口。</p>
<p><img src="/static/images/20260105/4.png" alt="" loading="lazy" decoding="async" width="2420" height="1078"></p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20260105#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20260105</wfw:commentRss>
</item>
<item>
<title>IOS快捷指令爱快路由POST模拟远程开机</title>
<link>https://elstec.cn/archives/20220915</link>
<guid>https://elstec.cn/archives/20220915</guid>
<pubDate>Thu, 15 Sep 2022 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[一直想用Siri操作远程开机，遂安快捷指令可以SSH，但爱快不行，由于寻求爱快的SSH密码无果，所以只能用相对麻烦的方案。

注意：本文适用范围仅限爱快，其他需要根据情况自行调整，以及阅读本文就当你已经会基础抓包知识。

我是IOS，用Stream抓包，浏览器是Microsoft Edge，ikuai 3.6.7 x64，什么平台都一样无所谓。需要提前在代表定期唤醒列表中创建对应项目。
首先浏览器...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>一直想用<code>Siri</code>操作远程开机，遂安快捷指令可以<code>SSH</code>，但爱快不行，由于寻求爱快的<code>SSH</code>密码无果，所以只能用相对麻烦的方案。</p>
<blockquote>
<p>注意：本文适用范围仅限爱快，其他需要根据情况自行调整，以及阅读本文就当你已经会基础抓包知识。</p>
</blockquote>
<p>我是<code>IOS</code>，用<code>Stream</code>抓包，浏览器是<code>Microsoft Edge</code>，<code>ikuai 3.6.7 x64</code>，什么平台都一样无所谓。需要提前在代表定期唤醒列表中创建对应项目。</p>
<p>首先浏览器进入爱快路由器登录界面，输入账号密码，然后回到抓包软件点击开始，点登录，，然后进入<code>高级应用-网络唤醒</code>选择你想要的设备点击唤醒，最后回到抓包软件，点结束。</p>
<p><img src="https://cdn.elstec.cn/52/1.jpg" alt="" loading="eager" decoding="async" fetchpriority="high"></p>
<p>上图成功获取登陆参数，然后点击查看<code>JSON</code>获取参数。也可点右上角分享<code>获取CURL命令</code>，会比较好理解。</p>
<p><img src="https://cdn.elstec.cn/52/2.jpg" alt="" loading="lazy" decoding="async"></p>
<p>然后进入快捷指令，创建新的快捷指令。</p>
<ol>
<li>首先添加<code>URL</code>为:<code>http://你的IP/Action/login</code>。</li>
<li>然后添加<code>获取URL内容</code>，方法为<code>POST</code>，开始构建头部（通过参考下面<code>curl</code>命令）和请求体（使用<code>JSON</code>，参考图2）。</li>
<li>最后添加一个文本，内容选取变量为第2步。</li>
<li>如果是我自己要创建的，不创建无所谓。</li>
</ol>
<pre><code class="language-bash">curl 'http://你的IP/Action/login' \
  -H 'Host: 你的IP' \
  -H 'Content-Type: application/json;charset=utf-8' \
  -H 'Origin: http://你的IP' \
  -H 'Accept-Encoding: gzip, deflate' \
  -H 'Connection: keep-alive' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'User-Agent: xxx' \
  -H 'Referer: http://你的IP/login' \
  -H 'Content-Length: 131' \
  -H 'Accept-Language: zh-CN,zh-Hans;q=0.9' \
  --data '{
    &quot;username&quot;:&quot;xxx&quot;,
    &quot;passwd&quot;:&quot;xxx&quot;,
    &quot;pass&quot;:&quot;xxx==&quot;,
    &quot;remember_password&quot;:&quot;true&quot;
  }'  \
</code></pre>
<p><img src="https://cdn.elstec.cn/52/5.jpg" alt="" loading="lazy" decoding="async"></p>
<p>结果如下，然后运行一遍快捷指令，如果返回结果为<code>{"Result":10000,"ErrMsg":"Succeess"}</code>则配置正确。</p>
<p><img src="https://cdn.elstec.cn/52/6.jpg" alt="" loading="lazy" decoding="async"></p>
<ol>
<li>继续添加<code>URL</code>为:<code>http://你的IP/Action/call</code>。</li>
<li>然后添加<code>获取URL内容</code>，方法为<code>POST</code>，开始构建头部（通过参考下面<code>curl</code>命令）和请求体（使用<code>JSON</code>，参考图5），注意和上面有细微区别，</li>
<li>头部中<code>Cookie</code>和<code>Content-Length</code>不添加。</li>
</ol>
<pre><code class="language-bash">curl 'http://你的IP/Action/call' \
  -H 'Host: 你的IP' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Encoding: gzip, deflate' \
  -H 'Accept-Language: zh-CN,zh-Hans;q=0.9'  \
  -H 'Content-Type: application/json;charset=utf-8' \
  -H 'Origin: http://你的IP' \
  -H 'User-Agent: xxx' \
  -H 'Connection: keep-alive' \
  -H 'Referer: http://你的IP/' \
  --data '{
    &quot;func_name&quot;:&quot;wakeup&quot;,
    &quot;action&quot;:&quot;wake_id&quot;,
    &quot;param&quot;:{
    &quot;id&quot;:1
    }
  }' \
</code></pre>
<p><img src="https://cdn.elstec.cn/52/3.jpg" alt="" loading="lazy" decoding="async"></p>
<p><img src="https://cdn.elstec.cn/52/4.png" alt="" loading="lazy" decoding="async"></p>
<p>其中有一个<code>id=1</code>，代表定期唤醒列表中只有一个项目，就一定是<code>1</code>。如果有很多，以抓包为准。</p>
<p><img src="https://cdn.elstec.cn/52/7.jpg" alt="" loading="lazy" decoding="async"></p>
<p>最后跟上面一样创建文本等，运行一遍，如果返回:<code>{"Result":30000,"ErrMsg":"Success"}</code>则配置正确，即正常唤醒，至此结束。</p>
<p>补充一个快捷指令关机：只需要快捷指令创建<code>SSH</code>命令，键入关机命令就行。</p>
<pre><code class="language-bash">shutdown -h now
</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20220915#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20220915</wfw:commentRss>
</item>
<item>
<title>群晖自动下载iCloud照片并备份到百度云</title>
<link>https://elstec.cn/archives/20220910</link>
<guid>https://elstec.cn/archives/20220910</guid>
<pubDate>Sat, 10 Sep 2022 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[最近327入手了一个大华和希捷定制的4T盘，垂直盘，还算可以。想着可以多端备份下手机里的照片和视频，自然就想到了群晖的Cloud Sync，尽管百度云再怎么差，依旧是备份首选。
群晖Docker内注册表搜索icloudpd，boredazfcuk/icloudpd就是，也可以直接docker pull boredazfcuk/icloudpd。

直接开始创建容器，进入高级设置，自动重新启动建议钩...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>最近327入手了一个大华和希捷定制的4T盘，垂直盘，还算可以。想着可以多端备份下手机里的照片和视频，自然就想到了群晖的<code>Cloud Sync</code>，尽管百度云再怎么差，依旧是备份首选。</p>
<p>群晖<code>Docker</code>内注册表搜索<code>icloudpd</code>，<code>boredazfcuk/icloudpd</code>就是，也可以直接<code>docker pull boredazfcuk/icloudpd</code>。</p>
<p><img alt="" src="https://cdn.elstec.cn/51/1.png"  decoding="async" loading="eager" fetchpriority="high"/></p>
<p>直接开始创建容器，进入高级设置，自动重新启动建议钩上。</p>
<p><img alt="" src="https://cdn.elstec.cn/51/2.png"  decoding="async" loading="lazy"/></p>
<p>然后进入存储空间设置，本地目录自信创建文件夹，对应容器内目录：<code>/config</code>目录用来存放<code>iCloud Cookie</code>，<code>iCloud</code>目录用来存放下载的照片视频等。</p>
<p><img alt="" src="https://cdn.elstec.cn/51/3.png"  decoding="async" loading="lazy"/></p>
<p>最后进入环境选项，必须配置如下：</p>
<pre><code class="language-bash">icloud_china:True
TZ:CST-8
download_path:可以不填写，也可以随便，建议指定目录，默认为：/home/${user}/iCloud
apple_id:你的 Apple ID
authentication_type:2FA这个可选，填了最好
</code></pre>
<p><strong>重要</strong></p>
<p><code>download_path</code>和容器名字需要记住，后续会用到。</p>
<p><img alt="" src="https://cdn.elstec.cn/51/4.png"  decoding="async" loading="lazy"/></p>
<p>然后保存启动容器。</p>
<p>可以直接<code>docker exec -it 容器名字 /bin/sh</code>，也可以在<code>webUI</code>界面<code>终端机-通过命令启动-/bin/sh</code>。</p>
<p><img alt="" src="https://cdn.elstec.cn/51/5.png"  decoding="async" loading="lazy"/></p>
<p>进行初始化：</p>
<pre><code class="language-bash">sync-icloud.sh --Initialise
</code></pre>
<p>正常会出现如下界面：</p>
<pre><code class="language-bash">2020-08-06 16:45:58 INFO     ***** boredazfcuk/icloudpd container for icloud_photo_downloader started *****
2020-08-06 16:45:58 INFO     Alpine Linux v3.12
2020-08-06 16:45:58 INFO     Interactive session: True
2020-08-06 16:45:58 INFO     Local user: user:1000
2020-08-06 16:45:58 INFO     Local group: group:1000
2020-08-06 16:45:58 INFO     LAN IP Address: 192.168.20.1
2020-08-06 16:45:58 INFO     Apple ID: email@address.com
2020-08-06 16:45:58 INFO     Authentication Type: 2FA
2020-08-06 16:45:58 INFO     Cookie path: /config/emailaddresscom
2020-08-06 16:45:58 INFO     Cookie expiry notification period: 7
2020-08-06 16:45:58 INFO     Download destination directory: /home/user/iCloud
2020-08-06 16:45:58 INFO     Folder structure: {:%Y}
2020-08-06 16:45:58 INFO     Directory permissions: 750
2020-08-06 16:45:58 INFO     File permissions: 640
2020-08-06 16:45:58 INFO     Synchronisation interval: 43200
2020-08-06 16:45:58 INFO     Time zone: Europe/London
2020-08-06 16:45:58 INFO     Additional command line options: --auto-delete --set-exif-datetime
2020-08-06 16:45:58 INFO     Adding password to keyring...
Enter iCloud password for email@address.com:
Save password in keyring?  [y/N]: 
</code></pre>
<p>输入密码之后输入<code>y</code>保存密码等。</p>
<p>如果正常没报错就继续，无视这句话。如果报错，绝大概率是权限问题，解决方案如下：<br />
刚刚提到了<code>download_path</code>，如果你指定目录，则给指定目录上权限，例如指定了<code>/iCloud</code>：</p>
<pre><code class="language-bash">chmod 750 你指定目录
chmod 750 /iCloud
</code></pre>
<p>然后再次进行初始化。</p>
<p>则会完全正常出现如下状态：</p>
<ol>
<li>第一个<code>Two-step authentication</code>选择0，进行短信验证码认证。</li>
<li>第二次验证可以选择Apple设备的两步验证弹窗（推荐）也可以短信验证码，弹窗1，短信0</li>
</ol>
<pre><code class="language-bash">Two-step authentication required. Your trusted devices are:
  0: SMS to 07********
Which device would you like to use? [0]: 0
Please enter validation code: 123456
2020-08-06 16:47:04 INFO     Using password stored in keyring
2020-08-06 16:47:04 INFO     Generate 2FA cookie with password: usekeyring
2020-08-06 16:47:04 INFO     Check for new files using password stored in keyring...
  0: SMS to 07********
  1: Enter two-factor authentication code
Please choose an option: [0]: 1
Please enter two-factor authentication code: 123456
2020-08-06 16:47:30 INFO     Two factor authentication cookie generated. Sync should now be successful.
</code></pre>
<p>至此，<code>Cookie</code>获取完成，这时候需要在<code>iCloud</code>目录也就是用来存放下载的照片视频的目录，创建一个<code>.mounted</code>文件。怎么创建随意。<code>SSH</code>创建比较方便。创建完成之后容器才会开始工作，读取并下载照片视频。</p>
<pre><code class="language-bash">touch .mounted
</code></pre>
<p>最后用<code>Cloud Sync</code>连接到自己的百度云账户，并且新建任务开启加密。建议开加密，为了隐私，防止被用个人照片进行训练模型（不一定）。</p>
<p><img alt="" src="https://cdn.elstec.cn/51/6.png"  decoding="async" loading="lazy"/></p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20220910#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20220910</wfw:commentRss>
</item>
<item>
<title>acme.sh申请Google Trust Services证书</title>
<link>https://elstec.cn/archives/20220411</link>
<guid>https://elstec.cn/archives/20220411</guid>
<pubDate>Mon, 11 Apr 2022 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[证书特性：

天数最长90天
支持通配符，多域名
支持DNS和HTTP验证，不支持邮箱验证
CSR为ECC，则仅叶子（用户）证书为ECC，中间和CA证书依旧是RSA，CA证书交叉了Globalsign，兼容性较好

需要一个 GCP 账号，并填写表单 https://docs.google.com/forms/d/1Euhflb5CXpuLik8czElhyAloTZJZobar4086dm...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>证书特性：</p>
<ol>
<li>天数最长<code>90</code>天</li>
<li>支持通配符，多域名</li>
<li>支持<code>DNS</code>和<code>HTTP</code>验证，不支持邮箱验证</li>
<li><code>CSR</code>为<code>ECC</code>，则仅叶子（用户）证书为<code>ECC</code>，中间和<code>CA</code>证书依旧是<code>RSA</code>，<code>CA</code>证书交叉了<code>Globalsign</code>，兼容性较好</li>
</ol>
<p>需要一个 <code>GCP</code> 账号，并填写表单 <a href="https://docs.google.com/forms/d/1Euhflb5CXpuLik8czElhyAloTZJZobar4086dmlPqXA">https://docs.google.com/forms/d/1Euhflb5CXpuLik8czElhyAloTZJZobar4086dmlPqXA</a> 申请权限，大概半天能过。表单里的 <code>Google Cloud Project ID</code>，通过 <a href="https://console.cloud.google.com/apis/dashboard">https://console.cloud.google.com/apis/dashboard</a> 得到，随便一个项目的<code>ID</code>都可以。</p>
<p><img alt="" src="https://cdn.elstec.cn/49/1.png"  decoding="async" loading="eager" fetchpriority="high"/></p>
<p>然后进入 https://console.cloud.google.com/apis/library/publicca.googleapis.com?project=ID名称，点击启用，然后转圈完成之后点右上角的<code>激活Cloud Shell</code>。</p>
<p><img alt="" src="https://cdn.elstec.cn/49/2.png"  decoding="async" loading="lazy"/></p>
<pre><code class="language-bash">gcloud beta publicca external-account-keys create
</code></pre>
<p>返回</p>
<pre><code class="language-bash">Created an external account key
[b64MacKey: b64MacKey
keyId: keyId]
</code></pre>
<p>⚠️注意事项：</p>
<p><code>GCP</code>的证书<code>OCSP</code>在国内可用，但<code>ACME Endpoint</code>是被墙的，国内申请证书不特殊方法无法申请。</p>
<pre><code class="language-bash">~/.acme.sh/acme.sh  --register-account  -m  邮箱 --server google \
    --eab-kid keyId \
    --eab-hmac-key b64MacKey

~/.acme.sh/acme.sh --set-default-ca --server google
</code></pre>
<p>我<code>acme</code>配置了<code>dnspod</code>，自动添加<code>TXT</code>记录，例：</p>
<pre><code class="language-bash">~/.acme.sh/acme.sh --issue --dns dns_dp -d '*.elstec.cn' -d elstec.cn --days 90 -k ec-256
</code></pre>
<p><img alt="" src="https://cdn.elstec.cn/49/3.png"  decoding="async" loading="lazy"/></p>
<p>申请出来中间证书与<code>Google</code>官网的不同。</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20220411#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20220411</wfw:commentRss>
</item>
<item>
<title>爱快多拨+负载均衡叠加带宽</title>
<link>https://elstec.cn/archives/20220123</link>
<guid>https://elstec.cn/archives/20220123</guid>
<pubDate>Sun, 23 Jan 2022 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[一直想买一台低功耗小主机做软路由，前几天刚好看到淘宝有卖便宜双网口j1900小主机，看样子和成色应该是整机二手，不过看着还行，叫卖家给我装了爱快，插电直接用也省的我装。
先找来笔记本换默认网关IP，换了个192.168.192.1。
然后设置WAN口，爱快PPPoE拨号，接入方式选择基于物理网卡的混合模式，拨号选ADSL/PPPoE。
主要是多拨设置，打开多播助手，多拨并发数一般2或3，再多拨不出...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>一直想买一台低功耗小主机做软路由，前几天刚好看到淘宝有卖便宜双网口<code>j1900</code>小主机，看样子和成色应该是整机二手，不过看着还行，叫卖家给我装了爱快，插电直接用也省的我装。</p>
<p>先找来笔记本换<code>默认网关IP</code>，换了个<code>192.168.192.1</code>。</p>
<p>然后设置<code>WAN</code>口，爱快<code>PPPoE</code>拨号，接入方式选择<code>基于物理网卡的混合模式</code>，拨号选<code>ADSL/PPPoE</code>。</p>
<p>主要是多拨设置，打开多播助手，多拨并发数一般2或3，再多拨不出（因地区而异）。最重要的是需要开启<strong>掉线并重拨</strong>，检测周期全选，检测时间凌晨<code>2-6</code>点，因为白天多拨大概率失败，凌晨成功概率比较高，掉线检测间隔时间和掉线数量随便。</p>
<p>当然如果运营商在上游进行限制，那是无法多拨的。</p>
<p>然后新建两条<code>PPPoE</code>，名称只能<code>adsl</code>打头，账号密码一样，其他默认。</p>
<figure><img src="https://cdn.elstec.cn/48/1.png" alt="多拨" loading="eager" decoding="async" fetchpriority="high"><figcaption>多拨</figcaption></figure>

<p>最后来到<code>流控分流-分流设置-多线负载</code>。</p>
<p>新建设置，负载模式选择（可以二选一），其他设置需具体测试，一般这两种是比较稳定的：</p>
<ol>
<li>新建连接数</li>
<li>源IP+目的IP+目的端口</li>
</ol>
<p>由于是单线多拨，运营商是同一个，所以全部。</p>
<p>我是双拨，所以只有两条线路，负载比例全部<code>1</code>能叠加带宽，但我貌似只能叠加下行 🤬 上行要是叠加的话我公网看家里的影片也快一点了hhhh</p>
<figure><img src="https://cdn.elstec.cn/48/2.png" alt="负载均衡" loading="lazy" decoding="async"><figcaption>负载均衡</figcaption></figure>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20220123#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20220123</wfw:commentRss>
</item>
<item>
<title>贰零贰壹</title>
<link>https://elstec.cn/archives/review2021</link>
<guid>https://elstec.cn/archives/review2021</guid>
<pubDate>Fri, 31 Dec 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[




回顾2021，首先是博客，百度统计一年PV 24,588，UV 19,228，IP 14,559，跳出率 91.5%，平均访问时长 00:03:48，数据显示我虽然PV很高但是实际真人（IP）还是很少，写的文章深度不够，主要还是我随便写写（水平太差）加生活向内容也没人看吧。明年再接再厉吧hh。

    
    Title
    
    
        body {
      ...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<div id="aplayer">
<meting-js
server="netease"
type="song"
id="1904183420"
autoplay="true">
</meting-js>
</div>

<p>回顾2021，首先是博客，百度统计一年<code>PV 24,588</code>，<code>UV 19,228</code>，<code>IP 14,559</code>，<code>跳出率 91.5%</code>，<code>平均访问时长 00:03:48</code>，数据显示我虽然<code>PV</code>很高但是实际真人（<code>IP</code>）还是很少，写的文章深度不够，主要还是我随便写写（水平太差）加生活向内容也没人看吧。明年再接再厉吧hh。</p>
<!-- <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.2.0/dist/echarts.min.js"></script>
    <style>
        body {
            background: #fff;
        }
        @media(prefers-color-scheme: dark) {
            body {
                background: #000;
            }
        }
    </style>
</head>
<body>
    <div id="main" style="width: 600px;height: 600px;"></div>
    <script src="https://cdn.elstec.cn/47/47.js"></script>
</body> -->
<div class="chart-container"><div class="chart-title">2021数据</div><canvas id="chart-75691" data-type="pie" data-chart='[{"label":"搜索引擎","value":9463},{"label":"直接访问","value":13112},{"label":"外部链接","value":2003}]'></canvas></div>

<p>其次是今年学习也没学什么东西，感觉就浑浑噩噩的度过了一年，该学的一个都没学，可能自我感觉最好的一次还是申请了腾讯云云+社区的作者，写了一篇<code>CI</code>的文章上了首页，还有就是相机拍了几张自己还算满意的照片。</p>
<p>加上最近疫情肆虐，回家也是个未知数，希望疫情能赶快过去，恢复正常生活吧。</p>
<p>明年目标是多刷<code>leetcode</code>锻炼一下自己，编程语言全忘光了，全部都要重新回顾，再把<code>Vue</code>这些框架学了，其实自己还蛮喜欢<code>CV</code>和<code>嵌入式</code>的，看明年有没有时间学了，还有日常生活的锻炼，体测不太理想（丢人）以至于我拿奖学金受阻。班上平时看着傻傻的同学其实背地里在偷偷<del>内卷</del>，害，可能人就这样吧。</p>
<p>还挺想买个日常用的4K屏，<code>Sigma 30 1.4</code>，相机配件之类的，哈哈哈就跟人菜瘾又大一样。还有一个月不到一点就生日了，又大了一岁，做任何事都要对自己负责任。</p>
<p><img src="https://cdn.elstec.cn/47/1.png" alt="" loading="lazy" decoding="async"></p>
<p>最后就希望考试周能正常发挥~最后放几张最近拍的月亮了，纯手持无三脚架，全糊的。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/47/2.png" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/47/3.png" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/review2021#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/review2021</wfw:commentRss>
</item>
<item>
<title>2021的最后一抹秋🍂</title>
<link>https://elstec.cn/archives/20211209</link>
<guid>https://elstec.cn/archives/20211209</guid>
<pubDate>Thu, 09 Dec 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[已经2021年12月9日了，距离2022年一个月都不到了，但是现在疫情有了大幅反弹，最坏的情况可能就是会在学校过这个年，作为绍兴本地人居然还不能回家，自己属实小丑🤡，期末考试也直接提前一周不知道是好还是坏，大概1月9日就放寒假了。

前几天趁着还有太阳和银杏叶，在学校拍了年末最后的景色，银杏yyds。用的是Sony原厂的55-210变焦55mm段。
P档，LR后期，不得不说宽容度高就是可以为所欲为...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>已经2021年12月9日了，距离2022年一个月都不到了，但是现在疫情有了大幅反弹，最坏的情况可能就是会在学校过这个年，作为绍兴本地人居然还不能回家，自己属实小丑🤡，期末考试也直接提前一周不知道是好还是坏，大概1月9日就放寒假了。</p>
<hr />
<p>前几天趁着还有太阳和银杏叶，在学校拍了年末最后的景色，银杏yyds。用的是<code>Sony</code>原厂的<code>55-210</code>变焦<code>55mm</code>段。<br />
<code>P</code>档，<code>LR</code>后期，不得不说宽容度高就是可以为所欲为。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.jsdelivr.net/gh/jcjyxjs/cdn@master/DCIM/DSC00141.png" alt="ISO640 f/9 1/500" loading="eager" decoding="async" fetchpriority="high"></figure>
<figure><img src="https://cdn.jsdelivr.net/gh/jcjyxjs/cdn@master/DCIM/DSC00142.png" alt="ISO640 f/4.5 1/640" loading="lazy" decoding="async"></figure>
</div>
</div>

<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.jsdelivr.net/gh/jcjyxjs/cdn@master/DCIM/DSC00143.png" alt="ISO640 f/4.5 1/640" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.jsdelivr.net/gh/jcjyxjs/cdn@master/DCIM/DSC00144.png" alt="ISO640 f/4.5 1/640" loading="lazy" decoding="async"></figure>
</div>
</div>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20211209#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20211209</wfw:commentRss>
</item>
<item>
<title>是甜品🍰！</title>
<link>https://elstec.cn/archives/20211127</link>
<guid>https://elstec.cn/archives/20211127</guid>
<pubDate>Sat, 27 Nov 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[杭州2例无症状感染者，疫情小幅反弹，其实并不妨碍我回家吃甜品。

昨天一下车就跑店里买了招牌的蛋挞，大众点评首单19.9买8选4，个头蛮大的，看着也很有食欲，味道超好！
今年入了α6000+铭匠35 1.4+55-210，铭匠除了对焦麻烦，这个价位无敌，55-210焦段可以就是太肉了。
蛋挞和奶茶都是铭匠35 1.4拍的，光圈拉满。
ISO-400 f1.4 1/250

ISO-2500 f1....]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>杭州2例无症状感染者，疫情小幅反弹，其实并不妨碍我回家吃甜品。</p>
<hr />
<p>昨天一下车就跑店里买了招牌的蛋挞，大众点评首单19.9买8选4，个头蛮大的，看着也很有食欲，味道超好！</p>
<p>今年入了<code>α6000+铭匠35 1.4+55-210</code>，铭匠除了对焦麻烦，这个价位无敌，<code>55-210</code>焦段可以就是太肉了。</p>
<p>蛋挞和奶茶都是<code>铭匠35 1.4</code>拍的，光圈拉满。</p>
<p><code>ISO-400 f1.4 1/250</code></p>
<p><img src="https://cdn.elstec.cn/46/DSC00135.jpg" alt="" loading="eager" decoding="async" fetchpriority="high"></p>
<p><code>ISO-2500 f1.4 1/1600</code></p>
<p><img src="https://cdn.elstec.cn/46/DSC00051-2.jpg" alt="" loading="lazy" decoding="async"></p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20211127#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20211127</wfw:commentRss>
</item>
<item>
<title>本年度（2021）最后一个🐧活动赠品</title>
<link>https://elstec.cn/archives/20211002</link>
<guid>https://elstec.cn/archives/20211002</guid>
<pubDate>Sat, 02 Oct 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[细数今年参加了不少线上活动，拿了很多屁用没有的小玩意。去年阿里云活动很多，但东西质量真的就一般，今年腾讯云活动感觉挺多的，东西就是自家产品线上的玩偶，手办，希望积分商城一直开下去。比阿里要高上一个档次，但我就拿了一点，其他都是虚拟物品，不过都赚。

  
    
      
        序号
        名称
        数量
      
    
    
      
   ...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>细数今年参加了不少线上活动，拿了很多屁用没有的小玩意。去年阿里云活动很多，但东西质量真的就一般，今年腾讯云活动感觉挺多的，东西就是自家产品线上的玩偶，手办，希望积分商城一直开下去。比阿里要高上一个档次，但我就拿了一点，其他都是虚拟物品，不过都赚。</p>
<div>
  <table>
    <thead>
      <tr>
        <th>序号</th>
        <th>名称</th>
        <th>数量</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>1</td>
        <td>鼠年公仔16CM</td>
        <td>1</td>
      </tr>
      <tr>
        <td>2</td>
        <td>牛年公仔20CM</td>
        <td>1</td>
      </tr>
      <tr>
        <td>3</td>
        <td>牛年公仔30CM+随机钥匙扣</td>
        <td>1+1</td>
      </tr>
    </tbody>
  </table>
</div>

<p>今天拿到随便拍了几张照片，用的是<code>铭匠</code>的<code>35mm f1.4</code>手动头，成像效果很不错，就是没有打光，公仔那个早点很多，修的也不是很好。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/44/1.jpg" alt="公仔" loading="eager" decoding="async" fetchpriority="high"></figure>
<figure><img src="https://cdn.elstec.cn/44/2.jpg" alt="钥匙扣" loading="lazy" decoding="async"></figure>
</div>
</div>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20211002#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20211002</wfw:commentRss>
</item>
<item>
<title>echarts在Markdown下深色模式自适应</title>
<link>https://elstec.cn/archives/20210926</link>
<guid>https://elstec.cn/archives/20210926</guid>
<pubDate>Sun, 26 Sep 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[我首先找了一个官方示例做例子。
圆角环形饼图：https://echarts.apache.org/examples/zh/editor.html?c=pie-borderRadius&amp;lang=js
查阅官方文档得知深色模式根据backgroundColor这个属性进行自适应。
darkmode：
是否是暗黑模式，默认会根据背景色 backgroundColor 的亮度自动设置。 如果是...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>我首先找了一个官方示例做例子。</p>
<p>圆角环形饼图：<a href="https://echarts.apache.org/examples/zh/editor.html?c=pie-borderRadius&amp;lang=js">https://echarts.apache.org/examples/zh/editor.html?c=pie-borderRadius&amp;lang=js</a></p>
<p>查阅官方文档得知深色模式根据<code>backgroundColor</code>这个属性进行自适应。</p>
<p><strong>darkmode：</strong></p>
<pre><code>是否是暗黑模式，默认会根据背景色 backgroundColor 的亮度自动设置。 如果是设置了容器的背景色而无法判断到，就可以使用该配置手动指定，echarts 会根据是否是暗黑模式调整文本等的颜色。

该配置通常会被用于主题中。
</code></pre>
<p><strong>backgroundColor：</strong></p>
<pre><code>背景色，默认无背景。

支持使用rgb(255,255,255)，rgba(255,255,255,1)，#fff等方式设置为纯色，也支持设置为渐变色和纹理填充，具体见option.color
</code></pre>
<p>文档反正我就明白了一个背景色默认无背景，真的有点迷迷糊糊的。</p>
<p>我观察到手动深色模式会创建一个<code>dark</code>的属性。</p>
<pre><code class="language-javascript">var myChart = echarts.init(chartDom, 'dark');
</code></pre>
<p>但是手动深色模式的背景颜色不符合我的博客，所以我直接把饼图的背景改成了透明，只需要在<code>option</code>内设置背景透明即可。这样深色模式的背景只会显示我博客的背景。</p>
<pre><code class="language-javascript">option = {
  backgroundColor: 'transparent'
};
</code></pre>
<p>由于在<code>Markdown</code>中不能通过<code>script</code>标签直接运行<code>JS</code>，所以需要单独挂载一个<code>JS</code>。</p>
<p><code>HTML</code>部分：</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;Title&lt;/title&gt;
    &lt;script src=&quot;https://cdn.jsdelivr.net/npm/echarts@5.2.0/dist/echarts.min.js&quot;&gt;&lt;/script&gt;
    &lt;style&gt;
        body {
            background: #fff;
        }
        @media(prefers-color-scheme: dark) {
            body {
                background: #000;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id=&quot;main&quot; style=&quot;width: 600px;height: 600px;&quot;&gt;&lt;/div&gt;
    &lt;script src=&quot;https://cdn.jsdelivr.net/gh/jcjyxjs/cdn@master/43.js&quot;&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p><code>JS</code>部分：</p>
<pre><code class="language-javascript">var chartDom = document.getElementById('main');
var myChart = echarts.init(chartDom, 'dark');
var option;

option = {
    backgroundColor: 'transparent',
    legend: {
        top: '5%',
        left: 'center'
    },
    series: [
        {
            name: 'Access From',
            type: 'pie',
            radius: ['40%', '70%'],
            avoidLabelOverlap: false,
            itemStyle: {
                borderRadius: 10,
                borderColor: '#fff',
                borderWidth: 2
            },
            label: {
                show: false,
                position: 'center'
            },
            emphasis: {
                label: {
                    show: true,
                    fontSize: '40',
                    fontWeight: 'bold'
                }
            },
            labelLine: {
                show: false
            },
            data: [
                { value: 1048, name: 'Search Engine' },
                { value: 735, name: 'Direct' },
                { value: 580, name: 'Email' },
                { value: 484, name: 'Union Ads' },
                { value: 300, name: 'Video Ads' }
            ]
        }
    ]
};

option &amp;&amp; myChart.setOption(option);

</code></pre>
<p><head><br />
    <meta charset="UTF-8"><br />
    <title>Title</title><br />
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.2.0/dist/echarts.min.js"></script><br />
    <style><br />
        body {<br />
            background: #fff;<br />
        }<br />
        @media(prefers-color-scheme: dark) {<br />
            body {<br />
                background: #000;<br />
            }<br />
        }<br />
    </style><br />
</head></p>
<body>
    <div id="main" style="width: 600px;height: 600px;"></div>
    <script src="https://cdn.jsdelivr.net/gh/jcjyxjs/cdn@master/43.js"></script>
</body>

<p>此时切换深色模式和浅色模式可以直接看到效果。</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20210926#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20210926</wfw:commentRss>
</item>
<item>
<title>使用Coding Devops+自动构建以及部署博客</title>
<link>https://elstec.cn/archives/20210915</link>
<guid>https://elstec.cn/archives/20210915</guid>
<pubDate>Wed, 15 Sep 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[看前须知
本文只是我使用Coding Devops+部署博客以及自动Push到GitHub的过程记录，我只用到了repo和ci功能，不需要一模一样，hexo等可以效仿，其他仅作参考，有问题评论留言即可。（看懂本文需要会一点Git，Linux服务器相关内容）
当前构建状态
构建状态
开始
实现的最终效果如图。

Coding这个实现起来不是很难，我自己用也不需要什么测试，迭代。
在想要构建的仓库里创...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h1 id="_1">看前须知</h1>
<p>本文只是我使用<code>Coding Devops+</code>部署博客以及自动<code>Push</code>到<code>GitHub</code>的过程记录，我只用到了<code>repo</code>和<code>ci</code>功能，不需要一模一样，<code>hexo</code>等可以效仿，其他仅作参考，有问题评论留言即可。<strong>（看懂本文需要会一点<code>Git</code>，<code>Linux</code>服务器相关内容）</strong></p>
<h3 id="_2">当前构建状态</h3>
<p><a href="https://jcjyxjs.coding.net/p/blog/ci/job"><figure><img src="https://jcjyxjs.coding.net/badges/blog/job/808073/build.svg" alt="构建状态" loading="eager" decoding="async" fetchpriority="high"><figcaption>构建状态</figcaption></figure></a></p>
<h1 id="_3">开始</h1>
<p>实现的最终效果如图。</p>
<p><img src="https://cdn.elstec.cn/42/1.svg" alt="" loading="lazy" decoding="async"></p>
<p><code>Coding</code>这个实现起来不是很难，我自己用也不需要什么测试，迭代。</p>
<p>在想要构建的仓库里<code>创建构建计划</code>→<code>自定义构建过程</code>→<code>不使用代码仓库</code>。不适用代码仓库的原因是如果一开始就使用选定的仓库，运行<code>CI</code>会全局覆盖<code>Git</code>信息导致后续无法<code>Push</code>到<code>Github</code>。</p>
<p>不选代码仓库就没有检出这一步骤，第一步创建<code>执行Shell脚本</code>，内容就是<code>clone</code>托管在<code>Coding</code>的仓库，不使用<code>SSH</code>方式，改成账号密码。除了账号密码以外的部分可以在仓库里找到。</p>
<pre><code class="language-bash">git clone https://账号:密码@e.coding.net/用户名/项目名/项目名.git
</code></pre>
<p><code>Coding CI</code>的初始目录如下，所有的操作都会在这个目录里进行，需要注意的是：如果有<code>cd</code>操作，<code>cd</code>结束之后会自动回到这个目录，所以所有的步骤都要<code>cd</code>或者直接把内容拖到这个目录。</p>
<pre><code class="language-bash">/root/workspace
</code></pre>
<p>然后先删除项目内的<code>.git</code>文件夹（改也行），然后就是设置<code>Git</code>信息。在<code>Coding CI</code>内无法输入账号密码，所以<code>Push</code>到<code>Github</code>需要<code>Github</code>的<code>Personal access tokens</code>。在这里新建<code>token</code>，<a href="https://github.com/settings/tokens">https://github.com/settings/tokens</a> 并把对<code>repo</code>的控制勾上。</p>
<p>格式跟<code>Coding</code>那个仓库差不多，可以免密<code>Clone</code>，<code>Push</code>等。</p>
<pre><code>https://token@github.com/用户名/项目名.git
</code></pre>
<p>所有<code>Git</code>的操作就跟在本地一样，唯一的区别就是<code>CI</code>的服务器<code>Push</code>到<code>Github</code>很快hhh，格式如下，最后分支那里不用加<code>HEAD</code>。</p>
<pre><code>git push https://token@github.com/用户名/项目名.git branch
</code></pre>
<p>整仓<code>Push</code>到我的<code>Github</code>之后，开始构建并生成我的静态内容。我的博客和<code>GitHub Pages</code>是两个仓库所以我最终会提交两次，博客那个仓库主要做个备份。</p>
<p>我的博客用的<code>Maverick</code>，所以需要用到<code>Python</code>，版本只要大于3.6就可以，<code>CI</code>默认就有环境<code>SDK</code>内置。具体看官方文档。没有想要的环境或版本可以用自定义<code>docker</code>。</p>
<p><a href="https://help.coding.net/docs/ci/node/env.html">https://help.coding.net/docs/ci/node/env.html</a></p>
<p>查看文档可以看到和<code>Python</code>有关的环境有：<code>python3/pip3: 3.9、3.8、3.7</code>。</p>
<p>首先我更新默认的<code>pip</code>版本，其实这个无所谓。</p>
<pre><code class="language-bash">python3.9 -m pip install --upgrade pip
</code></pre>
<p>然后就是安装依赖</p>
<pre><code class="language-bash">pip3.9 install -r requirements.txt
</code></pre>
<p>最后生成</p>
<pre><code class="language-bash">python3.9 mvrk.py --config ./demo_src/config.py --source_dir ./demo_src/ --build_dir ./dist/
</code></pre>
<p>部署完成之后我需要推送到我的服务器，创建<code>执行 Pipeline 脚本</code>，可以用私钥也可以用账号密码，具体参考官方文档：<a href="https://help.coding.net/docs/ci/deploy/ssh.html">https://help.coding.net/docs/ci/deploy/ssh.html</a></p>
<p>如果是图形化编辑器，复制从<code>def</code>开始的内容即可，文本编辑器参考文档。填写好<code>IP</code>，端口等之后，可以看到<code>credentialsId</code>，凭据ID可以在当前项目页面左下角找到项目设置，开发者选项，就有凭据选项。新建凭据，可以用私钥也可以设置账号密码。添加完成后把凭据ID替换到<code>执行的Pipeline脚本</code>内。</p>
<pre><code>https://jcjyxjs.coding.net/p/项目名称/setting/connection?page=1
</code></pre>
<p>成功连接服务器之后，就等于直接操作服务器，首先我需要把生成的内容传输到我的服务器上，<code>form</code>就是<code>CI</code>目录，<code>into</code>就是我服务器目录。然后就是替换操作了。</p>
<pre><code class="language-groovy">sshPut remote: remote, from: '/root/workspace', into: '/xxxxxxxx/'
</code></pre>
<pre><code class="language-groovy">def remote = [:]
          remote.name = '名字随便'
          remote.allowAnyHosts = true
          remote.host = '服务器IP'
          remote.port = SSH端口
          remote.user = '用户'

          // 把「CODING 凭据管理」中的「凭据 ID」填入 credentialsId，而 id_rsa 无需修改
          withCredentials([sshUserPrivateKey(credentialsId: &quot;xxxxxxxxxxxxx&quot;, keyFileVariable: 'id_rsa')]) {
            remote.identityFile = id_rsa

            // SSH 上传文件到远端服务器
            sshPut remote: remote, from: '/tmp/tmp.tar.gz', into: '/tmp/'
            // 解压缩
            sshCommand remote: remote, command: &quot;tar -zxf /tmp/tmp.tar.gz -C /tmp/&quot;
            sshCommand remote: remote, sudo: true, command: &quot;mkdir -p /var/www/example-site&quot;
            sshCommand remote: remote, sudo: true, command: &quot;cp -R /tmp/site/* /var/www/example-site/&quot;
            sshCommand remote: remote, sudo: true, command: &quot;cp -R /tmp/apache2/ /etc/&quot;
            // 重启 apache2
            sshCommand remote: remote, sudo: true, command: &quot;a2ensite example.com&quot;
            sshCommand remote: remote, sudo: true, command: &quot;a2enmod headers rewrite ssl&quot;
            sshCommand remote: remote, sudo: true, command: &quot;systemctl reload apache2&quot;
          }
</code></pre>
<p>最后回到<code>CI</code>，还是创建<code>Shell命令</code>，我也不会其他方法，只能先删不需要的然后把<code>dist</code>目录内的东西移动到工作目录，然后<code>clone</code>在<code>GitHub</code>的仓库，把<code>.git</code>移动到工作目录，删除<code>clone</code>的产物，最后<code>git push</code>，<code>git init</code>然后添加远程仓库就是<code>push</code>不上去也不知道什么原因，我只能先这样。其他东西参考上文。</p>
<p>在每个步骤的最后我都添加了一步，推送消息到企业微信，这还挺方便的，执行到哪里了也都知道。</p>
<p>这个<code>CI</code>没有用代码仓库所以不会检测<code>repo</code>然后触发自动构建，所以在触发规则中，选择<code>API</code>触发，可以直接生成<code>CURL</code>触发命令，项目令牌和密码也可以一键生成，时间可以自定义。然后复制这个触发命令。</p>
<pre><code class="language-bash">curl -u &lt;项目令牌用户名&gt;:&lt;项目令牌密码&gt; \
   -v -X POST  '自己的CI点生成可以看到' \
   -H 'Content-Type: application/json' \
   -d '
    {
    &quot;ref&quot;: &quot;master&quot;,
    &quot;envs&quot;: []
}'
</code></pre>
<p>再次创建一个<code>CI</code>，使用<code>Coding</code>的仓库，然后创建一个<code>Shell命令</code>，把刚刚复制的<code>CURL</code>命令粘贴进来然后保存就可以。</p>
<p>最终就会是：我本地提交<code>git</code>到<code>Coding</code>的仓库，触发器这个<code>CI</code>检测到仓库变化然后运行，运行的内容就是启动另外一个<code>CI</code>，触发器结束任务，主要的<code>CI</code>开始运行我指定的内容。官方文档写的非常好，可读性极强。</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20210915#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20210915</wfw:commentRss>
</item>
<item>
<title>使用腾讯云Webify托管静态网站</title>
<link>https://elstec.cn/archives/20210913</link>
<guid>https://elstec.cn/archives/20210913</guid>
<pubDate>Mon, 13 Sep 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[绑定自定义域名需要提前完成备案

更多更详细配置参考官方文档：https://webify.cloudbase.net/docs/introduction/
目前（2021年9月13日）仅支持部署静态网站，后期会支持serverless能力，类似于Vercel。本文以介绍接入静态网站为主。
登录webify后台设置Git平台账号授权。https://console.cloud.tencent.co...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<div class="notice-box">绑定自定义域名需要提前完成备案</div>

<p>更多更详细配置参考官方文档：<a href="https://webify.cloudbase.net/docs/introduction/">https://webify.cloudbase.net/docs/introduction/</a></p>
<p>目前（2021年9月13日）仅支持部署静态网站，后期会支持<code>serverless</code>能力，类似于<code>Vercel</code>。本文以介绍接入静态网站为主。</p>
<p>登录<code>webify</code>后台设置<code>Git</code>平台账号授权。<a href="https://console.cloud.tencent.com/webify/set">https://console.cloud.tencent.com/webify/set</a></p>
<p>然后在<a href="https://console.cloud.tencent.com/webify/new">Webify 新建应用页面</a>新建一个模板或选择导入<code>Git</code>平台仓库</p>
<p><img src="https://cdn.elstec.cn/41/1.png" alt="" loading="eager" decoding="async" fetchpriority="high"></p>
<p>应用名称随意，如果使用这些静态程序的话，可以直接使用预设，自己的程序不在内也可自定义构建命令，输出目录和安装命令。（已经构建完成的静态网站只需要设置目录为<code>.</code>即可，其他都无需设置。）</p>
<p><img src="https://cdn.elstec.cn/41/2.png" alt="" loading="lazy" decoding="async"></p>
<p>然后就是等待几分钟部署完成。可以在应用列表找到该应用。默认分配了一个超长的应用域名，可以在应用设置→自定义域名设置绑定自定义域名。后续在<code>Git</code>平台上有新提交<code>Webify</code>也会自动同步并构建。</p>
<blockquote>
<p>定价：Webify 费用参考：1000PV 网站预计消耗 0.21 元/天，300 元基本覆盖大部分个人站点的两年托管费用。如个别站点流量较大可额外联系申请。被刷流量提交工单审核也会免除被刷的费用</p>
</blockquote>
<p>缺点：自定义域名CDN控制并没有接入内容分发网络控制台，控制选项不够多。删除应用不会马上把绑定的自定义域名删除，需要等待2-3小时系统删除或先删除域名再删应用。</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20210913#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20210913</wfw:commentRss>
</item>
<item>
<title>关于使用GitHub Actions云编译LEDE固件更新说明</title>
<link>https://elstec.cn/archives/20210821</link>
<guid>https://elstec.cn/archives/20210821</guid>
<pubDate>Sat, 21 Aug 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[
        
            教程类文章具有时效性，看清楚发布日期，超过一定日子文章内容可能失效，仅仅作为参考。
        
    

点击Use this template按钮，创建repo。然后给该repo启用Actions功能。

    Use this template


项目GitHub地址：
https://github.com/P3TERX/Actions-...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<div class="warn">
        <strong>
            教程类文章具有时效性，看清楚发布日期，超过一定日子文章内容可能失效，仅仅作为参考。
        </strong>
    </div>

<p>点击<code>Use this template</code>按钮，创建<code>repo</code>。然后给该<code>repo</code>启用<code>Actions</code>功能。</p>
<div class="uttpl">
    <a href="https://github.com/P3TERX/Actions-OpenWrt/generate" id="utp">Use this template</a>
</div>

<p>项目<code>GitHub</code>地址：</p>
<pre><code>https://github.com/P3TERX/Actions-OpenWrt
</code></pre>
<p>编辑<code>diy-part1.sh</code>文件，可以更改固件是<code>XXRPlus</code>还是<code>Passwall</code>，想用什么就给倒数两行其中一行取消注释就生效。</p>
<pre><code class="language-bash">#!/bin/bash
#
# Copyright (c) 2019-2020 P3TERX &lt;https://p3terx.com&gt;
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
# https://github.com/P3TERX/Actions-OpenWrt
# File name: diy-part1.sh
# Description: OpenWrt DIY script part 1 (Before Update feeds)
#

# Uncomment a feed source
#sed -i 's/^#\(.*helloworld\)/\1/' feeds.conf.default

# Add a feed source
#echo 'src-git helloworld https://github.com/fw876/helloworld' &gt;&gt;feeds.conf.default
#echo 'src-git passwall https://github.com/xiaorouji/openwrt-passwall' &gt;&gt;feeds.conf.default
</code></pre>
<p>编辑<code>diy-part2.sh</code>文件，修改最后一行可以更改固件默认后台地址。这个无关紧要反正在shell里面也可以通过<code>vi etc/config/network</code>命令更改。</p>
<pre><code class="language-bash">#!/bin/bash
#
# Copyright (c) 2019-2020 P3TERX &lt;https://p3terx.com&gt;
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
# https://github.com/P3TERX/Actions-OpenWrt
# File name: diy-part2.sh
# Description: OpenWrt DIY script part 2 (After Update feeds)
#

# Modify default IP
#sed -i 's/192.168.1.1/192.168.50.5/g' package/base-files/files/bin/config_generate
</code></pre>
<p>然后进入<code>actions</code>，选<code>Build OpenWrt</code>任务，单击<code>Run workflow</code>，可以选择分支和是否启用<code>SSH</code>，默认是<code>false</code>，改成<code>true</code>就可以使用<code>SSH</code>功能，最后运行即可。</p>
<p><img src="https://cdn.elstec.cn/40/1.png" alt="" loading="lazy" decoding="async"></p>
<p style="display:inline;">希望本文可以帮到你</p>
<p><img src="https://cdn.elstec.cn/images/file_1016567.jpg" width="55px" height="55px" style="display: inline;" decoding="async" loading="lazy"></p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20210821#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20210821</wfw:commentRss>
</item>
<item>
<title>关于编译OpenWrt固件中找不到luci-app-ssr-plus更新说明</title>
<link>https://elstec.cn/archives/202108212</link>
<guid>https://elstec.cn/archives/202108212</guid>
<pubDate>Sat, 21 Aug 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[
        
            教程类文章具有时效性，看清楚发布日期，超过一定日子文章内容可能失效，仅仅作为参考。
        
    

云编译
云编译用户看上一篇更新说明：关于使用GitHub Actions云编译LEDE固件更新说明
本地编译用户开始
git clone https://github.com/coolsnowwolf/lede
cd lede

修改feed...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<div class="warn">
        <strong>
            教程类文章具有时效性，看清楚发布日期，超过一定日子文章内容可能失效，仅仅作为参考。
        </strong>
    </div>

<h2 id="_1">云编译</h2>
<p>云编译用户看上一篇更新说明：<a href="https://elstec.cn/archives/20210821/">关于使用GitHub Actions云编译LEDE固件更新说明</a></p>
<h2 id="_2">本地编译用户开始</h2>
<pre><code class="language-bash">git clone https://github.com/coolsnowwolf/lede
cd lede
</code></pre>
<p>修改<code>feeds.conf.default</code>文件 <strong>（以下是2021年8月21日的文件）</strong></p>
<pre><code>src-git packages https://github.com/coolsnowwolf/packages
src-git luci https://github.com/coolsnowwolf/luci
src-git routing https://git.openwrt.org/feed/routing.git
src-git telephony https://git.openwrt.org/feed/telephony.git
#src-git video https://github.com/openwrt/video.git
#src-git targets https://github.com/openwrt/targets.git
#src-git oldpackages http://git.openwrt.org/packages.git
#src-link custom /usr/src/openwrt/custom-feed
</code></pre>
<p>可以发现并没有<code>XXRPlus</code>或<code>PassWall</code>，自行添加<code>XXRPlus</code>或<code>PassWall</code>。</p>
<pre><code>src-git helloworld https://github.com/fw876/helloworld
</code></pre>
<pre><code>src-git passwall https://github.com/xiaorouji/openwrt-passwall
</code></pre>
<p>最后保存。</p>
<p>我的博客即将同步至腾讯云+社区，邀请大家一同入驻：https://cloud.tencent.com/developer/support-plan?invite_code=b70aijpftod5</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/202108212#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/202108212</wfw:commentRss>
</item>
<item>
<title>敦煌-西宁反向6日游</title>
<link>https://elstec.cn/archives/20210815</link>
<guid>https://elstec.cn/archives/20210815</guid>
<pubDate>Sun, 15 Aug 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[




完整的路线不是我定的，全程跟着亲戚。首先好像是找了一个本地旅行社，加我大概4个人算是开了一个小团，一个本地人兼驾驶员兼（半吊子）导游。机票买的萧山→敦煌，所以只能制定一条反向旅游线路。本来应该是西宁→敦煌。



7月8日
7月9日
7月10日
7月11日




敦煌
敦煌
大柴旦
茶卡


莫高窟
阳关遗址
翡翠湖
青海湖


鸣沙山月牙泉
石油小镇
茶卡盐湖
倒淌河


沙州夜市
...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<div id="aplayer">
<meting-js
server="netease"
type="song"
id="346089"
autoplay="false">
</meting-js>
</div>

<p>完整的路线不是我定的，全程跟着亲戚。首先好像是找了一个本地旅行社，加我大概4个人算是开了一个小团，一个本地人兼驾驶员兼（半吊子）导游。机票买的<code>萧山→敦煌</code>，所以只能制定一条反向旅游线路。本来应该是<code>西宁→敦煌</code>。</p>
<table>
<thead>
<tr>
<th style="text-align: center;">7月8日</th>
<th style="text-align: center;">7月9日</th>
<th style="text-align: center;">7月10日</th>
<th style="text-align: center;">7月11日</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">敦煌</td>
<td style="text-align: center;">敦煌</td>
<td style="text-align: center;">大柴旦</td>
<td style="text-align: center;">茶卡</td>
</tr>
<tr>
<td style="text-align: center;">莫高窟</td>
<td style="text-align: center;">阳关遗址</td>
<td style="text-align: center;">翡翠湖</td>
<td style="text-align: center;">青海湖</td>
</tr>
<tr>
<td style="text-align: center;">鸣沙山月牙泉</td>
<td style="text-align: center;">石油小镇</td>
<td style="text-align: center;">茶卡盐湖</td>
<td style="text-align: center;">倒淌河</td>
</tr>
<tr>
<td style="text-align: center;">沙州夜市</td>
<td style="text-align: center;">青海雅丹</td>
<td style="text-align: center;">茶卡</td>
<td style="text-align: center;">日月山</td>
</tr>
<tr>
<td style="text-align: center;">敦煌市</td>
<td style="text-align: center;">大柴旦</td>
<td style="text-align: center;"></td>
<td style="text-align: center;">塔尔寺</td>
</tr>
<tr>
<td style="text-align: center;"></td>
<td style="text-align: center;"></td>
<td style="text-align: center;"></td>
<td style="text-align: center;">西宁</td>
</tr>
</tbody>
</table>
<p>计划是7月7日-7月12日，6天。去程买的7号早上06:10，也就是我要3点起来，4点多出发走高速到萧山机场（具体时间我也忘记了），中途要在咸阳转机最后才到敦煌。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/1.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/2.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<p style="display:inline;">上午的航班08:35就到咸阳机场，但是下午转机的班次在15:10，要在机场等大半天真无语到了0，太无聊了md</p>
<p><img src="https://cdn.elstec.cn/images/file_1016383.jpg" width="55px" height="55px" style="display: inline;" decoding="async" loading="lazy"></p>
<p>晚上入住了一个不知名的商务酒店，两个标间加起来一晚800+，反正我个人觉得并不划算，但好像那边物价都比较高，买了一碗炒青菜根花了<code>32￥</code>，炒的味道还可以，就是贵。</p>
<figure><img src="https://cdn.elstec.cn/39/3.jpg" alt="晚上9点左右" loading="lazy" decoding="async"><figcaption>晚上9点左右</figcaption></figure>

<p>其他就是太阳落山时间太晚了，不看手机都不知道已经7，8点多了（捂脸）。</p>
<p>7月8日正式开始旅游，上午去了必去景区<code>莫高窟</code>，由于我不太拍照就照片超级少。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/4.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/5.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/6.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/7.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<p>下午去的<code>鸣沙山月牙泉</code>，出来已经晚上7点多，太阳还是好晒，但晚上真的太晚了夜市才探索了一半，还有一半超级好没去就感觉挺亏的。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/8.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/9.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/10.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/11.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/12.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/13.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<p>拍的第一张给我有一种<code>macOS Mojave</code>的错觉，后面也坐了骆驼，动物毛发都很顺摸着很舒服，坐着的体验就差强人意了，风景还是超级好的，但是出去已经很晚了，大概19:30。</p>
<p>9号的日程里面，<code>石油小镇</code>感觉没意思就没有去，天气不是很好，拍照也没怎么拍。</p>
<p><img src="https://cdn.elstec.cn/39/14.jpg" alt="" loading="lazy" decoding="async"></p>
<p><code>阳关遗址</code>路上拍的唐僧西行。</p>
<p><img src="https://cdn.elstec.cn/39/15.jpg" alt="" loading="lazy" decoding="async"></p>
<p>下午快到<code>雅丹地貌</code>的时候已经开始下小雨了，结果也没怎么看，随便拍了几张照片就回酒店了。</p>
<p>10号主要就是去两个地方，<code>翡翠湖</code>和<code>茶卡盐湖</code>，但是由于当天晚上下雨了，早上去的<code>翡翠湖</code>路上就算坐在车里也很难受，但好在门票免费，风景超好，云也很好看，不过鞋子要刷一下了，全是泥。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/16.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/17.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<p>下午就去了<code>茶卡盐湖</code>，还好带了一件冲锋衣，风真的好大，温度也很低。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/18.jpg" alt="路上拍的" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/19.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<p><code>茶卡盐湖</code>里面我们选择做观光小火车。酒店住的汉庭，前台还有奶茶服务，买了一杯黑糖啥的，齁甜。</p>
<p>11号就主要是<code>青海湖</code>以及<code>塔尔寺</code>，其他都选择不去了。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/20.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/21.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<p>路上手机随便拍了两张，西北地区风景真的好，经济也是真的不发达，厕所也是年久失修。</p>
<p>到了<code>青海湖景区</code>，先是买了观光车到轮船处，买了船票，坐船用时大概1个小时，<code>青海湖</code>的景色那是真的很震撼了。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/39/22.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/39/23.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<p><code>青海湖</code>回来的中午找了一家清真饭馆买了一碗牛肉面，给脸了，就一片牛肉，吃完上厕所还被收1块md</p>
<p><img src="https://cdn.elstec.cn/39/24.jpg" alt="" loading="lazy" decoding="async"></p>
<p><code>塔尔寺</code>我没拍照，除了大了一点，看起来就跟普通寺庙没啥区别。</p>
<p>最后一天坐国航的<code>CA1910</code>，航班延误了3个半小时，成功登机之后还没有空调，整一个桑拿飞机，不过一部电影消磨时光非常好。</p>
<p><img src="https://cdn.elstec.cn/39/25.jpg" alt="" loading="lazy" decoding="async"></p>
<p>下飞机从萧山机场走高速大概50分钟到家。</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20210815#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20210815</wfw:commentRss>
</item>
<item>
<title>自提100周年纪念品（邮折和纪念封）</title>
<link>https://elstec.cn/archives/20210801</link>
<guid>https://elstec.cn/archives/20210801</guid>
<pubDate>Sun, 01 Aug 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[发这篇文的时候已经是有点晚了，100周年纪念品预售时间是2021年6月24日上午9点-6月28日下午6点，自提开始时间是2021年7月23日下午5点。







我买了一个邮折和一个纪念封，早知道纪念封可以买3份就全买了（BAD），不过有一说一设计和做工都还不错。







由于台风影响周五并没有去提货，周六去被告知集邮公司双休md，顶着台风白跑一趟。
我就准备周一自提，周一刚好麦当劳是麦...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>发这篇文的时候已经是有点晚了，100周年纪念品预售时间是<code>2021年6月24日上午9点-6月28日下午6点</code>，自提开始时间是<code>2021年7月23日下午5点</code>。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/38/3.jpg" alt="" loading="eager" decoding="async" fetchpriority="high"></figure>
<figure><img src="https://cdn.elstec.cn/38/9.png" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<p>我买了一个邮折和一个纪念封，早知道纪念封可以买3份就全买了（BAD），不过有一说一设计和做工都还不错。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/38/1.jpg" alt="下暴雨曹娥江的水直接漫出来（习惯性打钱塘江xd）" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/38/2.png" alt="我还在台风影响范围内哭了" loading="lazy" decoding="async"></figure>
</div>
</div>

<p>由于台风影响周五并没有去提货，周六去被告知集邮公司双休md，顶着台风白跑一趟。</p>
<p>我就准备周一自提，周一刚好麦当劳是麦麦脆汁鸡的活动，微信支付宝各领一张券下两次单，免费的东西必须要领的hhh。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/38/4.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/38/5.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/38/6.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<p>最后是上手，手感非常不错，加6块买的壳还是很好的。30块这个是有一个壳，24块只有邮票，就像图二，图一就有一个壳，不过刚好下雨邮票没坏就行。</p>
<div class="photoset">
<div class="photos">
<figure><img src="https://cdn.elstec.cn/38/7-2.jpg" alt="" loading="lazy" decoding="async"></figure>
<figure><img src="https://cdn.elstec.cn/38/8-2.jpg" alt="" loading="lazy" decoding="async"></figure>
</div>
</div>

<p>其实买一个也没啥不好的，主要还是做纪念，也没人会把这个拿去用，这辈子可能也遇不到第二个100年了。</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20210801#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20210801</wfw:commentRss>
</item>
<item>
<title>使用CloudFlare Argo Tunnel在无公网环境下内网穿透（打洞）</title>
<link>https://elstec.cn/archives/20210628</link>
<guid>https://elstec.cn/archives/20210628</guid>
<pubDate>Mon, 28 Jun 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[首先下载Cloudflared，我是Windows，其他平台都差不多。
https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation

Windows下我用的PowerShell 7.1.3，首先需要登录cloudflare账户，会自动打开默认浏览器登...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>首先下载<code>Cloudflared</code>，我是Windows，其他平台都差不多。</p>
<pre><code>https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation
</code></pre>
<p>Windows下我用的<code>PowerShell 7.1.3</code>，首先需要登录cloudflare账户，会自动打开默认浏览器登录。不建议用随机分配的域名，每次重启软件都会再次随机域名。</p>
<pre><code class="language-bash">cloudflared login
</code></pre>
<p>浏览器中选择tunnel绑定那个域名，点击授权。首次运行<code>cloudflared</code>之后会在同目录下生成<code>config.yml</code>，运行多条隧道需要配置该文件。</p>
<p>比方运行单条隧道，跳过<code>config.yml</code>。</p>
<pre><code class="language-bash">cloudflared tunnel --hostname 访问的域名 --url IP:端口
</code></pre>
<p>配合自选IP可以达到速度最大化。配置文件开多条隧道试了一下一直失败，但是多开几个cmd或者powershell就可以成功。（bad）内网服务不仅限于web，也可以ssh等。</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20210628#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20210628</wfw:commentRss>
</item>
<item>
<title>Grafana+Prometheus监控服务器</title>
<link>https://elstec.cn/archives/20210620</link>
<guid>https://elstec.cn/archives/20210620</guid>
<pubDate>Sun, 20 Jun 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[环境：Centos7，Supervisor持久化运行

下载以及安装Grafana，需要放通3000端口用于Grafana的网页后台控制。（IP:3000）
wget https://dl.grafana.com/oss/release/grafana-8.0.3-1.x86_64.rpm
sudo yum install grafana-8.0.3-1.x86_64.rpm

用.deb或.rp...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<div class="notice-box">环境：Centos7，Supervisor持久化运行</div>

<p>下载以及安装Grafana，需要放通<code>3000</code>端口用于Grafana的网页后台控制。<em>（IP:3000）</em></p>
<pre><code class="language-bash">wget https://dl.grafana.com/oss/release/grafana-8.0.3-1.x86_64.rpm
sudo yum install grafana-8.0.3-1.x86_64.rpm
</code></pre>
<p>用<code>.deb</code>或<code>.rpm</code>安装完成之后可以用<code>systemd</code>或<code>init.d</code>控制。</p>
<pre><code class="language-bash">sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl status grafana-server
</code></pre>
<p>登入后台，默认用户名密码<code>admin</code>，首次登录会被要求强制修改密码。</p>
<p>安装Prometheus，找到最新版，截至目前是2.28.0 <code>https://github.com/prometheus/prometheus/releases/</code> <em>（外网访问需要放通9090端口）</em></p>
<pre><code class="language-bash">wget https://github.com/prometheus/prometheus/releases/download/v2.28.0-rc.0/prometheus-2.28.0-rc.0.linux-amd64.tar.gz
tar -xzvf prometheus-2.28.0-rc.0.linux-amd64.tar.gz
cd prometheus-2.28.0-rc.0.linux-amd64
</code></pre>
<p>编辑<code>prometheus.yml</code>文件，官方默认配置文件如下，默认监控Prometheus自身。</p>
<pre><code class="language-yaml"># my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - &quot;first_rules.yml&quot;
  # - &quot;second_rules.yml&quot;

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label <code>job=</code> to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']
</code></pre>
<pre><code class="language-bash">#全局时间间隔
scrape_interval: 15s 
#规则扫描时间间隔
evaluation_interval: 15s 
#超时时间
scrape_timeout: 5s 
</code></pre>
<p>更详细的可以参考官方文档：<a href="https://prometheus.io/docs/prometheus/latest/configuration/configuration/">https://prometheus.io/docs/prometheus/latest/configuration/configuration/</a></p>
<pre><code class="language-bash">./prometheus
</code></pre>
<p>网页后台：<code>IP:9090</code>可以看到自身的状态是<code>UP</code>。</p>
<p>node_exporter就是获取宿主机的资源信息，CPU占用，内存占用等</p>
<p>安装node_exporter，找到最新版，截至目前是1.1.2 <br />
<code>https://github.com/prometheus/node_exporter/releases/</code>  <em>（外网访问需要放通9100端口）</em></p>
<pre><code class="language-bash">wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
tar -xzvf node_exporter-1.1.2.linux-amd64.tar.gz
cd node_exporter-1.1.2.linux-amd64
./node_exporter
</code></pre>
<p>Prometheus创建job获取node_exporter的数据，<code>job_name</code>可以随便取。修改yml文件一定要严格注意格式（缩进）。</p>
<pre><code class="language-yaml">  - job_name: 'exporter'
    static_configs:
    - targets: ['localhost:9100']
</code></pre>
<p>然后重启Prometheus，网页后台可以看到这个job上线了。</p>
<p>重新回到Grafana网页后台，可以自己创建Dashboard，也可以用现成的。进入官方库：<a href="https://grafana.com/grafana/dashboards">https://grafana.com/grafana/dashboards</a></p>
<p>也可以用这个：<a href="https://grafana.com/grafana/dashboards/8919">https://grafana.com/grafana/dashboards/8919</a></p>
<p><img src="https://cdn.elstec.cn/37/1.png" alt="" loading="lazy" decoding="async"></p>
<p>复制数字，回到后台，点左侧加号然后<code>Import</code>，输入数字ID点<code>Load</code>，<code>VictoriaMetrics</code>选择<code>Prometheus</code>，最后<code>Import</code>即可。</p>
<p><img src="https://cdn.elstec.cn/37/2.png" alt="" loading="lazy" decoding="async"></p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20210620#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20210620</wfw:commentRss>
</item>
<item>
<title>Valine自定义表情包</title>
<link>https://elstec.cn/archives/20210615</link>
<guid>https://elstec.cn/archives/20210615</guid>
<pubDate>Tue, 15 Jun 2021 00:00:00 +0800</pubDate>
<dc:creator>jcjyxjs</dc:creator>
<description><![CDATA[获取最新版本Valine，截至目前为止最新版本是1.4.14，格式化与否都可。
https://unpkg.com/valine/dist/Valine.min.js

搜索sina字段。
                function(e, t, n) {
                    &quot;use strict&quot;;
                    t.__e...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>获取最新版本<code>Valine</code>，截至目前为止最新版本是<code>1.4.14</code>，格式化与否都可。</p>
<pre><code>https://unpkg.com/valine/dist/Valine.min.js
</code></pre>
<p>搜索<code>sina</code>字段。</p>
<pre><code class="language-javascript">                function(e, t, n) {
                    &quot;use strict&quot;;
                    t.__esModule = !0;
                    t.DEFAULT_EMOJI_CDN = &quot;//img.t.sinajs.cn/t4/appstyle/expression/ext/normal/&quot;,
                        t.DB_NAME = &quot;Comment&quot;,
                        t.defaultConfig = {
                            lang: &quot;zh-CN&quot;,
                            langMode: null,
                            appId: &quot;&quot;,
                            appKey: &quot;&quot;,
                            clazzName: &quot;Comment&quot;,
                            meta: [&quot;nick&quot;, &quot;mail&quot;, &quot;link&quot;],
                            path: location.pathname,
                            placeholder: &quot;Just Go Go&quot;,
                            pageSize: 10,
                            recordIP: !0,
                            serverURLs: &quot;&quot;,
                            visitor: !1,
                            emojiCDN: &quot;&quot;,
                            emojiMaps: void 0,
                            enableQQ: !1,
                            requiredFields: []
                        },
                        t.defaultMeta = [&quot;nick&quot;, &quot;mail&quot;, &quot;link&quot;],
                        t.QQCacheKey = &quot;_v_Cache_Q&quot;,
                        t.MetaCacheKey = &quot;_v_Cache_Meta&quot;,
                        t.RandomStr = (Date.now() + Math.round(1e3 * Math.random())).toString(32),
                        t.VERSION = &quot;1.4.14&quot;
                },
</code></pre>
<p>修改其中的<code>emojiCDN</code>和<code>emojiMaps</code>字段内容。我选择<code>GitHub+jsdelivr</code>高配置[doge]，<code>emojiCDN</code>是域名，<code>emojiMaps</code>是路径，合起来可以请求到一张图片。例：</p>
<pre><code class="language-javaScript">//img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/2018new_qinqin_thumb.png
</code></pre>
<p>其中<code>img.t.sinajs.cn/t4/appstyle/expression/ext/normal/</code>就是<code>emojiCDN</code>，<code>2c/2018new_qinqin_thumb.png</code>就是<code>emojiMaps</code>。其中<code>emojiMaps</code>部分需要按照格式，例：</p>
<pre><code class="language-javascript">s2: &quot;alu/2.png&quot;,//表情包名称无空格可以不加引号
&quot;sss 2&quot;: &quot;alu/2.png&quot;//表情包名称含空格需加引号
</code></pre>
<p>发一条评论试试吧~</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://elstec.cn/archives/20210615#comments</comments>
<wfw:commentRss>https://elstec.cn/feed/archives/20210615</wfw:commentRss>
</item>
</channel>
</rss>