如何使用ansible永久设置NODE_ENV?

时间:2015-08-18 18:08:13

标签: node.js ansible environment production ansible-playbook

我的两个环境有两台机器。

第一个托管 staging 环境。它需要将NODE_ENV设置为dev

第二个托管生产环境。它需要将NODE_ENV设置为prod

我使用Ansible配置我的服务器。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

另一个选项是在NODE_ENV文件设置/etc/environment

在安全任务中:

- lineinfile: dest=/etc/environment line="NODE_ENV=dev"

答案 1 :(得分:3)

我解决了这个问题。

roles/node-env/tasks/main.yml

---
- name: Configure NODE_ENV
  lineinfile: dest=/etc/environment regexp="^NODE_ENV=" line="NODE_ENV={{ node_env }}"
  when: node_env is defined

hosts/staging

[webserver]
staging-server-hostname

[webserver:vars]
node_env=dev

hosts/production

[webserver]
production-server-hostname

[webserver:vars]
node_env=prod

playbook.yml

---
- name: Provision web server
  hosts: webserver
  sudo: true
  roles:
    - { role: Stouts.nodejs, tags: nodejs }
    - ...
    - { role: node-env, tags: nodejs }

然后我使用以下命令设置我的暂存环境:

ansible-playbook -i hosts/staging playbook.yml

我的生产环境:

ansible-playbook -i hosts/production playbook.yml

请注意,我将环境变量存储在/etc/environment中,因为我希望此变量为所有用户和每个用户设置一个。

根据您的需要,也可以将其存储在~/.profile/etc/profile.d中。有关详细信息,请参阅this answer

这可能有点矫枉过正,但它很灵活。如果有人有更简单的建议,请不要犹豫,分享!