【发布时间】:2015-08-18 18:08:12
【问题描述】:
我的两个环境有 2 台机器。
第一个托管一个 staging 环境。它需要将NODE_ENV 设置为dev。
第二个托管一个生产环境。它需要将NODE_ENV 设置为prod。
我使用 Ansible 配置我的服务器。
我该怎么做?
【问题讨论】:
标签: node.js ansible environment production ansible-playbook
我的两个环境有 2 台机器。
第一个托管一个 staging 环境。它需要将NODE_ENV 设置为dev。
第二个托管一个生产环境。它需要将NODE_ENV 设置为prod。
我使用 Ansible 配置我的服务器。
我该怎么做?
【问题讨论】:
标签: node.js ansible environment production ansible-playbook
另一个选项是在/etc/environment 文件中设置NODE_ENV。
在ansible任务中:
- lineinfile: dest=/etc/environment line="NODE_ENV=dev"
【讨论】:
我就这样解决了问题。
在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 了解更多信息。
这可能有点矫枉过正,但它很灵活。如果有人有更简单的建议,请随时分享!
【讨论】: