在云服务器上,部署入口常常分两路:Git 方案和 FTP 方案。很多人直觉上用 FTP 就够用,但当你把项目从小型测试切到持续交付时,Git 的优势会逐渐显现。本文用轻松的口吻带你拆解两者的差异、部署流程、常见坑和落地方案,帮助你在真实场景中迅速做出判断。
先说底层差异:Git 是版本控制工具,核心是把代码变更记录成一个历史,它的工作流围绕提交、推送、合并、钩子和分支设计。而 FTP 是文件传输协议,目标是把文件从本地上传到服务器,缺少变更历史和自动化能力。
为什么现在很多人不再把 FTP 当成主力部署方式?因为 FTP 的安全性偏弱,传输明文或简单明文加密,账号泄露风险高;且没有原生的变更控制和回滚能力,遇到故障时很难定位问题。Git 生态里有 SSH、密钥、分支、钩子和 CI/CD,可以实现自动化部署、回滚和并发发布。
场景判断:如果你是小型静态站点,且改动不频繁、对自动化要求不高,FTP 可以作为简单快速的入口。但是一旦你需要多名开发协作、多环境部署、回滚策略和持续交付,Git + SSH 的组合会更稳妥。
搭建前的前提条件:一台云服务器(Linux/Unix 为佳,常见发行版如 Ubuntu、Debian、CentOS/Alma/Linux),具备命名明确的域名或公网 IP,具备基础的防火墙规则。对比两种方案,你需要决定是走“代码驱动的部署”还是“文件驱动的上传”,这对后续步骤有直接影响。
Git 方案的基本流程概览:在服务器上创建一个裸仓库(bare repository),可供开发者通过 SSH 推送代码;在服务器设定一个工作目录作为实际上线环境;用钩子(如 post-receive)把推送的代码自动更新到工作目录;通过一键部署脚本实现自动化构建和重载服务。
具体到 Ubuntu/Debian 的一套常用做法是:先更新系统并安装 Git:apt update && apt install git -y;创建一个专用的部署用户(如 deploy),并给它一个 SSH 公钥,确保无需输入密码就能完成推送:adduser deploy;在 /srv/git 创建一个 bare 仓库,例如 /srv/git/myapp.git;把合适的权限给 deploy 用户;在 /srv/git/myapp.git/hooks/post-receive 写入自动 checkout 的脚本,将 bare 仓库的内容同步到实际的上线路径 /var/www/myapp 并执行必要的构建和 reload。
post-receive 钩子通常类似:#!/bin/sh,GIT_WORK_TREE=/var/www/myapp git --work-tree=/var/www/myapp checkout -f,或者用更稳妥的方式仅更新变更并执行构建命令。你也可以把构建步骤封装成一个 deploy.sh 脚本,在 post-receive 内部调用,以确保无论你在哪个分支发起推送,部署流程都被一致执行。
安全要点不可忽视:强制使用 SSH 密钥对,禁用密码登录,修改 sshd_config 将 PermitRootLogin 设置为 no,将 PasswordAuthentication 设置为 no;给部署用户绑定防火墙策略,开启 Fail2Ban;对公开端口如 22 限速或使用端口映射,尽量把暴露面降到最低。此外建议把仓库放在不直接对外暴露的路径,避免 web 直接读取 bare 仓库。
FTP 方案的要点:如果你坚持使用 FTP,推荐使用 FTPS(带 TLS 的 FTP)或 SFTP(SSH 文件传输,实质上用 SSH 通道传输),并开启目录隔离、虚拟用户和强口令策略。同时,尽量避免把敏感源代码直接暴露在 Web 根目录之下,使用专门的上传目录和最小权限模型。
搭建一个稳定的 FTP 环境通常会用到 vsftpd 或 ProFTPD。要点包括开启 chroot 限制、禁用匿名登录、启用 TLS、对上传文件设置合适的权限、并结合防火墙规则对上传端口进行限制。FTP 的日志和错误排查也要到位,遇到上传失败时要检查权限、磁盘配额和用户组设置。
在实际运维中,很多团队选择混合方案,例如前端静态资源通过 FTP/FTPS 上传到静态服务器,后端代码仍然用 Git+SSH 部署,或者把 Git 作为唯一的变更入口,服务器通过持续集成工具实现自动化部署。这样既能保持简单,又能保留版本控制带来的可追溯性。
部署的核心考虑其实落在流程设计上:版本控制的优势体现在可追溯、可回滚和并行协作能力;而 FTP/文件上传则强调直观、快速和对非技术人员友好。若你的团队规模不大且变动不频繁,FTP 方案可能更省事;若你追求稳定的发布节奏和可维护性,Git+CI/CD 是更稳妥的选择。
为避免踩坑,给出一个简短的决策指引:若项目需要多人协作、需要回滚、需要自动化测试和发布,选 Git+SSH;若项目结构简单、上线频率极低、没有频繁回滚需求,FTP/FTPS/SFTP 也可以作为起点,但请确保后续有升级计划。
接下来是快速落地清单:1) 评估服务器 OS 与版本,2) 决定使用 Git 还是 FTP/FTPS/SFTP,3) 配置基本的用户和权限,4) 为 Git 设置 bare 仓库和 post-receive 钩子,5) 加固 SSH 与防火墙,6) 部署一个简单的回滚或回滚策略,7) 如需持续交付,接入 CI/CD,8) 进行一次完整的上线演练。
顺便提一下,玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink
你最终会怎么选?Git 的铁律是不是高过 FTP 的直觉?在你心里,这道部署题的答案是一个分支还是一条上传的路径呢?