roles/taiga: Deploy Taiga project management app
The *taiga* role installs the three components of Taiga: * taiga-back * taiga-events * taiga-front *taiga-back* is a Python application. Its dependencies are installed via `pip` in the *taiga* user's site-packages, and the application itself is installed by unpacking the archive. *taiga-events* is a Node.js application. Its dependencies are installed by `npm`, and is itself installed by unpacking the archive. Finally, *taiga-front* is a single-page browser application that is installed by unpacking the archive, and served by Apache. Taiga requires PostgreSQL and RabbitMQ.jenkins-master
parent
7211028f4d
commit
251611803f
|
@ -0,0 +1,2 @@
|
||||||
|
taiga_media_url: /media/
|
||||||
|
taiga_static_url: /static/
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/sh
|
||||||
|
export PYTHONUNBUFFERED=1
|
||||||
|
cd /usr/local/lib/taiga/taiga-back
|
||||||
|
exec /usr/local/lib/taiga/venv/bin/gunicorn \
|
||||||
|
--workers 4 \
|
||||||
|
-b [::1]:8001 \
|
||||||
|
taiga.wsgi
|
|
@ -0,0 +1,13 @@
|
||||||
|
# vim: set ft=systemd :
|
||||||
|
[Unit]
|
||||||
|
Description=Taiga Events Server
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/usr/local/lib/taiga/taiga-events
|
||||||
|
ExecStart=/usr/local/lib/taiga/taiga-events/node_modules/coffeescript/bin/coffee \
|
||||||
|
index.coffee
|
||||||
|
User=taiga
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1,33 @@
|
||||||
|
# vim: set ft=apache :
|
||||||
|
ProxyRequests off
|
||||||
|
ProxyPreserveHost on
|
||||||
|
|
||||||
|
ProxyPass /api http://localhost:8001/api
|
||||||
|
ProxyPassReverse /api http://localhost:8001/api
|
||||||
|
ProxyPass /admin http://localhost:8001/admin
|
||||||
|
ProxyPassReverse /admin http://localhost:8001/admin
|
||||||
|
ProxyPass /events ws://localhost:8888/events
|
||||||
|
|
||||||
|
Alias /static /usr/local/lib/taiga/taiga-back/static
|
||||||
|
<Directory /usr/local/lib/taiga/taiga-back/static>
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
Alias /media /usr/local/lib/taiga/taiga-back/media
|
||||||
|
<Directory /usr/local/lib/taiga/taiga-back/media>
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
DocumentRoot /usr/local/lib/taiga/taiga-front-dist/dist
|
||||||
|
<Directory /usr/local/lib/taiga/taiga-front-dist/dist>
|
||||||
|
Require all granted
|
||||||
|
|
||||||
|
RewriteEngine On
|
||||||
|
|
||||||
|
RewriteCond %{HTTPS} !on
|
||||||
|
RewriteRule /.* https://%{SERVER_NAME}$0
|
||||||
|
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
RewriteRule ^ index.html [L]
|
||||||
|
</Directory>
|
|
@ -0,0 +1,11 @@
|
||||||
|
# vim: set ft=systemd :
|
||||||
|
[Unit]
|
||||||
|
Description=Taiga Backend Server
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=taiga
|
||||||
|
ExecStart=/usr/local/libexec/taiga-back.sh
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1,34 @@
|
||||||
|
- name: reload systemd
|
||||||
|
command: systemctl daemon-reload
|
||||||
|
|
||||||
|
- name: migrate taiga data
|
||||||
|
become: true
|
||||||
|
become_user: taiga
|
||||||
|
command:
|
||||||
|
/usr/local/lib/taiga/venv/bin/python manage.py migrate
|
||||||
|
chdir=/usr/local/lib/taiga/taiga-back
|
||||||
|
- name: compile taiga messages
|
||||||
|
# become: true
|
||||||
|
# become_user: taiga
|
||||||
|
command:
|
||||||
|
/usr/local/lib/taiga/venv/bin/python manage.py compilemessages
|
||||||
|
chdir=/usr/local/lib/taiga/taiga-back
|
||||||
|
- name: collect taiga static data
|
||||||
|
# become: true
|
||||||
|
# become_user: taiga
|
||||||
|
command:
|
||||||
|
/usr/local/lib/taiga/venv/bin/python manage.py collectstatic --noinput
|
||||||
|
chdir=/usr/local/lib/taiga/taiga-back
|
||||||
|
|
||||||
|
- name: reload httpd
|
||||||
|
service:
|
||||||
|
name: httpd
|
||||||
|
state: reloaded
|
||||||
|
- name: restart taiga-events
|
||||||
|
service:
|
||||||
|
name: taiga-events
|
||||||
|
state: restarted
|
||||||
|
- name: restart taiga
|
||||||
|
service:
|
||||||
|
name: taiga
|
||||||
|
state: restarted
|
|
@ -0,0 +1,19 @@
|
||||||
|
- import_tasks: postgresql.yml
|
||||||
|
- import_tasks: rabbitmq.yml
|
||||||
|
|
||||||
|
- import_tasks: taiga-back.yml
|
||||||
|
- import_tasks: taiga-front.yml
|
||||||
|
- import_tasks: taiga-events.yml
|
||||||
|
|
||||||
|
- name: ensure apache is configured to serve taiga
|
||||||
|
copy:
|
||||||
|
src: taiga.httpd.conf
|
||||||
|
dest: /etc/httpd/conf.d/taiga.conf
|
||||||
|
mode: '0644'
|
||||||
|
notify:
|
||||||
|
- reload httpd
|
||||||
|
- name: ensure selinux allows apache to proxy for taiga
|
||||||
|
seboolean:
|
||||||
|
name: httpd_can_network_connect
|
||||||
|
state: true
|
||||||
|
persistent: true
|
|
@ -0,0 +1,19 @@
|
||||||
|
- name: ensure taiga postgresql user exists
|
||||||
|
become: true
|
||||||
|
become_user: postgres
|
||||||
|
postgresql_user:
|
||||||
|
name=taiga
|
||||||
|
state=present
|
||||||
|
|
||||||
|
- name: ensure taiga postgresql database exists
|
||||||
|
become: true
|
||||||
|
become_user: postgres
|
||||||
|
postgresql_db:
|
||||||
|
name=taiga
|
||||||
|
owner=taiga
|
||||||
|
encoding=utf-8
|
||||||
|
lc_collate=en_US.UTF-8
|
||||||
|
lc_ctype=en_US.UTF-8
|
||||||
|
state=present
|
||||||
|
notify:
|
||||||
|
- migrate taiga data
|
|
@ -0,0 +1,14 @@
|
||||||
|
- name: ensure taiga rabbitmq vhost exists
|
||||||
|
rabbitmq_vhost:
|
||||||
|
name=taiga
|
||||||
|
state=present
|
||||||
|
- name: ensure taiga rabbitmq user exists
|
||||||
|
rabbitmq_user:
|
||||||
|
name: taiga
|
||||||
|
password: '{{ taiga_events_password }}'
|
||||||
|
permissions:
|
||||||
|
- vhost: taiga
|
||||||
|
configure_priv: .*
|
||||||
|
read_priv: .*
|
||||||
|
write_priv: .*
|
||||||
|
state: present
|
|
@ -0,0 +1,73 @@
|
||||||
|
- name: ensure system dependencies are installed
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- gzip
|
||||||
|
- libjpeg
|
||||||
|
- python3-psycopg2
|
||||||
|
- '{{ taiga_python_package }}'
|
||||||
|
- sudo
|
||||||
|
- tar
|
||||||
|
- zlib
|
||||||
|
state: present
|
||||||
|
tags:
|
||||||
|
- install
|
||||||
|
|
||||||
|
- name: ensure taiga user exists
|
||||||
|
user:
|
||||||
|
name: taiga
|
||||||
|
system: yes
|
||||||
|
home: /var/lib/taiga
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: ensure taiga dependencies are installed
|
||||||
|
environment:
|
||||||
|
PIP_NO_INDEX: t
|
||||||
|
PIP_FIND_LINKS: '{{ taiga_pip_url }}'
|
||||||
|
PIP_TRUSTED_HOST: '{{ taiga_pip_url|urlsplit("hostname") }}'
|
||||||
|
pip:
|
||||||
|
requirements: '{{ taiga_pip_url }}/requirements.txt'
|
||||||
|
virtualenv: /usr/local/lib/taiga/venv
|
||||||
|
virtualenv_command: '{{ taiga_python_exe }} -m venv'
|
||||||
|
state: present
|
||||||
|
- name: ensure taiga-back is installed
|
||||||
|
unarchive:
|
||||||
|
src: '{{ taiga_back_url }}'
|
||||||
|
dest: /usr/local/lib/taiga/
|
||||||
|
remote_src: true
|
||||||
|
notify:
|
||||||
|
- migrate taiga data
|
||||||
|
- compile taiga messages
|
||||||
|
- collect taiga static data
|
||||||
|
|
||||||
|
- name: ensure taiga media directory exists
|
||||||
|
file:
|
||||||
|
path: /usr/local/lib/taiga/taiga-back/media
|
||||||
|
owner: taiga
|
||||||
|
group: taiga
|
||||||
|
mode: '0755'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: ensure taiga-back is configured
|
||||||
|
template:
|
||||||
|
src: settings.py.j2
|
||||||
|
dest: /usr/local/lib/taiga/taiga-back/settings/local.py
|
||||||
|
|
||||||
|
- name: ensure taiga-back entry point script is installed
|
||||||
|
copy:
|
||||||
|
src: taiga-back.sh
|
||||||
|
dest: /usr/local/libexec/taiga-back.sh
|
||||||
|
mode: '0755'
|
||||||
|
notify:
|
||||||
|
- restart taiga
|
||||||
|
- name: ensure taiga systemd unit is installed
|
||||||
|
copy:
|
||||||
|
src: taiga.service
|
||||||
|
dest: /etc/systemd/system/taiga.service
|
||||||
|
mode: '0644'
|
||||||
|
notify:
|
||||||
|
- reload systemd
|
||||||
|
- restart taiga
|
||||||
|
- name: ensure taiga starts at boot
|
||||||
|
service:
|
||||||
|
name: taiga
|
||||||
|
enabled: yes
|
|
@ -0,0 +1,52 @@
|
||||||
|
- name: ensure nodejs is installed
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- nodejs
|
||||||
|
- npm
|
||||||
|
state: present
|
||||||
|
tags:
|
||||||
|
- install
|
||||||
|
|
||||||
|
- name: ensure taiga-events directory exists
|
||||||
|
file:
|
||||||
|
path: /usr/local/lib/taiga/taiga-events
|
||||||
|
owner: taiga
|
||||||
|
group: taiga
|
||||||
|
mode: '0755'
|
||||||
|
state: directory
|
||||||
|
- name: ensure taiga-events is installed
|
||||||
|
become: true
|
||||||
|
become_user: taiga
|
||||||
|
unarchive:
|
||||||
|
src: '{{ taiga_events_url }}'
|
||||||
|
dest: /usr/local/lib/taiga/
|
||||||
|
remote_src: true
|
||||||
|
|
||||||
|
- name: ensure taiga-events dependencies are installed
|
||||||
|
become: true
|
||||||
|
become_user: taiga
|
||||||
|
npm:
|
||||||
|
path: /usr/local/lib/taiga/taiga-events
|
||||||
|
|
||||||
|
- name: ensure taiga-events is configured
|
||||||
|
template:
|
||||||
|
src: taiga-events.config.json.j2
|
||||||
|
dest: /usr/local/lib/taiga/taiga-events/config.json
|
||||||
|
owner: root
|
||||||
|
group: taiga
|
||||||
|
mode: '0750'
|
||||||
|
notify:
|
||||||
|
- restart taiga-events
|
||||||
|
|
||||||
|
- name: ensure taiga-events systemd unit is installed
|
||||||
|
copy:
|
||||||
|
src: taiga-events.service
|
||||||
|
dest: /etc/systemd/system/taiga-events.service
|
||||||
|
mode: '0644'
|
||||||
|
notify:
|
||||||
|
- reload systemd
|
||||||
|
- restart taiga-events
|
||||||
|
- name: ensure taiga-events starts at boot
|
||||||
|
service:
|
||||||
|
name: taiga-events
|
||||||
|
enabled: yes
|
|
@ -0,0 +1,11 @@
|
||||||
|
- name: ensure taiga-front is installed
|
||||||
|
unarchive:
|
||||||
|
src: '{{ taiga_front_url }}'
|
||||||
|
dest: /usr/local/lib/taiga/
|
||||||
|
remote_src: true
|
||||||
|
|
||||||
|
- name: ensure taiga-front is configured
|
||||||
|
template:
|
||||||
|
src: taiga-front.conf.json.j2
|
||||||
|
dest: /usr/local/lib/taiga/taiga-front-dist/dist/conf.json
|
||||||
|
mode: '0644'
|
|
@ -0,0 +1,26 @@
|
||||||
|
from .common import *
|
||||||
|
|
||||||
|
MEDIA_URL = "{{ taiga_media_url }}"
|
||||||
|
STATIC_URL = "{{ taiga_static_url }}"
|
||||||
|
SITES["front"]["scheme"] = "http"
|
||||||
|
SITES["front"]["domain"] = "example.com"
|
||||||
|
|
||||||
|
SECRET_KEY = "{{ taiga_back_secret_key }}"
|
||||||
|
|
||||||
|
DEBUG = False
|
||||||
|
PUBLIC_REGISTER_ENABLED = True
|
||||||
|
|
||||||
|
DEFAULT_FROM_EMAIL = "no-reply@example.com"
|
||||||
|
SERVER_EMAIL = DEFAULT_FROM_EMAIL
|
||||||
|
|
||||||
|
#CELERY_ENABLED = True
|
||||||
|
|
||||||
|
EVENTS_PUSH_BACKEND = "taiga.events.backends.rabbitmq.EventsPushBackend"
|
||||||
|
EVENTS_PUSH_BACKEND_OPTIONS = {"url": "amqp://taiga:{{ taiga_events_password }}@localhost:5672/taiga"}
|
||||||
|
|
||||||
|
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
|
||||||
|
EMAIL_USE_TLS = False
|
||||||
|
EMAIL_HOST = "{{ taiga_email_host }}"
|
||||||
|
#EMAIL_HOST_USER = ""
|
||||||
|
#EMAIL_HOST_PASSWORD = ""
|
||||||
|
#EMAIL_PORT = 25
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"url": "amqp://taiga:{{ taiga_events_password }}",
|
||||||
|
"Secret": "{{ taiga_back_secret_key }}",
|
||||||
|
"webSocketServer": {
|
||||||
|
"port": 8888
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"api": "/api/v1/",
|
||||||
|
"publicRegisterEnabled": false,
|
||||||
|
"feedbackEnabled": false,
|
||||||
|
"privacyPolicyUrl": null,
|
||||||
|
"termsOfServiceUrl": null,
|
||||||
|
"GDPRUrl": null,
|
||||||
|
"maxUploadFileSize": null,
|
||||||
|
"contribPlugins": []
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
taiga_python_version: 3.6
|
||||||
|
taiga_python_exe: /usr/bin/python{{ taiga_python_version }}
|
||||||
|
taiga_python_package: python{{ taiga_python_version|replace('.', '') }}
|
Loading…
Reference in New Issue