零基础服务器DevOps教程:从手动部署到自动化上线
服务器 DevOps 的核心不是堆工具,而是把“登录服务器、拉代码、改配置、重启服务”这套重复动作变成可执行、可回滚的流程。
这篇教程面向零基础用户,用一台 Linux 云服务器完成一次从手动部署到脚本自动化的完整演练。
前期需要准备什么
开始前请确认你手上有以下条件:
- 一台能 SSH 登录的 Linux 服务器(Ubuntu 或 CentOS 均可),知道公网 IP、登录用户名和密码或密钥。
- 本地电脑有终端工具(Windows 可用 PowerShell 或 Xshell,macOS 和 Linux 直接用终端)。
- 一个可访问的代码仓库,例如 Git 仓库,里面放一个最简单的静态页面或应用。
先验证连接是否正常,在本地终端执行:
ssh root@你的服务器IP
登录成功后能看到命令行提示符,说明基础通道没问题。
如果提示 Connection refused,先检查服务器安全组是否放行了 22 端口。
从手动部署跑通第一条流程
先不要急着上自动化,手动走一遍,后面才知道脚本在替你做哪些事。
安装运行环境
以 Ubuntu 为例,更新软件源并安装 Nginx 和 Git:
apt update
apt install -y nginx git
安装完成后检查服务状态:
systemctl status nginx
看到 active (running) 表示 Nginx 已经正常运行。
拉取代码并放到站点目录
把代码克隆到 /var/www 下:
git clone 你的仓库地址 /var/www/myapp
如果仓库是私有的,需要在服务器上配置部署密钥或访问令牌。
拉取成功后用 ls /var/www/myapp 确认文件存在。
配置 Nginx 指向项目
新建一个站点配置文件:
nano /etc/nginx/sites-available/myapp
写入以下内容:
server {
listen 80;
server_name 你的域名或服务器IP;
root /var/www/myapp;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
启用配置并重载:
ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
nginx -t 显示 syntax is ok 才能继续,否则先按报错修正配置文件。
验证上线结果
浏览器访问服务器 IP 或域名,能看到你的页面就说明手动部署成功。
如果打不开,按顺序检查:安全组是否放行 80 端口、root 路径是否写对、systemctl status nginx 是否有报错。
把重复动作写成自动化脚本
手动流程跑通后,把“拉代码、重载服务”固定成脚本,减少每次上线的手工操作。
在服务器上创建脚本文件:
nano /opt/deploy.sh
写入:
#!/bin/bash
set -e
cd /var/www/myapp
git pull origin main
systemctl reload nginx
echo "deploy done"
赋予执行权限:
chmod +x /opt/deploy.sh
之后每次上线只需执行 /opt/deploy.sh。set -e 的作用是任意一步失败就停止,避免带着错误继续执行。
如果想让本地推送后自动触发部署,可以在代码仓库的 Webhook 里配置一个回调地址,由服务器上的轻量服务接收后调用该脚本。
这一步属于进阶内容,建议先把脚本手动跑稳定再接入。
容易踩坑的几个地方
- 路径写错:Nginx 的
root必须指向真实存在且权限可读的目录,否则会返回 403 或 404。 - 权限问题:如果用非 root 用户运行,确保该用户对
/var/www/myapp有读取权限。 - 直接改线上文件:手动改服务器上的文件后,下次
git pull可能冲突,尽量所有改动都走仓库。 - 没有回滚准备:上线前记录当前版本,例如
git log -1,出问题时才能快速切回。 - 防火墙和端口:80、443、22 端口是否放行,直接影响能不能访问和登录。
怎么确认流程真的稳定
做一次完整验证:修改仓库里的页面内容,提交并推送,然后在服务器执行 /opt/deploy.sh,刷新浏览器确认内容更新。
再故意把脚本里的路径改错,观察是否报错停止,确认失败时不会把服务带崩。
能重复跑通、失败能定位、出错能回滚,这套服务器 DevOps 流程才算真正可用。
后续可以按需加入日志收集、监控告警和容器化,但不必一次全上,先把这条最小链路跑顺。