分类

技术笔记

通配符证书和 acme.sh:我如何解决多域名证书管理

这是「把自己部署到互联网上」系列的第 28 篇。

上一篇写了单域名 SSL 证书从申请、下载到部署的完整流程。

申请证书,完成域名验证,下载证书和私钥,放到全局 Nginx 的证书目录,配置 443,检查 Nginx,重载服务,最后验证 HTTPS

这条链路适合把 HTTPS 跑通,对整个流程有个完整的理解。

接下来,又会遇到一个问题,

假如我有多个子域名,我该如何处理呢,难道说,也是一个一个的申请?

多个子域名应如何处理?

业务发展需要,会产生多个服务,比如 blog.aicultiv.comwww.aicultiv.comapi.aicultiv.comadmin.aicu...

为什么个人博客也需要对象存储?

这是「把自己部署到互联网上」系列的第 29 篇。

前面几篇把 HTTPS 这段基本走完了:

  1. 先讲为什么个人网站需要 HTTPS
  2. 再写 SSL 证书申请、下载和部署
  3. 最后用通配符证书和 acme.sh 解决多域名证书管理。

到这里,个人博客的访问入口已经比较完整:

服务器、域名、备案、安全边界、部署架构、全局 Nginx 和 HTTPS 都有了基本方案。

一个不起眼的问题

接下来要处理一个容易被忽略的问题:图片、附件和静态资源应该放在哪里?

最简单、粗暴的做法是放在服务器本地。

博客项目本身也有上传目录,图片传到上传目录里,文章直接引用本地资源。

这很简单直接,运行没问题。但项目要...

对象存储桶策略、JSON 配置和域名访问控制实战

这是「把自己部署到互联网上」系列的第 30 篇。

上一篇讲了为什么个人博客也需要对象存储。

图片、附件、项目截图和静态资源会随着文章不断增长,如果全部放在服务器本地,后面会遇到磁盘膨胀、迁移麻烦、备份边界不清晰和带宽压力等问题

但对象存储真正有坑的地方,是文件权限到底该怎么开?

  1. 图片既要能被文章访问,也要不能被别人随便访问
  2. 图片等相关资源能通过自己的域名访问,但又不希望任何地方都无限制引用
  3. 桶策略、JSON 配置、访问域名、防盗链、CORS 混在一起,很容易出错

我刚开始使用对象存储时,就把它当成云端文件夹:

创建桶,上传图片,复制链接,放进文章里,图片能打开,好像就结束了。

应该...

我是如何用 Docker 部署个人博客的

这是「把自己部署到互联网上」系列的第 31 篇。

前面已经处理了服务器、域名、备案、安全边界、Docker 选型、全局 Nginx、HTTPS 和对象存储

到这一篇,能想到的处理步骤已经都处理了,大家还有更好的见解,欢迎评论区友好交流一下。

进入主线动作:用 Docker 容器部署个人博客。

部署思路

这篇不是传统意义上的教程,而是按我的部署思路,把博客从

代码目录、环境变量、数据库、Docker Compose、启动检查,到接入全局 Nginx

的流程串起来。

具体命令要按项目调整,重点是理解一个博客项目要稳定运行,哪些东西必须放到可维护的位置。

部署过程

这一篇的目标是:把个人博...

博客部署后,我遇到的数据库、迁移和管理员初始化问题

这是「把自己部署到互联网上」系列的第 32 篇。

上一篇,把个人博客通过 Docker 部署起来了:

  • 项目目录有了,代码拉下来了

  • .env 配好了

  • Dockerfile 和 Compose 文件也整理了
  • 应用容器和数据库容器跑起来
  • 全局 Nginx 能转发请求
  • 域名和 HTTPS 也开始接入

到这一步,博客已经算基本部署成功。

但接着做下来我发现:容器跑起来,不等于博客真的可用,这篇文章主要记录下使用过程中踩到坑的问题,供大家参考下,避免再次踩坑。

遇到的问题

问题1 数据库容器正常运行,但应用连不上

查看容器日志,日志里可能会出现 connection refusedac...

从 HTTPS 到对象存储,我的博客终于有了上线条件

这是「把自己部署到互联网上」系列的第 33 篇。

从第 26 篇到第 32 篇,我把个人博客上线前很关键的一段走完了。

这一段主要解决三个问题:

  1. 网站如何可信访问
  2. 资源如何长期承载
  3. 博客如何真正跑起来

可信访问这条线包括 HTTPS、SSL 证书、通配符证书和 acme.sh

资源承载这条线包括对象存储、桶策略、JSON 配置和域名访问控制

博客运行这条线包括 Docker 部署、数据库连接、迁移和管理员初始化

写到这里,我的博客开始具备上线条件了。注意,是具备上线条件,后续还要持续完善。

具备上线条件,意味着核心链路已经打通:能访问,能通过 HTTPS 访问,能运行,能存数据,...

Navicat 如何连接 Docker 里的数据库?

这是「把自己部署到互联网上」系列的第 34 篇。

上一篇复盘了从 HTTPS 到对象存储,再到 Docker 部署和数据库初始化。博客具备上线条件后,很快会遇到一个实际维护问题:我想用 Navicat 看一下 Docker 里的数据库,应该怎么连?

这个需求很常见。比如确认表是否创建成功,检查迁移有没有执行,看管理员账号是否初始化,排查某条数据为什么没写进去,导出部分数据,或者临时执行一条 SQL。NavicatDataGripDBeaver 这类工具确实方便。

但前提必须明确:不要为了让数据库工具连上,就直接把数据库端口暴露到公网

MySQL 服务在哪儿?

先看 Docker 里...

从 0 到 1:给已有代码项目配置 Git 仓库(超详细实战指南)

很多人在开发时,都会遇到这样一种情况:

  • 已经写了一堆代码
  • 项目文件夹已经存在
  • 但还没有使用 Git 管理
  • 想上传到 GitHub / GitLab
  • 或者后续想多人协作

这时候最常见的问题就是:

“如何把一个已有代码目录,配置成 Git 仓库?”

今天这篇文章,就带你完整走一遍。

适合:

  • Python / Java / 前端 / AI 项目
  • 个人项目
  • 公司项目
  • 本地已有代码目录

全部通用。


一、什么是 Git 仓库?

简单理解:

Git 会在你的项目里创建一个:

.git/

隐藏目录。

这个目录会记录:

  • 代码历史
  • 修改记录
  • 分支信息
  • 提交版本
  • 回滚信息

也就是说:

...

5分钟上手 Git:从安装到第一次提交,小白也能学会

摘要

很多人觉得 Git 难,其实真正高频使用的命令可能只有几个。别一上来学分支和工作流,先完成你的第一次提交。代码管理的第一步,不是复杂,而是开始。


命令速查表

git --version
# 查看 Git 是否安装成功

git config --global user.name "你的名字"
# 配置 Git 用户名

git config --global user.email "你的邮箱"
# 配置 Git 邮箱

cd git-demo
# 进入项目目录

git init
# 初始化 Git 仓库

git add hello.txt
# 添加指定文件到暂存区

git ...

别再乱写 `.gitignore `了:一篇讲清规则、误区和最佳实践

很多人第一次用 Git 时,都会遇到一个很尴尬的问题:明明已经写了 .gitignore,为什么文件还是被提交上去了?

比如:

node_modules/
.env
dist/

看起来没毛病,对吧?

可现实往往是:node_modules 还在 Git 里,.env 也已经被提交过,甚至团队成员一拉代码,发现你的本地配置、日志文件、构建产物全都混进了仓库。

.gitignore 是 Git 里非常基础的文件,但它背后的规则并不总是直觉化。今天这篇文章,我们就用最接地气的方式,把 .gitignore 的写法、常见坑和最佳实践一次讲清楚。

命令速查表

命令 中文注释
gi...
发现更多