PaperUI 博客部署到生产环境的完整方案

上一篇聊了 SEO 优化,这篇我们讲部署 —— 把本地写好的 PaperUI 博客发布到互联网上。 构建静态文件 在部署之前,先生成静态文件: # 清理旧文件并重新构建(--cleanDestinationDir 自动清理废弃文件) hugo --minify --cleanDestinationDir --minify 参数会压缩 HTML、CSS、JS,减小文件体积。构建后的文件在 public/ 目录中。 方案一:GitHub Pages(免费) 适用场景 使用 GitHub 管理博客源代码 免费托管 自定义域名支持 步骤 1. 创建部署仓库 在 GitHub 上创建 用户名.github.io 仓库(用于用户/组织站点)。 2. 推送代码 cd my-blog git init git remote add origin https://github.com/用户名/用户名.github.io.git git add . git commit -m "初始化博客" git push -u origin main 3. 配置 GitHub Actions 创建 .github/workflows/deploy.yml: name: Deploy Hugo site on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 - name: Setup Hugo uses: peaceiris/actions-hugo@v3 with: hugo-version: '0.146.0' extended: true - name: Build run: hugo --minify --cleanDestinationDir - name: Deploy uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./public 4. 设置 GitHub Pages ...

2026-05-23 · 2 min · 363 words · 新墨韬

PaperUI 自定义与二次开发指南

PaperUI 的设计目标是开箱即用,但你总会有一些个性化的需求。这篇文章介绍如何在不直接修改主题源码的情况下,安全地自定义 PaperUI。 为什么不要直接修改主题源码 直接修改 themes/PaperUI/ 下的文件有几个问题: 主题更新困难:一旦修改了源码,git pull 更新主题时会产生冲突 可维护性差:其他人(包括未来的你)很难搞清楚哪些是改过的 升级风险:PaperUI 可能因 Hugo 版本更新而需要修改,你的改动会成为障碍 Hugo 的文件覆盖机制 Hugo 有一个重要的特性:项目根目录的同名文件会覆盖主题中的文件。 项目/ ├── themes/PaperUI/ │ └── layouts/ │ └── _partials/ │ └── footer.html ← 主题原始文件 └── layouts/ └── _partials/ └── footer.html ← 你的覆盖文件(优先使用) 这意味着你只需要在项目根目录创建相同路径的文件,Hugo 就会使用你的版本而不是主题的。 自定义主题颜色 PaperUI 使用 CSS 变量控制所有颜色。最简单的方式是在项目中创建覆盖样式文件。 创建 assets/css/extended/custom.css: /* 修改主题色 */ :root { --accent: #3b82f6; /* 蓝色系主题色 */ --accent-alpha: rgba(59, 130, 246, 0.1); --accent-secondary: #2563eb; /* 也可以修改其他变量 */ --content: #1a1a2e; --content-secondary: #4a4a6a; --border: #e5e7eb; } /* 深色模式 */ .dark { --accent: #60a5fa; --accent-alpha: rgba(96, 165, 250, 0.15); --content: #e5e7eb; --content-secondary: #9ca3af; --border: #374151; } PaperUI 默认的 accent 色是 #f87c45(暖橙色),你可以改成任何颜色。 ...

2026-05-22 · 2 min · 371 words · 新墨韬

PaperUI 常见问题与最佳实践

这是 PaperUI 系列文章的最后一篇。我们汇总了使用过程中的常见问题,并分享一些搭建 Hugo 博客的最佳实践。 常见问题 Q: 文章不显示? 最常见的原因:日期设为未来日期。 Hugo 默认不渲染未来日期的文章。 解决方法:确保文章 Front Matter 中的 date 是今天或过去的日期。开发时可以用 hugo server -F 预览未来日期的文章。 Q: 首页轮播不显示? 检查以下几点: hugo.toml 中是否配置了 [params.homeCarousel] 轮播图片路径是否正确(相对于 static/ 目录) 图片文件是否真实存在 Q: 侧边栏没有内容? 侧边栏的"随机文章"和"近期文章"需要有足够数量的文章才会显示。建议至少有 3 篇以上的文章。 “分类"和"标签"小部件需要文章配置了对应的 categories 和 tags 才会出现。 Q: 搜索功能不工作? PaperUI 的搜索依赖 fuse.js,需要确保: [outputs] 中包含 JSON(生成搜索索引) 文章没有被标记为 searchHidden: true 浏览器控制台没有 JS 错误 Q: 修改配置后不生效? Hugo 开发服务器会自动检测配置变更并重载。但如果修改了主题文件或 CSS,建议重启 hugo server。 如果是修改了 baseURL 或 env 等影响输出的配置,需要重新构建。 Q: 如何添加评论系统? PaperUI 没有内置评论系统(与 PaperMod 一致),但可以通过扩展模板添加。 ...

2026-05-21 · 2 min · 364 words · 新墨韬

Linux 命令行:从开发到运维的常用技巧

不管做开发还是运维,熟练使用 Linux 命令行都能让工作效率提升数倍。以下是我在开发、部署和排错中最常用的操作。 文件与目录操作 # 递归查找所有 .log 文件 find /var/log -name "*.log" -type f # 查找大于 100MB 的文件 find . -type f -size +100M # 在指定目录搜索包含关键词的文件 grep -r "ERROR" /var/log/nginx/ --include="*.log" # 统计代码行数 find src/ -name "*.py" | xargs wc -l 权限管理 # 给脚本添加执行权限 chmod +x deploy.sh # 递归修改目录权限 chmod -R 755 public/ chmod -R 644 public/*.html # 修改所有者(常用于 Web 目录) sudo chown -R www-data:www-data /var/www/site/ 一个常见的坑:文件能否执行看权限位,能否被读取看父目录的 x 权限——目录没有执行权限时,即使文件权限正确也无法访问。 系统监控与排错 # 查看磁盘使用情况 df -h # 查看某个目录占用 du -sh /var/log/* | sort -hr | head -10 # 内存使用 free -h # 实时进程信息 top htop # 如果安装了的话,更友好 # 查看特定进程 ps aux | grep nginx # 查看端口占用 ss -tlnp | grep :80 管道与文本处理 管道的核心思想是小工具组合: ...

2026-05-20 · 2 min · 265 words · 新墨韬

Python 开发中值得养成的 8 个编码习惯

Python 以简洁优雅著称,但写出真正的 Pythonic 代码需要刻意练习。以下是日常开发中最值得养成的几个习惯。 1. 善用列表推导,但别滥用 列表推导清晰时非常优雅: # 过滤与转换一步到位 active_users = [u.name for u in users if u.is_active] # 构建字典 name_map = {u.id: u.name for u in users} 但超过一层嵌套时,可读性会急剧下降。此时用普通循环更清晰: # 不推荐 result = [x for row in matrix for x in row if x > 0] # 推荐:拆开写 result = [] for row in matrix: for x in row: if x > 0: result.append(x) 2. 用 | 合并字典(Python 3.9+) defaults = {"timeout": 30, "retries": 3} user_config = {"timeout": 60} final = defaults | user_config # {'timeout': 60, 'retries': 3} 右边覆盖左边,语义直观。老版本用 {**a, **b} 也可以,但 | 更可读。 ...

2026-05-20 · 2 min · 253 words · 新墨韬

Git 实用指南:从日常操作到团队协作

Git 是目前最主流的分布式版本控制系统。但学会 Git 不只是记住命令——理解背后的工作流才能真正高效协作。 三个关键区域 每次操作 Git,数据在四个区域流转: 工作目录 → 暂存区 → 本地仓库 → 远程仓库 理解这个模型后,add、commit、push 的关系就很清晰了: git add . # 工作目录 → 暂存区 git commit -m "..." # 暂存区 → 本地仓库 git push origin main # 本地仓库 → 远程仓库 分支策略 日常开发中最常用的分支模型是 GitHub Flow: main — 始终可部署 feature/* — 每个功能独立分支 hotfix/* — 紧急修复 # 从 main 切出功能分支 git checkout -b feature/add-login # 开发过程中频繁小提交 git commit -m "feat: add login form" git commit -m "feat: add form validation" # 完成后推送到远程 git push origin feature/add-login 合并 vs 变基 这是 Git 中最容易困惑的地方。简单原则: ...

2026-05-18 · 2 min · 269 words · 新墨韬