<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/scripts/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:h="http://www.w3.org/TR/html4/"><channel><title>时光与我</title><description>纵马逐云，踏千里长路赏日月山河</description><link>https://timingme.com</link><item><title>我的车是自由的，但好像我不是</title><link>https://timingme.com/blog/free-truck-not-me</link><guid isPermaLink="true">https://timingme.com/blog/free-truck-not-me</guid><description>握着方向盘，却只能被关在铁盒子里 — 一个货车司机的真心话</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;我的车是自由的，但好像我不是&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;我看似握着方向盘，可以决定去往何方，但实际上，&lt;strong&gt;我的身体被安全带束缚在车头里狭窄的铁盒子里。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;今天跑在路上，看着方向盘和前面空荡荡的高速，脑子里突然冒出一个奇怪的念头：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;这车是自由的，我不是。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;今天跑了几百公里，跨了几个市，够自由了吧？想去哪一脚油门就去了。&lt;/p&gt;
&lt;p&gt;我不是个悲观的人，今天突然就觉得，像是被这铁壳子关了禁闭——虽然没有像牢笼那么夸张，但是&lt;strong&gt;下了车哪也去不了，上了车不管车车去哪，我还是在铁盒子里&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;三天打鱼两天晒网的例外，跑到哪玩到哪的例外——因为对于他们来说，这行真的很自由。&lt;/p&gt;
&lt;p&gt;正经开货车的，是真的&lt;strong&gt;没有时间停下来看看路边风景，不想也不敢&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;自由，其实我入行之前也是这么想的：想去哪去哪，想休息就休息。但真踩油门的是我，熬夜的是我，冬冷夏热的是我，看看余额嘴角一撇&lt;strong&gt;不敢回家&lt;/strong&gt;的还是我。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;草&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;真心奉劝，没入行别进来——不挣钱还特么累。想要自由的你就更别入行了，因为&lt;strong&gt;你的活动场地只会在车头里&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;你会活成一个和铁疙瘩融为一体的、&lt;strong&gt;莫得感情的挣钱机器&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;抽根烟，接着赶路。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这车离了我不行，我离了车活不了。&lt;strong&gt;就这么回事。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;🚛 同行的，看完记得继续赶路&lt;/h2&gt;
&lt;p&gt;如果你是同行——你懂的。&lt;/p&gt;
&lt;p&gt;如果还没入行——&lt;strong&gt;慎重&lt;/strong&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这行没有&quot;自由&quot;二字，只有&quot;熬&quot;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;抽完这根烟，下一单已经在路上。&lt;/em&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/free-not-truck.IO7CgqKN.webp"/><enclosure url="/_astro/free-not-truck.IO7CgqKN.webp"/></item><item><title>看，这是我年少时的头像</title><link>https://timingme.com/blog/about-logo</link><guid isPermaLink="true">https://timingme.com/blog/about-logo</guid><description>属于那个时代的年少无知又无畏</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://timingme.com/_astro/mohu.exHWQrHa_2foTeM.webp&quot; alt=&quot;模糊头像&quot;&gt;&lt;/p&gt;
&lt;h2&gt;追忆&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;相信用过的人很多&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;我用到大学毕业的头像，虽然看着很模糊，但记忆也模糊了。&lt;/p&gt;
&lt;p&gt;暴露年龄了，用过这头像的也暴露了。&lt;/p&gt;
&lt;p&gt;今天闲着没事瞎JB翻相册，看到这头像后怔了征，艹，&lt;strong&gt;我那一去不复返的青春啊，还给我好吗？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是我最喜欢的一个头像，承载了我那破烂青春的操蛋回忆。&lt;/p&gt;
&lt;p&gt;用了很多年，朋友们头像三天换两个，问我咋不换头像，我说：&lt;strong&gt;换你妹！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;回忆不能追忆，藏着吧，再想就写不下去了。&lt;/p&gt;
&lt;h2&gt;新头像&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;新博客新气象&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;本来想直接用这糊的发糊的旧头像，&lt;/p&gt;
&lt;p&gt;但有些机械化的脑子灵光一闪，用AI修复个这玩意儿看看效果？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;干！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本来想直接丢给&lt;strong&gt;豆包&lt;/strong&gt;的，但是昨天我问他我帅不帅，他居然在没看到我的情况下说我帅，一切不以事实为根据的夸赞都是在撒谎，麻的，&lt;strong&gt;骗人精&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://io.lizhenwei.cn/d/web/tm/Img/202607/doubao.jpg&quot; alt=&quot;好用的豆包&quot;&gt;&lt;/p&gt;
&lt;p&gt;我直接丢给&lt;strong&gt;Gemini&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://timingme.com/_astro/avatar.Dd0Ffn0S_Z2dfxfF.webp&quot; alt=&quot;高清头像&quot;&gt;&lt;/p&gt;
&lt;p&gt;没胡子也修出来胡渣了？秒变大叔！&lt;em&gt;&lt;strong&gt;连特么AI也知道我的青春不在了吗？&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;用！&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;新头像的使命&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;年纪大了&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;无论什么东西都不想换来换去了，&lt;em&gt;&lt;strong&gt;所以，前半生的模糊回忆，继续陪伴我的后半生可好？&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;换头像，
&lt;strong&gt;完结。&lt;/strong&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/mohu.exHWQrHa.jpg"/><enclosure url="/_astro/mohu.exHWQrHa.jpg"/></item><item><title>Astro MDX 组件使用完全指南</title><link>https://timingme.com/blog/mdx-components</link><guid isPermaLink="true">https://timingme.com/blog/mdx-components</guid><description>详细介绍 astro-theme-pure 内置的各类 MDX 组件用法。</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { Aside, Tabs, TabItem, Steps, Timeline, Spoiler, Icon } from &apos;astro-pure/user&apos;
import { GithubCard, LinkPreview } from &apos;astro-pure/advanced&apos;&lt;/p&gt;
&lt;h2&gt;mdx 组件使用实例&lt;/h2&gt;
&lt;p&gt;在 Astro 中使用 &lt;code&gt;.mdx&lt;/code&gt; 格式写文章，最大的好处是可以引入主题内置的交互组件，丰富排版。&lt;/p&gt;
&lt;h3&gt;引用示例&lt;/h3&gt;
&lt;p&gt;用到哪个组件就引用那个组件，按需选择，注意区别导入来源&lt;code&gt;from &apos;astro-pure/user&apos;&lt;/code&gt;或&lt;code&gt;from &apos;astro-pure/advanced&apos;&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import { Aside, Tabs, TabItem, Steps, Timeline, Spoiler, Icon } from &apos;astro-pure/user&apos;
import { GithubCard, LinkPreview } from &apos;astro-pure/advanced&apos;

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;组件总览表&lt;/h3&gt;
&lt;p&gt;| 组件名 | 导入来源 | 功能 | 典型场景 |
|---|---|---|---|
| &lt;code&gt;Aside&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 提示框（note/tip/danger 等类型） | 文中加提示、警告 |
| &lt;code&gt;Card&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 卡片容器，可放列表/任意内容 | 信息分组展示 |
| &lt;code&gt;Collapse&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 折叠展开块 | FAQ、隐藏细节 |
| &lt;code&gt;Tabs&lt;/code&gt; / &lt;code&gt;TabItem&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 选项卡切换 | 多语言/多方案对比 |
| &lt;code&gt;Timeline&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 时间线 | 履历、版本更新记录 |
| &lt;code&gt;Steps&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 步骤列表 | 教程操作步骤 |
| &lt;code&gt;CardList&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 卡片列表 | 资源/链接汇总 |
| &lt;code&gt;Button&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 按钮（支持 link / pill 样式） | 行动召唤按钮 |
| &lt;code&gt;Spoiler&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 剧透遮挡（hover 显示） | 隐藏答案、剧透内容 |
| &lt;code&gt;FormattedDate&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 格式化日期 | 统一日期展示 |
| &lt;code&gt;Label&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 小标签徽章 | 状态/分类标记 |
| &lt;code&gt;Svg&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | SVG 加载器 | 内联矢量图 |
| &lt;code&gt;Icon&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | 主题内置图标（github/bilibili/rss 等 40+） | 社交链接、装饰图标 |
| &lt;code&gt;MdxRepl&lt;/code&gt; | &lt;code&gt;astro-pure/user&lt;/code&gt; | MDX 代码演示器 | 实时预览代码渲染结果 |
| &lt;code&gt;Quote&lt;/code&gt; | &lt;code&gt;astro-pure/advanced&lt;/code&gt; | 随机名言（支持 Quotable / 一言 API） | 页脚随机语录 |
| &lt;code&gt;GithubCard&lt;/code&gt; | &lt;code&gt;astro-pure/advanced&lt;/code&gt; | GitHub 仓库卡片 | 展示开源项目 |
| &lt;code&gt;LinkPreview&lt;/code&gt; | &lt;code&gt;astro-pure/advanced&lt;/code&gt; | 链接预览卡片（自动抓取 OG 信息） | 友链、推荐文章 |
| &lt;code&gt;QRCode&lt;/code&gt; | &lt;code&gt;astro-pure/advanced&lt;/code&gt; | 二维码生成 | 扫码跳转 |
| &lt;code&gt;Toast&lt;/code&gt; | &lt;code&gt;astro-pure/advanced&lt;/code&gt; | 轻提示 | 复制成功等反馈 |
| &lt;code&gt;Medium Zoom&lt;/code&gt; | &lt;code&gt;astro-pure/advanced&lt;/code&gt; | 图片灯箱放大 | 文中图片点击放大 |&lt;/p&gt;
&lt;h2&gt;1. 提示框&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Aside&lt;/code&gt; 组件用于在文中插入醒目的提示，支持 &lt;code&gt;note&lt;/code&gt;（默认）、&lt;code&gt;tip&lt;/code&gt;、&lt;code&gt;danger&lt;/code&gt; 等类型。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;示例，可直接复制使用：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;#x3C;Aside type=&apos;tip&apos; title=&apos;小技巧&apos;&gt;
写代码前先喝口水。 
&amp;#x3C;/Aside&gt;

&amp;#x3C;Aside type=&apos;danger&apos; title=&apos;警告&apos;&gt;
不要在生产服务器上跑 `rm -rf /`。
&amp;#x3C;/Aside&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实际渲染效果：&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;2. 选项卡&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Tabs&lt;/code&gt; 和 &lt;code&gt;TabItem&lt;/code&gt; 组合使用，适合展示多语言或多方案的对比。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;示例，可直接复制使用：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;#x3C;Tabs&gt;
  &amp;#x3C;TabItem label=&apos;npm&apos;&gt;
bash
npm install astro

  &amp;#x3C;/TabItem&gt;
  &amp;#x3C;TabItem label=&apos;pnpm&apos;&gt;
bash
pnpm add astro

  &amp;#x3C;/TabItem&gt;
  &amp;#x3C;TabItem label=&apos;yarn&apos;&gt;
bash
yarn add astro

  &amp;#x3C;/TabItem&gt;
&amp;#x3C;/Tabs&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实际渲染效果：&lt;/strong&gt;


bash
npm install astro&lt;/p&gt;
&lt;h2&gt;3. Steps —— 步骤列表&lt;/h2&gt;
&lt;p&gt;自动识别有序列表并渲染为步骤样式
&lt;strong&gt;示例，可直接复制使用：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;#x3C;Steps&gt;

1. 安装依赖
2. 启动开发服务器
3. 编写第一篇文章
4. 构建并部署

&amp;#x3C;/Steps&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实际渲染效果：&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;4. Timeline —— 时间线&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;示例，可直接复制使用：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
&amp;#x3C;Timeline events={
  [
    { date: &apos;August 2021&apos;, content: &apos;Hello&apos; },
    { date: &apos;August 2022&apos;, content: &apos;&amp;#x3C;i&gt;World!&amp;#x3C;/i&gt;&apos; },
  ]
} /&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实际渲染效果：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;#x3C;Timeline events={
[
{ date: &apos;August 2021&apos;, content: &apos;Hello&apos; },
{ date: &apos;August 2022&apos;, content: &apos;World!&apos; },
]
} /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;更多请移步  &lt;a href=&quot;/docs/integrations/components&quot;&gt;Docs文档&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 更多请移步  &lt;a href=&quot;/docs/integrations/components&quot;&gt;Docs文档&lt;/a&gt;···&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded><h:img src="/_astro/astro-mdx-components.Dp6d6T-N.webp"/><enclosure url="/_astro/astro-mdx-components.Dp6d6T-N.webp"/></item><item><title>Astro 博客 Frontmatter 标准模板速查</title><link>https://timingme.com/blog/md-mdx-template</link><guid isPermaLink="true">https://timingme.com/blog/md-mdx-template</guid><description>基于 astro-theme-pure 官方示例整理的 Frontmatter 字段配置标准格式与功能说明。</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { Aside, Tabs, TabItem, Steps, Timeline, Spoiler, Icon } from &apos;astro-pure/user&apos;
import { GithubCard, LinkPreview } from &apos;astro-pure/advanced&apos;&lt;/p&gt;
&lt;h2&gt;md 标准模板。&lt;/h2&gt;
&lt;h3&gt;字段配置与功能说明&lt;/h3&gt;
&lt;p&gt;你可以直接复制下面这里的内容：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;---
title: &apos;文章标题&apos;                     # 【必填】显示在文章顶部及浏览器标签页
publishDate: &apos;May 10, 2025&apos;          # 【必填】发布日期，前台列表按此排序。格式如 &apos;May 10, 2025&apos; 或 2024-01-01
updatedDate: &apos;June 12, 2025&apos;         # 【可选】更新日期，显示“最后更新于”，对 SEO 友好
slug: &apos;my-custom-url&apos;                # 【可选】固定网址路径，改文件名也不会导致 404（生效）
description: &apos;文章摘要描述&apos;           # 【必填】列表卡片简介，同时用于搜索引擎 SEO 抓取
draft: false                         # 【可选】是否为草稿。true 为草稿不显示，false 为正常发布，默认 false
tags:                                # 【可选】用于标签云和文章分类
  - 标签1
  - 标签2
language: &apos;中文&apos;                     # 【可选】声明本文语言，适配多语言排版
heroImage: { src: &apos;./thumbnail.jpg&apos;, color: &apos;#9698C1&apos; }  # 【可选】封面图配置。必须是对象！src 为同目录相对路径，color 为加载前占位色
---

正文从这里开始写...

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;使用说明：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;代码块内#后面的内容在实际网页构建时会被自动忽略，不会显示在正文中，可删可不删。&lt;/li&gt;
&lt;li&gt;请确保 heroImage 的 src 指向的图片（如 thumbnail.jpg）与这个 .md 文件放在同一个文件夹里。如果不需要封面图，直接把 heroImage 这一整行删掉即可。&lt;/li&gt;
&lt;li&gt;冒号:后面必须有空格才能写代码或注释。&lt;/li&gt;
&lt;li&gt;严禁使用 Tab 键进行缩进，tags 下面的 - 前面必须用空格。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;mdx 标准模板。&lt;/h2&gt;
&lt;p&gt;MDX 的头部配置与 MD 完全一致，最大的区别在于结束的 --- 之后，可以紧跟着引入组件并在正文中使用它们。&lt;/p&gt;
&lt;h3&gt;字段配置与功能说明&lt;/h3&gt;
&lt;p&gt;你可以直接复制下面这里的内容：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-mdx&quot;&gt;---
title: &apos;文章标题&apos;                     # 【必填】显示在文章顶部及浏览器标签页
publishDate: &apos;May 10, 2025&apos;          # 【必填】发布日期，前台列表按此排序。格式如 &apos;May 10, 2025&apos; 或 2024-01-01
updatedDate: &apos;June 12, 2025&apos;         # 【可选】更新日期，显示“最后更新于”，对 SEO 友好
slug: &apos;my-custom-url&apos;                # 【可选】固定网址路径，改文件名也不会导致 404（生效）
description: &apos;文章摘要描述&apos;           # 【必填】列表卡片简介，同时用于搜索引擎 SEO 抓取
draft: false                         # 【可选】是否为草稿。true 为草稿不显示，false 为正常发布，默认 false
tags:                                # 【可选】用于标签云和文章分类
  - 标签1
  - 标签2
language: &apos;中文&apos;                     # 【可选】声明本文语言，适配多语言排版
heroImage: { src: &apos;./thumbnail.jpg&apos;, color: &apos;#9698C1&apos; }  # 【可选】封面图配置。必须是对象！src 为同目录相对路径，color 为加载前占位色
---

import { Aside } from &apos;astro-pure/user&apos;   # 【关键】mdx专属！在 --- 下方引入你需要的组件

正文从这里开始写，在.mdx 中，你可以直接像写 HTML 一样使用刚刚引入的组件：

&amp;#x3C;Aside type=&apos;tip&apos; title=&apos;这是一个提示框&apos;&gt;
  这里是提示框组件内部的文字内容。
&amp;#x3C;/Aside&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;使用说明：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;代码块内#后面的内容在实际网页构建时会被自动忽略，不会显示在正文中，可删可不删。&lt;/li&gt;
&lt;li&gt;import 语句必须紧跟在头部 --- 的下方，不能写在其他地方。&lt;/li&gt;
&lt;li&gt;请确保 heroImage 的 src 指向的图片（如 thumbnail.jpg）与这个 .mdx 文件放在同一个文件夹里。如果不需要封面图，直接把 heroImage 那一整行删掉即可。&lt;/li&gt;
&lt;li&gt;冒号:后面必须有空格才能写代码或注释。严禁使用 Tab 键进行缩进。&lt;/li&gt;
&lt;/ol&gt;</content:encoded><h:img src="/_astro/md-mdx.BK1TcjNv.webp"/><enclosure url="/_astro/md-mdx.BK1TcjNv.webp"/></item><item><title>小白 1Panel + Docker 部署 Astro pure 主题博客全过程</title><link>https://timingme.com/blog/1panel-astro</link><guid isPermaLink="true">https://timingme.com/blog/1panel-astro</guid><description>记录在 1Panel 环境下，使用 Docker 容器部署 Astro 主题astro-theme-pure 的完整过程。</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { Aside } from &apos;astro-pure/user&apos;&lt;/p&gt;
&lt;p&gt;本文记录了在 1Panel 环境下，使用 Docker 容器部署 Astro 的 astro-theme-pure 主题的全过程。&lt;/p&gt;
&lt;p&gt;全程可视化操作，少量命令，部署完后添加1panel的计划任务，自动构建发布文章，&lt;/p&gt;
&lt;p&gt;适用于只会html，而且还不会docker的小白，对，就是我，我也不会&lt;/p&gt;
&lt;p&gt;纯记录，下次安装就会忘了踩过的坑，忘了怎么装，会的大佬不用看了。&lt;/p&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87&quot;&gt;环境准备&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%9B%E5%BB%BA%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99%E4%B8%8E%E4%B8%8A%E4%BC%A0%E6%BA%90%E7%A0%81&quot;&gt;创建静态网站与上传源码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%9B%E5%BB%BA-node-%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83%E5%AE%B9%E5%99%A8&quot;&gt;创建 Node 运行环境容器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96&quot;&gt;安装依赖&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BF%AE%E6%94%B9%E6%9E%84%E5%BB%BA%E9%85%8D%E7%BD%AE%E4%B8%BA%E9%9D%99%E6%80%81%E6%A8%A1%E5%BC%8F&quot;&gt;修改构建配置为静态模式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BF%AE%E5%A4%8D%E8%BF%9C%E7%A8%8B%E5%A4%B4%E5%83%8F%E5%9F%9F%E5%90%8D%E9%97%AE%E9%A2%98&quot;&gt;修复远程头像域名问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9E%84%E5%BB%BA%E9%A1%B9%E7%9B%AE&quot;&gt;构建项目&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BF%AE%E6%94%B9%E7%BD%91%E7%AB%99%E8%BF%90%E8%A1%8C%E7%9B%AE%E5%BD%95%E4%B8%BA-dist&quot;&gt;修改网站运行目录为 dist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E9%85%8D%E7%BD%AE-https%E5%A6%82%E6%9E%9C%E5%9C%A8%E7%AC%AC%E4%B8%80%E6%AD%A5%E6%9C%AA%E5%AE%8C%E6%88%90&quot;&gt;配置 HTTPS（如果在第一步未完成）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%90%8E%E7%BB%AD%E6%9B%B4%E6%96%B0%E6%B5%81%E7%A8%8B&quot;&gt;后续更新流程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%8F%AF%E9%80%89%E6%9C%AC%E5%9C%B0%E5%BC%80%E5%8F%91%E8%B0%83%E8%AF%95&quot;&gt;（可选）本地开发调试&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98&quot;&gt;常见问题&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;环境准备&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;已安装 1Panel 的 Linux 服务器。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;域名解析&lt;/strong&gt;：建议提前在域名服务商处将 &lt;code&gt;你的域名.com&lt;/code&gt; 和 &lt;code&gt;www.你的域名.com&lt;/code&gt; 解析到你的服务器 IP。&lt;/li&gt;
&lt;li&gt;已在 1Panel“应用商店”中安装并启动 OpenResty。已将主题源码下载到本地，当然，也可以直接克隆到你的服务器上。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;创建静态网站与上传源码&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开 1Panel 左侧菜单 → &lt;strong&gt;“网站”&lt;/strong&gt; → &lt;strong&gt;“创建网站”&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择 &lt;strong&gt;“静态网站”&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;填写信息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;域名配置&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;在“域名”一栏，点击 &lt;strong&gt;“批量编辑”&lt;/strong&gt; 按钮。&lt;/li&gt;
&lt;li&gt;在弹出的文本框中输入两个域名（顺序不限）：&lt;br&gt;
&lt;code&gt;你的域名.com&lt;/code&gt;
&lt;code&gt;www.你的域名.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;注意&lt;/strong&gt;：1Panel 会根据你输入的&lt;strong&gt;第一个域名&lt;/strong&gt;自动生成项目目录。
&lt;ul&gt;
&lt;li&gt;如果 &lt;code&gt;你的域名.com&lt;/code&gt; 在第一行，目录为  &lt;code&gt;/opt/1panel/www/sites/你的域名.com/index&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;如果 &lt;code&gt;www.你的域名.com&lt;/code&gt; 在第一行，目录为  &lt;code&gt;/opt/1panel/www/sites/www.你的域名.com/index&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;顺序均可&lt;/strong&gt;，请记下页面下方显示的“根目录”路径，后续步骤需保持一致。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;备注&lt;/strong&gt;：如“Astro Blog”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;根目录&lt;/strong&gt;：保持默认（1Panel 会根据第一个域名自动填入），请记下此路径。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;启用 HTTPS（可选但推荐）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;如果你的域名&lt;strong&gt;已解析生效&lt;/strong&gt;，且服务器&lt;strong&gt;开放了 80/443 端口&lt;/strong&gt;，你可以直接勾选此项，并选择“Let&apos;s Encrypt”来自动申请证书。&lt;/li&gt;
&lt;li&gt;如果你&lt;strong&gt;已有证书&lt;/strong&gt;（如购买的证书），可勾选后选择“已有证书”并上传。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;注：如果暂时不确定，可以不勾选，等待网站创建完成后，在“网站设置”中再申请也可以。&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击“确认”。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开“网站”列表，找到刚创建的网站，点击“网站目录”下的文件夹图标，进入 &lt;code&gt;index&lt;/code&gt; 目录。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在“文件”界面：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击“上传”，将主题源码压缩包上传到 &lt;code&gt;index&lt;/code&gt; 目录。&lt;/li&gt;
&lt;li&gt;选中压缩包，点击“解压”。&lt;/li&gt;
&lt;li&gt;确保解压后的项目文件直接位于 &lt;code&gt;index&lt;/code&gt; 目录下（能直接看到 &lt;code&gt;package.json&lt;/code&gt;、&lt;code&gt;astro.config.ts&lt;/code&gt; 等）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;创建 Node 运行环境容器&lt;/h2&gt;
&lt;p&gt;使用官方 Node 镜像作为构建环境，并设置启动命令让容器保持常驻。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开 1Panel 左侧菜单 → &lt;strong&gt;“网站”&lt;/strong&gt; → &lt;strong&gt;“运行环境”&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;选择 &lt;strong&gt;“Node”&lt;/strong&gt; → &lt;strong&gt;“创建运行环境”&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;填写配置：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;环境名称&lt;/strong&gt;：自定义，如 &lt;code&gt;astro-node&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node 版本&lt;/strong&gt;：选择最新 LTS（如 22）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;项目目录&lt;/strong&gt;：填写你在上一步“创建静态网站”时看到的&lt;strong&gt;根目录路径&lt;/strong&gt;。
&lt;ul&gt;
&lt;li&gt;例如：&lt;code&gt;/opt/1panel/www/sites/你的域名.com/index&lt;/code&gt; （或其他实际生成的路径）。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;关键点：此处必须与静态网站的实际代码目录完全一致，否则容器无法读取源码。&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;端口映射&lt;/strong&gt;：填写 &lt;code&gt;4321:4321&lt;/code&gt;（用于开发调试，生产环境构建不需要）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;启动命令（关键步骤）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;选择“自定义启动命令”。&lt;/li&gt;
&lt;li&gt;填入：
&lt;code&gt;tail -f /dev/null&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;解释&lt;/strong&gt;：Astro 是静态构建，不需要常驻的 Node 服务。如果选择默认的 &lt;code&gt;npm start&lt;/code&gt; 等命令，容器启动后会找不到服务入口并自动退出，导致你无法进入终端敲命令。&lt;code&gt;tail -f /dev/null&lt;/code&gt; 是一个“占位”命令，能让容器保持**一直运行（Running）**的状态，这样你随时都可以通过 1Panel 进入容器终端去执行 &lt;code&gt;npm run build&lt;/code&gt;。此命令资源占用极低，不会影响服务器性能。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;点击“确认”，等待容器创建并启动。
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;确认容器状态为“运行中”。&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;安装依赖&lt;/h2&gt;
&lt;p&gt;为了保证在不同服务器架构下（如从 Mac 到 Linux）的兼容性，建议进行全新安装（也可直接安装）。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开 1Panel 左侧菜单 → &lt;strong&gt;“容器”&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;在容器列表中找到刚创建的 Node 环境容器，点击右侧 &lt;strong&gt;“终端”&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;确认目录&lt;/strong&gt;：进入终端后，通常会自动处于 &lt;code&gt;/app&lt;/code&gt; 目录。你可以输入 &lt;code&gt;pwd&lt;/code&gt; 确认。如果不在，请执行 &lt;code&gt;cd /app&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;依次执行以下命令：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;rm -rf node_modules package-lock.json
npm install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;直接安装可不执行：&lt;code&gt;rm -rf node_modules&lt;/code&gt;
&lt;em&gt;解释：删除旧依赖（可能包含不兼容的二进制文件），然后在当前容器环境中重新编译安装。&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 提示：为什么要删除 &lt;code&gt;package-lock.json&lt;/code&gt;？&lt;/strong&gt;
&lt;code&gt;package-lock.json&lt;/code&gt; 记录了本地环境的精确依赖版本。在 Docker 容器中直接复用本地锁文件可能会导致二进制文件（如 Sharp）因系统架构不同（如 Mac vs Linux）而加载失败。删除它会强制 npm 根据 &lt;code&gt;package.json&lt;/code&gt; 在当前容器环境中重新生成锁文件，确保兼容性。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装成功的标志&lt;/strong&gt;：
执行完毕后，如果看到类似以下输出（包含 &lt;code&gt;added ... packages&lt;/code&gt; 和 &lt;code&gt;audited ... packages&lt;/code&gt;），即表示安装成功：&lt;/p&gt;
&lt;p&gt;added 685 packages, and audited 686 packages in 4m
283 packages are looking for funding
run npm fund for details
6 vulnerabilities (2 low, 4 high)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;注意：提示中出现的 &lt;code&gt;vulnerabilities&lt;/code&gt;（安全漏洞）是 npm 的安全审计警告。在开发/构建阶段，这些通常不会导致构建失败，建议忽略即可，不影响后续操作。&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;修改构建配置为静态模式&lt;/h2&gt;
&lt;p&gt;默认 &lt;code&gt;astro-theme-pure&lt;/code&gt; 为 Server 模式（SSR），需要改为 Static 模式。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 1Panel 左侧菜单打开 &lt;strong&gt;“文件”&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;进入你的项目目录（例如 &lt;code&gt;/opt/1panel/www/sites/你的域名.com/index/&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;找到 &lt;code&gt;astro.config.ts&lt;/code&gt;，点击右侧 &lt;strong&gt;“编辑”&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;在编辑器中进行如下修改：
&lt;ul&gt;
&lt;li&gt;将 &lt;code&gt;site&lt;/code&gt; 改为你的主域名（建议使用不带 www 的版本作为规范域名），例如：&lt;br&gt;
&lt;code&gt;site: ‘https://timingme.com’ &lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;将 &lt;code&gt;output: &apos;server&apos;&lt;/code&gt; 改为： &lt;code&gt;output: &apos;static&apos;&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;删除以下整行（Static 模式不需要适配器）：&lt;br&gt;
&lt;code&gt;adapter: vercel({ imageService: true })&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;同时删除顶部的导入语句（如果不再需要）：&lt;br&gt;
&lt;code&gt;import vercel from ‘@astrojs/vercel’&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;点击“保存”。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;远程头像域名&lt;/h2&gt;
&lt;p&gt;确认为 &lt;code&gt;cravatar.cn&lt;/code&gt; 而不是 &lt;code&gt;www.gravatar.com&lt;/code&gt;。
如不是请修改，或自行替换为其他头像源
&lt;strong&gt;方法一：使用 1Panel 可视化编辑（推荐）&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 1Panel“文件”中，进入项目目录下的 &lt;code&gt;public/&lt;/code&gt; 文件夹。&lt;/li&gt;
&lt;li&gt;找到 &lt;code&gt;links.json&lt;/code&gt;，点击“编辑”。&lt;/li&gt;
&lt;li&gt;使用编辑器的“查找/替换”功能：
&lt;ul&gt;
&lt;li&gt;查找：&lt;code&gt;cravatar.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;替换为：&lt;code&gt;www.gravatar.cn&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;保存文件。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;方法二：使用命令行快速替换（可选）&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;进入 Node 容器的“终端”。&lt;/li&gt;
&lt;li&gt;执行以下命令即可批量替换：
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sed -i ‘s/cravatar.com/www.gravatar.cn/g’ /app/public/links.json
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;构建项目&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;回到 1Panel“容器”页面，进入 Node 容器的“终端”。&lt;/li&gt;
&lt;li&gt;确保当前目录为 &lt;code&gt;/app&lt;/code&gt;（通常默认就是），然后执行：
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;情况 A：构建成功&lt;/h3&gt;
&lt;p&gt;如果看到末尾提示 &lt;code&gt;[build] Complete!&lt;/code&gt;，说明一切顺利，请跳至下一步 &lt;strong&gt;&lt;a href=&quot;#%E4%BF%AE%E6%94%B9%E7%BD%91%E7%AB%99%E8%BF%90%E8%A1%8C%E7%9B%AE%E5%BD%95%E4%B8%BA-dist&quot;&gt;修改网站运行目录为 dist&lt;/a&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;情况 B：构建报错 MissingSharp&lt;/h3&gt;
&lt;p&gt;如果构建过程中报错 &lt;code&gt;MissingSharp: Could not find Sharp&lt;/code&gt;，这是图片处理库兼容性问题。请按以下步骤修复：&lt;/p&gt;
&lt;h4&gt;1. 为什么会报错？&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sharp 是什么&lt;/strong&gt;：Sharp 是 Node.js 中最快、最高性能的图片处理库，用于在构建时自动压缩、转换图片格式（如转 WebP）并调整尺寸，以提升网站加载速度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;报错原因&lt;/strong&gt;：Docker 容器环境有时无法正确加载 Sharp 的预编译二进制文件（可能是因为系统架构差异或库版本过新），导致构建失败。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2. 解决方法：安装稳定版 Sharp&lt;/h4&gt;
&lt;p&gt;请在容器终端中执行以下命令，安装兼容性最好的 &lt;code&gt;0.32.6&lt;/code&gt; 版本：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install --save sharp@0.32.6
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3. 验证安装&lt;/h4&gt;
&lt;p&gt;执行完命令后，如果看到 &lt;code&gt;added 56 packages, changed 1 package&lt;/code&gt;，说明安装成功。可以执行以下命令静默验证（无输出即成功）：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;node -e “require(‘sharp’)”
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4. 重新构建&lt;/h4&gt;
&lt;p&gt;安装成功后，再次执行构建命令：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此时应该能看到 &lt;code&gt;generating optimized images&lt;/code&gt; 的日志，并显示图片压缩比例（例如 &lt;code&gt;before: 253kB, after: 14kB&lt;/code&gt;），最后提示 &lt;code&gt;[build] Complete!&lt;/code&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;修改网站运行目录为 dist&lt;/h2&gt;
&lt;p&gt;让静态网站真正指向构建好的 &lt;code&gt;dist&lt;/code&gt; 目录。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开 1Panel 左侧菜单 → &lt;strong&gt;“网站”&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;在网站列表中，找到你创建的静态网站，点击 &lt;strong&gt;“设置”&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;切换到 &lt;strong&gt;“网站目录”&lt;/strong&gt; 标签页。&lt;/li&gt;
&lt;li&gt;在 &lt;strong&gt;“运行目录”&lt;/strong&gt; 处，从下拉列表选择或手动输入：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/dist&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;点击“保存”或“保存并重载”。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;现在，访问你的域名将看到 Astro 构建后的静态网站内容，且头像应正常显示。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;配置 HTTPS（如果在第一步未完成）&lt;/h2&gt;
&lt;p&gt;如果你在第一步创建网站时没有勾选“启用 HTTPS”，可以在这里补充配置。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在网站“设置”→ &lt;strong&gt;“HTTPS”&lt;/strong&gt; 页面。&lt;/li&gt;
&lt;li&gt;选择 &lt;strong&gt;“申请 Let’s Encrypt 证书”&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;建议开启 &lt;strong&gt;“HTTP 自动跳转到 HTTPS”&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;后续更新流程&lt;/h2&gt;
&lt;p&gt;发布新文章或修改配置时，只需重复以下步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在 1Panel“文件”中，将 Markdown 文件上传到 &lt;code&gt;content/blog&lt;/code&gt; 目录，或修改 &lt;code&gt;src/site.config.ts&lt;/code&gt; 等配置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;进入 Node 容器“终端”，执行：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;静态网站指向的是 &lt;code&gt;dist&lt;/code&gt; 目录，构建完成后刷新浏览器即可看到更新内容。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;（可选）本地开发调试&lt;/h2&gt;
&lt;p&gt;如果你希望在开发时实时预览，可以使用映射的 4321 端口进行调试。&lt;strong&gt;请注意：本步骤依赖已安装的依赖（&lt;code&gt;node_modules&lt;/code&gt;），在执行前请确保已按照“安装依赖”章节完成安装，否则会提示 &lt;code&gt;astro: not found&lt;/code&gt;。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;本地开发调试的用途与定位&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用途&lt;/strong&gt;：用于开发过程中快速看到修改效果，支持文件变化时自动刷新页面（热重载），便于调试布局、样式与交互。不应用于对外提供访问服务。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;与生产部署的区别&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;本地调试执行 &lt;code&gt;npm run dev&lt;/code&gt;，启动的是 Astro 的开发服务器，仅用于开发与预览，不适合长期或对外运行；Astro 官方明确说明开发服务器仅用于本地开发。&lt;/li&gt;
&lt;li&gt;生产部署执行 &lt;code&gt;npm run build&lt;/code&gt;，生成优化的静态文件到 &lt;code&gt;dist&lt;/code&gt; 目录，再由 OpenResty 对外提供服务。这是线上正式访问的方式。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;操作步骤&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;进入 Node 容器的“终端”。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;执行启动命令：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;你会看到类似 &lt;code&gt;Local: http://localhost:4321/&lt;/code&gt; 的提示。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在浏览器中访问 &lt;code&gt;http://你的服务器IP:4321&lt;/code&gt;，即可看到实时预览效果。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：开发服务器仅供临时调试使用，生产环境请始终使用 &lt;code&gt;npm run build&lt;/code&gt; + 静态站点的方式对外提供服务。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;计划任务&lt;/h2&gt;
&lt;p&gt;设置计划任务会自动监测blog目录的文章变化，你所写的md格式文章都要放在这里，构建生成纯静态文章显示在你的博客前台。有变动就触发构建命令发布文章，所以，你想发布或修改文章后还要敲一遍命令才能发布成功吗？？？反正我不想。&lt;/p&gt;
&lt;p&gt;添加shell计划命令，把下面代码贴进去，自动检测时间设置为5分钟，ai推荐的5分钟，咱也不知道合不合理，但我改成了10分钟，反正平时发文章后也不急着看到效果，因为你在编辑markdown文章时已经预见或已经看到了效果，这里只负责构建。如果真急的话，5分钟你也嫌长。真急的话，计划任务能手动点执行，立刻就能看到效果。&lt;/p&gt;
&lt;p&gt;注意：&lt;/p&gt;
&lt;p&gt;1.只有当blog目录下的文件有变动，这个计划任务命令才会触发构建，这个目录以外的任何文件有变动就不能执行了，手动也不行！&lt;/p&gt;
&lt;p&gt;2.下面代码配置的路径和域名记得修改，人和人是不一样的，所以人和人的网站路径和域名也不一定一样的：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
#!/bin/bash
set -e

# ===== 配置区域 =====
CONTAINER_NAME=&quot;astro&quot;
# 宿主机上的项目根目录
PROJECT_DIR=&quot;/opt/1panel/www/sites/你的域名.com/index&quot;
# 监控的博客文章目录
WATCH_DIR=&quot;$PROJECT_DIR/src/content/blog&quot;
# 日志文件
LOG_FILE=&quot;/tmp/astro-build.log&quot;
# 时间戳文件
STAMP_FILE=&quot;/tmp/astro-blog-stamp&quot;
# 锁文件 (防止并发构建)
LOCK_FILE=&quot;/tmp/astro-build.lock&quot;
# =====================

# 0. 清理函数
cleanup() {
    rm -f &quot;$LOCK_FILE&quot;
    }
    trap cleanup EXIT

    # 1. 检查锁文件
    if [ -f &quot;$LOCK_FILE&quot; ]; then
        echo &quot;$(date) 检测到已有构建任务在运行，跳过本次执行。&quot; &gt;&gt; &quot;$LOG_FILE&quot;
            exit 0
            fi
            touch &quot;$LOCK_FILE&quot;

            # 初始化时间戳文件
            [ -f &quot;$STAMP_FILE&quot; ] || touch &quot;$STAMP_FILE&quot;

            # 2. 【重点修改】检查是否有文件更新 (包含图片)
            NEW_FILE=$(find &quot;$WATCH_DIR&quot; -type f \
              \( -name &apos;*.md&apos; -o -name &apos;*.mdx&apos; \
                -o -name &apos;*.jpg&apos; -o -name &apos;*.jpeg&apos; \
                  -o -name &apos;*.png&apos; -o -name &apos;*.gif&apos; \
                    -o -name &apos;*.webp&apos; -o -name &apos;*.svg&apos; \
                      -o -name &apos;*.avif&apos; \) \
                        -newer &quot;$STAMP_FILE&quot; 2&gt;/dev/null | head -1)

                        if [ -z &quot;$NEW_FILE&quot; ]; then
                          # 这一步就是刚才导致“秒成功”但没有变化的原因
                            exit 0
                            fi

                            echo &quot;$(date) =============================&quot; &gt;&gt; &quot;$LOG_FILE&quot;
                            echo &quot;$(date) 检测到新文件: $NEW_FILE，开始在容器内构建...&quot; &gt;&gt; &quot;$LOG_FILE&quot;

                            # 3. 备份旧的 dist 目录
                            BACKUP_DIR=&quot;$PROJECT_DIR/dist_backup&quot;
                            rm -rf &quot;$BACKUP_DIR&quot;
                            if [ -d &quot;$PROJECT_DIR/dist&quot; ]; then
                                cp -r &quot;$PROJECT_DIR/dist&quot; &quot;$BACKUP_DIR&quot;
                                    echo &quot;$(date) 已备份旧版本&quot; &gt;&gt; &quot;$LOG_FILE&quot;
                                    fi

                                    # 4. 执行构建
                                    docker exec &quot;$CONTAINER_NAME&quot; sh -c &quot;cd /app &amp;#x26;&amp;#x26; npm run build&quot; &gt;&gt; &quot;$LOG_FILE&quot; 2&gt;&amp;#x26;1

                                    # 5. 检查结果
                                    if [ $? -eq 0 ]; then
                                        echo &quot;$(date) ✅ 构建成功！&quot; &gt;&gt; &quot;$LOG_FILE&quot;
                                            touch &quot;$STAMP_FILE&quot;
                                                rm -rf &quot;$BACKUP_DIR&quot;
                                                    echo &quot;$(date) 流程结束。&quot; &gt;&gt; &quot;$LOG_FILE&quot;
                                                    else
                                                        echo &quot;$(date) ❌ 构建失败！正在回滚...&quot; &gt;&gt; &quot;$LOG_FILE&quot;
                                                            if [ -d &quot;$BACKUP_DIR&quot; ]; then
                                                                    rm -rf &quot;$PROJECT_DIR/dist&quot;
                                                                            mv &quot;$BACKUP_DIR&quot; &quot;$PROJECT_DIR/dist&quot;
                                                                                    echo &quot;$(date) ✅ 已回滚。&quot; &gt;&gt; &quot;$LOG_FILE&quot;
                                                                                        fi
                                                                                            touch &quot;$STAMP_FILE&quot;
                                                                                                exit 1
                                                                                                fi

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://timingme.com/_astro/japan.C-40b48C_1Uqe5o.webp&quot; alt=&quot;CWorld&quot;&gt;&lt;/p&gt;
&lt;h2&gt;常见问题&lt;/h2&gt;
&lt;h3&gt;Q1: 构建时报错 &lt;code&gt;Failed to load remote image ... The request was redirected.&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: 某些远程图片在构建时发生重定向，Astro 的图片优化无法跟随。解决：参考教程 &lt;strong&gt;&lt;a href=&quot;#%E4%BF%AE%E5%A4%8D%E8%BF%9C%E7%A8%8B%E5%A4%B4%E5%83%8F%E5%9F%9F%E5%90%8D%E9%97%AE%E9%A2%98&quot;&gt;修复远程头像域名问题&lt;/a&gt;&lt;/strong&gt; 章节进行替换。&lt;/p&gt;
&lt;h3&gt;Q2: 构建成功，但访问网站白屏或样式丢失。&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;检查 &lt;code&gt;astro.config.ts&lt;/code&gt; 中 &lt;code&gt;site&lt;/code&gt; 是否填写正确。&lt;/li&gt;
&lt;li&gt;检查“网站目录 → 运行目录”是否设置为 &lt;code&gt;/dist&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;确认 &lt;code&gt;dist&lt;/code&gt; 下是否包含 &lt;code&gt;_astro&lt;/code&gt; 等资源目录。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Q3: Node 容器里 &lt;code&gt;npm install&lt;/code&gt; 报错。&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: 建议在容器内执行 &lt;code&gt;rm -rf node_modules&lt;/code&gt; 彻底清理旧依赖后，再执行 &lt;code&gt;npm install&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;Q4: 创建 Node 容器后，状态一直显示“已停止”或“重启中”。&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: 这是启动命令配置错误导致的。请检查容器配置，确保勾选了“自定义启动命令”并填写了 &lt;code&gt;tail -f /dev/null&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;Q5: 容器一直运行会不会占用很多资源？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: 不会。&lt;code&gt;tail -f /dev/null&lt;/code&gt; 命令仅仅维持一个空闲进程，几乎不占用 CPU 和内存，且数据盘已经映射到宿主机，对磁盘占用也无额外消耗。&lt;/p&gt;
&lt;h3&gt;Q6: 在容器终端执行 &lt;code&gt;npm run dev&lt;/code&gt; 提示 &lt;code&gt;astro: not found&lt;/code&gt;？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: 这表示依赖未安装或被删除。请在容器终端中先执行 &lt;code&gt;npm install&lt;/code&gt;，然后再运行 &lt;code&gt;npm run dev&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;Q7: 构建时提示 &lt;code&gt;MissingSharp: Could not find Sharp&lt;/code&gt;？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: 这是因为缺少图片处理库。请参考教程 &lt;strong&gt;&lt;a href=&quot;#%E6%9E%84%E5%BB%BA%E9%A1%B9%E7%9B%AE&quot;&gt;构建项目&lt;/a&gt;&lt;/strong&gt; 章节中的“情况 B”部分，执行 &lt;code&gt;npm install --save sharp@0.32.6&lt;/code&gt; 即可解决。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;本教程已根据实际部署与优化，配置修改采用 1Panel 可视化完成，命令行仅用于构建与替换操作。&lt;/em&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.CLVjW46z.jpg"/><enclosure url="/_astro/thumbnail.CLVjW46z.jpg"/></item><item><title>小白宝塔换 1Panel，重装 WebOS</title><link>https://timingme.com/blog/webos-bt-to-1panel</link><guid isPermaLink="true">https://timingme.com/blog/webos-bt-to-1panel</guid><description>从宝塔迁移到 1Panel，完整保留 WebOS 数据与直链的保姆级教程。</description><pubDate>Tue, 16 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;小白宝塔换 1Panel，重装 WebOS&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文记录一次完整的迁移实践：把原本部署在宝塔面板上的 &lt;strong&gt;WebOS&lt;/strong&gt;（网盘系统）无损迁移到 &lt;strong&gt;1Panel&lt;/strong&gt;。
适合和我一样——&quot;用的是 1Panel，但就是不会 Docker&quot;的 1Panel 专业版用户。&lt;/p&gt;
&lt;p&gt;大神可以直接看官方宝塔部署方式，本文给的是&quot;小白换面板&quot;的兜底思路。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;写在前面&lt;/h2&gt;
&lt;p&gt;我是尊贵的 1Panel 专业版用户 😂，所以&lt;strong&gt;把宝塔换成 1Panel&lt;/strong&gt; 这件事一直拖到今天才做。
下面这份流程是在 &lt;strong&gt;@啊范总&lt;/strong&gt; 的指导下跑通的，&lt;strong&gt;全程零踩坑&lt;/strong&gt;（除了我自己的两个）。如果你也打算换面板，照着做就行。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;一、备份（迁移前必做）&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;顺序很重要&lt;/strong&gt;：先把下面的 5 项备份到本地，再动服务器。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| # | 备份内容 | 备注 |
|---|---|---|
| 1 | 宝塔 &lt;strong&gt;SQL 数据库&lt;/strong&gt; | 下载到本地 |
| 2 | WebOS 内的&lt;strong&gt;所有文件&lt;/strong&gt; | &lt;strong&gt;记住原路径&lt;/strong&gt;，恢复时要回到原处 |
| 3 | &lt;strong&gt;直链公钥&lt;/strong&gt; + &lt;strong&gt;直链私钥&lt;/strong&gt; | ⭐ &lt;strong&gt;最重要&lt;/strong&gt;，不备份会导致所有直链失效 |
| 4 | 专业版授权信息 | 没有花钱的可跳过 |
| 5 | SSL 的 &lt;code&gt;key&lt;/code&gt; 和 &lt;code&gt;pem&lt;/code&gt; | 省的重新申请/下载 |&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;二、重装（1Panel 环境搭建）&lt;/h2&gt;
&lt;h3&gt;步骤 1：服务器基础环境&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;安装好服务器系统&lt;/li&gt;
&lt;li&gt;跑一遍系统更新（&lt;code&gt;apt update &amp;#x26;&amp;#x26; apt upgrade&lt;/code&gt; 或 &lt;code&gt;yum update&lt;/code&gt;）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;步骤 2：安装 1Panel&lt;/h3&gt;
&lt;p&gt;按 &lt;a href=&quot;https://1panel.cn/docs/&quot;&gt;1Panel 官方文档&lt;/a&gt; 一键安装即可。&lt;/p&gt;
&lt;h3&gt;步骤 3：在 1Panel 里安装基础服务&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;✅ OpenResty（反向代理）&lt;/li&gt;
&lt;li&gt;✅ MySQL&lt;/li&gt;
&lt;li&gt;✅ Redis&lt;/li&gt;
&lt;li&gt;❓ 若 WebOS 用不上 SQL/Redis，可跳过对应那项&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;步骤 4：创建静态网站&lt;/h3&gt;
&lt;p&gt;在 1Panel → 网站 → 创建静态站点（先空着，稍后会用）。&lt;/p&gt;
&lt;h3&gt;步骤 5：上传 WebOS 安装文件&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;进 1Panel 打开&lt;strong&gt;网站设置&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;找到&quot;网站根目录&quot;路径&lt;/li&gt;
&lt;li&gt;把 WebOS 安装包文件上传到该目录下&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;步骤 6：按 WebOS 官方&quot;宝塔部署方式&quot;安装&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;走 WebOS 官方教程 → 宝塔部署那一节。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;步骤 7：恢复数据库&lt;/h3&gt;
&lt;p&gt;在 1Panel 数据库里导入你&lt;strong&gt;第 1 步&lt;/strong&gt;备份的 SQL 文件。&lt;/p&gt;
&lt;h3&gt;步骤 8：配置 SSL 与反向代理&lt;/h3&gt;
&lt;p&gt;在 1Panel 里给网站绑 SSL（用&lt;strong&gt;第 1 步&lt;/strong&gt;备份的 &lt;code&gt;key&lt;/code&gt; 和 &lt;code&gt;pem&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;填反向代理时：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ 按 WebOS 官方&quot;宝塔部署方式&quot;教程填&lt;/li&gt;
&lt;li&gt;⚠️ 1Panel 反向代理里那个匹配规则 &lt;code&gt;~*&lt;/code&gt; &lt;strong&gt;不要改&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;🟰 &quot;前端请求路径&quot; = &quot;代理目录&quot;&lt;/li&gt;
&lt;li&gt;📄 1Panel 里这个配置叫&quot;&lt;strong&gt;源文&lt;/strong&gt;&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;步骤 9：恢复专业版授权&lt;/h3&gt;
&lt;p&gt;进 WebOS 后台：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;数据库恢复后，如果你之前买了&lt;strong&gt;专业版&lt;/strong&gt;，授权会&lt;strong&gt;自动恢复&lt;/strong&gt;。
但系统会提示&quot;授权过期&quot;——**直接点&quot;更新授权&quot;**就行了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;步骤 10：恢复用户文件&lt;/h3&gt;
&lt;p&gt;把你&lt;strong&gt;第 1 步&lt;/strong&gt;备份的所有文件，原封不动上传到&lt;strong&gt;原路径&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;步骤 11：⭐ 恢复直链公钥私钥（关键步骤）&lt;/h3&gt;
&lt;p&gt;很多人就是栽在这里 🔥。&lt;strong&gt;关键点&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;❌ &lt;strong&gt;不要&lt;/strong&gt;在 WebOS 的 &lt;code&gt;设置 → 系统&lt;/code&gt; 里改 &lt;code&gt;zlPublic&lt;/code&gt; / &lt;code&gt;zlPrivate&lt;/code&gt;——改了无效。&lt;/p&gt;
&lt;p&gt;✅ 正确做法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;进 1Panel&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;找到 WebOS 安装目录&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开这个文件：&lt;/p&gt;
&lt;p&gt;/api/rootPath/start_config.json&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;</content:encoded><h:img src="/_astro/webos123.CHX69RC0.webp"/><enclosure url="/_astro/webos123.CHX69RC0.webp"/></item><item><title>Markdown 语法支持</title><link>https://timingme.com/blog/markdown-zh</link><guid isPermaLink="true">https://timingme.com/blog/markdown-zh</guid><description>Markdown 是一种轻量级的「标记语言」。</description><pubDate>Wed, 26 Jul 2023 08:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;基本语法&lt;/h2&gt;
&lt;p&gt;Markdown 它是一种轻量级且易于使用的语法，用于为您的写作设计风格。&lt;/p&gt;
&lt;h3&gt;标题&lt;/h3&gt;
&lt;p&gt;文章内容较多时，可以用标题分段：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;# 标题 1

## 标题 2

## 大标题

### 小标题
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;标题预览会打乱文章的结构，所以在此不展示。&lt;/p&gt;
&lt;h3&gt;粗斜体&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;_斜体文本_

**粗体文本**

**_粗斜体文本_**
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;&lt;em&gt;斜体文本&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;粗体文本&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;粗斜体文本&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;链接&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;文字链接 [链接名称](http://链接网址)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;文字链接 &lt;a href=&quot;http://%E9%93%BE%E6%8E%A5%E7%BD%91%E5%9D%80&quot;&gt;链接名称&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;行内代码&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;这是一条 `单行代码`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;这是一条 &lt;code&gt;行内代码&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;代码块&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;```js
// calculate fibonacci
function fibonacci(n) {
  if (n &amp;#x3C;= 1) return 1
  return fibonacci(n - 1) + fibonacci(n - 2)
}
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;// calculate fibonacci
function fibonacci(n) {
  if (n &amp;#x3C;= 1) return 1
  return fibonacci(n - 1) + fibonacci(n - 2)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当前使用 shiki 作为代码高亮插件，支持的语言请参考 &lt;a href=&quot;https://shiki.matsu.io/languages.html&quot;&gt;shiki / languages&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;行内公式&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;这是一条行内公式 $e^{i\pi} + 1 = 0$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;这是一条行内公式 $e^{i\pi} + 1 = 0$&lt;/p&gt;
&lt;h3&gt;公式块&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;$$
\hat{f}(\xi) = \int_{-\infty}^{\infty} f(x) e^{-2\pi i x \xi} \, dx
$$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;$$
\hat{f}(\xi) = \int_{-\infty}^{\infty} f(x) e^{-2\pi i x \xi} , dx
$$&lt;/p&gt;
&lt;p&gt;当前使用 KaTeX 作为数学公式插件，支持的语法请参考 &lt;a href=&quot;https://katex.org/docs/supported.html&quot;&gt;KaTeX Supported Functions&lt;/a&gt;。&lt;/p&gt;
&lt;h4&gt;图片&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;![CWorld](./123.webp)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://timingme.com/_astro/123.C1xwT1X-_fpNy9.webp&quot; alt=&quot;CWorld&quot;&gt;&lt;/p&gt;
&lt;h4&gt;删除线&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;~~删除线~~
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;~~删除线~~&lt;/p&gt;
&lt;h3&gt;列表&lt;/h3&gt;
&lt;p&gt;普通无序列表&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;- 1
- 2
- 3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1&lt;/li&gt;
&lt;li&gt;2&lt;/li&gt;
&lt;li&gt;3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;普通有序列表&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;1. GPT-4
2. Claude Opus
3. LLaMa
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;GPT-4&lt;/li&gt;
&lt;li&gt;Claude Opus&lt;/li&gt;
&lt;li&gt;LLaMa&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;列表里可以继续嵌套语法&lt;/p&gt;
&lt;h3&gt;引用&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;&gt; 枪响，雷鸣，剑起。繁花血景。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;枪响，雷鸣，剑起。繁花血景。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;引用里也可以继续嵌套语法。&lt;/p&gt;
&lt;h3&gt;换行&lt;/h3&gt;
&lt;p&gt;markdown 分段落是需要空一行的。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;如果不空行
就会在一段

第一段

第二段
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;如果不空行
就会在一段&lt;/p&gt;
&lt;p&gt;第一段&lt;/p&gt;
&lt;p&gt;第二段&lt;/p&gt;
&lt;h3&gt;分隔符&lt;/h3&gt;
&lt;p&gt;如果你有写分割线的习惯，可以新起一行输入三个减号&lt;code&gt;---&lt;/code&gt; 或者星号 &lt;code&gt;***&lt;/code&gt;。当前后都有段落时，请空出一行：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;高级技巧&lt;/h2&gt;
&lt;h3&gt;行内 HTML 元素&lt;/h3&gt;
&lt;p&gt;目前只支持部分段内 HTML 元素效果，包括 &lt;code&gt;&amp;#x3C;kdb&gt; &amp;#x3C;b&gt; &amp;#x3C;i&gt; &amp;#x3C;em&gt; &amp;#x3C;sup&gt; &amp;#x3C;sub&gt; &amp;#x3C;br&gt;&lt;/code&gt; ，如&lt;/p&gt;
&lt;h4&gt;键位显示&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;使用 &amp;#x3C;kbd&gt;Ctrl&amp;#x3C;/kbd&gt; + &amp;#x3C;kbd&gt;Alt&amp;#x3C;/kbd&gt; + &amp;#x3C;kbd&gt;Del&amp;#x3C;/kbd&gt; 重启电脑
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;使用 Ctrl + Alt + Del 重启电脑&lt;/p&gt;
&lt;h4&gt;粗斜体&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;&amp;#x3C;b&gt; Markdown 在此处同样适用，如 _加粗_ &amp;#x3C;/b&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt; Markdown 在此处同样适用，如 &lt;em&gt;加粗&lt;/em&gt; &lt;/p&gt;
&lt;h3&gt;其他 HTML 写法&lt;/h3&gt;
&lt;h4&gt;折叠块&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;&amp;#x3C;details&gt;&amp;#x3C;summary&gt;点击展开&amp;#x3C;/summary&gt;它被隐藏了&amp;#x3C;/details&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;h3&gt;表格&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;| 表头1 | 表头2 |
| ----- | ----- |
| 内容1 | 内容2 |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;| 表头1 | 表头2 |
| ----- | ----- |
| 内容1 | 内容2 |&lt;/p&gt;
&lt;h3&gt;注释&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;在引用的地方使用 [^注释] 来添加注释。

然后在文档的结尾，添加注释的内容（会默认于文章结尾渲染之）。

[^注释]: 这里是注释的内容
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;在引用的地方使用 &lt;a href=&quot;%E8%BF%99%E9%87%8C%E6%98%AF%E6%B3%A8%E9%87%8A%E7%9A%84%E5%86%85%E5%AE%B9&quot;&gt;^注释&lt;/a&gt; 来添加注释。&lt;/p&gt;
&lt;p&gt;然后在文档的结尾，添加注释的内容（会默认于文章结尾渲染之）。&lt;/p&gt;
&lt;h3&gt;To-Do 列表&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;- [ ] 未完成的任务
- [x] 已完成的任务
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] 未完成的任务&lt;/li&gt;
&lt;li&gt;[x] 已完成的任务&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;符号转义&lt;/h3&gt;
&lt;p&gt;如果你的描述中需要用到 markdown 的符号，比如 _ # * 等，但又不想它被转义，这时候可以在这些符号前加反斜杠，如 &lt;code&gt;\_&lt;/code&gt; &lt;code&gt;\#&lt;/code&gt; &lt;code&gt;\*&lt;/code&gt; 进行避免。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;\_不想这里的文本变斜体\_

\*\*不想这里的文本被加粗\*\*
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览：&lt;/p&gt;
&lt;p&gt;_不想这里的文本变斜体_&lt;/p&gt;
&lt;p&gt;**不想这里的文本被加粗**&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;内嵌 Astro 组件&lt;/h2&gt;
&lt;p&gt;See &lt;a href=&quot;/docs/integrations/components&quot;&gt;User Components&lt;/a&gt; and &lt;a href=&quot;/docs/integrations/advanced&quot;&gt;Advanced Components&lt;/a&gt; for details.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.HAXFr_hw.jpg"/><enclosure url="/_astro/thumbnail.HAXFr_hw.jpg"/></item></channel></rss>