[{"content":"欢迎 这是我的第一篇技术博客文章\n","permalink":"http://38.22.95.49/posts/hello-world/","summary":"\u003ch2 id=\"欢迎\"\u003e欢迎\u003c/h2\u003e\n\u003cp\u003e这是我的第一篇技术博客文章\u003c/p\u003e","title":"Hello World"},{"content":"前言 本文记录了使用 Hugo 静态站点生成器搭配 PaperMod 主题，在云服务器上搭建一个技术博客的全过程。包括：环境配置、部署上线、后台管理、美化、搜索、评论等功能，并附上所有踩过的坑和解决方案。\n适用人群：有一台云服务器（本文以 Ubuntu/Debian 为例）、一个公网 IP 或域名，想快速搭建可在线编辑的技术博客。\n最终效果：一个基于 IP 即可访问的静态博客，可通过浏览器后台在线编辑文章，刷新页面即可生效。\n一、服务器基础环境\n更新系统并安装必要软件\nudo apt update \u0026amp;\u0026amp; sudo apt upgrade -y\nsudo apt install git nginx certbot python3-certbot-nginx -y\n安装 Hugo（推荐 snap）\nsudo snap install hugo\n若不用 snap，可去 GitHub Release 下载最新 deb 包安装。但请确保版本 ≥ 0.146.0，否则 PaperMod 最新版会报错。\n检查版本： hugo version\n二、创建 Hugo 站点\n创建工作目录 sudo mkdir -p /var/www/techblog\nsudo chown -R\nUSER:USER /var/www/techblog\ncd /var/www/techblog\n初始化 Hugo 站点 hugo new site . \u0026ndash;force 此时会生成 hugo.toml 及标准目录结构。\n安装 PaperMod 主题 git init\ngit submodule add https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod\ncd themes/PaperMod\ngit checkout v8.0 # 使用与 Hugo 0.146.0 兼容的稳定版本\ncd ../..\n三、配置文件 hugo.toml 将以下内容写入 hugo.toml（注意替换占位符）：\nbaseURL = \u0026ldquo;http://你的公网IP/\u0026rdquo;\nlanguageCode = \u0026ldquo;zh-cn\u0026rdquo;\ndefaultContentLanguage = \u0026ldquo;zh-cn\u0026rdquo;\ntitle = \u0026ldquo;你的博客标题\u0026rdquo;\nenableEmoji = true\ntheme = \u0026ldquo;PaperMod\u0026rdquo;\n[pagination]\npagerSize = 10\n[markup]\n[markup.highlight]\nstyle = \u0026ldquo;monokai\u0026rdquo;\nlineNos = true\nanchorLineNos = false\ncodeFences = true\nguessSyntax = true\ntabWidth = 4\n[markup.goldmark]\n[markup.goldmark.renderer]\nunsafe = true\n[markup.goldmark.extensions]\nstrikethrough = true\ntaskList = true\n[[menu.main]]\nname = \u0026ldquo;文章\u0026rdquo;\nurl = \u0026ldquo;/posts/\u0026rdquo;\nweight = 1\n[[menu.main]]\nname = \u0026ldquo;标签\u0026rdquo;\nurl = \u0026ldquo;/tags/\u0026rdquo;\nweight = 2\n[[menu.main]]\nname = \u0026ldquo;分类\u0026rdquo;\nurl = \u0026ldquo;/categories/\u0026rdquo;\nweight = 3\n[[menu.main]]\nname = \u0026ldquo;关于\u0026rdquo;\nurl = \u0026ldquo;/about/\u0026rdquo;\nweight = 4\n[outputs]\nhome = [\u0026ldquo;HTML\u0026rdquo;, \u0026ldquo;RSS\u0026rdquo;, \u0026ldquo;JSON\u0026rdquo;]\n[params]\ndescription = \u0026ldquo;我的技术思考与记录\u0026rdquo;\nauthor = \u0026ldquo;你的名字\u0026rdquo;\ndateFormat = \u0026ldquo;2006-01-02\u0026rdquo;\nreadingTime = true\nShowSearch = true\nShowCodeCopyButtons = true\nShowBreadCrumbs = true\nenv = \u0026ldquo;production\u0026rdquo;\n首页个人介绍（如果不想要头像模式，可以注释掉 profileMode 三行）\nprofileMode = true\navatar = \u0026ldquo;images/avatar.jpg\u0026rdquo;\nbio = \u0026ldquo;全栈开发 / 技术博客作者\u0026rdquo;\n评论（Utterances）\n[params.utterances]\nrepo = \u0026ldquo;你的GitHub用户名/评论仓库名\u0026rdquo;\nissueTerm = \u0026ldquo;pathname\u0026rdquo;\ntheme = \u0026ldquo;github-light\u0026rdquo;\nlabel = \u0026ldquo;评论\u0026rdquo;\n社交链接\n[[params.social]]\nname = \u0026ldquo;GitHub\u0026rdquo;\nurl = \u0026ldquo;https://github.com/你的用户名\u0026rdquo;\nicon = \u0026ldquo;github\u0026rdquo;\n[[params.social]]\nname = \u0026ldquo;邮箱\u0026rdquo;\nurl = \u0026ldquo;mailto:you@example.com\u0026rdquo;\nicon = \u0026ldquo;email\u0026rdquo;\n数学公式\n[params.math]\nenable = true\nengine = \u0026ldquo;katex\u0026rdquo;\n关键注意点：\n所有数值、字符串都要使用英文半角引号 \u0026ldquo;\u0026quot;。\n[outputs] 必须独立成块，且包含 JSON。\n[params.math] 要用单括号，不能用双括号。\n切勿在 [params] 外再写 author = \u0026hellip;，TOML 不允许重复键。\n四、创建第一篇文章并生成静态页面\n创建文章目录\nmkdir -p content/posts\n新建文章\nhugo new posts/hello-world.md 编辑 content/posts/hello-world.md，将 draft: true 改为 false，并写入一些内容。\n生成静态网站\nhugo\n生成的网站文件在 public/ 目录。\n五、配置 Nginx\n创建站点配置文件\nsudo nano /etc/nginx/sites-available/techblog 内容：\nserver {\nlisten 80;\nserver_name _;\nroot /var/www/techblog/public;\nindex index.html index.htm;\nlocation / {\ntry_files\nuriuri/ =404;\n}\naccess_log /var/log/nginx/techblog_access.log;\nerror_log /var/log/nginx/techblog_error.log;\n}\n启用站点\nsudo rm /etc/nginx/sites-enabled/default # 删除默认欢迎页\nsudo ln -s /etc/nginx/sites-available/techblog /etc/nginx/sites-enabled/techblog\nsudo nginx -t\nsudo systemctl reload nginx\n云服务器防火墙放行 80 端口 登录云控制台，在安全组中添加入方向规则：允许 TCP 80 端口，授权对象 0.0.0.0/0。\n如果使用 ufw：\nsudo ufw allow 80/tcp\n访问 http://你的公网IP 即可看到博客首页。\n六、搭建浏览器管理后台（FileBrowser）\n安装 FileBrowser\ncurl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash\n初始化数据库并创建管理员\nsudo mkdir -p /etc/filebrowser\nfilebrowser -d /etc/filebrowser/filebrowser.db config init\nfilebrowser -d /etc/filebrowser/filebrowser.db users add 用户名 密码 \u0026ndash;perm.admin\n启动服务（监听所有 IP）\nfilebrowser -a 0.0.0.0 -p 8080 -r /var/www/techblog/content -d /etc/filebrowser/filebrowser.db\n放行 8080 端口\nsudo ufw allow 8080/tcp 云控制台同样需添加 8080 入方向规则。\n设为系统服务（防重启丢失）\n创建 /etc/systemd/system/filebrowser.service：\n[Unit]\nDescription=File Browser\nAfter=network.target\n[Service]\nExecStart=/usr/local/bin/filebrowser -a 0.0.0.0 -p 8080 -r /var/www/techblog/content -d /etc/filebrowser/filebrowser.db\nRestart=on-failure\n[Install]\nWantedBy=multi-user.target\n然后执行：\nsudo systemctl daemon-reload\nsudo systemctl enable filebrowser\nsudo systemctl start filebrowser\n访问 http://你的IP:8080 即可进入文件管理器，可以直接编辑 Markdown 文件。\n自动构建（每次改完文章后执行 hugo） 在服务器上，改完文章后需手动生成：\ncd /var/www/techblog \u0026amp;\u0026amp; hugo\n你也可以将 FileBrowser 的根目录设为整个站点，编辑后执行脚本，或使用 Git 钩子实现自动化。\n七、美化与自定义\n修改配色和字体 创建自定义 CSS 文件：\nmkdir -p /var/www/techblog/assets/css/extended\nnano /var/www/techblog/assets/css/extended/custom.css\n示例内容（覆盖 PaperMod 默认的黄色链接）：\n:root {\n\u0026ndash;main-color: #2c3e50;\n\u0026ndash;primary: #3498db;\n\u0026ndash;secondary: #e67e22;\n\u0026ndash;entry: #ffffff;\n\u0026ndash;theme: #f8f9fa;\n\u0026ndash;code-bg: #f5f6fa;\n}\n.entry-header h1 a,\n.post-title a {\ncolor: #2c3e50 !important;\n}\n修改文章字体颜色 在 custom.css 中追加：\n.post-content p, .post-content li {\ncolor: #333333;\n}\n配置首页固定欢迎语 在 hugo.toml 的 [params] 下添加：\n[params.homeInfoParams]\nTitle = \u0026ldquo;👋 欢迎来到我的博客\u0026rdquo;\nContent = \u0026ldquo;这里记录了我的学习与思考。\u0026rdquo;\n添加导航菜单外部链接\n[[menu.main]]\nname = \u0026ldquo;友链\u0026rdquo;\nurl = \u0026ldquo;https://aaacoo.xyz/\u0026quot;\nweight = 6\n修改网站底部版权 在 hugo.toml 的 [params] 中添加：\nfooter = \u0026ldquo;© 2026 你的名字 · 由 Hugo \u0026amp; PaperMod 驱动\u0026rdquo;\n八、搜索功能调试\n如果配置正确但搜索图标不出现，请检查：\nhugo.toml 中 ShowSearch = true 且 [outputs] 包含 JSON。\n执行 hugo 后，确认 public/index.json 文件存在。\n在浏览器中清空缓存并硬性重新加载（Ctrl+F5 或开发者工具停用缓存）。\n如果页面源码里没有 search-toggle，可强制注入：\nmkdir -p /var/www/techblog/layouts/partials\nnano /var/www/techblog/layouts/partials/extend_head.html\n写入搜索框 HTML（详见对话历史），再次生成。\n九、评论系统\n在 GitHub 新建一个公开仓库（如 blog-comments），安装 Utterances App 并授权该仓库。 配置文件中 [params.utterances] 部分填写真实仓库名，生成后文章底部即出现评论区。\n十、常见错误与解决\ncan\u0026rsquo;t evaluate field enabled in type bool 检查 [params.math] 是否误写成了 [[params.math]]，或者是否在某处写了 math = true 覆盖了表格。使用单括号，并确保没有重复的布尔键。\nTOML 重复键错误 删除文件顶部多余的 author、title 等，让它们只存在于 [params] 下。用 grep -n \u0026ldquo;keyword\u0026rdquo; hugo.toml 查找重复。\nhugo new 报错找不到目录 手动创建 content/posts 目录：mkdir -p content/posts。\nFileBrowser 重启后密码失效 启动时必须用 -d 指定固定的数据库文件，并注册为系统服务。\n网站无法访问（连接超时） 检查云安全组是否放行 80 端口，服务器防火墙是否拦截。\n结语 至此，一个具备在线编辑能力、美观且功能齐全的技术博客就搭建完成了。后续你只需要通过 FileBrowser 后台写作，然后在终端执行 hugo 即可更新站点。如果将来绑定域名并启用 HTTPS，只需修改 baseURL 并用 Certbot 配置 Nginx 即可。\n希望这篇教程对你有所帮助，欢迎在评论区交流！\n","permalink":"http://38.22.95.49/posts/%E6%95%99%E7%A8%8B/","summary":"\u003cp\u003e前言\n本文记录了使用 Hugo 静态站点生成器搭配 PaperMod 主题，在云服务器上搭建一个技术博客的全过程。包括：环境配置、部署上线、后台管理、美化、搜索、评论等功能，并附上所有踩过的坑和解决方案。\u003c/p\u003e\n\u003cp\u003e适用人群：有一台云服务器（本文以 Ubuntu/Debian 为例）、一个公网 IP 或域名，想快速搭建可在线编辑的技术博客。\u003c/p\u003e\n\u003cp\u003e最终效果：一个基于 IP 即可访问的静态博客，可通过浏览器后台在线编辑文章，刷新页面即可生效。\u003c/p\u003e\n\u003cp\u003e一、服务器基础环境\u003c/p\u003e\n\u003cp\u003e更新系统并安装必要软件\u003c/p\u003e\n\u003cp\u003eudo apt update \u0026amp;\u0026amp; sudo apt upgrade -y\u003c/p\u003e\n\u003cp\u003esudo apt install git nginx certbot python3-certbot-nginx -y\u003c/p\u003e\n\u003cp\u003e安装 Hugo（推荐 snap）\u003c/p\u003e\n\u003cp\u003esudo snap install hugo\u003c/p\u003e\n\u003cp\u003e若不用 snap，可去 GitHub Release 下载最新 deb 包安装。但请确保版本 ≥ 0.146.0，否则 PaperMod 最新版会报错。\u003c/p\u003e\n\u003cp\u003e检查版本：\nhugo version\u003c/p\u003e\n\u003cp\u003e二、创建 Hugo 站点\u003c/p\u003e\n\u003cp\u003e创建工作目录\nsudo mkdir -p /var/www/techblog\u003c/p\u003e\n\u003cp\u003esudo chown -R\u003c/p\u003e\n\u003cp\u003eUSER:USER /var/www/techblog\u003c/p\u003e\n\u003cp\u003ecd /var/www/techblog\u003c/p\u003e\n\u003cp\u003e初始化 Hugo 站点\nhugo new site . \u0026ndash;force\n此时会生成 hugo.toml 及标准目录结构。\u003c/p\u003e","title":"从零搭建 Hugo + PaperMod 技术博客，并用 FileBrowser 做管理后台"},{"content":"“当你兴冲冲地买了云服务器，打开终端看着黑乎乎的窗口闪着光标，输入 cd、ls 却总提示 command not found 的时候，那种手足无措的感觉，我太懂了。这就是写这篇教程的原因——不讲底层原理，不讲内核参数，只讲怎么活下来。”\n第一节：准备工作与“登录”\n你只需要这两样东西：\n云服务器的 IP 地址\n管理员密码（或密钥文件 .pem）\nMac 用户看这里：直接打开自带的“终端”输入命令。\nWindows 用户看这里：\n直接劝退用 CMD，推荐下载 Windows Terminal 或 MobaXterm，或者用 VS Code 的 Remote-SSH 插件（有截图更好）。\n核心指令示范：ssh root@你的服务器IP （然后输入密码）。\n登录成功的样子：看到 Welcome to Ubuntu\u0026hellip; 那一大串文字，别怕，这就是“进去了”。\n第二节：Linux 的“资源管理器”——基础文件操作 对应 Windows 的“我的电脑”，让他在黑框里看到他的文件。\nls —— “看” （List 的缩写）\n类比：双击打开文件夹。\nls ：列出当前有什么文件。\nls -la ：显示隐藏文件（就像开了“显示隐藏项目”），重点解释 -la 叫参数。\ncd —— “走” （Change Directory）\n类比：鼠标点进文件夹。\ncd /var/www ：进去。cd .. ：返回上一级。cd ~ ：回家（root 的家就是 /root）。\npwd —— “我在哪”\n迷路时的救星，告诉你当前的完整路径。\nmkdir —— “新建文件夹”\nmkdir my-blog ：像右键新建文件夹一样简单。\n第三节：Linux 的“记事本”——修改文本文件 新手最怕改配置，必须教最简单的。\n放弃 Vim，拥抱 Nano\n划重点：如果你连退出编辑器都不会，千万别用 Vim。直接用 nano。\nnano 的极简操作：\nnano 文件名.txt：打开或新建一个文件。\n直接敲键盘输入文字（就跟记事本一样）。\n保存：Ctrl + O （然后回车确认）。\n退出：Ctrl + X。\n实战：在服务器上写一个最简单的 hello.txt，体验一下黑框里的编辑世界。\n第四节：Linux 的“应用商店”——安装软件 新手最迷惑的一步，用大白话讲。\napt 是什么？\n类比：手机上的 App Store。（sudo 相当于解锁屏幕去下载软件，需要有管理员权限）。\n万能三连：\nsudo apt update （刷新应用商店的列表）\nsudo apt install 软件名 （点击下载安装）\n例子：sudo apt install nginx -y （-y 就是自动点“是”）\n第五节：生存保命指令集（快速查阅） 列出几个最常用的短命令，作为附录。\nCtrl + C：当前程序卡住了？按这个强制结束。（不是复制！不是复制！）\nhistory：刚才那条长命令我忘了？它帮你记着。\nclear：屏幕太乱了，清屏一下。\nreboot：重启电脑。\n结尾 到这里，你已经跨越了最吓人的第一步。下次如果再遇到那个黑底白字的界面，心里至少能默念：ls 看看有啥，cd 进去，nano改一改。这已经足够你折腾出很多好玩的东西了。关键不是背下来命令，而是不再害怕那个闪烁的光标。\n如果还有问题可以联系我的邮箱：2726063855@qq.com。欢迎大家来友善交流\n","permalink":"http://38.22.95.49/posts/%E6%96%B0%E6%89%8Blinux/","summary":"\u003cp\u003e“当你兴冲冲地买了云服务器，打开终端看着黑乎乎的窗口闪着光标，输入 cd、ls 却总提示 command not found 的时候，那种手足无措的感觉，我太懂了。这就是写这篇教程的原因——不讲底层原理，不讲内核参数，只讲怎么活下来。”\u003c/p\u003e\n\u003cp\u003e第一节：准备工作与“登录”\u003c/p\u003e\n\u003cp\u003e你只需要这两样东西：\u003c/p\u003e\n\u003cp\u003e云服务器的 IP 地址\u003c/p\u003e\n\u003cp\u003e管理员密码（或密钥文件 .pem）\u003c/p\u003e\n\u003cp\u003eMac 用户看这里：直接打开自带的“终端”输入命令。\u003c/p\u003e\n\u003cp\u003eWindows 用户看这里：\u003c/p\u003e\n\u003cp\u003e直接劝退用 CMD，推荐下载 Windows Terminal 或 MobaXterm，或者用 VS Code 的 Remote-SSH 插件（有截图更好）。\u003c/p\u003e\n\u003cp\u003e核心指令示范：ssh root@你的服务器IP （然后输入密码）。\u003c/p\u003e\n\u003cp\u003e登录成功的样子：看到 Welcome to Ubuntu\u0026hellip; 那一大串文字，别怕，这就是“进去了”。\u003c/p\u003e\n\u003cp\u003e第二节：Linux 的“资源管理器”——基础文件操作\n对应 Windows 的“我的电脑”，让他在黑框里看到他的文件。\u003c/p\u003e\n\u003cp\u003els —— “看” （List 的缩写）\u003c/p\u003e\n\u003cp\u003e类比：双击打开文件夹。\u003c/p\u003e\n\u003cp\u003els ：列出当前有什么文件。\u003c/p\u003e\n\u003cp\u003els -la ：显示隐藏文件（就像开了“显示隐藏项目”），重点解释 -la 叫参数。\u003c/p\u003e\n\u003cp\u003ecd —— “走” （Change Directory）\u003c/p\u003e\n\u003cp\u003e类比：鼠标点进文件夹。\u003c/p\u003e\n\u003cp\u003ecd /var/www ：进去。cd .. ：返回上一级。cd ~ ：回家（root 的家就是 /root）。\u003c/p\u003e","title":"给前端或纯新手的 Linux 生存指令：能登上去、能改文件、能装软件"}]