<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>大肥鱼的博客</title><description>技术笔记 · 学习记录</description><link>https://dafeiyu-blog.pages.dev/</link><language>zh_CN</language><item><title>阿里云 ECS 从零搭建 QQ 机器人与博客服务</title><link>https://dafeiyu-blog.pages.dev/posts/ecs-qq-bot-setup/</link><guid isPermaLink="true">https://dafeiyu-blog.pages.dev/posts/ecs-qq-bot-setup/</guid><description>记录一次完整的云服务器初始化：Docker、NapCat、AstrBot、安全加固与备份</description><pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;背景&lt;/h2&gt;
&lt;p&gt;用 99 元/年的阿里云 ECS（2C2G、40G 云盘、3M 带宽）搭建个人服务：
部署 NapCat + AstrBot 实现 QQ 群机器人，同时作为后续博客的备选托管。&lt;/p&gt;
&lt;p&gt;这篇记录踩过的坑和最终方案。&lt;/p&gt;
&lt;h2&gt;一、服务器初始化&lt;/h2&gt;
&lt;h3&gt;换源&lt;/h3&gt;
&lt;p&gt;阿里云默认源在境外，换成内网源：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sed -i &apos;s|mirrors.cloud.aliyuncs.com|mirrors.aliyun.com|g&apos; /etc/apt/sources.list
apt update &amp;amp;&amp;amp; apt upgrade -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Swap&lt;/h3&gt;
&lt;p&gt;2G 内存跑 Docker + Python 会吃紧，加 2G Swap：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo &apos;/swapfile none swap sw 0 0&apos; &amp;gt;&amp;gt; /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;时区与字体&lt;/h3&gt;
&lt;p&gt;QQ 客户端在容器里需要中文字体，否则二维码是方块：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;timedatectl set-timezone Asia/Shanghai
apt install -y fonts-noto-cjk fontconfig
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二、Docker 安装与镜像加速&lt;/h2&gt;
&lt;p&gt;国内直连 Docker Hub 超时，配置镜像源：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;registry-mirrors&quot;: [&quot;https://m.daocloud.io&quot;],
  &quot;log-driver&quot;: &quot;json-file&quot;,
  &quot;log-opts&quot;: { &quot;max-size&quot;: &quot;10m&quot;, &quot;max-file&quot;: &quot;3&quot; }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：阿里云加速器只代理官方镜像，第三方镜像（如 mlikiowa/napcat-docker）会 404。
实测 &lt;code&gt;m.daocloud.io/docker.io/&amp;lt;image&amp;gt;&lt;/code&gt; 可用，但会限流，需重试循环。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;三、NapCat 部署&lt;/h2&gt;
&lt;p&gt;关键：&lt;strong&gt;不要把宿主目录挂到 /app&lt;/strong&gt;，会覆盖镜像里的程序。&lt;/p&gt;
&lt;p&gt;正确的挂载点：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;volumes:
  - ./qq:/app/.config
  - ./napcat-config:/app/napcat/config
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;四、AstrBot 接入&lt;/h2&gt;
&lt;p&gt;AstrBot 的 aiocqhttp 只支持&lt;strong&gt;反向 WS&lt;/strong&gt;（自己当服务端），所以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AstrBot 监听 &lt;code&gt;6199&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;NapCat 配 &lt;code&gt;websocketClients&lt;/code&gt; 连 &lt;code&gt;ws://172.17.0.1:6199/ws&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;路径必须是 &lt;code&gt;/ws&lt;/code&gt;&lt;/strong&gt;，少了会 405。&lt;/p&gt;
&lt;h2&gt;五、安全加固&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;项&lt;/th&gt;
&lt;th&gt;做法&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SSH&lt;/td&gt;
&lt;td&gt;禁用密码，只允许密钥&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fail2ban&lt;/td&gt;
&lt;td&gt;5 次失败封 24 小时&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;安全组&lt;/td&gt;
&lt;td&gt;删除多余的 RDP 3389&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;端口&lt;/td&gt;
&lt;td&gt;WebUI 只绑 127.0.0.1，走 SSH 隧道&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;自动更新&lt;/td&gt;
&lt;td&gt;unattended-upgrades&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;备份&lt;/td&gt;
&lt;td&gt;每日 03:00 打包配置，保留 7 天&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;六、踩坑记录&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;镜像拉取&lt;/strong&gt;：三个镜像站全失败，最后用 &lt;code&gt;m.daocloud.io&lt;/code&gt; + 重试循环&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;容器 405&lt;/strong&gt;：反向 WS 少写 &lt;code&gt;/ws&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;白名单格式&lt;/strong&gt;：必须是 &lt;code&gt;平台:消息类型:群号&lt;/code&gt;，不是纯群号&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;唤醒前缀&lt;/strong&gt;：&lt;code&gt;[]&lt;/code&gt; 表示不唤醒，必须写 &lt;code&gt;[&quot;&quot;]&lt;/code&gt; 才能匹配所有消息&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;待办&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] 博客部署到 Cloudflare Pages&lt;/li&gt;
&lt;li&gt;[ ] 接入 Cloudflare Access 做访问控制&lt;/li&gt;
&lt;li&gt;[ ] 监控告警（磁盘/内存）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;本文由真实部署过程整理，命令均可复现。&lt;/em&gt;&lt;/p&gt;
</content:encoded></item></channel></rss>