4. 云服务器与远程部署入门

来源于李勃老师零到全栈课程内容

4.1 服务器与个人电脑有什么不同

之前说过服务器本质仍然是电脑,但典型使用方式与个人电脑不同。

服务器

通常:

  • 长时间持续运行;

  • 通过网络提供服务;

  • 常常远程管理;

  • 很多 Linux 服务器没有桌面环境;

  • 需要能够被目标用户通过网络访问。


4.2 公网 IP 与内网 IP

家庭 / 学校局域网中的设备通常会得到私有地址,例如:


192.168.1.5

10.0.0.8

172.16.x.x

这些通常是内网 / 私有 IP

例如:


互联网

    │

    │

路由器

公网 IP

    │

    ├── 192.168.1.2  电脑

    ├── 192.168.1.3  手机

    └── 192.168.1.4  平板

外部网络不能仅凭:


192.168.1.2

直接在整个互联网中唯一找到你家里的那台电脑。

公网 IP

公网 IP 能够在互联网路由体系中用于对外通信。

云服务器通常会分配一个可访问的公网地址,例如:


43.xx.xx.xx

总之云服务器之所以方便部署网站,其中一个关键原因是它通常能直接提供稳定的公网网络入口。


4.3 什么是云服务器

云服务器不是“飘在云里的电脑”。

可以理解为:

云厂商在数据中心准备了大量计算、存储和网络资源,再通过虚拟化等技术将其中一部分资源提供给用户使用。

你通常不需要:

  • 自己购买物理服务器;

  • 自己找机房;

  • 自己拉公网线路;

  • 自己维护硬盘和电源。

而是购买:


CPU

内存

磁盘

公网带宽

IP

操作系统环境

的使用权。


4.4 购买云服务器时目前关注什么

重点关注:

  1. 确认购买的是云服务器 / 轻量服务器之类的计算实例;

  2. 确认具有公网访问能力;

  3. 操作系统建议选择 Ubuntu LTS;

  4. 关注配置,续费价格等;

  5. 了解安全组 / 防火墙配置入口。

云平台控制台示例:

腾讯云控制台示例

阿里云控制台示例


4.5 为什么选择 Ubuntu

Linux 不是一个单一桌面操作系统产品,而存在许多发行版。

对于入门者,Ubuntu 的优势主要是:

  • 使用广泛;

  • 教程多;

  • 软件包丰富;

  • 云平台支持普遍;

  • 很多教学资料容易直接复现。

通常优先选择:

Ubuntu LTS(Long Term Support,长期支持版本)

不需要为了学习追求最新的非 LTS 版本。


4.6 云服务器购买后通常会获得什么

通常至少需要掌握:


公网 IP

登录用户名

认证方式

认证方式可能是:


密码

或:


SSH 密钥

入门阶段主要使用:


用户名 + 密码

例如:


IP: 123.45.67.89

User: ubuntu

Password: ********


4.7 安全组 / 防火墙

即使服务器上的程序正在监听某个端口,也不一定意味着互联网用户可以访问它。

云平台通常还有一层:

安全组 / 云防火墙

例如:


互联网

   ↓

云平台安全组

   ↓

服务器操作系统

   ↓

服务器上的程序

因此需要至少关注:

端口 用途
22 SSH 远程登录
80 HTTP 网页访问

如需部署 HTTPS 时还会关注443端口

一个安全习惯

不要为了“省事”把所有端口全部向全世界开放。

应该遵循: 只开放当前确实需要的端口。


4.8 SSH 远程登录

SSH(Secure Shell)是一套安全远程登录协议和工具体系。

最基本命令:


ssh 用户名@公网IP

例如:


ssh ubuntu@123.45.67.89

默认情况下,SSH 服务常监听:


22

端口。

整个过程:


你的电脑

   │

   │ SSH

   │ TCP 22

   ▼

公网 IP

   │

   ▼

远程 Linux 服务器

第一次连接

第一次连接某台服务器时,可能看到类似:


Are you sure you want to continue connecting (yes/no/[fingerprint])?

确认服务器信息无误后输入:


yes

随后进行密码或密钥认证。

为什么输入 SSH 密码时屏幕没有任何显示

Linux 终端输入密码时经常:


没有 *

没有圆点

光标也似乎不动

这是正常的安全设计。

直接输入正确密码后按 Enter 即可。


4.9 登录服务器之后发生了什么

假设提示符变成:


ubuntu@your-server:~$

这意味着:

当前终端中的命令已经在远程服务器上执行,而不是在本地 Windows / WSL 中执行。

例如:


pwd

此时可能输出:


/home/ubuntu

执行:


cd /

ls

会看到典型 Linux 根目录:


bin

boot

dev

etc

home

lib

opt

proc

root

run

srv

sys

tmp

usr

var

...

这些文件属于远程服务器


4.10 本地终端和远程终端不要混淆

例如:

SSH 登录前


huang@my-pc:~$

你控制的是本地环境。

SSH 登录后


ubuntu@cloud-server:~$

你控制的是服务器。

以后执行安装、删除、修改配置前,一定先看:


用户名@主机名

以及:


pwd

避免把命令执行错机器。


4.11 apt:Ubuntu 软件包管理

Ubuntu 常使用 APT 管理软件。

先更新软件包索引:


sudo apt update

再安装 Nginx:


sudo apt install nginx -y

apt update 主要是:更新本机记录的软件包仓库信息。

不是简单等于: “把所有软件升级到最新版”。

真正升级已安装软件通常还涉及:


sudo apt upgrade

sudo 可以粗略理解为:

临时以更高权限执行某个命令。

类似 Windows 中:


以管理员身份运行

但 Linux 权限体系比这个类比更完整。


4.12 Nginx 是什么

Nginx 是非常常见的 Web Server / 反向代理软件。

在当前课程中,只需要先理解它的一个最基本功能:

监听 Web 请求,并把网页内容发送给浏览器。

一个简化模型:


浏览器

   │

   │ HTTP Request

   ▼

服务器:80

   │

   ▼

Nginx

   │

   │ 读取网页文件

   ▼

HTML

   │

   │ HTTP Response

   ▼

浏览器

Nginx 以后还可以用于:

  • 反向代理;

  • HTTPS;

  • 静态文件服务;

  • 负载均衡;

  • 请求转发;

  • 日志记录;

  • 限流等。

当前不需要全部掌握。


4.13 systemctl:查看服务状态

安装 Nginx 后可以:


systemctl status nginx

如果看到:


active (running)

说明 Nginx 服务正在运行。

如果没有运行,可以尝试:


sudo systemctl start nginx

常见操作还有:


sudo systemctl stop nginx

sudo systemctl restart nginx

分别表示:停止、重启


4.14 为什么 Nginx 运行了,浏览器仍然可能打不开

因为程序运行只是其中一个条件。

完整链路至少涉及:


浏览器

   ↓

公网 IP

   ↓

云平台安全组允许 80

   ↓

服务器网络

   ↓

Nginx 正在监听 80

   ↓

返回网页

如果安全组没有放行:


TCP 80

那么外部浏览器仍然无法访问。


4.15 用公网 IP 访问 Nginx

确认 Nginx 运行,并开放 TCP 80 后,在本地浏览器访问:


http://你的服务器公网IP

例如:


http://123.45.67.89

如果成功,会看到 Nginx 默认页面。

示例页面:

Nginx 默认欢迎页

这意味着整条链路已经打通:


本地浏览器

    ↓

公网 IP

    ↓

云服务器

    ↓

TCP 80

    ↓

Nginx

    ↓

网页文件

    ↓

HTTP Response

    ↓

本地浏览器显示


4.16 Nginx 的网页文件在哪里

Ubuntu / Debian 系列中,Nginx 默认配置可以通过:


cat /etc/nginx/sites-available/default

查看。

其中可能看到:


root /var/www/html;

这表示当前站点的网页根目录为:


/var/www/html

进入:


cd /var/www/html

ls

通常能找到类似:


index.nginx-debian.html

这就是默认页面对应的 HTML 文件。

于是:


浏览器看到的网页

        ↑

Nginx 返回

        ↑

/var/www/html/...html

“网页”和“服务器上的文件”在这里真正连接起来。


4.17 使用 Vim 修改服务器网页

打开文件:


sudo vim /var/www/html/index.nginx-debian.html

然后:


i

↓

修改内容

↓

Esc

↓

:wq

↓

Enter

回到浏览器刷新。

如果网页内容改变,说明已经完成一次最简单的公网部署修改过程。

完整过程:


本地电脑

   │

   │ SSH

   ▼

远程服务器

   │

   │ Vim 修改

   ▼

HTML 文件

   │

   │ Nginx 读取

   ▼

HTTP 服务

   │

   │ 80 端口

   ▼

公网

   │

   ▼

本地浏览器


4.18 常见故障排查

问题 1:SSH 连不上

按顺序检查:


服务器是否正在运行

    ↓

公网 IP 是否正确

    ↓

用户名是否正确

    ↓

22 端口是否在安全组中放行

    ↓

密码 / SSH 密钥是否正确

    ↓

SSH 服务是否正常


问题 2:浏览器打不开公网 IP

检查:


Nginx 是否 active (running)

    ↓

是否访问 http://公网IP

    ↓

云平台安全组是否开放 TCP 80

    ↓

服务器本机防火墙是否额外阻止


问题 3:修改 HTML 后页面没变化

检查:


修改的是不是正确服务器

    ↓

修改的是不是正确文件

    ↓

Vim 是否真正保存

    ↓

Nginx root 是否确实指向这个目录

    ↓

浏览器是否刷新 / 缓存


4.19 安全组与服务器本机防火墙的区别

二者并不是同一件事。

实际上可能存在两层:


互联网

   ↓

① 云平台安全组

   ↓

② Ubuntu 本机防火墙

   ↓

③ Nginx

因此“80 端口无法访问”不一定只有一个原因。

云安全组

在阿里云、腾讯云等控制台配置。

Linux 本机防火墙

Ubuntu 常见工具:


ufw

例如:


sudo ufw status

当前主要操作云平台安全组,知道这两个层次不同即可。


4.20 从本地电脑到云服务器的完整链路

这是整个模块的一张知识地图。


┌──────────────────────────────┐

│ 1. 本地文件系统              │

│ 文件 / 文件夹 / 路径         │

└──────────────┬───────────────┘

               │

               ▼

┌──────────────────────────────┐

│ 2. 编辑器                    │

│ VS Code 修改代码文件         │

└──────────────┬───────────────┘

               │

               ▼

┌──────────────────────────────┐

│ 3. 终端                      │

│ pwd / ls / cd / mkdir ...    │

└──────────────┬───────────────┘

               │

               ▼

┌──────────────────────────────┐

│ 4. Linux 环境                │

│ WSL / Ubuntu / Server        │

└──────────────┬───────────────┘

               │

               ▼

┌──────────────────────────────┐

│ 5. 网络定位                  │

│ 域名 → DNS → IP             │

└──────────────┬───────────────┘

               │

               ▼

┌──────────────────────────────┐

│ 6. 网络服务                  │

│ IP + Port                    │

└──────────────┬───────────────┘

               │

               ▼

┌──────────────────────────────┐

│ 7. SSH                       │

│ 本地终端远程控制服务器       │

└──────────────┬───────────────┘

               │

               ▼

┌──────────────────────────────┐

│ 8. Nginx                     │

│ 监听 80 端口并提供网页       │

└──────────────┬───────────────┘

               │

               ▼

┌──────────────────────────────┐

│ 9. 浏览器                    │

│ HTTP 请求 → 响应 → 显示网页 │

└──────────────────────────────┘


5. 总结一些概念

概念 一句话理解 示例
文件 保存具体内容 index.html
文件夹 / 目录 组织文件 my-project/
路径 描述文件在哪里 /var/www/html
绝对路径 从固定根部完整描述位置 /home/user/a.txt
相对路径 从当前位置描述位置 ./images/a.png
VS Code 编辑代码文件的工具 打开项目目录
Terminal 使用命令与计算机交互的界面 Windows Terminal
Shell 解释命令的程序 Bash / Zsh
Linux 常见服务器操作系统内核与生态基础 Ubuntu
WSL Windows 中的 Linux 环境 Ubuntu on WSL
Client 发起请求的一方 浏览器
Server 提供服务的一方 云服务器
IP 网络中的通信地址 1.2.3.4
Domain 人类友好的网络名称 github.com
DNS 域名解析系统 Domain → IP
Port 主机上的服务通信端点 2280443
HTTP Web 请求 / 响应协议 http://...
HTTPS 加密的 HTTP 通信 https://...
SSH 远程安全登录 ssh user@ip
Ubuntu 常见 Linux 发行版 Ubuntu 24.04 LTS
APT Ubuntu 软件包管理工具 apt install
sudo 以更高权限执行命令 sudo apt update
Nginx 常见 Web Server / 反向代理 监听 80
systemctl 管理 systemd 服务 systemctl status nginx
安全组 云平台网络访问控制 放行 TCP 22 / 80

6. 命令总结

文件系统


pwd

ls

ls -la

  

cd ~

cd /

cd ..

cd path

  

mkdir test

mkdir -p a/b/c

  

touch hello.txt

cat hello.txt

  

rm hello.txt

rmdir empty-directory

Vim


vim hello.txt


i       进入插入模式

Esc     回到普通模式

:wq     保存并退出

:q!     不保存强制退出

SSH


ssh username@server_ip

例如:


ssh ubuntu@123.45.67.89

Ubuntu 软件安装


sudo apt update

sudo apt install nginx -y

Nginx 状态


systemctl status nginx

sudo systemctl start nginx

sudo systemctl restart nginx

查看 Nginx 配置


cat /etc/nginx/sites-available/default

查看默认网页目录


cd /var/www/html

ls


Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐