国外VPS+Ubuntu Cloud-Init自动化部署教程
手动配置国外VPS服务器的日子该结束了——用Ubuntu自带的Cloud-Init API,能让部署流程像搭积木一样简单。从设置主机名到安装软件,所有操作都能通过一份YAML文件自动完成,这篇教程就带你一步步实现。
先搞懂Cloud-Init:Ubuntu的"启动管家"
Cloud-Init是Ubuntu系统中专门用于云环境初始化的工具(首次启动时运行)。打个比方,它就像服务器的"入职培训师"——系统刚启动时,它会读取你写好的配置文件,自动完成主机名设置、用户账户创建、网络配置、软件包安装等一系列操作。过去需要手动敲20条命令的活,现在一份文件就能搞定。
前置条件:你需要这些基础
要顺利完成操作,得先准备好几样东西:
- 一台运行Ubuntu系统的国外VPS(建议20.04及以上版本)
- VPS能正常访问外网(Cloud-Init下载软件包需要)
- 本地准备好YAML格式的Cloud-Init配置文件(后续会教怎么写)
第一步:写份"操作指南"——创建配置文件
Cloud-Init的核心是用户自定义的配置文件(通常叫user-data.yaml)。这里给个最常用的示例,保存到本地电脑:
#cloud-config
hostname: my-automated-server # 设置主机名
users:
- name: deploy-user # 创建新用户
ssh-authorized-keys: # 绑定SSH公钥(替换成你的公钥)
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... 你的公钥内容
sudo: ALL=(ALL) NOPASSWD:ALL # 允许无密码sudo
groups: users, admin # 加入用户组
shell: /bin/bash # 默认shell
packages: # 需要安装的软件包
- nginx # 这里以Nginx为例
runcmd: # 启动后执行的命令
- systemctl start nginx # 启动Nginx服务
- systemctl enable nginx # 设置开机自启
这个文件的作用很明确:给服务器起个名字"my-automated-server",创建一个能无密码使用sudo的用户"deploy-user",装Nginx并确保它开机就跑。
第二步:把"指南"传给国外VPS
写好的配置文件得传到VPS上才能生效。最常用的方法是用SCP命令(本地电脑需安装SSH客户端)。假设你的VPS公网IP是123.45.67.89,登录用户是root,打开终端执行:
scp user-data.yaml root@123.45.67.89:/root/
输入VPS的root密码后,文件就会传到VPS的/root目录下。
第三步:让Cloud-Init"开工"——调用API执行配置
登录VPS(用root用户或已有SSH密钥),按顺序执行这几个命令,Cloud-Init就会按你的要求干活:
cloud-init clean --logs # 清除之前的日志和缓存(重要!避免旧配置干扰)
cloud-init init # 初始化,读取user-data.yaml
cloud-init modules --mode=config # 执行配置任务(比如装软件包)
cloud-init modules --mode=final # 执行最终任务(比如启动服务)
这四步命令就像给Cloud-Init发"开始"信号,它会按顺序完成用户创建、软件安装、服务启动等操作。
最后一步:检查成果
等命令执行完,用这几个命令验证是否成功:
- 查主机名:输入`hostname`,应该显示"my-automated-server"
- 查用户是否创建:输入`id deploy-user`,能看到用户信息就对了
- 查Nginx状态:输入`systemctl status nginx`,应该显示"active (running)"
如果这三项都没问题,说明你的国外VPS已经通过Cloud-Init完成了自动化部署。
以后搭建同类型环境时,只需要修改YAML文件里的参数(比如换个主机名、加个软件包),就能快速复制部署流程。相比手动操作,不仅省时间,还能避免漏装软件、用户权限设置错误等常见问题——这就是自动化部署的魅力。