2015-08-18 79 views
3

我有两台机器适合我的两种环境。如何将NODE_ENV永久设置为ansible?

第一个主持分段环境。它需要有NODE_ENV设置为dev

第二个主机生产环境。它需要有NODE_ENV设置为prod

我提供给我的服务器Ansible。

我该怎么做?

回答

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

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

5

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

在ansible任务:

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

+0

我有这个答案的问题是,它会在每次的剧本运行时追加NODE_ENV =开发。这最终会导致一个大的环境文件 –