<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on Colinx Blog</title><link>/tags/linux/</link><description>Recent content in Linux on Colinx Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 13 Oct 2024 00:00:00 +0000</lastBuildDate><atom:link href="/tags/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>来谈谈日志集中管理方案 - syslog 是你的好伙伴</title><link>/posts/%E6%9D%A5%E8%B0%88%E8%B0%88%E6%97%A5%E5%BF%97%E9%9B%86%E4%B8%AD%E7%AE%A1%E7%90%86%E6%96%B9%E6%A1%88-syslog%E6%98%AF%E4%BD%A0%E7%9A%84%E5%A5%BD%E4%BC%99%E4%BC%B4/</link><pubDate>Sun, 13 Oct 2024 00:00:00 +0000</pubDate><guid>/posts/%E6%9D%A5%E8%B0%88%E8%B0%88%E6%97%A5%E5%BF%97%E9%9B%86%E4%B8%AD%E7%AE%A1%E7%90%86%E6%96%B9%E6%A1%88-syslog%E6%98%AF%E4%BD%A0%E7%9A%84%E5%A5%BD%E4%BC%99%E4%BC%B4/</guid><description>
&lt;p>身为一个数码宅，家里总是会有越来越多的数码设备，智能化的设备多起来，总是难免会遇到各种各样的问题，排查问题的时候日志就很重要了，对于一些偶发的 case, 比如偶发网络卡顿，能够看到足够完整清晰的日志，就很方便了。&lt;/p>
&lt;p>对于一些低功耗设备，比如路由器，其磁盘资源很紧张，日志通常不会保存很久。这个时候要排查一些偶发的持续时间长的小 bug 就很头痛了。好在 openwrt 原生就支持将日志通过 syslog 协议发送到远程服务器。不过看了一圈，发送是发送过去了，但是看日志还得命令行一个个看，要想有个方便的地方看的话就得上 ELK 那一套非常繁琐且吃资源的那一套，我的需求是这样的：&lt;/p>
&lt;ul>
&lt;li>免费，可以持续使用&lt;/li>
&lt;li>能够通过 syslog 协议收集日志&lt;/li>
&lt;li>能够自部署最佳，但是不希望是 ELK 那种繁琐且非常消耗资源的&lt;/li>
&lt;li>有个 web 界面能方便的查找日志&lt;/li>
&lt;li>能够配置监控，那样的话如果设备有 fatal 日志我可以立即知道&lt;/li>
&lt;/ul>
&lt;p>搜寻了一番，发现有个 datalust 公司出的 seq 看起来挺不错，在自己服务器上部署了一套，完美符合我的需求，分享一下。&lt;/p>
&lt;p>seq 不仅支持 syslog, 还支持程序主动上报、采集容器日志等很多功能，这里只主要围绕 syslog, 收集各种终端设备日志做介绍&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128864.png" alt="Pasted image 20241013170403">&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128865.png" alt="Pasted image 20241013170340">&lt;/p>
&lt;h2 id="安装通过-docker-compose-部署-seq">
安装：通过 docker compose 部署 seq
&lt;a href="#%e5%ae%89%e8%a3%85%e9%80%9a%e8%bf%87-docker-compose-%e9%83%a8%e7%bd%b2-seq" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>首先生成下默认密码，这里需要通过程序自身的指令生成明文密码对应的密文才行。比如我这里指定初始密码的明文为&lt;code>initP@ss&lt;/code>, 运行这个指令，就会输出对应的密文，这个待会部署的时候需要使用&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">➜ echo &lt;span style="color:#e6db74">&amp;#39;initP@ss&amp;#39;&lt;/span> | sudo docker run --rm -i datalust/seq config hash
QE6k2bZLWkh7BwWYRNsG3h9sZPcLskSLKJGii4mvU0rsDyN0/UqW1TwEZp43O09wvOCjbOgswZxHX7FeNo05cfiv3KkB8/q/Msj8nlXL4TGd
&lt;/code>&lt;/pre>&lt;/div>&lt;p>之后通过 docker compose 进行部署，下面为 compose 文件示例&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="color:#f92672">services&lt;/span>:
&lt;span style="color:#f92672">seq-input-syslog&lt;/span>:
&lt;span style="color:#f92672">image&lt;/span>: &lt;span style="color:#ae81ff">datalust/seq-input-syslog:latest&lt;/span>
&lt;span style="color:#f92672">container_name&lt;/span>: &lt;span style="color:#ae81ff">seq_syslog_input&lt;/span>
&lt;span style="color:#f92672">depends_on&lt;/span>:
- &lt;span style="color:#ae81ff">seq&lt;/span>
&lt;span style="color:#f92672">ports&lt;/span>:
- &lt;span style="color:#e6db74">&amp;#34;20014:514/udp&amp;#34;&lt;/span> &lt;span style="color:#75715e"># 接收 syslog 协议请求的端口，这里配置的是 20014, 可以自定义，后面需要用到&lt;/span>
&lt;span style="color:#f92672">environment&lt;/span>:
&lt;span style="color:#f92672">SEQ_ADDRESS&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;http://seq:5341&amp;#34;&lt;/span> &lt;span style="color:#75715e"># 要转发到主程序进行处理，端口为默认的 5341, 不用改&lt;/span>
&lt;span style="color:#f92672">restart&lt;/span>: &lt;span style="color:#ae81ff">unless-stopped&lt;/span>
&lt;span style="color:#f92672">seq&lt;/span>:
&lt;span style="color:#f92672">image&lt;/span>: &lt;span style="color:#ae81ff">datalust/seq:latest&lt;/span>
&lt;span style="color:#f92672">container_name&lt;/span>: &lt;span style="color:#ae81ff">seq_log&lt;/span>
&lt;span style="color:#f92672">ports&lt;/span>:
- &lt;span style="color:#e6db74">&amp;#34;20054:80&amp;#34;&lt;/span> &lt;span style="color:#75715e"># web ui&lt;/span>
&lt;span style="color:#f92672">environment&lt;/span>:
&lt;span style="color:#f92672">ACCEPT_EULA&lt;/span>: &lt;span style="color:#66d9ef">Y&lt;/span>
&lt;span style="color:#f92672">SEQ_FIRSTRUN_ADMINPASSWORDHASH&lt;/span>: &lt;span style="color:#ae81ff">QE6k2bZLWkh7BwWYRNsG3h9sZPcLskSLKJGii4mvU0rsDyN0/UqW1TwEZp43O09wvOCjbOgswZxHX7FeNo05cfiv3KkB8/q/Msj8nlXL4TGd&lt;/span> &lt;span style="color:#75715e"># 这里填写刚生成的密文&lt;/span>
&lt;span style="color:#f92672">restart&lt;/span>: &lt;span style="color:#ae81ff">unless-stopped&lt;/span>
&lt;span style="color:#f92672">volumes&lt;/span>:
- &lt;span style="color:#ae81ff">/data/seq-data:/data&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>之后执行 sudo docker compose up -d , 顺利的话，在配置的 web ui 端口，就可以看到管理台了。默认账户为 admin, 密码为刚才设置的密码的原始明文。&lt;/p>
&lt;h2 id="使用syslog-配置">
使用：syslog 配置
&lt;a href="#%e4%bd%bf%e7%94%a8syslog-%e9%85%8d%e7%bd%ae" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>基本上所有 Linux-base 系统都支持将系统日志通过 syslog 协议发送到远端服务器。我手头主要的 openwrt 路由器、运行 truenas 系统的 nas、树莓派上跑的 debian, 以及其他 linux 云服务器都可以无缝接入，这里简单介绍下&lt;/p>
&lt;h3 id="openwrt-配置远程-log">
openwrt 配置远程 log
&lt;a href="#openwrt-%e9%85%8d%e7%bd%ae%e8%bf%9c%e7%a8%8b-log" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>在 system -&amp;gt; system 菜单下，有个 logging 的 tab, 里面配置好服务器 ip、端口就可以使用了。协议记得选 udp&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128867.png" alt="Pasted image 20241013165852">&lt;/p>
&lt;h3 id="truenas-配置远程-log">
truenas 配置远程 log
&lt;a href="#truenas-%e9%85%8d%e7%bd%ae%e8%bf%9c%e7%a8%8b-log" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>在 system setting -&amp;gt; advaned -&amp;gt; syslog 菜单下，配置远程服务器地址和端口，协议选择 udp, 保存就可以了&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128868.png" alt="Pasted image 20241013171725">&lt;/p>
&lt;h3 id="linux-服务器配置远程-log">
linux 服务器配置远程 log
&lt;a href="#linux-%e6%9c%8d%e5%8a%a1%e5%99%a8%e9%85%8d%e7%bd%ae%e8%bf%9c%e7%a8%8b-log" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>大多数 Linux 发行版已经预装了 rsyslog。可以通过以下命令检查是否已安装：
&lt;code>rsyslogd -version&lt;/code>
如果未安装，可以使用以下命令安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">&lt;span style="color:#75715e"># Debian/Ubuntu:&lt;/span>
sudo apt update
sudo apt install rsyslog
&lt;span style="color:#75715e"># CentOS/RHEL:&lt;/span>
sudo yum install rsyslog
&lt;/code>&lt;/pre>&lt;/div>&lt;p>步骤 2：配置客户端的 rsyslog
编辑 rsyslog 配置文件：打开配置文件进行编辑，通常位于 &lt;code>/etc/rsyslog.conf&lt;/code> 或 &lt;code>/etc/rsyslog.d/&lt;/code> 目录下。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">sudo nano /etc/rsyslog.conf
&lt;/code>&lt;/pre>&lt;/div>&lt;p>添加远程服务器配置：在文件末尾，添加以下行以指定远程服务器的 IP 地址和端口（默认是 UDP 514 或 TCP 514）：&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-conf" data-lang="conf">*.* @remote-server-ip:514 # 使用 UDP
*.* @@remote-server-ip:514 # 使用 TCP
&lt;/code>&lt;/pre>&lt;p>这里我们需要使用 udp 协议的。
将 remote-server-ip 替换为远程 Syslog 服务器的实际 IP 地址或者域名，保存并关闭文件。&lt;/p>
&lt;p>比如&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-conf" data-lang="conf">*.* @syslog.myserver.com:20014
&lt;/code>&lt;/pre>&lt;p>步骤 3：重启 rsyslog 服务
在进行更改后，重启 rsyslog 服务以应用新配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">sudo systemctl restart rsyslog
&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="其他配置">
其他配置
&lt;a href="#%e5%85%b6%e4%bb%96%e9%85%8d%e7%bd%ae" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;h3 id="配置日志定期清理">
配置日志定期清理
&lt;a href="#%e9%85%8d%e7%bd%ae%e6%97%a5%e5%bf%97%e5%ae%9a%e6%9c%9f%e6%b8%85%e7%90%86" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>默认情况下，是没有配置日志清理规则的，时间一长服务器硬盘可能直接满了，所以这里一定不要忘记配置自动清理。在菜单里的 retention 可以配置过多少天删除&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128869.png" alt="Pasted image 20241013170659">&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128870.png" alt="Pasted image 20241013170654">&lt;/p>
&lt;h3 id="配置告警通知">
配置告警通知
&lt;a href="#%e9%85%8d%e7%bd%ae%e5%91%8a%e8%ad%a6%e9%80%9a%e7%9f%a5" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>各种通知渠道的支持是通过插件形式提供的，在 设置里可以自行安装。可以支持 email、http webhook, 钉钉机器人、telegram 机器人等多种渠道。&lt;/p>
&lt;p>&lt;a href="https://www.nuget.org/packages?q=Tags%3A%22seq-app%22">插件市场链接&lt;/a>&lt;/p>
&lt;hr></description></item><item><title>解决安装 Plex 时无法进入安装页面的问题</title><link>/posts/%E8%A7%A3%E5%86%B3%E5%AE%89%E8%A3%85plex%E6%97%B6%E6%97%A0%E6%B3%95%E8%BF%9B%E5%85%A5%E5%AE%89%E8%A3%85%E9%A1%B5%E9%9D%A2%E7%9A%84%E9%97%AE%E9%A2%98/</link><pubDate>Sun, 31 Dec 2023 00:00:00 +0000</pubDate><guid>/posts/%E8%A7%A3%E5%86%B3%E5%AE%89%E8%A3%85plex%E6%97%B6%E6%97%A0%E6%B3%95%E8%BF%9B%E5%85%A5%E5%AE%89%E8%A3%85%E9%A1%B5%E9%9D%A2%E7%9A%84%E9%97%AE%E9%A2%98/</guid><description>
&lt;p>Plex 是一款非常好用的影音库，可自托管，支持 Web, 颜值在线。近期在部署 Plex 的时候死活找不到安装初始化的页面，看了几遍安装文档和官网的流程，都没找到问题在哪。后来 Google 了一圈，才意识到自己这次不是局域网环境部署，Plex 为了安全性考虑，每个新实例的安装部署页面是只对局域网访问的 IP 开放的，甚至不是全部局域网 IP, 只有本机 (Localhost). 这里简单记录下排查和解决的流程，其他朋友在这块可以少踩些坑。&lt;/p>
&lt;p>问题页面如图所示，正常来说新 Plex 服务器是要设定电影资料库，电视节目资料库的文件夹位置，绑定 Plex 账号等。官方文档和其他人的流程都大致如此。但是我访问这个新 Plex 实例对应的初始化 URL, 进来怎么也找不到配置文件夹位置的入口。&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202312312254779.png" alt="Pasted image 20221216213737">
后来在这两个地方的资料才发现一些端倪，人家一般都是在 NAS 本机安装，然后访问本机地址进入初始化页面，但是我这个就不是。&lt;/p>
&lt;p>&lt;a href="https://askubuntu.com/questions/1321062/plex-installation-doesnt-give-option-to-setup-server">https://askubuntu.com/questions/1321062/plex-installation-doesnt-give-option-to-setup-server&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://www.linode.com/docs/guides/install-plex-media-server-on-ubuntu-18-04/#configuring-plex-media-server-on-ubuntu-1804">https://www.linode.com/docs/guides/install-plex-media-server-on-ubuntu-18-04/#configuring-plex-media-server-on-ubuntu-1804&lt;/a>&lt;/p>
&lt;p>知道了问题所在，解决方案还是比较简单的，那就是 SSH 连接使用端口转发，将目标服务器 Plex 网页服务的端口，映射到本机的一个端口。这样访问本机的这个端口，就能访问到 Plex 服务了，而对于 Plex 服务器的 Web 端来说，我们就是访问的本机地址。&lt;/p>
&lt;p>访问 http://localhost:8888/web/ 即可看到 Plex 的页面。如果没有带上后面的&lt;code>web&lt;/code> 后缀的话，直接访问可能会显示一个 XML 页面。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">ssh user@192.0.2.1 -L 8888:localhost:32400
&lt;/code>&lt;/pre>&lt;/div>&lt;p>上面这句话就是 ssh 连接到 192.0.2.1 这个远端，然后在本地，即 ssh 客户端的机器，监听 8888 端口，本地所有访问 8888 端口的请求都会被重定向，等同为远端机器访问自身的 32400 端口，即为上文提到的，部署 plex 服务的端口&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202312312254781.png" alt="Pasted image 20221216213514">
如下是正常的初始化页面：
&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202312312254782.png" alt="Pasted image 20221216214020">
有些情况下可能会遇到需要额外执行关联操作的情况，不过问题不大&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202312312254783.png" alt="Pasted image 20221216214456">
&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202312312254784.png" alt="Pasted image 20221216214521">&lt;/p>
&lt;p>配置成功后就可以正常享受影音资源啦 😎&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202312312254785.png" alt="Pasted image 20231231225353">&lt;/p></description></item><item><title>关于双语字幕这件小事</title><link>/posts/%E5%85%B3%E4%BA%8E%E5%8F%8C%E8%AF%AD%E5%AD%97%E5%B9%95%E8%BF%99%E4%BB%B6%E5%B0%8F%E4%BA%8B/</link><pubDate>Sun, 10 Sep 2023 00:00:00 +0000</pubDate><guid>/posts/%E5%85%B3%E4%BA%8E%E5%8F%8C%E8%AF%AD%E5%AD%97%E5%B9%95%E8%BF%99%E4%BB%B6%E5%B0%8F%E4%BA%8B/</guid><description>
&lt;p>今天这篇文章来探讨下双语字幕这件小事。&lt;/p>
&lt;p>首先对于一部外语影片或剧集，原生的英文字幕肯定是能够轻松获得的，但是匹配、高质量的翻译字幕缺并不总是能找到。这里分享一些我在寻找和手动 DIY 双语字幕的一些经验和想法，我自己也编写了一些工具，有同样需求的朋友也可以快速上手:D&lt;/p>
&lt;h2 id="1-考虑寻找现成的高质量字幕">
1. 考虑寻找现成的高质量字幕
&lt;a href="#1-%e8%80%83%e8%99%91%e5%af%bb%e6%89%be%e7%8e%b0%e6%88%90%e7%9a%84%e9%ab%98%e8%b4%a8%e9%87%8f%e5%ad%97%e5%b9%95" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>很多大火的剧集都会有字幕组第一时间跟进字幕制作和资源的发布，我们可以在各种 BT, PT 站点找到这些字幕组打包好的自带字幕的资源，或者也可以在第三方的字幕站点上寻找合适的字幕。&lt;/p>
&lt;p>这里安利一个油猴脚本：&lt;a href="https://greasyfork.org/zh-CN/scripts/329484-%E8%B1%86%E7%93%A3%E8%B5%84%E6%BA%90%E4%B8%8B%E8%BD%BD%E5%A4%A7%E5%B8%88-1%E7%A7%92%E6%90%9E%E5%AE%9A%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1-%E9%9F%B3%E4%B9%90-%E5%9B%BE%E4%B9%A6%E4%B8%8B%E8%BD%BD">豆瓣资源下载大师&lt;/a>，可以在豆瓣的影视详情页右侧显示有资源的站点，非常方便&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202309102054802.png" alt="Pasted image 20230910152405">
效果如下图所示&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202309102054800.png" alt="image-20220509144533549">&lt;/p>
&lt;p>中文字幕推荐 &lt;a href="http://zimuku.org/">字幕库&lt;/a>, 大部分字幕都可以在这里找到。其他语言可以到 &lt;a href="https://www.opensubtitles.org/zh">OpentSubtitles&lt;/a> 碰碰运气，虽然界面有点古朴，但是人家资源还是很丰富滴&lt;/p>
&lt;h2 id="2-字幕的时间轴修正">
2. 字幕的时间轴修正
&lt;a href="#2-%e5%ad%97%e5%b9%95%e7%9a%84%e6%97%b6%e9%97%b4%e8%bd%b4%e4%bf%ae%e6%ad%a3" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>对于下载的字幕，我们常遇到的问题就是时间轴不匹配，相信每个影视爱好者都或多或少碰到过这样的问题。产生不匹配有多种原因，典型的比如：&lt;/p>
&lt;ul>
&lt;li>视频帧率不匹配&lt;/li>
&lt;li>视频有删减 (片头或者片中都有可能，常见于电视剧集，有些中间有广告转场有些没有)&lt;/li>
&lt;li>视频版本不一样 (各种删减版，完整版，导演剪辑版等等)&lt;/li>
&lt;/ul>
&lt;p>最后一种差异的地方太多，建议重新找字幕。对于前面两种情况，文本的部分没有太多差异，只需要调整字幕的时间轴就可以了。&lt;/p>
&lt;p>这里需要一些对齐时间轴的工具，这个市面上已经有很多了，大部分都是基于将对白音频持续时间和字幕对白持续时间做匹配，然后进行字幕整体时间轴的缩放或平移来实现对齐的。&lt;/p>
&lt;p>比如 &lt;a href="https://github.com/tp7/Sushi">Sushi&lt;/a>, 以及&lt;a href="https://github.com/smacke/ffsubsync">ffsubsync&lt;/a>&lt;/p>
&lt;p>还有一类是最近比较火的，利用 AI 来对语音进行识别，输出对应的字幕。一半都是通过 Whisper 这个开源的语音识别模型来实现的，比如&lt;a href="https://github.com/oseiskar/autosubsync">autosubsync&lt;/a>.&lt;/p>
&lt;p>这类语音识别的 AI 目前已经很成熟了，市面上有很多商业应用，比如办公软件 飞书，腾讯会议一般都会支持会议语音转文字。但是这种都是为会议场景准备的。其实国内网易有道在这块做的更早，对英文支持更好，&lt;a href="https://jianwai.youdao.com/">网易见外&lt;/a>可以直接对音频进行识别，并生成 srt 文件，甚至还可以直接加上翻译，效率直接拉满。免费额度基本够用，各位轻度使用的朋友不要错过。&lt;/p>
&lt;p>当然，这类 AI 语音识别和翻译现阶段还是差了点意思，在各种影视作品中，各类人名，专有名词，还有各种各样的梗 (比如 The Simpsons ), AI 处理起来还是有点够呛，所以最好还是优先选择人工调教后的字幕比较好。&lt;/p>
&lt;p>上面罗列的那些对齐工具只能处理字幕和影片都是原生语言的情况，比如处理英文电影的英文字幕，但是对于要对时间轴不匹配的中英文双语字幕就基本没辙了。找遍了全网都没找到合适的工具，所以我就自己写了一个 &lt;a href="https://github.com/Colin-XKL/srt-fuzzy-sync">srt-fuzzy-sync&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>fuzzy-sync 是一个简单的同步 srt 字幕的工具，通过指定一个与音轨匹配的参考字幕文件，来将另一个未同步的字幕进行匹配，时间轴修正，使得其可以与音轨正确对齐。&lt;/p>
&lt;/blockquote>
&lt;p>简单点来说呢，这是一个专门用来对双语字幕时间轴进行修正的工具。你手头有一个英文电影资源，一个正确对齐的英文字幕，一个没对齐的双语字幕，这个时候你就可以用 srt-fuzzy-sync 这个工具，将英文字幕设定为参考，然后对双语字幕的时间轴进行修正，就可以得到一个时间轴正确的双语字幕啦！&lt;/p>
&lt;p>为什么叫 fuzzy-sync 呢，这主要是为了通用性，只对两个字幕之间高度相同的一些关键对白进行匹配，其他的对白则只是基于匹配结果进行整体偏移，这样做的好处是即便你找的这两个字幕的对白数量不一样，仍然可以完成同步。&lt;/p>
&lt;p>一般英文的 SDH 无障碍字幕里都会有很多非对白场景下的文字提示，比如&lt;/p>
&lt;blockquote>
&lt;p>(Theme Music Playing)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>(sigh)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>(Bird Singing)&lt;/p>
&lt;/blockquote>
&lt;p>而影片对应中文字幕里一般都不会加上这些翻译。此外中文字幕还常常对影片中出现的标题、店铺招牌、标语、新闻标题做翻译说明，种种因素导致中英文字幕在句子的数量上不是严格对等的。&lt;/p>
&lt;p>此外这些字幕出现的时间，通常是没有对应的对白音频的。上面基于音频匹配的都无法很好地处理这类情况，所以我才抛弃按句匹配的方法，改为按一些句子很长，具有标志性，在影片中通常只会出现一次的关键语句匹配。&lt;/p>
&lt;p>至于找不到的现成双语字幕的，那就需要我们自己动手制作啦。&lt;/p>
&lt;h2 id="3-自制双语字幕">
3. 自制双语字幕
&lt;a href="#3-%e8%87%aa%e5%88%b6%e5%8f%8c%e8%af%ad%e5%ad%97%e5%b9%95" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>有时只能找到现成的中文字幕和原版英文字幕，但是没有双语的版本，这个时候就需要我们手动合并了。&lt;/p>
&lt;p>这里推荐一个工具网站 &lt;a href="https://subtitletools.com/merge-subtitles-online">Subtitle Tools&lt;/a>, 里面有各种简单的字幕工具，比如字幕合并，字幕格式转换。&lt;/p>
&lt;p>对于手上又对齐的英文字幕和对齐的英文字幕，但是数量很多不想一个个到网站上去合并的，可以考虑 srt-merge 这个工具。不过原作者很久没更新了，我这里也编写了一个工具，也可以实现一样的功能。&lt;a href="https://github.com/Colin-XKL/dual-lang-sub-tool/tree/main">dual-lang-sub-tool&lt;/a>&lt;/p>
&lt;p>此外还有一种常见的情况，就是我们下载的 WebRip 版本资源，影片已经内置了多国语言分别的字幕，这些资源大部分是来源于 Netfilx, Disney Plus , iTunes 这些，我们可以直接提取影片资源内置的两种语言的字幕然后将它们合并。&lt;/p>
&lt;p>内置字幕的提取可以使用 ffmpeg 工具，首先用 ffmpeg -i 文件路径 来查看基本信息，确定好字幕所在的 track, 比如 Stream #0:3(chi) Subtitle, 这种就是说明 3 号 stream 是中文字幕。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">&lt;span style="color:#75715e"># example output # ......&lt;/span>
Stream &lt;span style="color:#75715e">#0:1(jpn): Audio: aac (LC), 48000 Hz, stereo, fltp (default)&lt;/span>
Metadata: title : 日语
Stream &lt;span style="color:#75715e">#0:2(chi): Audio: aac (LC), 48000 Hz, stereo, fltp&lt;/span>
Metadata: title : 国语
Stream &lt;span style="color:#75715e">#0:3(chi): Subtitle: ass (default)&lt;/span>
Metadata: title : gb
Stream &lt;span style="color:#75715e">#0:4(chi): Subtitle: ass&lt;/span>
Metadata: title : big5
&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以用下面的命令将其提取出来并转换成 srt 格式&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">ffmpeg -i xxx.mkv -map 0:3 -c:s srt output.srt
&lt;/code>&lt;/pre>&lt;/div>&lt;p>提取完成后就可以直接合并得到成品的双语字幕了，但是你应该也会觉得这样提取太麻烦，尤其是一部剧几十集的情况。一般同一个资源，里面各个音轨和字幕的排布是一样的，比如上面只取了一集进行查看，其他集数都是一样的，中文字幕都是在 stream 0:3, shell 循环一下就可以了。&lt;/p>
&lt;p>当然你可能觉得这还是太麻烦了，我也是这么想的，所以 dual-lang-srt-tool 工具也支持自动检测，导出，合并双语字幕啦:D DIY 双语字幕可以很简单&lt;/p>
&lt;h2 id="后记">
后记
&lt;a href="#%e5%90%8e%e8%ae%b0" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>对于一些专有名词太多，AI 翻译质量欠佳，又没有现成中文字幕可供参考的，那目前就没有很好的办法了。通常我遇到这种情况是用 AI 的版本将就下，或者直接全英文一把梭。不过随着 AI 技术的发展，后面或许可以考虑将过往季的字幕喂给 AI 让 ta 自己学习人名地名翻译，再辅以各种新闻八卦材料让 AI 也能对各种潮流热梗烂熟于心，到那个时候制作双语字幕就是分分种的事情了，可以预见的是这样的 AI 应该有生之年就可以用上，至于是好事还是坏事，那就交给未来去评判吧。&lt;/p></description></item><item><title>个人向 Linux 新服务器初始化清单</title><link>/posts/%E4%B8%AA%E4%BA%BA%E5%90%91linux%E6%96%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%88%9D%E5%A7%8B%E5%8C%96%E6%B8%85%E5%8D%95/</link><pubDate>Tue, 14 Mar 2023 00:00:00 +0000</pubDate><guid>/posts/%E4%B8%AA%E4%BA%BA%E5%90%91linux%E6%96%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%88%9D%E5%A7%8B%E5%8C%96%E6%B8%85%E5%8D%95/</guid><description>
&lt;p>一份 Linux 初始化清单，避免每次拿到新的服务器都要一个个去各种地方搜集指令，以做备忘 &amp;amp; 供有需要的朋友参考。&lt;/p>
&lt;p>服务器发行版我个人推荐 Debian 系列，CentOS 系现在已经开始分裂而且说实话对新手其实并不友好。Debian 是在兼容性，易用性和稳定性之间都取得不错平衡的发行版。新手推荐 Ubuntu, 不过最近商业化有点过度，夹带了越来越多的私活，我个人所有新安装的 Linux 已经全线转向 Debian. 下文以目前最新的 Debian 11 Bullseye 为例。Debian 12 bookworm 也测试通过。&lt;/p>
&lt;blockquote>
&lt;p>azure 干净的 debian 11 镜像，资源使用情况供参考：&lt;/p>
&lt;p>~1G Disk, ~100M RAM, ~300 packages&lt;/p>
&lt;/blockquote>
&lt;p>本文仅列举主要事项和操作，新手可先行阅读这篇文章熟悉概念。&lt;a href="https://blog.colinx.one/posts/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/">云服务器入门指南&lt;/a>&lt;/p>
&lt;p>正文开始&lt;/p>
&lt;h2 id="1---基础环境搭建">
1 - 基础环境搭建
&lt;a href="#1---%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;h3 id="11-防火墙">
1.1 防火墙
&lt;a href="#11-%e9%98%b2%e7%81%ab%e5%a2%99" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>检查服务商防火墙和系统自带防火墙 (debian 系一般为 &lt;code>ufw&lt;/code>, cent os 系一般为 &lt;code>firewall-cmd&lt;/code>).放行 SSH(22), 新的 SSH(自定义), HTTP, HTTPS, 以及其他常用开发端口&lt;/p>
&lt;h3 id="12-新建用户与检查-sudoer">
1.2 新建用户与检查 sudoer
&lt;a href="#12-%e6%96%b0%e5%bb%ba%e7%94%a8%e6%88%b7%e4%b8%8e%e6%a3%80%e6%9f%a5-sudoer" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>登录到 root 用户，创建个人账户并设定密码&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">// -m 创建对应home文件夹
// 添加到 sudo 用户组自动获得sudo权限, 部分发行版为wheel组
useradd -m --groups sudo colin
// 设定密码
passwd colin
&lt;/code>&lt;/pre>&lt;/div>&lt;p>也可直接编辑&lt;code>/etc/sudoers&lt;/code> 文件为新用户添加 sudo 权限，使用 &lt;code>visudo&lt;/code> 指令可以自动帮你校验，避免配置写错把系统搞崩&lt;/p>
&lt;h3 id="13-镜像源与基础软件">
1.3 镜像源与基础软件
&lt;a href="#13-%e9%95%9c%e5%83%8f%e6%ba%90%e4%b8%8e%e5%9f%ba%e7%a1%80%e8%bd%af%e4%bb%b6" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>如为境内服务器需要更换镜像源&lt;/p>
&lt;h4 id="更换国内镜像源">
更换国内镜像源
&lt;a href="#%e6%9b%b4%e6%8d%a2%e5%9b%bd%e5%86%85%e9%95%9c%e5%83%8f%e6%ba%90" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h4>
&lt;p>一般情况下，将  &lt;code>/etc/apt/sources.list&lt;/code>  文件中 Debian 默认的源地址  &lt;code>http://deb.debian.org/&lt;/code>  替换为  &lt;code>http://mirrors.ustc.edu.cn&lt;/code>  即可。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">//for debian
sudo sed -i &lt;span style="color:#e6db74">&amp;#39;s/deb.debian.org/mirrors.ustc.edu.cn/g&amp;#39;&lt;/span> /etc/apt/sources.list
//for ubuntu
sudo sed -i &lt;span style="color:#e6db74">&amp;#39;s@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g&amp;#39;&lt;/span> /etc/apt/sources.list
&lt;/code>&lt;/pre>&lt;/div>&lt;p>CentOS 系建议启用 EPEL, PowerTools 等 repo 以更方便地安装常用软件和工具。此处不再赘述&lt;/p>
&lt;p>推荐的几个国内镜像站：&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/">清华大学 TUNA 镜像站&lt;/a>, &lt;a href="https://mirrors.ustc.edu.cn/">中科大 USTC LUG 镜像站&lt;/a>, &lt;a href="https://mirrors.cloud.tencent.com/">腾讯镜像站&lt;/a>&lt;/p>
&lt;h4 id="基础软件">
基础软件
&lt;a href="#%e5%9f%ba%e7%a1%80%e8%bd%af%e4%bb%b6" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">sudo apt update
sudo apt install wget curl git nano
sudo apt install zsh tmux htop duf htop tldr screenfetch tree
&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="14-ssh-安全">
1.4 SSH 安全
&lt;a href="#14-ssh-%e5%ae%89%e5%85%a8" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>修改端口，配置文件&lt;code>/etc/ssh/sshd_config&lt;/code>. 重启机器或 sshd 服务后生效。
此外最好将&lt;code>PermitRootLogin&lt;/code>修改为&lt;code>no&lt;/code>, 可以禁用 root 登录。&lt;/p>
&lt;p>在本机检查&lt;code>~/.ssh/&lt;/code>有无 id_rsa 等已生成的 key. 如没有再使用 &lt;code>ssh-keygen&lt;/code> 生成私钥
将本机的公钥上传到远端，再写入远端的 &lt;code>authorized_keys&lt;/code> 中&lt;/p>
&lt;p>&lt;code>cat ~/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;/code>&lt;/p>
&lt;p>注意修改权限，&lt;code>~/.ssh/authorized_keys&lt;/code> 权限为 600. &lt;code>~/.ssh/&lt;/code>为 700&lt;/p>
&lt;p>可以参考以下设置&lt;/p>
&lt;blockquote>
&lt;p>.ssh/ 0700/rwx&amp;mdash;&amp;mdash;&lt;br>
.ssh/&lt;em>.pub 644/rw-r&amp;ndash;r&amp;ndash;&lt;br>
.ssh/&lt;/em> 0600/rw&amp;mdash;&amp;mdash;-&lt;/p>
&lt;/blockquote>
&lt;p>如失败可参考这篇文章 debug. &lt;a href="https://superuser.com/questions/1137438/ssh-key-authentication-fails">https://superuser.com/questions/1137438/ssh-key-authentication-fails&lt;/a>&lt;/p>
&lt;h3 id="15-设置-hostname">
1.5 设置 hostname
&lt;a href="#15-%e8%ae%be%e7%bd%ae-hostname" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>可选，为了便于识别和后续配置 oh-my-zsh 更美观。这里修改完后还需要更新 hosts 设置，把刚才设置的新的主机名指向 localhost&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">sudo hostnamectl set-hostname my-new-server
sudo hostnamectl status
&lt;/code>&lt;/pre>&lt;/div>&lt;p>此外&lt;code>/etc/hosts&lt;/code> 中默认会有个本机 hostname 映射到&lt;code>127.0.0.1&lt;/code> 的配置，修改 host 之后这里别名的映射也要修改下，不然终端执行命令会一直弹 &lt;code>sudo: unable to resolve host xxx: Name or service not known&lt;/code>&lt;/p>
&lt;p>修改后需重启&lt;/p>
&lt;hr>
&lt;h3 id="16-swap">
1.6 SWAP
&lt;a href="#16-swap" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>可选，建议内存&amp;lt;2G 配置 swap, 大小至少为 2 倍物理内存，可以有效避免意外爆内存的情况。仅推荐 SSD 盘的服务器开启。&lt;/p>
&lt;p>推荐用 &lt;code>fallocate&lt;/code> , 因为这个是最简单、最快速的创建交换空间的方法。 &lt;code>fallocate&lt;/code>  命令用于为文件预分配块 / 大小。&lt;/p>
&lt;p>使用  &lt;code>fallocate&lt;/code>  创建交换空间，首先在  &lt;code>/&lt;/code>  目录下创建一个名为  &lt;code>swap_space&lt;/code>  的文件。然后分配 2GB 到  &lt;code>swap_space&lt;/code>  文件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">sudo fallocate -l 2G /swap_space
ls -lh /swap_space
// 然后更改文件权限，让 &lt;span style="color:#e6db74">`&lt;/span>/swap_space&lt;span style="color:#e6db74">`&lt;/span> 更安全：
sudo chmod &lt;span style="color:#ae81ff">600&lt;/span> /swap_space
// 创建交换空间
sudo mkswap /swap_space
// 启用
sudo swapon /swap_space
// 使用 s 参数查看列表
sudo swapon -s
&lt;/code>&lt;/pre>&lt;/div>&lt;p>每次重启后都要重新挂载磁盘分区。因此为了使之持久化，就像上面一样，我们编辑  &lt;code>/etc/fstab&lt;/code>  并输入下面行：&lt;/p>
&lt;pre tabindex="0">&lt;code>/swap_space swap  swap  sw  0  0
&lt;/code>&lt;/pre>&lt;p>保存并退出文件。现在我们的交换分区会一直被挂载了。我们重启后可以在终端运行  &lt;code>free -m&lt;/code>  来检查交换分区是否生效。&lt;/p>
&lt;p>还可以按需选择使用 zram，提升内存可用量，不过会略微增加 cpu 使用和内存延时。可以搜索 zramctl, zramswap 等关键字&lt;/p>
&lt;hr>
&lt;h3 id="17-绑定域名">
1.7 绑定域名  
&lt;a href="#17-%e7%bb%91%e5%ae%9a%e5%9f%9f%e5%90%8d" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>可选，绑定一个域名或者改下本地 host 便于后续访问&lt;/p>
&lt;h3 id="18-添加本地-ssh-别名">
1.8 添加本地 SSH 别名
&lt;a href="#18-%e6%b7%bb%e5%8a%a0%e6%9c%ac%e5%9c%b0-ssh-%e5%88%ab%e5%90%8d" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>配置文件为本机的 &lt;code>~/.ssh/config&lt;/code>
格式如下&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-config" data-lang="config">Host serverA
HostName myserver.domain.xyz
User colinx
Port 2333
&lt;/code>&lt;/pre>&lt;h2 id="2---常用工具与配置">
2 - 常用工具与配置
&lt;a href="#2---%e5%b8%b8%e7%94%a8%e5%b7%a5%e5%85%b7%e4%b8%8e%e9%85%8d%e7%bd%ae" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;h3 id="21-docker-环境">
2.1 Docker 环境
&lt;a href="#21-docker-%e7%8e%af%e5%a2%83" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;h4 id="docker-安装">
Docker 安装
&lt;a href="#docker-%e5%ae%89%e8%a3%85" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h4>
&lt;p>可参考官网文档，注意是 docker engine 的安装。&lt;a href="https://docs.docker.com/engine/install/debian/">Docker 官方安装文档&lt;/a>&lt;/p>
&lt;p>或者我之前写的 RSS MAN 部署文档中 docker 安装的部分
&lt;a href="https://blog.colinx.one/posts/rssmanx%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97/#1-docker%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87">RSS MAN X 安装部署指南/#1-docker 环境准备&lt;/a>&lt;/p>
&lt;h4 id="docker-镜像源配置及日志配置">
Docker 镜像源配置及日志配置
&lt;a href="#docker-%e9%95%9c%e5%83%8f%e6%ba%90%e9%85%8d%e7%bd%ae%e5%8f%8a%e6%97%a5%e5%bf%97%e9%85%8d%e7%bd%ae" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h4>
&lt;p>docker mirror 配置可以加速 image pull, 国内公开可用的加速站点可以参考这里 &lt;a href="https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6">docker 加速站点&lt;/a>&lt;/p>
&lt;p>此外服务器上的 docker 都是长时间持续运行的，不少容器日志打的很随意，log 文件容易占据过多空间，也最好限制一下。&lt;/p>
&lt;p>文件位置&lt;code>/etc/docker/daemon.json&lt;/code>, 下面的配置供参考&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">{
&lt;span style="color:#f92672">&amp;#34;registry-mirrors&amp;#34;&lt;/span>: [
&lt;span style="color:#e6db74">&amp;#34;https://docker.nastool.de&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://docker.actima.top&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://docker.unsee.tech&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://docker.gh-proxy.com&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://docker.zhai.cm&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://docker.1panel.live&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://docker.1ms.run&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://docker.imgdb.de&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://dockerproxy.net&amp;#34;&lt;/span>
],
&lt;span style="color:#f92672">&amp;#34;log-opts&amp;#34;&lt;/span>: {
&lt;span style="color:#f92672">&amp;#34;max-file&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5&amp;#34;&lt;/span>,
&lt;span style="color:#f92672">&amp;#34;max-size&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1m&amp;#34;&lt;/span>
}
}
&lt;/code>&lt;/pre>&lt;/div>&lt;p>修改完保存重启 docker 服务即可生效。可使用 &lt;code>docker info&lt;/code> 命令检查是否生效&lt;/p>
&lt;h3 id="22-oh-my-zsh">
2.2 OH-MY-ZSH
&lt;a href="#22-oh-my-zsh" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>安装 OH-MY-ZSH, 在此之前确保已安装 &lt;code>git&lt;/code> 和 &lt;code>zsh&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">sh -c &lt;span style="color:#e6db74">&amp;#34;&lt;/span>&lt;span style="color:#66d9ef">$(&lt;/span>curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span style="color:#66d9ef">)&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>
&lt;span style="color:#75715e"># 如果在墙内 github 速度不加可以考虑使用清华的镜像&lt;/span>
&lt;span style="color:#75715e"># https://mirrors.tuna.tsinghua.edu.cn/help/ohmyzsh.git/&lt;/span>
&lt;span style="color:#75715e"># 先下载到任意位置，然后指定REMOTE 参数执行安装程序&lt;/span>
git clone https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git --depth&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>
cd ohmyzsh/tools
REMOTE&lt;span style="color:#f92672">=&lt;/span>https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git sh install.sh
&lt;/code>&lt;/pre>&lt;/div>&lt;p>安装插件&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions --depth&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span style="color:#e6db74">${&lt;/span>ZSH_CUSTOM&lt;span style="color:#66d9ef">:-&lt;/span>~/.oh-my-zsh/custom&lt;span style="color:#e6db74">}&lt;/span>/plugins/zsh-syntax-highlighting --depth&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>git clone 速度不佳可以考虑一些开放的加速服务，比如：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://ghproxy.org/">https://ghproxy.org/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://mirror.ghproxy.com/">https://mirror.ghproxy.com/&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>按需修改配置。文件位置&lt;code>~/.zshrc&lt;/code>, 下面为个人常用配置供参考。注意去源文件修改对应项，没有再到末尾加&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">&lt;span style="color:#75715e"># custom conf override&lt;/span>
ZSH_THEME&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;af-magic&amp;#34;&lt;/span>
CASE_SENSITIVE&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;false&amp;#34;&lt;/span>
HYPHEN_INSENSITIVE&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;false&amp;#34;&lt;/span>
plugins&lt;span style="color:#f92672">=(&lt;/span>git z zsh-autosuggestions zsh-syntax-highlighting sudo&lt;span style="color:#f92672">)&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>自定义配置，添加到末尾&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">export ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">20&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>保存并应用&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">source ~/.zshrc
&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="23-nano-代码文件规则">
2.3 nano 代码文件规则
&lt;a href="#23-nano-%e4%bb%a3%e7%a0%81%e6%96%87%e4%bb%b6%e8%a7%84%e5%88%99" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>日常常用文本编辑器为 nano, 轻量级编辑需求完全满足。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">curl https://cdn.jsdelivr.net/gh/scopatz/nanorc/install.sh | sh
&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="24-时区调整">
2.4 时区调整
&lt;a href="#24-%e6%97%b6%e5%8c%ba%e8%b0%83%e6%95%b4" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>一般安装完都是 UTC+0, 看日志什么的不方便。服务器初始化的时候配置好后面可以免去很多麻烦&lt;/p>
&lt;p>debian 系可用过 &lt;code>timedatectl&lt;/code> 命令调整时区。东八区可以用这个命令&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">sudo timedatectl set-timezone Asia/Shanghai
&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="25-厂商监控sdk-卸载">
2.5 厂商监控/SDK 卸载
&lt;a href="#25-%e5%8e%82%e5%95%86%e7%9b%91%e6%8e%a7sdk-%e5%8d%b8%e8%bd%bd" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>懂得都懂，自己搜&lt;/p>
&lt;h3 id="26-fail2ban-配置">
2.6 fail2ban 配置
&lt;a href="#26-fail2ban-%e9%85%8d%e7%bd%ae" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>使用 fail2ban 可以很好地保护你的服务器，避免被人恶意爆破 SSH 等服务。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">// 安装 fail2ban
sudo apt update &lt;span style="color:#f92672">&amp;amp;&amp;amp;&lt;/span> sudo apt install fail2ban
sudo systemctl enable fail2ban
&lt;/code>&lt;/pre>&lt;/div>&lt;p>之后需要按照实际情况修改一下配置文件。这里记录一下最小配置。注意默认的配置 &lt;code>/etc/fail2ban/jail.conf&lt;/code>不要改，不然每次软件更新会被覆盖。在 jaid.d 这个目录下面新建一个文件&lt;code>/etc/fail2ban/jail.d/local.conf&lt;/code>&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-conf" data-lang="conf">[sshd]
enabled = true
# 这里修改为实际的 sshd 端口
port = 20000
filter = sshd
banaction = iptables-allports
[DEFAULT]
# 1h 时间窗口
findtime = 3600
maxretry = 3
bantime = 6h
&lt;/code>&lt;/pre>&lt;p>之后重启&lt;code>sudo systemctl restart fail2ban&lt;/code>，然后可以看下服务状态是否正常 &lt;code>sudo systemctl status fail2ban&lt;/code>，如果配置文件有问题会报错。如果是显示&lt;code> active (running)&lt;/code> 就说明没有问题了。&lt;/p>
&lt;p>fail2ban 的测试及关闭服务方法：&lt;/p>
&lt;p>查看当前封禁 IP：&lt;code>sudo fail2ban-client status sshd&lt;/code>&lt;br>
解禁某一 IP: &lt;code>sudo fail2ban-client set sshd unbanip IP_ADDRESS&lt;/code>&lt;br>
停止 fail2ban 服务：&lt;code>sudo systemctl stop fail2ban&lt;/code>&lt;br>
关闭 fail2ban 服务：&lt;code>sudo systemctl disable fail2ban&lt;/code>&lt;/p>
&lt;p>刚配置没一会就有 IP 被封禁了，可以看到效果还是很给力，也安心了不少&lt;/p>
&lt;pre tabindex="0">&lt;code>➜ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 6
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 154.216.19.42
&lt;/code>&lt;/pre>&lt;h3 id="27-git-代理">
2.7 Git 代理
&lt;a href="#27-git-%e4%bb%a3%e7%90%86" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>一般在 &lt;code>.bashrc&lt;/code>/&lt;code>.zshrc&lt;/code> 中定义 &lt;code>HTTP_PROXY&lt;/code> / &lt;code>HTTPS_PROXY&lt;/code> 可以应对大部分场景。但是对于使用 ssh 协议的 git 仓库 (通过 ssh 方式，相较于 https 的不用每次输用户名和密码。一般对只有克隆公共仓库的时候才会用 https, 其他时候对于自己的仓库我都是用 ssh), 并不会走 http 代理。&lt;/p>
&lt;p>这里需要在 ssh config 中配置转发走代理才行。使用&lt;code>nc&lt;/code>(macOS 等默认会预装) 搭配 socks 代理最方便&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-ini" data-lang="ini">&lt;span style="color:#a6e22e">Host github.com&lt;/span>
&lt;span style="color:#a6e22e">HostName github.com&lt;/span>
&lt;span style="color:#a6e22e">User git&lt;/span>
&lt;span style="color:#a6e22e">Port 22&lt;/span>
&lt;span style="color:#a6e22e">ProxyCommand nc -x 192.168.100.222:8085 %h %p&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="3---进阶内容">
3 - 进阶内容
&lt;a href="#3---%e8%bf%9b%e9%98%b6%e5%86%85%e5%ae%b9" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;h3 id="31-内核参数调优">
3.1 内核参数调优
&lt;a href="#31-%e5%86%85%e6%a0%b8%e5%8f%82%e6%95%b0%e8%b0%83%e4%bc%98" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>一些内核参数调整，交换内存阈值和 bbr, tcp fast open 等，按需启用。启用前务必确认自己了解对应字段的含义，否则不如保留系统初始值。&lt;/p>
&lt;p>配置文件位置 &lt;code>/etc/sysctl.conf&lt;/code>&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-conf" data-lang="conf"># mem
vm.swappiness = 10
# bbr and network tune 
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
net.ipv4.tcp_fastopen=3
net.ipv4.tcp_slow_start_after_idle=0
# zram 相关配置，配合下文 zram 使用
vm.watermark_boost_factor = 0
vm.watermark_scale_factor = 125
vm.page-cluster = 0
&lt;/code>&lt;/pre>&lt;p>配置完之后保存并应用&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">sudo sysctl -p
&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="32-更多内存空间---zram">
3.2 更多内存空间 - ZRAM
&lt;a href="#32-%e6%9b%b4%e5%a4%9a%e5%86%85%e5%ad%98%e7%a9%ba%e9%97%b4---zram" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>ZRAM 内存压缩，对于个人服务器来说，始终活跃的程序占用的内存只有比较小一部分，启用 zram 可以将这部分内存压缩，从而可以部署更多的服务。&lt;/p>
&lt;p>建议使用&lt;code>zramtool&lt;/code>, 简单方便&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">sudo apt install zram-tools
&lt;/code>&lt;/pre>&lt;/div>&lt;p>修改&lt;code>/etc/default/zramswap&lt;/code>, 末尾添加&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-ini" data-lang="ini">&lt;span style="color:#a6e22e">ALGO&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">zstd&lt;/span>
&lt;span style="color:#a6e22e">PERCENT&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">60&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>之后执行&lt;code>sudo service zramswap reload&lt;/code>重载生效。
可以使用 swapon 命令查看生效情况&lt;/p>
&lt;pre tabindex="0">&lt;code>~ » sudo swapon -show
NAME TYPE SIZE USED PRIO
/swap_space file 2G 32.1M -2
/dev/zram0 partition 489.9M 0B 100
&lt;/code>&lt;/pre>&lt;p>这样一来，会将机器物理内存的 50% 配置 zram, 使用 zstd 压缩算法，一般压缩比能达到 3:1, 也就是说，1G 的机器，可以相当于有&lt;code>0.5G+3*0.5G=2G&lt;/code>的内存。&lt;/p>
&lt;p>注意 Debian 新版本 swapon 等工具所在的目录 /usr/sbin 不在普通用户的 PATH 中，可能需要手动执行前缀使用。如 /usr/sbin/swapon&lt;/p>
&lt;h3 id="33-更多内存空间---关闭-kdump释放预留的内存空间">
3.3 更多内存空间 - 关闭 kdump，释放预留的内存空间
&lt;a href="#33-%e6%9b%b4%e5%a4%9a%e5%86%85%e5%ad%98%e7%a9%ba%e9%97%b4---%e5%85%b3%e9%97%ad-kdump%e9%87%8a%e6%94%be%e9%a2%84%e7%95%99%e7%9a%84%e5%86%85%e5%ad%98%e7%a9%ba%e9%97%b4" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>新服务器开起来之后，你会发现无论是 htop 还是 free 等命令，看到的总内存就是比你买服务器时页面上写的要小。比如我开的两核 1G 的机器，实际机器上看到的总内存只有 816M. 这是因为 linux 系统会默认开启 kdump，预留了一部分内存不让我们使用。&lt;/p>
&lt;p>Kdump 是 Linux 系统的一种内核崩溃转储机制，它允许在系统发生内核崩溃（例如内核 panic）时，捕获内存的转储信息，从而帮助事后分析故障原因。默认的配置&lt;code>2G-8G:256M,8G-16G:512M,16G-:768M&lt;/code>, 如果你买的是 2G 的机器，上来就有 1/8 的空间用不了。&lt;/p>
&lt;p>但是我们个人日常使用的 linux 机器基本用不到这个功能，不用预留这部分空间。&lt;/p>
&lt;p>操作方法有两种：将预留内存改为 0 or 直接关闭 kdump 服务。对于个人玩家小内存机器我建议直接关闭。操作如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">&lt;span style="color:#75715e"># 备份grub配置文件&lt;/span>
sudo cp /etc/default/grub /etc/default/grub.bak
&lt;span style="color:#75715e"># 编辑grub配置,删除 crashkernel=0M-2G:0M,2G-8G:192M 这样的部分 &lt;/span>
sudo nano /etc/default/grub
&lt;span style="color:#75715e"># 部分发行版镜像可能还有单独的kdump配置文件,直接删除&lt;/span>
sudo rm /etc/default/grub.d/kdump-tools.cfg
&lt;span style="color:#75715e"># 更新grub配置&lt;/span>
sudo update-grub
&lt;span style="color:#75715e"># 关闭并禁用Kdump服务&lt;/span>
sudo systemctl disable kdump-tools
sudo systemctl stop kdump-tools
&lt;span style="color:#75715e"># 重启系统&lt;/span>
sudo reboot
&lt;span style="color:#75715e"># 检查是否生效, 状态为 inactive(dead)，即 kdump 服务已停止运行&lt;/span>
sudo systemctl status kdump
&lt;span style="color:#75715e"># 检查 crash size 是否为0&lt;/span>
cat /sys/kernel/kexec_crash_size
&lt;/code>&lt;/pre>&lt;/div>&lt;p>更多内容可以参见这篇文档：&lt;a href="https://help.aliyun.com/zh/ecs/use-cases/view-and-change-the-size-of-reserved-memory-on-a-linux-instance#7d5ae6803amdp">预留内存相关文档 - 阿里云&lt;/a> 或者 &lt;a href="https://cloud.tencent.com/document/product/213/115734">预留内存相关文档 - 腾讯云&lt;/a>&lt;/p>
&lt;h3 id="33-其他进阶配置">
3.3 其他进阶配置
&lt;a href="#33-%e5%85%b6%e4%bb%96%e8%bf%9b%e9%98%b6%e9%85%8d%e7%bd%ae" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>一些其他的系统维护技巧与策略，如&lt;/p>
&lt;p>&lt;strong>配置文件管理&lt;/strong>
所有应用 docker 化，通过 &lt;code>docker compose&lt;/code> 文件管理
配置共享存储，&lt;code>rclone&lt;/code> 挂载 webdav, 同步 docker compose 等配置文件;
traefik 网关作为统一出口，负责服务发现和自动维护 HTTPS 证书，自定义配置通过 headless CMS 如 directus 管理，traefik 设定为通过 http 方式获取远端配置即可。&lt;/p>
&lt;p>&lt;strong>数据库备份&lt;/strong>
所有数据相关的统一挂载到&lt;code>/data/database/xxx&lt;/code>, 配置定时任务进行备份
以及配置 s3 等，上传到其他存储介质和其他地域。&lt;/p>
&lt;p>这些内容此处不再赘述，有机会再单独写篇文章分享吧&lt;/p>
&lt;p>END&lt;/p>
&lt;hr>
&lt;h2 id="附录">
附录
&lt;a href="#%e9%99%84%e5%bd%95" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>Install Docker Engine &lt;a href="https://docs.docker.com/engine/install/">https://docs.docker.com/engine/install/&lt;/a>&lt;/li>
&lt;li>RSSManX 安装部署指南 &lt;a href="https://blog.colinx.one/posts/rssmanx%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97/">https://blog.colinx.one/posts/rssmanx%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97/&lt;/a>&lt;/li>
&lt;li>云服务器入门指南 &lt;a href="https://blog.colinx.one/posts/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/">https://blog.colinx.one/posts/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/&lt;/a>&lt;/li>
&lt;li>Portainer Install Doc &lt;a href="https://docs.portainer.io/start/install-ce/server/docker/linux">https://docs.portainer.io/start/install-ce/server/docker/linux&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>docker compose 的错误使用姿势</title><link>/posts/docker-compose%E7%9A%84%E9%94%99%E8%AF%AF%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/</link><pubDate>Wed, 11 May 2022 00:00:00 +0000</pubDate><guid>/posts/docker-compose%E7%9A%84%E9%94%99%E8%AF%AF%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/</guid><description>
&lt;!-- # docker compose 的错误使用姿势 -->
&lt;p>这篇文章记录几个 docker compose 使用过程中几个难以察觉的错误使用姿势&lt;/p>
&lt;h2 id="1-变量值使用符号开头">
1. 变量值使用&lt;code>@&lt;/code>符号开头
&lt;a href="#1-%e5%8f%98%e9%87%8f%e5%80%bc%e4%bd%bf%e7%94%a8%e7%ac%a6%e5%8f%b7%e5%bc%80%e5%a4%b4" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>我在 RSS MAN X 的 docker-compose 配置文件中，huignn 的环境变量出来时是这样写的&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="color:#f92672">environment&lt;/span>:
- &lt;span style="color:#ae81ff">DATABASE_ADAPTER=postgresql&lt;/span>
- &lt;span style="color:#ae81ff">DATABASE_HOST=database.huginn&lt;/span>
- &lt;span style="color:#ae81ff">DATABASE_USERNAME=postgres&lt;/span>
- &lt;span style="color:#ae81ff">DATABASE_PASSWORD=@pass_for_DB&lt;/span>
- &lt;span style="color:#ae81ff">DATABASE_PORT=5432&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>自己使用的时候没发现什么问题，别人从零创建容器的时候报错了。刚开始排查了很久，后面发现我默认密码这样写其实是有问题的。&lt;/p>
&lt;p>上面的使用列表来描述环境变量在 docker-compose 解析的时候没有任何报错信息。但是使用下面这种 key-value 的 map 的形式时，&lt;code>docker-compose up&lt;/code>命令报错了，说 YAML 解析时出现问题&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="color:#f92672">environment&lt;/span>:
&lt;span style="color:#f92672">DATABASE_ADAPTER&lt;/span>: &lt;span style="color:#ae81ff">postgresql&lt;/span>
&lt;span style="color:#f92672">DATABASE_HOST&lt;/span>: &lt;span style="color:#ae81ff">database.huginn&lt;/span>
&lt;span style="color:#f92672">DATABASE_USERNAME&lt;/span>: &lt;span style="color:#ae81ff">postgres&lt;/span>
&lt;span style="color:#f92672">DATABASE_PASSWORD&lt;/span>: @&lt;span style="color:#ae81ff">pass_for_DB&lt;/span>
&lt;span style="color:#f92672">DATABASE_PORT&lt;/span>: &lt;span style="color:#ae81ff">5432&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;pre tabindex="0">&lt;code>yaml: line 17: found character that cannot start any token
&lt;/code>&lt;/pre>&lt;p>删除前导&lt;code>@&lt;/code>符号则一切正常了。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="color:#f92672">DATABASE_PASSWORD&lt;/span>: &lt;span style="color:#ae81ff">pass_for_DB&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>后续测试了几次到底是什么原因导致的&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="color:#75715e"># error&lt;/span>
&lt;span style="color:#f92672">DATABASE_PASSWORD&lt;/span>: @&lt;span style="color:#ae81ff">pass_for_DB &lt;/span>
&lt;span style="color:#75715e"># correct&lt;/span>
&lt;span style="color:#f92672">DATABASE_PASSWORD&lt;/span>: &lt;span style="color:#ae81ff">pass_for_DB&lt;/span>
&lt;span style="color:#75715e"># correct&lt;/span>
&lt;span style="color:#f92672">DATABASE_PASSWORD&lt;/span>: &lt;span style="color:#ae81ff">${DB_Password:-&amp;#39;pass_for_DB&amp;#39;}&lt;/span>
&lt;span style="color:#75715e">## in .env&lt;/span>
&lt;span style="color:#ae81ff">DB_Password=www_123&lt;/span>
&lt;span style="color:#75715e"># correct&lt;/span>
&lt;span style="color:#f92672">DATABASE_PASSWORD&lt;/span>: &lt;span style="color:#ae81ff">${DB_Password:-&amp;#39;@pass_for_DB&amp;#39;}&lt;/span>
&lt;span style="color:#75715e">## in .env&lt;/span>
&lt;span style="color:#ae81ff">DB_Password=www_123&lt;/span>
&lt;span style="color:#75715e"># error&lt;/span>
&lt;span style="color:#f92672">DATABASE_PASSWORD&lt;/span>: &lt;span style="color:#ae81ff">${DB_Password:-&amp;#39;@pass_for_DB&amp;#39;}&lt;/span>
&lt;span style="color:#75715e">## no .env&lt;/span>
&lt;span style="color:#75715e"># error&lt;/span>
&lt;span style="color:#f92672">DATABASE_PASSWORD&lt;/span>: &lt;span style="color:#ae81ff">${DB_Password:-&amp;#39;@pass_for_DB&amp;#39;}&lt;/span>
&lt;span style="color:#75715e">## in .env&lt;/span>
&lt;span style="color:#ae81ff">DB_Password=@www_123&lt;/span>
&lt;span style="color:#75715e"># correct&lt;/span>
&lt;span style="color:#f92672">DATABASE_PASSWORD&lt;/span>: &lt;span style="color:#ae81ff">${DB_Password:-&amp;#39;@pass_for_DB&amp;#39;}&lt;/span>
&lt;span style="color:#75715e">## in .env&lt;/span>
&lt;span style="color:#ae81ff">DB_Password=A@www_123&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终发现无论是否使用 docker-compose 变量替换，只要最终设定值的时候，包含前导@符号，最终一定会失败。Huginn 的这边的报错为解析容器内的一个 YAML 文件时失败&lt;/p>
&lt;pre tabindex="0">&lt;code>huginn1 | foreman stderr |
huginn1 | Caused by:
huginn1 | foreman stderr | Psych::SyntaxError: (&amp;lt;unknown&amp;gt;): found character that cannot start any token while scanning for the next token at line 8 column 13
huginn1 | foreman stderr | /app/vendor/bundle/ruby/2.6.0/gems/railties-6.0.4.4/lib/rails/application/configuration.rb:232:in `database_configuration'
&lt;/code>&lt;/pre>&lt;p>后面我又进入容器查看了下容器内部读取到的环境变量到底是不是预期的值，发现了问题所在&lt;/p>
&lt;p>能正常使用的情况&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">~ » sudo docker exec -it huginn1 /bin/bash
default@3b652a8413fb:~$ echo $DATABASE_HOST
database.huginn
default@3b652a8413fb:~$ echo $DATABASE_PASSWORD
A@www_123
&lt;/code>&lt;/pre>&lt;/div>&lt;p>出错的情况&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">~ » sudo docker exec -it huginn1 /bin/bash
default@42e19e692b24:~$ echo $DATABASE_HOST
database.huginn
default@42e19e692b24:~$ echo $DATABASE_PASSWORD
&lt;span style="color:#e6db74">&amp;#39;@pass_for_DB&amp;#39;&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以看到，如果以&lt;code>@&lt;/code>符号开头，最终的环境变量会加上引号，这对于某些应用来说会产生预期之外的结果，如此处测试的 Huginn。&lt;/p>
&lt;h2 id="2-使用-6000-或-6666-端口">
2. 使用 6000 或 6666 端口
&lt;a href="#2-%e4%bd%bf%e7%94%a8-6000-%e6%88%96-6666-%e7%ab%af%e5%8f%a3" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>这也是一定挺特殊的场景，虽然与 docker compose 关系不大，但是难免会遇到。在映射端口的时候有一个很坑的地方，如果你要部署一个 web 服务，然后映射的时候填写的是&lt;code>6000&lt;/code>端口或者是&lt;code>6666&lt;/code>端口，你会发现无论怎么重启容器、更改容器设置、更换 Edge/Chrome，浏览器就是访问不了页面。&lt;/p>
&lt;p>实在折腾地快疯了，点开 Chrome 的错误详情，才发现这么一句&lt;/p>
&lt;p>&lt;em>&lt;strong>ERR_UNSAFE_PORT&lt;/strong>&lt;/em>&lt;/p>
&lt;p>一查才发现，Chrome 等浏览器会限制部分特殊端口的网页访问，这些端口一般都已经有特殊的作用。&lt;/p>
&lt;p>&lt;a href="https://www.jianshu.com/p/40f79f584eae">https://www.jianshu.com/p/40f79f584eae&lt;/a>&lt;/p>
&lt;p>这里列出 1000 以上的部分会有相关问题的端口，别的不说，感觉&lt;code>6000&lt;/code>和&lt;code>6666&lt;/code>还是很容易一不小心就会设置的端口。。。。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-c" data-lang="c"> &lt;span style="color:#ae81ff">2049&lt;/span>, &lt;span style="color:#75715e">// nfs
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#ae81ff">3659&lt;/span>, &lt;span style="color:#75715e">// apple-sasl / PasswordServer
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#ae81ff">4045&lt;/span>, &lt;span style="color:#75715e">// lockd
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#ae81ff">6000&lt;/span>, &lt;span style="color:#75715e">// X11
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#ae81ff">6665&lt;/span>, &lt;span style="color:#75715e">// Alternate IRC
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#ae81ff">6666&lt;/span>, &lt;span style="color:#75715e">// Alternate IRC
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#ae81ff">6667&lt;/span>, &lt;span style="color:#75715e">// Standard IRC
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#ae81ff">6668&lt;/span>, &lt;span style="color:#75715e">// Alternate IRC
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#ae81ff">6669&lt;/span>, &lt;span style="color:#75715e">// Alternate IRC
&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Chrome、FireFox 等都会有类似的行为，换多少浏览器、换多少版本可能也都不行。。。&lt;/p>
&lt;p>根据网友描述，部分特殊情况下，其他可能会被拦截的端口也包括&lt;code>8080&lt;/code>，&lt;code>8443&lt;/code>，&lt;code>10080&lt;/code>。&lt;/p>
&lt;p>总之，日常映射端口还是选取&lt;code>10000&lt;/code>以上的高位端口吧，避免不必要的麻烦：）&lt;/p></description></item><item><title>论如何下载任意网站视频</title><link>/posts/%E8%AE%BA%E5%A6%82%E4%BD%95%E4%B8%8B%E8%BD%BD%E4%BB%BB%E6%84%8F%E7%BD%91%E7%AB%99%E8%A7%86%E9%A2%91/</link><pubDate>Mon, 09 May 2022 00:00:00 +0000</pubDate><guid>/posts/%E8%AE%BA%E5%A6%82%E4%BD%95%E4%B8%8B%E8%BD%BD%E4%BB%BB%E6%84%8F%E7%BD%91%E7%AB%99%E8%A7%86%E9%A2%91/</guid><description>
&lt;!-- # 论如何下载任意网站视频 -->
&lt;p>视频已然成为当今互联网上信息传播的一个重要载体，有时会需要下载一些网上某个站点的视频插入 PPT，或者视频素材，无论是自己用抑或单纯是给朋友帮个忙，掌握一些使用的下载视频的小技巧总是不会错的，这里分享一些自用的小技巧，包括热门站点下载工具，以及应对冷门网站视频下载的技巧，应该可以覆盖 99.9% 的视频下载场景&lt;/p>
&lt;h2 id="热门网站电影电视剧下载">
热门网站电影/电视剧下载
&lt;a href="#%e7%83%ad%e9%97%a8%e7%bd%91%e7%ab%99%e7%94%b5%e5%bd%b1%e7%94%b5%e8%a7%86%e5%89%a7%e4%b8%8b%e8%bd%bd" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>这种其实建议直接找对应资源而不是从源站点下载，百度云，阿里云盘等找资源的方式我就不再赘述了，网上教程多的是。如果是电影资源或者是欧美、日韩的剧，可以搜索 BT 资源自行下载。&lt;/p>
&lt;p>这里安利一个油猴脚本：&lt;a href="https://greasyfork.org/zh-CN/scripts/329484-%E8%B1%86%E7%93%A3%E8%B5%84%E6%BA%90%E4%B8%8B%E8%BD%BD%E5%A4%A7%E5%B8%88-1%E7%A7%92%E6%90%9E%E5%AE%9A%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1-%E9%9F%B3%E4%B9%90-%E5%9B%BE%E4%B9%A6%E4%B8%8B%E8%BD%BD">豆瓣资源下载大师&lt;/a>，可以在豆瓣的影视详情页右侧显示有资源的站点，非常方便&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202205091548956.png" alt="image-20220509144533549">&lt;/p>
&lt;p>分享下个人常用的下载站点：&lt;/p>
&lt;ul>
&lt;li>欧美资源下载：&lt;a href="https://www.1337x.to/">1337X&lt;/a>&lt;/li>
&lt;li>欧美资源下载：&lt;a href="https://piratebay.live/">海盗湾&lt;/a>&lt;/li>
&lt;li>动漫资源下载：&lt;a href="https://acg.rip/?term=JOJO%E7%9A%84%E5%A5%87%E5%A6%99%E5%86%92%E9%99%A9">ACG RIP&lt;/a>&lt;/li>
&lt;li>中文字幕下载：&lt;a href="http://zimuku.org">字幕库&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>个人推荐的下载工具：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.qbittorrent.org">qBittorrent&lt;/a>：强推，老牌专业 BT 工具，有图形化界面，&lt;a href="https://hub.docker.com/r/linuxserver/qbittorrent">支持 Docker 部署&lt;/a>且带 Web 界面&lt;/li>
&lt;li>&lt;a href="http://aria2.github.io">aria2&lt;/a>：强大的命令行下载工具，灵活但上手成本略高，可&lt;a href="https://ariang.mayswind.net/zh_Hans/">自行部署 Web GUI 界面&lt;/a>，也可使用&lt;a href="http://ariang.mayswind.net/latest">公开版本 demo&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://motrix.app">Motrix&lt;/a>：高颜值跨平台的下载工具，有漂亮的 GUI 界面，底层基于 aria2&lt;/li>
&lt;/ul>
&lt;p>Tracker 列表：&lt;/p>
&lt;ul>
&lt;li>一个独立的收集 trackerlist 的页面：&lt;a href="https://trackerslist.com/#/zh">https://trackerslist.com/#/zh&lt;/a>&lt;/li>
&lt;li>通用 tracker list：&lt;a href="https://github.com/ngosang/trackerslist">ngosang/trackerslist&lt;/a>&lt;/li>
&lt;li>动漫资源 tracker list：&lt;a href="https://github.com/DeSireFire/animeTrackerList">animeTrackerList&lt;/a> (๑•̀ㅂ•́)و✧&lt;/li>
&lt;/ul>
&lt;h2 id="热门站点普通视频资源下载">
热门站点普通视频资源下载
&lt;a href="#%e7%83%ad%e9%97%a8%e7%ab%99%e7%82%b9%e6%99%ae%e9%80%9a%e8%a7%86%e9%a2%91%e8%b5%84%e6%ba%90%e4%b8%8b%e8%bd%bd" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>如果是 UGC 内容，比如 B 站用户上传的视频，那么 BT 通常是没有资源的，需要单独从源网站下载。不过既然是热门站点，都有很多人造过轮子了，这里推荐几个&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/ytdl-org/youtube-dl">YouTube-DL&lt;/a>&lt;/strong>&lt;/p>
&lt;p>一款强大的命令行视频下载工具，别看人家名字只写了 youtube，但其实国内爱优腾都是支持的。命令行调用也非常简洁，&lt;a href="https://github.com/ytdl-org/youtube-dl">知乎也有教程&lt;/a>需要的话可以瞅瞅。&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/yt-dlp/yt-dlp">YT-DLP（YouTube DownLoader Plus）&lt;/a>&lt;/strong>&lt;/p>
&lt;p>YouTube-DL 的一个分支，包括一些 bug 修复和增强的特性&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/iawia002/lux">Lux（原名 Annie）&lt;/a>&lt;/strong>&lt;/p>
&lt;p>Golang 编写的一个视频下载工具，同样支持国内站点&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://www.flvcd.com/index.htm">硕鼠&lt;/a>&lt;/strong>&lt;/p>
&lt;p>很早之前就出的一款免费视频下载合并工具，主要针对国内视频网站，但是像腾讯视频这种之前发过律师函，人家就迫不得已取消了支持。Windows 版，有界面，对于不是那么热门但是稍微又有点名气的网站支持较好&lt;/p>
&lt;h2 id="冷门站点普通视频资源下载">
冷门站点普通视频资源下载
&lt;a href="#%e5%86%b7%e9%97%a8%e7%ab%99%e7%82%b9%e6%99%ae%e9%80%9a%e8%a7%86%e9%a2%91%e8%b5%84%e6%ba%90%e4%b8%8b%e8%bd%bd" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>冷门站点的资源得我们自己动手了，不过利用浏览器的开发人员工具还是很容易获取的资源的。右键找到开发人员选项打开开发人员工具，可以点击左上角的按钮选择网页元素，找到&lt;code>&amp;lt;video&amp;gt;&lt;/code>标签，里面一般会有一个链接地址，复制地址打开即可。&lt;/p>
&lt;p>这种简单的视频嵌入很容易下载，浏览器工具也很容易嗅探到。比如可以使用&lt;code>专业视频下载工具&lt;/code>插件，你可以&lt;a href="https://ext.chrome.360.cn/webstore/detail/noaehhegaeigebicejggjdecdkfphced">访问 360 插件中心下载&lt;/a>。这种工具很多，这里不再赘述&lt;/p>
&lt;p>链接后缀为&lt;code>mp4&lt;/code>的一般来说都是说明该网页上面的视频只是从那一个文件加载的，没有经过分片和其他处理。如果没有后缀名，或者是&lt;code>flv&lt;/code>、&lt;code>ts&lt;/code>或者链接含有&lt;code>m3u8&lt;/code>字样的，说明该网页的资源是经过分片的，需要我们动点手段。&lt;/p>
&lt;h2 id="冷门站点-m3u8-动态分片视频资源下载">
冷门站点 m3u8 动态分片视频资源下载
&lt;a href="#%e5%86%b7%e9%97%a8%e7%ab%99%e7%82%b9-m3u8-%e5%8a%a8%e6%80%81%e5%88%86%e7%89%87%e8%a7%86%e9%a2%91%e8%b5%84%e6%ba%90%e4%b8%8b%e8%bd%bd" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>以中国庭审网的庭审录像视频为例，打开开发者工具定位到视频的部分发现 video 标签里面的 url 很奇怪，访问该链接也并不能访问到有效的视频。这种网页一般都是通过 m3u8 来下发分片文件的信息&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202205091548957.png" alt="image-20220509151813071">&lt;/p>
&lt;p>打开开发者工具的网络选项卡，监听网络活动，点击播放视频，会多出来很多条目分别代表每一个网络请求。在搜索框输入 m3u8 来进行过滤。定位到该请求后可以在新标签页打开，保存这个 m3u8 文件。&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202205091548958.png" alt="image-20220509144410278">&lt;/p>
&lt;p>之后我们可以利用 ffmpeg 载入这个 m3u8 文件并进行合并，如有需要可一并进行转码操作&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">ffmpeg -i xxxx.m3u8 -c xxxx.mp4
&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果报错提示不支持的 protocol，那么需要再加个参数让 ffmpeg 使用 http 下载&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">ffmpeg -protocol_whitelist concat,file,http,https,tcp,tls,crypto -i xxxx.m3u8 -c copy xxxx.mp4
&lt;/code>&lt;/pre>&lt;/div>&lt;p>接下来等待命令跑完，我们就可以得到需要的视频文件了。&lt;/p>
&lt;p>其他常用处理命令&lt;/p>
&lt;p>使用&lt;code>-i&lt;/code>参数读取文件，查看详细参数&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">ffmpeg -i xxxx.mp4
&lt;/code>&lt;/pre>&lt;/div>&lt;p>使用 ffmepg 提取视频中的音频部分，方便后续处理。比如要生成字幕或是转写为文本，省的上传几百兆的视频文件。&lt;a href="https://jianwai.youdao.com/">网易见外工作台&lt;/a>做这些很方便，而且免费额度也很足，安利一波&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">ffmpeg -i xxxx.mp4 -vn -codec copy xxxx.aac
&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202205091548959.png" alt="image-20220509153021601">&lt;/p>
&lt;p>解析并下载 m3u8 视频的其他方案&lt;/p>
&lt;ul>
&lt;li>使用硕鼠解析：https://www.flvcd.com/index.htm&lt;/li>
&lt;li>使用 Chrome 插件：&lt;a href="https://chrome.google.com/webstore/detail/video-downloader-cococut/gddbgllpilhpnjpkdbopahnpealaklle">CoCoCut&lt;/a>，&lt;a href="https://github.com/xifangczy/cat-catch">猫抓 (cat-catch)&lt;/a>&lt;/li>
&lt;li>使用油猴脚本：&lt;a href="https://greasyfork.org/zh-CN/scripts/440577-m3u8-%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD-vip%E8%A7%A3%E6%9E%90%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD-%E7%BD%91%E7%AB%99%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD">m3u8-downloader&lt;/a>，配套工具&lt;a href="https://github.com/Momo707577045/m3u8-downloader">地址&lt;/a>&lt;/li>
&lt;li>使用软件：&lt;a href="http://www.neatdownloadmanager.com/index.php/en/">NeatDownloadManager&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>以上&lt;/p></description></item><item><title>RSSManX 安装部署指南</title><link>/posts/rssmanx%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97/</link><pubDate>Sat, 07 May 2022 00:00:00 +0000</pubDate><guid>/posts/rssmanx%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97/</guid><description>
&lt;!-- # RSSManX 安装部署指南 -->
&lt;p>RSS Man X 是我两年前入坑 RSS 后，为了方便更多人更方便地使用 RSS 所发起的一个项目，主要是用 docker-compose 整合了一些常用的服务如 TTRSS、RSSHub、Huginn、OpenCC 等并进行了一些优化调整，如自动更新，反反爬虫等。这篇文章会尽可能详尽地讲解安装部署的步骤以及安装过程中可能会遇到的一些问题。&lt;/p>
&lt;p>RSS Man X 会利用到 docker 和 docker-compose，首先需要确保你的服务器正确安装了这些软件&lt;/p>
&lt;h2 id="1-docker-环境准备">
1. Docker 环境准备
&lt;a href="#1-docker-%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>检查服务器中是否已经安装了 docker 和 docker-compose，并检查他们的版本是否太老。比如输入&lt;code>docker --version&lt;/code>来检查 docker 的版本&lt;/p>
&lt;p>docker 的版本建议不要低于 19，docker-compose 的版本建议不要低于 1.20&lt;br>
(注：Docker 新版本可使用&lt;code>docker compose&lt;/code> 替代 &lt;code>docker-compose&lt;/code>)&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">~ » docker --version
Docker version 20.10.12, build 20.10.12-0ubuntu2~20.04.1
&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">~ » docker-compose --version
docker-compose version 1.25.0, build unknown
&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果上面命令执行后提示&lt;code>command not found&lt;/code>，那么说明并没有安装对应的软件包（或是安装的路径并不在当前用户的 PATH 变量中，尝试切换到 root 操作，详细的原因和解决方法见后文）&lt;/p>
&lt;h3 id="11-ubuntudebian-安装-docker">
1.1 Ubuntu/Debian 安装 Docker
&lt;a href="#11-ubuntudebian-%e5%ae%89%e8%a3%85-docker" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>ubuntu 和 debian 主要是用 apt 安装和管理软件包，可以使用以下命令来安装，根据实际情况选择是否要加 sudo。下面以 Ubuntu 为例。Debian 下的安装略有不同，可以参见&lt;a href="https://docs.docker.com/engine/install/debian/">Docker 官方文档&lt;/a>，以及&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/">清华镜像源&lt;/a>。其中&lt;code>download.docker.com&lt;/code>连接不同的可以尝试讲域名部分更换为&lt;a href="https://mirrors.ustc.edu.cn/help/docker-ce.html">中科大提供的镜像&lt;/a>地址&lt;code>mirrors.ustc.edu.cn/docker-ce&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">&lt;span style="color:#75715e"># 首先移除老旧的软件包&lt;/span>
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
&lt;span style="color:#75715e"># 安装一些必要的依赖&lt;/span>
sudo apt-get install &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> ca-certificates &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> curl &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> gnupg &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> lsb-release
&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果你的服务器在墙外，可以直接使用 docker 官方的软件源&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> &lt;span style="color:#e6db74">&amp;#34;deb [arch=&lt;/span>&lt;span style="color:#66d9ef">$(&lt;/span>dpkg --print-architecture&lt;span style="color:#66d9ef">)&lt;/span>&lt;span style="color:#e6db74"> signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
&lt;/span>&lt;span style="color:#e6db74"> &lt;/span>&lt;span style="color:#66d9ef">$(&lt;/span>lsb_release -cs&lt;span style="color:#66d9ef">)&lt;/span>&lt;span style="color:#e6db74"> stable&amp;#34;&lt;/span> | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果你的服务器在墙内，可以使用由中科大提供的镜像&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> &lt;span style="color:#e6db74">&amp;#34;deb [arch=&lt;/span>&lt;span style="color:#66d9ef">$(&lt;/span>dpkg --print-architecture&lt;span style="color:#66d9ef">)&lt;/span>&lt;span style="color:#e6db74"> signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
&lt;/span>&lt;span style="color:#e6db74"> &lt;/span>&lt;span style="color:#66d9ef">$(&lt;/span>lsb_release -cs&lt;span style="color:#66d9ef">)&lt;/span>&lt;span style="color:#e6db74"> stable&amp;#34;&lt;/span> | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
&lt;/code>&lt;/pre>&lt;/div>&lt;p>导入 docker 软件源后即可开始安装 docker，安装完成后可以输入&lt;code>docker --version&lt;/code>来检查 docker 的版本&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="12-centosfedora-安装-docker">
1.2 CentOS/Fedora 安装 Docker
&lt;a href="#12-centosfedora-%e5%ae%89%e8%a3%85-docker" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>CentOS 和 Fedora 使用 yum 安装和管理软件包，新版本则是使用 dnf，不过两者功能一致且高度兼容。下面以 CentOS 为例，Fedora 可参见&lt;a href="https://docs.docker.com/engine/install/fedora/">官方文档&lt;/a>或&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/">清华镜像源&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">&lt;span style="color:#75715e"># 1. 首先移除老旧的软件包&lt;/span>
sudo yum remove docker &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> docker-client &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> docker-client-latest &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> docker-common &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> docker-latest &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> docker-latest-logrotate &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> docker-logrotate &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> docker-engine
&lt;span style="color:#75715e"># 2.&lt;/span>
sudo yum install -y yum-utils
&lt;span style="color:#75715e"># 3.A 之后使用官方docker软件库&lt;/span>
sudo yum-config-manager &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> --add-repo &lt;span style="color:#ae81ff">\
&lt;/span>&lt;span style="color:#ae81ff">&lt;/span> https://download.docker.com/linux/centos/docker-ce.repo
&lt;span style="color:#75715e"># 3.B 墙内方案&lt;/span>
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo sed -i &lt;span style="color:#e6db74">&amp;#39;s+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+&amp;#39;&lt;/span> /etc/yum.repos.d/docker-ce.repo
&lt;span style="color:#75715e"># 4. 即可开始安装&lt;/span>
sudo yum update
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="13-安装或更新-docker-compose">
1.3 安装或更新 docker-compose
&lt;a href="#13-%e5%ae%89%e8%a3%85%e6%88%96%e6%9b%b4%e6%96%b0-docker-compose" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>docker-compose 目前有两个主要版本 V1 和 V2，都是可用的。V1 使用 Python 编写，使用时类似&lt;code>sudo docker-compose up -d&lt;/code>，V2 则是 Golang 编写，与前者高度兼容，但是是作为 docker 的插件安装的，使用时类似&lt;code>sudo docker compose up -d&lt;/code>，中间的短杠不需要了。&lt;/p>
&lt;p>如果是按照上文的步骤安装的 docker，那么默认已经安装了 docker compose v2，可以通过&lt;code>docker compose version&lt;/code>查看版本&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">~ » docker compose version
Docker Compose version v2.3.3
&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果需要是安装的比较老的 v1 版本的 docker-compose，想要单纯更新 docker-compose 而又不想动其他东西的话，可以更新安装 v1 版本的 docker-compose。&lt;/p>
&lt;p>首先删除老旧版本（如果有的话）&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">rm $DOCKER_CONFIG/cli-plugins/docker-compose
sudo rm /usr/local/lib/docker/cli-plugins/docker-compose
pip uninstall docker-compose
&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后使用 pip 来安装&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">pip3 install docker-compose
&lt;/code>&lt;/pre>&lt;/div>&lt;p>墙内也可以临时使用镜像源下载&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple
&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果提示 pip 命令不存在需要先安装一下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">&lt;span style="color:#75715e"># Ubuntu/Debian&lt;/span>
sudo apt install python3-pip
&lt;span style="color:#75715e"># CentOS/Fedora&lt;/span>
sudo yum install python3-pip
&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果 pip 报错试着升级一下 pip 的版本&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="14-为-docker-配置镜像源">
1.4 为 Docker 配置镜像源
&lt;a href="#14-%e4%b8%ba-docker-%e9%85%8d%e7%bd%ae%e9%95%9c%e5%83%8f%e6%ba%90" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>如果 Docker 下载镜像非常慢，你可能需要单独配置一下 Docker 的镜像源。==&lt;strong>注意：Docker 安装软件源的镜像和 Docker 镜像或者说映像的国内源并不是同一个，英文表述可能更准确一些：&lt;/strong>==&lt;/p>
&lt;ul>
&lt;li>上文安装 docker 时配置的是 docker 的 repo，repo 里含有 docker 的软件包，&lt;a href="https://mirrors.ustc.edu.cn/help/docker-ce.html">国内的镜像&lt;/a>为 Docker CE 安装软件包的镜像&lt;/li>
&lt;li>现在我们要配置的是 Docker Hub 的 Mirror，Docker 里拉取 Image 默认会访问&lt;a href="https://hub.docker.com">Docker Hub&lt;/a>，国内有多个 Docker Hub 镜像或是 Docker 镜像加速器，如&lt;a href="https://mirrors.ustc.edu.cn/help/dockerhub.html">中科大的源&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>在&lt;code>/etc/docker/daemon.json&lt;/code>文件中写入以下内容，如不存在可先行创建，注意 json 中列表的最后一项末尾是没有逗号的&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">{
&lt;span style="color:#f92672">&amp;#34;registry-mirrors&amp;#34;&lt;/span>: [
&lt;span style="color:#e6db74">&amp;#34;https://hub-mirror.c.163.com&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://mirror.baidubce.com&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://docker.nju.edu.cn&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://docker.mirrors.sjtug.sjtu.edu.cn&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://dockerproxy.com&amp;#34;&lt;/span>,
&lt;span style="color:#e6db74">&amp;#34;https://docker.m.daocloud.io&amp;#34;&lt;/span>
]
}
&lt;/code>&lt;/pre>&lt;/div>&lt;p>update 20230720: 部分镜像源不再可用，更新镜像源配置。参考 &lt;a href="https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6">https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6&lt;/a>&lt;/p>
&lt;p>配置完成后&lt;code>sudo systemctl restart docker&lt;/code>重启 docker 服务，然后输入&lt;code>sudo docker info&lt;/code>，在输出结果的末尾可以看到&lt;code>Registry Mirrors&lt;/code>里会出现我们刚刚配置的 Docker Hub 镜像&lt;/p>
&lt;p>群辉等 NAS 的系统并不是标准版 Linux，安装的也是魔改版 docker，上面的配置文件地址并不适用，建议自行搜索对应的文档或教程。&lt;/p>
&lt;h2 id="2-安装-rss-man-x">
2. 安装 RSS Man X
&lt;a href="#2-%e5%ae%89%e8%a3%85-rss-man-x" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>&lt;a href="https://github.com/Colin-XKL/RSSmanX">RSS MAN X 项目&lt;/a>旨在为 RSS 的同好提供一个方便地搭建自己的 RSS 服务的捷径，毕竟不是所有 RSS 爱好者都懂代码 😂。RSS Man X 能够有 RSS 订阅管理、RSS 在线阅读界面，进阶功能包括服务健康自检、海外站点 RSS 解锁等，提供不同的版本供选择，三个版本的 &lt;code>docker-compose&lt;/code> 文件对应不同的需求，包含的组件和服务有差异。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>组件 / 服务 / 功能名称&lt;/th>
&lt;th>标准版&lt;/th>
&lt;th>Lite 版&lt;/th>
&lt;th>Ultimate 版 ✨&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>TTRSS&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>RSSHub&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Huginn&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mercury&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>OpenCC&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Redis&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Browserless&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>数据持久化保存&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>容器自动更新&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>容器健康检查&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>海外站点加速&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>智能路由&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>反反爬虫&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="21-安装流程">
2.1 安装流程
&lt;a href="#21-%e5%ae%89%e8%a3%85%e6%b5%81%e7%a8%8b" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>安装好了 &lt;code>docker&lt;/code> 和 &lt;code>docker-compose&lt;/code> 后，可以使用&lt;code>git clone https://github.com/Colin-XKL/RSSmanX --depth=1&lt;/code>快速克隆本仓库，也可以通过&lt;a href="https://archive.fastgit.org/Colin-XKL/RSSmanX/archive/refs/heads/master.zip">这个镜像地址&lt;/a>下载仓库 zip 文件，&lt;a href="https://gitee.com/colin-xkl/RSSmanX">Gitee 上也有镜像&lt;/a>不过不经常更新。&lt;/p>
&lt;ol>
&lt;li>cd 进入文件夹，修改&lt;code>.env&lt;/code>中的值，如密码和 TTRSS 入口 URL 等&lt;/li>
&lt;li>运行 &lt;code>sudo docker-compose up -d&lt;/code>&lt;/li>
&lt;li>等待程序跑完&lt;/li>
&lt;li>安装完成 ✅&lt;/li>
&lt;/ol>
&lt;h3 id="22-相关事宜">
2.2 相关事宜
&lt;a href="#22-%e7%9b%b8%e5%85%b3%e4%ba%8b%e5%ae%9c" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>访问你设置的 &lt;code>SELF_URL&lt;/code> 即可看到 Tiny Tiny RSS 的登陆页面，使用默认账户 &lt;code>admin&lt;/code>，密码 &lt;code>password&lt;/code> 登陆即可开始使用&lt;/p>
&lt;/li>
&lt;li>
&lt;p>如开启海外站点解锁支持，第一次冷启动需要等待 3-5 分钟才能完全启动所有组件。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>数据默认保存位置&lt;code>~/.docker/Database&lt;/code>（注意以执行 docker 命令的用户为准，如使用 root 账户执行，则文件位于 root 用户 home 目录）&lt;/p>
&lt;/li>
&lt;li>
&lt;p>默认情况下只有 TTRSS 和 Huginn 可以从外部访问，其他组件互相可以访问但不能直接从外部访问以提高安全性。组件间互相访问可以使用&lt;code>容器名+指定端口&lt;/code>，端口默认为 80，如&lt;code>http://rsshub/xxxxx&lt;/code>即可访问到 RSS Man X 内的监听 80 端口的 rsshub 实例。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>在 TTRSS 中将原来订阅的 &lt;code>https://rsshub.app/*&lt;/code> 更改为 &lt;code>http://rsshub/*&lt;/code> 即可使用 RSS Man X 内的自建 RSSHub 实例，并激活反反爬虫和海外源加速等功能&lt;/p>
&lt;/li>
&lt;li>
&lt;p>如无法访问 rsshub 的官方文档站点，可以使用我维护的反代站点&lt;a href="https://rsshub-doc.azure.colinx.one/">https://rsshub-doc.azure.colinx.one/&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>关于 ARM 平台的支持可查阅&lt;a href="https://github.com/Colin-XKL/RSSmanX/issues/5">置顶的 issue&lt;/a>，替换部分不支持 arm 架构的 docker 镜像为支持 arm 的镜像即可。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>RSS Man X 的除 lite 以外的版本默认包含了自托管的 mercury 实例，你只需要在插件配置页面设置 mercury 实例地址为 &lt;code>service.mercury:3000&lt;/code> 即可，同理，OpenCC 实例地址为&lt;code>service.opencc:3000&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>如果部分 RSS 源不能订阅，检查是否使用了非常规端口。在&lt;code>.env&lt;/code>文件中设置&lt;code>RSS_ALLOW_PORTS&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>若部署后某个应用一直无法通过浏览器访问，请检查是否绑定到了&lt;code>6000&lt;/code>/&lt;code>6666&lt;/code>等特殊端口，浏览器会拦截对这些端口的访问参见&lt;a href="https://blog.colinx.one/posts/docker-compose%E7%9A%84%E9%94%99%E8%AF%AF%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/">这里&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>ls&lt;/code>没有显示&lt;code>.env&lt;/code>文件是因为以点开头的文件在 Linux 中都是默认隐藏的，可以使用&lt;code>ls -a&lt;/code>查看到&lt;/p>
&lt;/li>
&lt;li>
&lt;p>vi/vim 编辑文本太麻烦可以尝试使用 nano&lt;/p>
&lt;/li>
&lt;li>
&lt;p>RSS Man 里所有容器绑定了服务器的/etc/localtime，使用&lt;code>sudo timedatectl set-timezone Asia/Shanghai&lt;/code> 设定系统的时区为上海后，容器里的时区也可以同步，这样日志里的时间就是东八区了&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>获取帮助&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>For Tiny tiny RSS problems:&lt;/strong>
&lt;a href="https://tt-rss.org/wiki.php">https://tt-rss.org/wiki.php&lt;/a>
&lt;a href="http://ttrss.henry.wang/">http://ttrss.henry.wang/&lt;/a>&lt;/li>
&lt;li>&lt;strong>For RSSHub problems:&lt;/strong>
&lt;a href="https://docs.rsshub.app/faq.html">https://docs.rsshub.app/faq.html&lt;/a>&lt;/li>
&lt;li>&lt;strong>For Huginn problems:&lt;/strong>
&lt;a href="https://github.com/huginn/huginn#readme">https://github.com/huginn/huginn#readme&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="23-链接">
2.3 链接
&lt;a href="#23-%e9%93%be%e6%8e%a5" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://blog.colinx.one/posts/%E6%88%91%E7%9A%84rss%E6%96%B9%E6%A1%88%E4%B8%8E%E5%BF%83%E5%BE%97/">我的 RSS 方案与心得&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Colin-XKL/RSSmanX">RSS Man X GitHub repo&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.colinx.one/posts/huginn%E6%8C%87%E5%8D%97%E4%B8%BA%E4%BB%BB%E6%84%8F%E7%BD%91%E7%AB%99%E5%88%B6%E4%BD%9Crss/">Huginn 指南：为任意网站制作 RSS&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.colinx.one/posts/docker-compose%E7%9A%84%E9%94%99%E8%AF%AF%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/">docker compose 的错误使用姿势&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>