Ansible:使用Ansible在EC2上部署Node.js应用
#aws #node #devops #ansible

使用Ansible在EC2上部署Node.js应用

Ansible是一种流行的开源工具,用于自动化,配置管理和IT基础架构的编排。系统管理员,DevOps工程师和开发人员广泛使用它,以简化不同环境上各种应用程序的部署过程。在此博客文章中,我们将探讨如何使用Ansible在EC2实例上部署Node.js应用程序。

要求

  1. 启动EC2实例的AWS帐户
  2. 安装在本地机器上
  3. Ansible的基本知识

让我们研究使用Ansible在EC2上部署Node.js应用程序所涉及的步骤。

步骤1:设置库存文件

库存文件包含Ansible将管理的服务器或主机列表。在我们的情况下,我们需要指定EC2实例的IP地址。这是我们的库存文件的外观:

[webservers]
1.1.1.1 ansible_ssh_private_key_file=~/.ssh/id_rsa ansible_user=root

此文件定义一个主机,其中IP地址1.1.1.1。我们还指定了SSH私有密钥文件位置和用户以连接到主机。

步骤2:编写Ansible Playbook

Ansible Playbook包含可在远程主机上执行的Ansible的说明。在我们的情况下,我们需要执行三个任务:安装node.js和npm,创建新的linux用户,然后部署node.js应用程序。这是我们的剧本的外观:

---
- name: Install node and npm    # A name to identify the playbook
  hosts: 1.1.1.1                 # The target host to execute the tasks on
  tasks:                         # List of tasks to be performed
  - name: Update apt repo and cache  
    apt: update_cache=yes force_apt_get=yes cache_valid_time=3600 # Update apt repository and cache
  - name: Install nodejs and npm 
    apt:                        # Install Node.js and NPM
      pkg:
      - nodejs
      - npm

- name: Create new linux user   
  hosts: 1.1.1.1                 # The target host to execute the tasks on
  tasks:                         # List of tasks to be performed
  - name: Create linux user     
    user:                       # Create a new Linux user
      name: arun
      comment: arun admin
      group: admin

- name: Deploy nodejs app       
  hosts: 1.1.1.1                 # The target host to execute the tasks on
  become: True                   # Switch to the root user for executing tasks
  become_user: arun              # Set the user as "arun" to perform tasks
  tasks:                         # List of tasks to be performed
  - name: unpack the nodejs file  
    unarchive:                  # Unpack the Node.js app
      src:
      dest: /home/arun
  - name: Install dependencies  
    npm:                        # Install app dependencies
      path: /home/arun/packages
  - name: Start the application 
    command:                    # Start the Node.js app
      chdir: /home/arun/packages/app
      cmd: node server
    async: 1000                 # Run the command asynchronously
    poll: 0                     # Do not wait for the command to finish
  - name: Ensure app is running  
    shell: ps aux | grep node   # Check if the app is running
    register: app_status        # Register the output of the command as a variable
  - debug: msg={{app_status.stdout_lines}} # Print the output of the previous task for debugging purposes

在上面的剧本中,我们定义了三部戏。

播放1:安装节点和NPM

此剧本在远程主机上安装node.js运行时和节点软件包管理器(NPM)。它使用apt模块更新APT存储库和缓存,然后安装nodejsnpm软件包。

播放2:创建新的Linux用户

此剧本在远程主机上创建了一个新用户。它使用user模块创建一个名称为“ arun”,评论“ arun admin”的新用户,并将用户分配给“ admin”组。

播放3:部署nodejs app

此剧本在远程主机上部署了node.js应用程序。它首先使用become_userbecomeparameters切换到用户“ arun”,以执行后续任务作为该用户。然后,它继续执行以下任务:

  • 使用unarchive模块解开nodejs文件。
  • 使用npm模块安装依赖项。
  • 使用commandmodule启动应用程序,该命令执行命令以启动node.js服务器并将工作目录设置为应用程序目录。
  • 检查应用程序是否正在使用shell模块运行,以运行一个命令,该命令列出了所有进程,名称为“ node”。
  • 使用debugModule来调试上一个任务的输出,以打印上一个命令的输出。

每个播放均被顺序执行,每个播放都在上一个播放上构建,以最终在远程主机上部署node.js应用程序。

步骤3:运行Ansible Playbook

要运行Ansible Playbook,执行以下命令:

ansible-playbook -i inventory playbook.yml

此命令将执行剧本。

结论

该项目演示了如何使用Ansible来自动在EC2实例上部署Node.js应用程序。借助此剧本,您可以轻松,快速地部署Node.js应用程序,而无需任何手动配置。