如何在 Ubuntu 22 04 上安装和配置 Ansible 自动化平台

如何在 Ubuntu 22.04 上安装和配置 Ansible 自动化平台

简介

Ansible 是一个开源项目,并在 Github 上收获了 63k 的 star 。它是一个极其简单的 IT 自动化平台,使您的应用程序和系统更易于部署和维护。使用 SSH,以接近简单英语的语言实现从代码部署到网络配置再到云管理的一切自动化,无需在远程系统上安装代理。

接下来,我将一步一步教大家如何进行安装和部署!!

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。
  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。
  • 输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。
  • 到此为止,我们的云服务器就远程连接上了。

开始部署

1.更新系统

首先,确保你的系统是最新的,运行以下命令:

bash 复制代码
sudo apt update
sudo apt upgrade -y

2.安装Ansible

Ansible在Ubuntu的默认仓库中可用,但版本通常较旧。推荐从Ansible PPA安装以获取最新版本。

添加Ansible PPA:

bash 复制代码
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible

安装Ansible:

bash 复制代码
sudo apt install ansible -y

验证安装:

bash 复制代码
ansible --version

你应该看到类似这样的输出,显示安装的Ansible版本:

复制代码
ansible [core 2.16.6]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
jinja version = 3.0.3
libyaml = True

3.基本配置

Ansible的默认配置文件位于/etc/ansible/ansible.cfg。你可以编辑这个文件来设置全局选项。

不过,为了避免权限问题,通常更容易在用户主目录下创建一个本地配置目录。

创建本地配置目录:

bash 复制代码
mkdir -p ~/ansible/config

禁用默认配置文件并启用我们的自定义配置文件:

bash 复制代码
ansible-config init -t all --disabled > ansible.cfg

创建和编辑配置文件:

bash 复制代码
nano ~/ansible/config/ansible.cfg

在**[defaults]**后添加以下配置设置:

bash 复制代码
inventory = ~/ansible/config/hosts
remote_user = your-username
host_key_checking = False

your-username替换为你的实际Ubuntu用户名。

4.创建库存文件

库存文件定义了Ansible将管理的主机。

创建库存文件:

bash 复制代码
nano ~/ansible/config/hosts

添加你管理节点的IP地址或主机名。例如:

复制代码
[webservers]
192.168.1.10
192.168.1.11[dbservers]
192.168.1.20

5.测试连接

Ansible使用SSH与被管理节点通信。确保你可以无需密码提示即可SSH到这些节点。推荐的方法设置SSH密钥。

生成SSH密钥对(如果尚未完成):

bash 复制代码
ssh-keygen -t rsa -b 2048

将SSH密钥复制到被管理节点:

bash 复制代码
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]

username替换为被管理节点上的用户名。

测试Ansible连接:

bash 复制代码
ansible all -m ping

你应该看到表示成功的输出:

复制代码
192.168.1.10 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
192.168.1.11 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
192.168.1.20 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

6.创建Nginx安装剧本

Ansible剧本是定义在被管理节点上执行任务的YAML文件。在这个剧本中,我们将更新系统,安装Nginx,并在firewall中放行HTTPHTTPS端口。

创建剧本文件:

bash 复制代码
nano ~/ansible/config/playbook.yml

添加以下内容到剧本:

yaml 复制代码
---
- name: Update and upgrade apt packages
  hosts: all
  become: yes
  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes    - name: Installing Nginx
      apt:
        name: nginx
        state: latest    - name: Starting Nginx Service
      service:
        name: nginx
        state: started
        enabled: yes  # Enabling Nginx service if not available    - name: Allow all access to tcp port 80
      community.general.ufw:
        rule: allow
        port: '80'
        proto: tcp    - name: Allow all access to tcp port 443
      community.general.ufw:
        rule: allow
        port: '443'
        proto: tcp

7.运行剧本

执行剧本以更新和升级所有被管理节点上的软件包。

bash 复制代码
ansible-playbook ~/ansible/config/playbook.yml

你应该看到表示成功的输出:

复制代码
PLAY [Update and upgrade apt packages] *****************************************************************************TASK [Gathering Facts] *********************************************************************************************
ok: [192.168.1.10]
ok: [192.168.1.11]
ok: [192.168.1.20]TASK [Update apt cache] ********************************************************************************************
changed: [192.168.1.10]
changed: [192.168.1.11]
changed: [192.168.1.20]TASK [Installing Nginx] ********************************************************************************************
changed: [192.168.1.10]
changed: [192.168.1.11]
changed: [192.168.1.20]TASK [Starting Nginx Service] **************************************************************************************
ok: [192.168.1.10]
ok: [192.168.1.11]
ok: [192.168.1.10]TASK [Allow all access to tcp port 80] *****************************************************************************
changed: [192.168.1.10]
changed: [192.168.1.11]
changed: [192.168.1.20]TASK [Allow all access to tcp port 443] ****************************************************************************
changed: [192.168.1.10]
changed: [192.168.1.11]
changed: [192.168.1.20]PLAY RECAP *********************************************************************************************************
192.168.1.10               : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.1.11               : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.1.20               : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

相关链接

雨云 - 新一代云服务提供商: https://rainyun.ivwv.site

我的博客:https://blog.ivwv.site

相关推荐
taxunjishu31 分钟前
ProfiNet 转 Ethernet/IP基于西门子 S7 - 1500 与罗克韦尔 PLC 的汽车零部件加工线协同案例
运维·人工智能·物联网·自动化·区块链
用户516816614584140 分钟前
[VMware 无法检测此光盘中映像中的操作系统] VMware创建虚拟机无法检测操作系统iso镜像文件
linux·前端
MacroZheng40 分钟前
斩获 7.8K star!一款堪称开源监控新标杆的项目,牛皮!
java·linux·后端
ansurfen1 小时前
Hulo 语言开发分享 —— 调试器是如何工作的?
后端·github
小华同学ai1 小时前
Github 2.2k star,揭秘高效开发利器!之前我还手搓,现在有它,直接起飞
前端·后端·github
uhakadotcom1 小时前
302跳转和301跳转有啥区别?
前端·面试·github
YC运维1 小时前
Ansible模块
java·服务器·前端
博语小屋1 小时前
程序(进程)地址空间(1)
linux
yunyi1 小时前
使用acme.sh来实现自动化申请和续订TLS证书
linux·nginx·docker
HelloGitHub2 小时前
《HelloGitHub》第 113 期
开源·github