【问题标题】:Installing NodeJS LTS for Ansible为 Ansible 安装 NodeJS LTS
【发布时间】:2017-08-23 13:08:48
【问题描述】:

我正在寻找合适的 Ansible 角色或 Ansible YAML 文件,用于在 Ubuntu 16.04.3 xenial 系统上安装 NodeJS LTS。我尝试了来自 Galaxy 的 10 多个 Ansible 角色,但没有发现任何一个有效(抛出错误,例如 potentially dangerous to add this PPA etc.

谁能提供任何 Ansible 剧本或建议我在 Ubuntu 16.04 上安装 NodeJS LTS 的角色?

【问题讨论】:

  • 你知道在没有 Ansible 的情况下安装它的步骤是什么吗?如果是这样,您为什么不创建自己的角色?

标签: node.js ansible ansible-role


【解决方案1】:

下面是工作示例:

---
- hosts: all
  gather_facts: yes
  become: yes
  vars:
    NODEJS_VERSION: "8"
    ansible_distribution_release: "xenial" #trusty
  tasks:
    - name: Install the gpg key for nodejs LTS
      apt_key:
        url: "https://deb.nodesource.com/gpgkey/nodesource.gpg.key"
        state: present

    - name: Install the nodejs LTS repos
      apt_repository:
        repo: "deb https://deb.nodesource.com/node_{{ NODEJS_VERSION }}.x {{ ansible_distribution_release }} main"
        state: present
        update_cache: yes

    - name: Install the nodejs
      apt:
        name: nodejs
        state: present

希望对你有帮助

【讨论】:

  • 它以某种方式工作,但显示错误"msg": "unsupported parameter for module: filename"。有什么想法吗?
  • 现在试试,你用的是哪个版本的ansible?
  • 我正在使用ansible 2.0.0.2
  • var ansible_distribution_release 的可能值是什么?
  • 您不需要设置 ansible_distribution_release 变量 - Ansible 应该在没有行的情况下输入该变量
【解决方案2】:

公认的答案很好,但如果您愿意,您可以使用发现的变量作为发行代号(即ansible_lsb.codename)。此外,确保在主机上安装了 gcc g++ make 以确保 nodejs 的本机插件能够正常工作。

只需将节点版本12 替换为您想要的。

---
- name: Install nodejs
  hosts: all
  become: true
  tasks:
    - name: install nodejs prerequisites
      apt:
        name:
          - apt-transport-https
          - gcc
          - g++
          - make
        state: present
    - name: add nodejs apt key
      apt_key:
        url: https://deb.nodesource.com/gpgkey/nodesource.gpg.key
        state: present
    - name: add nodejs repository
      apt_repository:
        repo: deb https://deb.nodesource.com/node_12.x {{ ansible_lsb.codename }} main
        state: present
        update_cache: yes
    - name: install nodejs
      apt:
        name: nodejs
        state: present

【讨论】:

    【解决方案3】:

    并不是说我真的很高兴不得不这样做,但是...

    环境:Ubuntu 18.04,ansible 2.6.1,主机:macOS

    来自https://github.com/nodesource/distributions/blob/master/README.md#debinstall

    - name: install node 
      shell: |
        curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - && sudo apt-get install -y nodejs
    

    结果:

    > vagrant@vagrant:~$ node --version
    v10.15.2
    

    npm 一定也出现了:

    vagrant@vagrant:~$ npm --version
    6.4.1
    

    在我运行此程序时,https://www.npmjs.com/package/npm 显示 6.8.0 是最新的,而 6.4.1 是 6 个月前的。 Node 将 10.15.2 显示为 10.x 系列中的最新版本,日期为 5 天前。

    顺便说一句,我也尝试过apt-get,但它以节点 8.x 而不是 10.x 结束

    我没有使用 ansible galaxy 角色的原因是我没有看到任何似乎来自知名作者并且有很多星星和下载量的 nodejs (我很谨慎和怀疑)。

    更新 npm

    我的开发机器有 6.8.0 所以我添加了这个:

    vars.yml

    versions:
      npm: "6.8.0"
    

    playbook.yml

    - name: npm self-update
      command: npm install npm@{{ versions.npm }} -g
    

    这让我一路走来:

    vagrant@vagrant:~$ npm --version
    6.8.0
    

    【讨论】:

    • 你能解释一下为什么选择这种方法而不是选择的答案吗?
    • 新东西的安装更少,毕竟是节点团队自己的指令。我并不是说公认的答案很糟糕,而且我在 Ansible 方面并不那么强,但我认为它是一个简单的 shell 命令,所以我做了它并继续前进。也不关心幂等性,这个服务器将被重建而不是维护。为了安全起见,我仍然会强烈避免使用任何第三层 Galaxy 角色或随机 PPA,尽管这与接受的答案无关。
    【解决方案4】:

    你可以使用:

    ansible-galaxy install nodesource.node

    然后在你的剧本上,添加 roles: - nodesource.node

    【讨论】:

    • 对于所有输入“-”的人,请说明原因。我认为这个建议没有任何问题。它不起作用还是什么?
    • @SergeyYarotskiy 首先,它似乎不完整。关于 Ansible 剧本的问题,这里有一个无法解释的手动安装步骤 (ansible-galaxy)。也许它在做什么很明显,但我在这里是因为我不是 Ansible 新手。
    猜你喜欢
    • 2023-03-14
    • 2022-09-25
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多