公众号旧文

半年后,我恍然大悟:原来服务器没那么神秘

作者:胖子阅读 —

年初第一次接触服务器的时候,我认为它是很高深的东西。

看到别人搭建网站、部署服务,好像背后有一套复杂的技术体系。

服务器、Linux、端口、防火墙、域名、DNS、Docker、Nginx……

每一个名词都像一道门槛,让人觉得距离普通人很远。

近半年一直在折腾各种东西,我才慢慢发现:

服务器没有那么神秘。

服务器本质上,就是一台长期运行的电脑,而电脑里面运行着一些程序。

仅此而已。

一、服务器的本质:运行一个程序

相信你第一次接触服务器,也被各种概念给吓住了。

什么:

  • 云服务器
  • VPS
  • 容器
  • 集群
  • 负载均衡
  • 微服务

这些词听起来很复杂。

但最底层的逻辑则非常简单:

你写了一个程序。

比如:

python3
 app.py

程序启动以后:

监听 8000 端口
等待用户访问
返回数据

这台机器就具备了服务器的功能。

例如一个网页服务:

浏览器
   ↓
服务器IP:8000
   ↓
你的Python程序
   ↓
返回网页

一个DNS服务:

用户查询
   ↓
53端口
   ↓
DNS程序
   ↓
返回IP地址

一个图片服务:

上传图片
   ↓
Web程序
   ↓
保存文件
   ↓
返回访问地址

所谓服务器,只是这个程序一直运行,并且别人可以访问它。

二、systemd 才是让它变成服务的关键

当然,直接运行:

python3
 app.py

是不够的。

因为:

  • SSH断开怎么办?
  • 程序崩溃怎么办?
  • 服务器重启怎么办?

于是出现了 systemd。

systemd 就像一个管理员。

你告诉它:

这个程序很重要,请帮我一直运行。

例如:

[Service]
ExecStart=/usr/bin/python3 /opt/app/app.py
Restart=always

然后:

  • 程序退出 → 自动启动
  • 服务器重启 → 自动启动
  • 查看状态 → 一条命令
systemctl status app

这时候,一个普通程序,就变成了一个稳定运行的后台服务。

三、Docker 也没有那么神秘

之前看到 Docker,我也觉得很复杂。

什么:

  • 镜像
  • 容器
  • Dockerfile
  • compose

后来发现,本质也是管理程序运行环境。

比如你的程序需要:

  • Python 3.12
  • 某些依赖库
  • 某些配置文件

Docker 只是把这些东西打包起来。

换一台服务器:

docker compose up

程序又跑起来了。

它解决的是怎么保证我的程序在另一台机器也能正常运行。

四、DNS、域名,也都是程序

以前觉得域名解析非常神秘。

后来自己搭建权威 DNS 才发现 DNS 服务器也是一个程序。

用户问:

www.example.com 的IP是多少?

DNS程序回答:

123.123.123.123

就这么简单。

域名系统看起来庞大,是因为全球很多服务器共同协作。

但单独看一个DNS服务,就是监听53端口,然后返回数据。

五、半年后的最大感悟

现在回头看,不要把服务想象成一个神秘的东西。

它就是一台电脑。

电脑里运行程序。

程序监听端口。

systemd 保证程序活着。

域名让别人找到它。

数据库保存数据。

网络负责传输。

所有复杂系统,拆开以后,都是这些简单组件组合起来的。

结语

半年前,我看到服务器的时候,会觉得:

这是什么高级技术?

半年后,我看到一个新服务,第一反应变成:

它运行的是什么程序?

监听哪个端口?

数据存在哪里?