作者: James

  • 从零开始:我是怎么搭起这个博客的

    为什么要自己建站

    建这个网站的初衷很简单:练技术。

    上课时老师教我们用 Xshell 连 Linux 虚拟机,敲了几次命令,我就想:要是有一台属于自己的服务器,从零搭一个网站,会不会学得更扎实?于是就有了这个博客。

    这篇文章记录了整个过程,也包括我踩过的坑。

    第一步:先把门锁好

    买好 VPS 之后,我没有急着建站,而是先做了安全设置:

    • 只允许 SSH 密钥登录,关闭密码登录
    • 新建普通用户,日常不再直接用 root
    • 禁止 root 远程登录,需要管理员权限时用 sudo

    一开始我也不理解为什么不能一直用 root,后来明白了:root 没有任何限制,一个手滑就可能把整个系统删掉;而且网上的扫描机器人每天都在尝试登录 root。查看登录日志时,我真的看到了几分钟一次、来自各种陌生 IP 的登录尝试。

    这就是所谓的最小权限原则:平时只拿够用的权限。

    踩坑:我把自己关在了门外

    设置完禁止 root 登录后,我关掉窗口重新连接,结果怎么都连不上了。

    一开始以为是刚改的配置出了问题,后来又怀疑是网络把 22 端口封了,折腾了好久。最后通过服务商后台的 VNC 控制台登进去,才发现真正的原因:

    服务器上装着 fail2ban,它会自动封禁短时间内多次登录失败的 IP。我测试“root 能不能登录”时故意失败了几次,它就把我的 IP 当成了暴力破解的机器人,连我自己一起封了。

    sudo fail2ban-client set sshd unbanip 我的IP

    一行命令解封,问题解决。

    这次经历让我学到了一套排错思路:先看报错信息,再看服务器日志,然后分端口测试,最后换环境验证。还有,永远给自己留一条后路,比如 VNC 控制台。

    第二步:第一个网页

    装好 Nginx 之后,浏览器里出现了那句经典的 “Welcome to nginx!”。

    接着我手写了第一个 HTML 页面,也顺便踩了个小坑:Xshell 里中文显示成一个个方框。原以为是编码问题,结果是终端字体不支持中文,把亚洲字体换成新宋体就好了。

    练习改页面的时候,我把一个标签放错了位置,结果它变得特别大。这才理解了 HTML 的嵌套和继承:子元素会继承父元素的样式。

    第三步:域名和 HTTPS

    用 IP 访问网站又难记又显示“不安全”,于是我买了这个域名:kiteroot。

    风筝(kite)飞得高,根(root)扎得深;而 root 又是 Linux 里的超级管理员。这个名字我很喜欢。

    接下来:

    1. 在 Cloudflare 添加 DNS 解析,把域名指向服务器
    2. 配置 Nginx,让它认识这个域名
    3. 用 Certbot 申请 Let’s Encrypt 的免费证书

    Certbot 自动帮我改好了 Nginx 配置,还设置了 HTTP 自动跳转 HTTPS,以及每 90 天自动续期。地址栏的“不安全”终于消失了。

    第四步:搭建这个博客

    最后就是你现在看到的这个博客,用的是经典的 Nginx + PHP + MariaDB + WordPress 组合:

    • Nginx:接收访客的请求
    • PHP-FPM:运行 WordPress 的代码
    • MariaDB:存放文章和数据。它是 MySQL 的“亲兄弟”,用法几乎一样,但更省内存
    • WordPress:博客程序本身

    安装 PHP 时正好赶上 PHP 爆出严重漏洞 PHP2Shell。查了资料才知道,Ubuntu 会把安全补丁移植到自己维护的旧版本里,所以要看完整的包版本号,而不能只看 php -v。

    数据库方面,我给 WordPress 单独建了一个账号,它只能访问博客自己的数据库,又是一次最小权限原则的实践。

    下一步

    • 学会备份,网站有了数据库,就不只是几个文件了
    • 自己动手写一个动态小网站
    • 学习 Docker 部署

    这个博客会继续记录我学技术的过程。如果你也想自己搭一个网站,希望这篇文章能帮到你。