Commit 63f29122 by John Jarvis

switching forum to use supervisor, www-data perms for rbenv for forum

parent 92a0e393
...@@ -6,6 +6,7 @@ forum_rbenv_dir: "{{ forum_app_dir }}" ...@@ -6,6 +6,7 @@ forum_rbenv_dir: "{{ forum_app_dir }}"
forum_rbenv_root: "{{ forum_app_dir }}/.rbenv" forum_rbenv_root: "{{ forum_app_dir }}/.rbenv"
forum_rbenv_shims: "{{ forum_rbenv_root }}/shims" forum_rbenv_shims: "{{ forum_rbenv_root }}/shims"
forum_rbenv_bin: "{{ forum_rbenv_root }}/bin" forum_rbenv_bin: "{{ forum_rbenv_root }}/bin"
forum_supervisor_wrapper: "{{ forum_app_dir }}/forum-supervisor.sh"
forum_gem_root: "{{ forum_rbenv_dir }}/.gem" forum_gem_root: "{{ forum_rbenv_dir }}/.gem"
forum_gem_bin: "{{ forum_gem_root }}/bin" forum_gem_bin: "{{ forum_gem_root }}/bin"
forum_path: "{{ forum_code_dir }}/bin:{{ forum_rbenv_bin }}:{{ forum_rbenv_shims }}:{{ forum_gem_bin }}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" forum_path: "{{ forum_code_dir }}/bin:{{ forum_rbenv_bin }}:{{ forum_rbenv_shims }}:{{ forum_gem_bin }}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
...@@ -22,6 +23,7 @@ forum_environment: ...@@ -22,6 +23,7 @@ forum_environment:
API_KEY: "{{ forum_api_key }}" API_KEY: "{{ forum_api_key }}"
SEARCH_SERVER: "{{ forum_elasticsearch_url }}" SEARCH_SERVER: "{{ forum_elasticsearch_url }}"
MONGOHQ_URL: "{{ forum_mongo_url }}" MONGOHQ_URL: "{{ forum_mongo_url }}"
HOME: "{{ forum_app_dir }}"
forum_user: "forum" forum_user: "forum"
forum_ruby_version: "1.9.3-p448" forum_ruby_version: "1.9.3-p448"
......
--- ---
- name: forum | restart the forum service - name: forum | restart the forum service
service: name=cs_comments_service state=restarted supervisorctl: >
name=forum
supervisorctl_path={{ supervisor_ctl }}
config={{ supervisor_cfg }}
state=restarted
--- ---
dependencies: dependencies:
- role: rbenv - role: rbenv
rbenv_user: "{{ forum_user }}" # TODO: setting the rbenv ownership to
# the common_web_user is a workaround
rbenv_user: "{{ common_web_user }}"
rbenv_dir: "{{ forum_app_dir }}" rbenv_dir: "{{ forum_app_dir }}"
rbenv_ruby_version: "{{ forum_ruby_version }}" rbenv_ruby_version: "{{ forum_ruby_version }}"
...@@ -5,20 +5,35 @@ ...@@ -5,20 +5,35 @@
tags: tags:
- deploy - deploy
- name: forum | create the supervisor wrapper
template: >
src={{ forum_supervisor_wrapper|basename }}.j2
dest={{ forum_supervisor_wrapper }}
mode=0755
sudo_user: "{{ forum_user }}"
notify:
- forum | restart the forum service
- name: forum | git checkout forum repo into {{ forum_code_dir }} - name: forum | git checkout forum repo into {{ forum_code_dir }}
git: dest={{ forum_code_dir }} repo={{ forum_source_repo }} version={{ forum_version }} git: dest={{ forum_code_dir }} repo={{ forum_source_repo }} version={{ forum_version }}
sudo_user: "{{ forum_user }}" sudo_user: "{{ forum_user }}"
tags: tags:
- deploy - deploy
# TODO: This is done as the common_web_user
# since the process owner needs write access
# to the rbenv
- name: forum | install comments service bundle - name: forum | install comments service bundle
shell: bundle install chdir={{ forum_code_dir }} shell: bundle install chdir={{ forum_code_dir }}
sudo_user: "{{ forum_user }}" sudo_user: "{{ common_web_user }}"
environment: "{{ forum_environment }}" environment: "{{ forum_environment }}"
tags: tags:
- deploy - deploy
- name: forum | restart the forum service - name: forum | restart the forum service
service: name=cs_comments_service state=restarted supervisorctl: >
tags: name=forum
- deploy supervisorctl_path={{ supervisor_ctl }}
config={{ supervisor_cfg }}
state=restarted
...@@ -41,23 +41,5 @@ ...@@ -41,23 +41,5 @@
notify: notify:
- forum | restart the forum service - forum | restart the forum service
- name: forum | copy cs_comments_service SysVunit script
template: src=cs_comments_service.j2 dest=/etc/init.d/cs_comments_service owner=root group=root mode=750
notify:
- forum | restart the forum service
tags:
- forum
- install
when: ansible_distribution == 'Debian'
- name: forum | copy cs_comments_service upstart script
template: src=cs_comments_service.conf.j2 dest=/etc/init/cs_comments_service.conf owner=root group=root mode=644
notify:
- forum | restart the forum service
tags:
- forum
- install
when: ansible_distribution == 'Ubuntu'
- include: deploy.yml - include: deploy.yml
- include: test.yml - include: test.yml
# {{ ansible_managed }} # {{ ansible_managed }}
{% for name,value in forum_environment.items() %} {% for name,value in forum_environment.items() %}
{% if value %} {%- if value %}
export {{ name }}="{{ value }}" export {{ name }}="{{ value }}"
{% endif %} {%- endif %}
{% endfor %} {% endfor %}
eval "$(rbenv init -)" eval "$(rbenv init -)"
...@@ -17,7 +17,8 @@ rbenv_debian_pkgs: ...@@ -17,7 +17,8 @@ rbenv_debian_pkgs:
- libxslt1-dev - libxslt1-dev
- zlib1g-dev - zlib1g-dev
rbenv_environment: rbenv_environment:
RBENV_ROOT: $rbenv_root RBENV_ROOT: "{{ rbenv_root }}"
GEM_ROOT: $rbenv_gem_root GEM_ROOT: "{{ rbenv_gem_root }}"
GEM_HOME: $rbenv_gem_root GEM_HOME: "{{ rbenv_gem_root }}"
PATH: $rbenv_path PATH: "{{ rbenv_path }}"
HOME: "{{ rbenv_root }}"
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
home={{ rbenv_dir }} home={{ rbenv_dir }}
shell=/bin/false shell=/bin/false
createhome=no createhome=no
when: rbenv_user != common_web_user
- name: rbenv | create rbenv dir if it does not exist - name: rbenv | create rbenv dir if it does not exist
file: > file: >
......
...@@ -11,16 +11,17 @@ ...@@ -11,16 +11,17 @@
# Defaults for role supervisor # Defaults for role supervisor
# #
--- ---
supervisor_app_dir: "{{ app_dir }}/supervisor" supervisor_app_dir: "{{ app_dir }}/supervisor"
supervisor_cfg_dir: "{{ supervisor_app_dir }}/conf.d" supervisor_cfg_dir: "{{ supervisor_app_dir }}/conf.d"
supervisor_data_dir: "{{ data_dir }}/supervisor" supervisor_data_dir: "{{ data_dir }}/supervisor"
supervisor_venvs_dir: "{{ venvs_dir }}/supervisor" supervisor_venvs_dir: "{{ venvs_dir }}/supervisor"
supervisor_venv_dir: "{{ supervisor_venvs_dir }}/supervisor" supervisor_venv_dir: "{{ supervisor_venvs_dir }}/supervisor"
supervisor_venv_bin: "{{ supervisor_venv_dir }}/bin" supervisor_venv_bin: "{{ supervisor_venv_dir }}/bin"
supervisor_ctl: "{{ supervisor_venv_bin }}/supervisorctl"
# by default supervisor runs as the web user # by default supervisor runs as the web user
# which by default is set to www-data in # which by default is set to www-data in
# the common role # the common role
supervisor_user: "{{ common_web_user }}" supervisor_user: supervisor
supervisor_log_dir: "{{ log_dir }}/supervisor" supervisor_log_dir: "{{ log_dir }}/supervisor"
supervisor_cfg: "{{ supervisor_app_dir }}/supervisord.conf" supervisor_cfg: "{{ supervisor_app_dir }}/supervisord.conf"
...@@ -29,32 +29,50 @@ ...@@ -29,32 +29,50 @@
- fail: supervisor_servers is a required parameter for this role - fail: supervisor_servers is a required parameter for this role
when: supervisor_servers is not defined when: supervisor_servers is not defined
- name: supervisor | create application user
user: >
name="{{ supervisor_user }}"
home="{{ supervisor_app_dir }}"
createhome=no
shell=/bin/false
- name: supervisor | create supervisor directories - name: supervisor | create supervisor directories
file: > file: >
name={{ item }} name={{ item }}
state=directory state=directory
owner={{ supervisor_user }} owner={{ supervisor_user }}
group={{ supervisor_user }} group={{ common_web_user }}
with_items: with_items:
- "{{ supervisor_app_dir }}" - "{{ supervisor_app_dir }}"
- "{{ supervisor_cfg_dir }}" - "{{ supervisor_cfg_dir }}"
- "{{ superivsor_data_dir }}"
- "{{ supervisor_venvs_dir }}" - "{{ supervisor_venvs_dir }}"
- name: supervisor | create supervisor directories
file: >
name={{ item }}
state=directory
owner={{ common_web_user }}
group={{ supervisor_user }}
with_items:
- "{{ supervisor_data_dir }}"
- "{{ supervisor_log_dir }}" - "{{ supervisor_log_dir }}"
- name: supervisor | install supervisor in its venv - name: supervisor | install supervisor in its venv
pip: name=supervisor virtualenv="{{supervisor_venv_dir}}" state=present pip: name=supervisor virtualenv="{{supervisor_venv_dir}}" state=present
sudo_user: "{{ supervisor_user }}"
- name: supervisor | create supervisor upstart job - name: supervisor | create supervisor upstart job
template: src=supervisor-upstart.conf.j2 dest={{ supervisor_cfg }} template: src=supervisor-upstart.conf.j2 dest=/etc/init/supervisor.conf
- name: supervisor | create supervisor master config - name: supervisor | create supervisor master config
template: src=supervisord.conf.j2 dest={{ supervisor_cfg }} template: src=supervisord.conf.j2 dest={{ supervisor_cfg }}
sudo_user: "{{ supervisor_user }}"
- name: supervisor | create supervisor configs - name: supervisor | create supervisor configs
template: src={{ item }}.conf.j2 dest={{ supervisor_cfg_dir }}/{{ item }}.conf template: src={{ item }}.conf.j2 dest={{ supervisor_cfg_dir }}/{{ item }}.conf
with_items: supervisor_servers with_items: supervisor_servers
sudo_user: "{{ supervisor_user }}"
- name: supervisor | ensure supervisor is started - name: supervisor | ensure supervisor is started
service: name=supervisor state=started service: name=supervisor state=started
[program:forum] [program:forum]
command={{ forum_rbenv_shims }}/ruby app.rb
command={{ forum_supervisor_wrapper }}
priority=999 priority=999
startsecs = 5 startsecs = 5
redirect_stderr = True redirect_stderr = True
......
...@@ -4,5 +4,5 @@ start on runlevel [2345] ...@@ -4,5 +4,5 @@ start on runlevel [2345]
stop on runlevel [!2345] stop on runlevel [!2345]
respawn respawn
setuid {{ supervisor_user }} setuid {{ common_web_user }}
exec {{ supervisor_venv_dir }}/bin/supervisord --nodaemon --configuration {{ supervisor_cfg }} exec {{ supervisor_venv_dir }}/bin/supervisord --nodaemon --configuration {{ supervisor_cfg }}
...@@ -6,8 +6,8 @@ chmod=0700 ; sockef file mode (default 0700) ...@@ -6,8 +6,8 @@ chmod=0700 ; sockef file mode (default 0700)
[supervisord] [supervisord]
logfile={{ supervisor_log_dir }}/supervisord.log ; (main log file;default $CWD/supervisord.log) logfile={{ supervisor_log_dir }}/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) pidfile={{ supervisor_data_dir }}/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP) childlogdir={{ supervisor_log_dir }} ; ('AUTO' child log dir, default $TEMP)
; the below section must remain in the config file for RPC ; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be ; (supervisorctl/web interface) to work, additional interfaces may be
...@@ -16,7 +16,7 @@ childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEM ...@@ -16,7 +16,7 @@ childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEM
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl] [supervisorctl]
serverurl=unix:///var/run//supervisor.sock ; use a unix:// URL for a unix socket serverurl=unix://{{ supervisor_data_dir }}/supervisor.sock ; use a unix:// URL for a unix socket
; The [include] section can just contain the "files" setting. This ; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or ; setting can list multiple files (separated by whitespace or
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment