服务器操作入门
SSH / SCP / systemd / Nginx · 从连上到部署
深信号·教程

第一次真正"用"一台服务器

这篇文章教你在 Linux 服务器上最常用的一套操作:怎么连上去、怎么传文件、怎么把应用跑成常驻服务、怎么用 Nginx 把服务暴露到公网。全是实际踩过的坑和正确做法。

SSH 连接SCP 传文件systemd 服务Nginx 反代

目录

① SSH 连接服务器 ② 配置 SSH 免密(密钥) ③ SCP 上传 / 下载文件 ④ 用 systemd 把应用跑成常驻服务 ⑤ 用 Nginx 反代暴露到公网 ⑥ 看日志排错 ⑦ 安全底线(必读)
1

SSH 连接服务器

必做

SSH = 加密远程登录协议。从本地终端连到服务器:

ssh 用户名@服务器IP
# 例子:
ssh root@203.0.113.7

如果用密钥文件(阿里云/腾讯云常见,见教程 4):

ssh -i ~/my-server-key.pem user@服务器IP
⚠ 密钥文件权限必须是 600,否则 SSH 直接拒绝:
chmod 600 ~/my-server-key.pem

常用的省事做法:配置 SSH 别名,编辑 ~/.ssh/config:

Host my-server
    HostName 203.0.113.7
    User user
    IdentityFile ~/my-server-key.pem

之后直接 ssh my-server 就能连上。

2

配置 SSH 免密(密钥)

推荐

本地生成一对密钥,公钥放到服务器,之后登录就不用输密码:

ssh-keygen -t ed25519   # 一路回车
ssh-copy-id 用户名@服务器IP     # 把公钥推上去

推送过一次后,以后 ssh 直接免密登录。

3

SCP 上传 / 下载文件

SCP 基于 SSH,传文件最常用:

# 本地 → 服务器
scp -i ~/my-server-key.pem ./app.py user@服务器IP:/home/user/app.py

# 服务器 → 本地
scp -i ~/my-server-key.pem user@服务器IP:/home/user/app.py .

# 传整个目录(-r)
scp -r -i ~/my-server-key.pem ./myapp user@服务器IP:/home/user/
💡 小技巧:改完本地文件要同步到服务器,用管道直接写(避免本地生成临时文件):
cat 本地文件 | ssh my-server 'cat > /home/user/目标文件'
4

用 systemd 把应用跑成常驻服务

核心

写完一个 Flask 应用,python app.py 一关终端就没了。要让它常驻 + 开机自启,用 systemd。

① 写服务单元文件 myapp.service:

[Unit]
Description=我的应用
After=network.target

[Service]
User=admin
WorkingDirectory=/home/user/myapp
ExecStart=/usr/bin/python3 /home/user/myapp/app.py
Restart=always

[Install]
WantedBy=multi-user.target

② 安装并启动:

sudo cp myapp.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now myapp   # 启动 + 开机自启
sudo systemctl is-active myapp        # 看是否在跑
⚠ 三个高频坑:
  • ExecStart 里的 python 一定要写对。venv 里的 python 可能没装你要的库(如只有 yaml 没有 flask),报 ModuleNotFoundError。用 which python3 确认实际解释器。
  • is-active 显示 activating (auto-restart) = 启动失败在反复重启,立刻 journalctl -u myapp -n 20 看真实报错。
  • 改完配置要 daemon-reload 再 restart。

常用命令速查:

命令作用
systemctl status myapp看状态+最近日志
systemctl restart myapp重启
systemctl stop myapp停止
systemctl disable myapp取消开机自启
journalctl -u myapp -f实时跟日志
5

用 Nginx 反代暴露到公网

核心

应用跑在服务器本机端口(如 5000),外人访问不到。Nginx 把域名/路径转发到这个端口。

① 加一个 location 块(编辑站点配置 /etc/nginx/sites-enabled/你的站点):

server {
    listen 443 ssl;
    server_name 你的域名.com;

    location /myapp/ {
        proxy_pass http://127.0.0.1:5000/;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_read_timeout 300s;   # 长任务要加大,否则 nginx 先掐断
    }
}

② 测试配置并重载(改配置前先备份):

sudo cp 站点配置 站点配置.bak-$(date +%Y%m%d)
sudo nginx -t              # 语法检查,必须看到 ok / successful
sudo systemctl reload nginx
⚠ 改 nginx 配置别用 sed 多行插入(容易插花)。用编辑器全文替换,或 python 读文件→replace→写回。插坏了用 cp 备份 站点配置 恢复,再 nginx -t 确认回干净状态。

③ 验证:公网 curl 域名 + 路径,应返回 200。同时确认别的站点不受影响(多站共存时挨个 curl 一遍)。

6

看日志排错

服务出问题,第一件事看日志:

journalctl -u myapp -n 50      # 最近 50 行
journalctl -u myapp -f         # 实时跟
sudo tail -f /var/log/nginx/error.log

排查顺序(经验):先看应用自己有没有起(is-active + journalctl),再看端口有没有监听(ss -tlnp | grep 端口),再看 nginx 语法(nginx -t),最后才看公网。

💡 别一上来就怀疑 nginx。502 大多是因为上游应用挂了;先 curl 127.0.0.1:端口 确认应用自己通不通,再查 nginx。
7

安全底线(必读)

重要

服务器裸奔在公网上,扫描机器人 24 小时都在试你。至少做到:

本文基于实际服务器部署运维经验(aliyun ECS / Ubuntu)· 由知微编写 · 2026-09-27