Taiga est une application gratuite et open source pour la gestion de projet. Contrairement à d'autres outils de gestion de projet, Taiga utilise une approche agile incrémentielle pour gérer le développement du projet. Taiga est une application très puissante et entièrement personnalisable. Le backend de Taiga est écrit en Python en utilisant le framework Django. Le frontend est écrit en JavaScript en utilisant les frameworks CoffeeScript et AngularJS. Taiga comprend des fonctionnalités telles que la collaboration de projet, le tableau Kanban, le suivi des bogues, les rapports, le suivi du temps, les backlogs, le wiki et plus encore.
Conditions préalables
- Une instance de serveur Vultr Ubuntu 16.04 avec au moins 1 Go de RAM.
- Un utilisateur sudo .
Dans ce didacticiel, nous utiliserons taiga.example.com
le nom de domaine pointé vers le serveur. Remplacez toutes les occurrences de taiga.example.com
par votre nom de domaine réel.
Mettez à jour votre système de base à l'aide du guide Comment mettre à jour Ubuntu 16.04 . Une fois votre système mis à jour, installez PostgreSQL.
Installer PostgreSQL
PostgreSQL est un système de base de données relationnelle objet et connu pour sa stabilité et sa vitesse. Taiga utilise PostgreSQL pour stocker sa base de données. Ajoutez le référentiel PostgreSQL dans le système.
echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
Importez la clé de signature GPG et mettez à jour les listes de packages.
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
Installez le serveur de base de données PostgreSQL.
sudo apt -y install postgresql
Démarrez le serveur PostgreSQL et activez-le pour démarrer automatiquement au démarrage.
sudo systemctl start postgresql
sudo systemctl enable postgresql
Modifiez le mot de passe de l'utilisateur PostgreSQL par défaut.
sudo passwd postgres
Connectez-vous en tant qu'utilisateur PostgreSQL.
sudo su - postgres
Créez un nouvel utilisateur PostgreSQL pour Taiga.
createuser taiga
PostgreSQL fournit le psql
shell pour exécuter des requêtes sur la base de données. Basculez vers le shell PostgreSQL.
psql
Définissez un mot de passe pour l'utilisateur nouvellement créé pour la base de données Taiga.
ALTER USER taiga WITH ENCRYPTED password 'DBPassword';
Remplacez-le DBPassword
par un mot de passe sécurisé. Créez une nouvelle base de données pour l'installation de la taïga.
CREATE DATABASE taiga OWNER taiga;
Sortez du psql
shell.
\q
Passez à l' sudo
utilisateur.
exit
Installer Python
Taiga nécessite Python version 3.4 ou ultérieure et Python 3.5 est préinstallé dans la distribution Ubuntu 16.04. Installez quelques packages supplémentaires.
sudo apt -y install python3 python3-pip python3-dev python3-dev virtualenvwrapper
L'environnement virtuel Python est utilisé pour créer un environnement virtuel isolé pour un projet Python. Un environnement virtuel contient ses propres répertoires d'installation et ne partage pas les bibliothèques avec les environnements virtuels globaux et autres. Une fois Python 3 installé avec succès, vous devriez pouvoir vérifier sa version.
python3 -V
Vous verrez ce qui suit.
user@vultr:~$ python3 -V
Python 3.5.2
Mettre à niveau pip
, qui est une application de gestionnaire de dépendances.
sudo pip3 install --upgrade setuptools pip
Installez également quelques outils de compilation qui seront nécessaires ultérieurement pour compiler les dépendances.
sudo apt -y install build-essential binutils-doc autoconf flex bison libjpeg-dev libfreetype6-dev zlib1g-dev libzmq3-dev libgdbm-dev libncurses5-dev automake libtool libffi-dev curl git tmux gettext
Installer RabbitMQ
Taiga utilise RabbitMQ pour traiter la file d'attente de messages. RabbitMQ nécessite que les bibliothèques Erlang fonctionnent. Installez Erlang.
sudo apt -y install erlang
Ajoutez le référentiel RabbitMQ.
echo 'deb http://www.rabbitmq.com/debian/ stable main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list
Importez la clé de signature RabbitMQ GPG.
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
Mettez à jour les informations du référentiel.
sudo apt update
Installez RabbitMQ.
sudo apt -y install rabbitmq-server
Démarrez et activez le serveur RabbitMQ.
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
Ajoutez un utilisateur RabbitMQ et vhost. Fournissez également l'autorisation à l'utilisateur sur l'hôte.
sudo rabbitmqctl add_user taiga StrongMQPassword
sudo rabbitmqctl add_vhost taiga
sudo rabbitmqctl set_permissions -p taiga taiga ".*" ".*" ".*"
Assurez-vous de remplacer StrongMQPassword
par un mot de passe sécurisé.
Installer Nodejs
Node.js version 7 ou ultérieure est requis pour compiler le frontend de la taïga. Ajoutez le référentiel Node.js version 8.
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
Installez Node.js et l' pwgen
utilitaire.
sudo apt install -y nodejs pwgen npm
pwgen
sera utilisé plus tard pour générer une chaîne secrète forte. Installez CoffeeScript, car il sera utilisé pour compiler les fichiers Taiga écrits dans le framework CoffeeScript.
sudo npm install -g coffee-script gulp
Installer la taïga backend
Ajoutez un nouvel utilisateur système pour Taiga pour vous assurer que les processus Taiga s'exécutent en tant qu'utilisateur non privilégié.
sudo adduser taiga
sudo su - taiga
Remarque : À partir de maintenant, toutes les commandes doivent être exécutées en tant qu'utilisateur non privilégié taiga
jusqu'à ce que vous soyez invité à revenir à l' sudo
utilisateur.
Créez un nouveau répertoire pour stocker les fichiers journaux.
mkdir -p ~/logs
Clonez le référentiel backend Taiga de GitHub et extrayez la dernière branche stable.
git clone https://github.com/taigaio/taiga-back.git taiga-back
cd taiga-back
git checkout stable
Créez maintenant un nouvel environnement virtuel pour Taiga en utilisant Python 3.
mkvirtualenv -p /usr/bin/python3 taiga
pip3 install --upgrade setuptools
Installez les dépendances Python requises à l'aide de pip
.
pip3 install -r requirements.txt
Remplissez la base de données avec les données initiales nécessaires.
python3 manage.py migrate --noinput
python3 manage.py loaddata initial_user
python3 manage.py loaddata initial_project_templates
python3 manage.py compilemessages
python3 manage.py collectstatic --noinput
Les commandes ci-dessus écrivent des données dans la base de données PostgreSQL. Taiga envoie également des données de démonstration ou des échantillons qui peuvent être utiles pour évaluer le produit. Si vous souhaitez installer les exemples de données, exécutez ce qui suit.
python3 manage.py sample_data
Remarque : l' installation des exemples de données est facultative et vise uniquement à évaluer le produit.
Avant de créer le fichier de configuration pour le backend de la taïga, nous devons générer une chaîne secrète. Cette chaîne sera utilisée pour crypter les données de session.
Générez une chaîne aléatoire de 64 caractères.
pwgen -s -1 64
Vous devriez voir la sortie comme une chaîne aléatoire.
(taiga) taiga@vultr:~/taiga-back$ pwgen -s -1 64
fhDfyYVJ4EH3tvAyUzmfWSeCXuf5sy5EEWrMQPaf9t3JSFrpiL6yvUEOWsFOTscP
Créez un nouveau fichier de configuration pour le backend de la taïga.
nano ~/taiga-back/settings/local.py
Remplissez le fichier avec le code suivant.
from .common import *
MEDIA_URL = "https://taiga.example.com/media/"
STATIC_URL = "https://taiga.example.com/static/"
SITES["front"]["scheme"] = "https"
SITES["front"]["domain"] = "taiga.example.com"
SECRET_KEY = "Generated_Secret_Key"
DEBUG = False
PUBLIC_REGISTER_ENABLED = True
DEFAULT_FROM_EMAIL = "[email protected]"
SERVER_EMAIL = DEFAULT_FROM_EMAIL
#CELERY_ENABLED = True
EVENTS_PUSH_BACKEND = "taiga.events.backends.rabbitmq.EventsPushBackend"
EVENTS_PUSH_BACKEND_OPTIONS = {"url": "amqp://taiga:StrongMQPassword@localhost:5672/taiga"}
# Uncomment and populate with proper connection parameters
# for enable email sending. EMAIL_HOST_USER should end by @domain.tld
#EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
#EMAIL_USE_TLS = False
#EMAIL_HOST = "mail.example.com"
#EMAIL_HOST_USER = "[email protected]"
#EMAIL_HOST_PASSWORD = "SMTPPassword"
#EMAIL_PORT = 25
# Uncomment and populate with proper connection parameters
# for enable github login/singin.
#GITHUB_API_CLIENT_ID = "yourgithubclientid"
#GITHUB_API_CLIENT_SECRET = "yourgithubclientsecret"
Assurez-vous de remplacer le example domain name
par le réel dans le code ci-dessus. Remplacez également Generated_Secret_Key
par la clé secrète réelle et StrongMQPassword
par le mot de passe réel pour l'utilisateur de la file d'attente de messages de la taïga. Si vous avez un serveur SMTP prêt et que vous souhaitez utiliser immédiatement les fonctions d'envoi d'e-mails, vous pouvez décommenter les options d'e-mail et définir la valeur appropriée. Si vous n'avez pas de serveur de messagerie prêt, vous pouvez ignorer la configuration de la fonction de messagerie pour l'instant et la définir plus tard dans ce fichier de configuration.
Si vous souhaitez activer la connexion GitHub, créez une application dans GitHub et fournissez l'ID client API et le secret client.
Pour vérifier immédiatement si le backend Taiga peut être démarré, exécutez le serveur Django intégré.
workon taiga
python manage.py runserver
Vous verrez la sortie suivante si le serveur a démarré avec succès.
(taiga) taiga@vultr:~/taiga-back$ workon taiga
(taiga) taiga@vultr:~/taiga-back$ python manage.py runserver
Trying import local.py settings...
Trying import local.py settings...
Performing system checks...
System check identified no issues (0 silenced).
October 28, 2017 - 10:29:38
Django version 1.10.6, using settings 'settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Pour vérifier si l'API est accessible, ouvrez une autre session de terminal et exécutez ce qui suit.
curl http://127.0.0.1:8000/api/v1/
Vous verrez une sortie similaire renvoyée par l'appel d'API.
user@vultr:~$ curl http://127.0.0.1:8000/api/v1/
{"webhooks": "http://127.0.0.1:8000/api/v1/webhooks", "invitations": "http://127.0.0.1:8000/api/v1/invitations", "severities": "http://127.0.0.1:8000/api/v1/severities", "memberships": "http://127.0.0.1:8000/api/v1/memberships", "user-storage": "http://127.0.0.1:8000/api/v1/user-storage", "epics/(?P<resource_id>\\d+)/voters": "http://127.0.0.1:8000/api/v1/epics/(?P<resource_id>\\d+)/voters", "wiki": "http://127.0.0.1:8000/api/v1/wiki", "priorities": "http://127.0.0.1:8000/api/v1/priorities", "userstories/attachments": "http://127.0.0.1:8000/api/v1/userstories/attachments", "epics/(?P<epic>[^/.]+)/related_userstories": "http://127.0.0.1:8000/api/v1/epics/(?P<epic>[^/.]+)/related_userstories", "timeline/user": "http://127.0.0.1:8000/api/v1/timeline/user", "userstories/(?P<resource_id>\\d+)/voters": "http://127.0.0.1:8000/api/v1/userstories/(?P<resource_id>\\d+)/voters", "wiki-links": "http://127.0.0.1:8000/api/v1/wiki-links", "epics/attachments": "http://127.0.0.1:8000/api/v1/epics/attachments", "issues/custom-attributes-values": "http://127.0.0.1:8000/api/v1/issues/custom-attributes-values
Arrêtez le serveur principal de la taïga en appuyant sur " ctrl + C
" et désactivez l'environnement virtuel.
deactivate
Installer le frontend
Le frontend de la taïga est le composant de la taïga qui sert l'interface utilisateur Web. Clonez le référentiel frontal de la taïga à partir de Github et extrayez la dernière branche stable.
cd ~
git clone https://github.com/taigaio/taiga-front-dist.git taiga-front-dist
cd taiga-front-dist
git checkout stable
Créez un nouveau fichier de configuration pour le frontend de la taïga.
nano ~/taiga-front-dist/dist/conf.json
Remplissez le fichier.
{
"api": "https://taiga.example.com/api/v1/",
"eventsUrl": "wss://taiga.example.com/events",
"eventsMaxMissedHeartbeats": 5,
"eventsHeartbeatIntervalTime": 60000,
"eventsReconnectTryInterval": 10000,
"debug": true,
"debugInfo": false,
"defaultLanguage": "en",
"themes": ["taiga"],
"defaultTheme": "taiga",
"publicRegisterEnabled": true,
"feedbackEnabled": true,
"privacyPolicyUrl": null,
"termsOfServiceUrl": null,
"maxUploadFileSize": null,
"contribPlugins": [],
"tribeHost": null,
"importers": [],
"gravatar": true
}
Assurez-vous de remplacer le example domain
par le domaine réel. Vous pouvez également modifier la langue par défaut et d'autres paramètres dans la configuration ci-dessus.
Installer les événements de la taïga
Outre le frontend et le backend, nous devons également installer les événements de la taïga. Les événements de la taïga est un serveur de socket Web, et il permet au frontend de la taïga d'afficher les changements en temps réel dans les modules tels que le backlog, Kanban et plus encore. Il utilise également le serveur RabbitMQ pour le traitement des messages.
Clonez le référentiel des événements de la taïga depuis Github.
cd ~
git clone https://github.com/taigaio/taiga-events.git taiga-events
cd taiga-events
Installez les dépendances Node.js à l'aide de npm
.
npm install
Créez un nouveau fichier de configuration pour les événements de la taïga.
nano ~/taiga-events/config.json
Remplissez le fichier.
{
"url": "amqp://taiga:StrongMQPassword@localhost:5672/taiga",
"secret": "Generated_Secret_Key",
"webSocketServer": {
"port": 8888
}
}
Remplacez-la Generated_Secret_Key
par la clé secrète réelle de 64 caractères que vous avez générée précédemment. La clé secrète doit être exactement la même que la clé que vous avez fournie dans le fichier de configuration du backend de la taïga. En outre, mettez à jour le StrongMQPassword
avec le mot de passe réel pour l'utilisateur de la file d'attente de messages Taiga.
Circus est un gestionnaire de processus pour les applications Python. Nous utiliserons Circus pour gérer le backend et les événements de la taïga.
Revenez à l' sudo
utilisateur.
exit
Remarque : à partir de maintenant, vous devrez exécuter les commandes à l'aide de l' sudo
utilisateur.
sudo apt -y install circus
Créez un nouveau fichier de configuration Circus pour exécuter le backend Taiga.
sudo nano /etc/circus/conf.d/taiga.ini
Remplissez le fichier.
[watcher:taiga]
working_dir = /home/taiga/taiga-back
cmd = gunicorn
args = -w 3 -t 60 --pythonpath=. -b 127.0.0.1:8001 taiga.wsgi
uid = taiga
numprocesses = 1
autostart = true
send_hup = true
stdout_stream.class = FileStream
stdout_stream.filename = /home/taiga/logs/gunicorn.stdout.log
stdout_stream.max_bytes = 10485760
stdout_stream.backup_count = 4
stderr_stream.class = FileStream
stderr_stream.filename = /home/taiga/logs/gunicorn.stderr.log
stderr_stream.max_bytes = 10485760
stderr_stream.backup_count = 4
[env:taiga]
PATH = /home/taiga/.virtualenvs/taiga/bin:$PATH
TERM=rxvt-256color
SHELL=/bin/bash
USER=taiga
LANG=en_US.UTF-8
HOME=/home/taiga
PYTHONPATH=/home/taiga/.virtualenvs/taiga/lib/python3.5/site-packages
Créez une nouvelle configuration de cirque pour exécuter les événements de la taïga.
sudo nano /etc/circus/conf.d/taiga-events.ini
Remplissez le fichier.
[watcher:taiga-events]
working_dir = /home/taiga/taiga-events
cmd = /usr/local/bin/coffee
args = index.coffee
uid = taiga
numprocesses = 1
autostart = true
send_hup = true
stdout_stream.class = FileStream
stdout_stream.filename = /home/taiga/logs/taigaevents.stdout.log
stdout_stream.max_bytes = 10485760
stdout_stream.backup_count = 12
stderr_stream.class = FileStream
stderr_stream.filename = /home/taiga/logs/taigaevents.stderr.log
stderr_stream.max_bytes = 10485760
stderr_stream.backup_count = 12
Redémarrez Circus et activez le démarrage automatique au démarrage.
sudo systemctl restart circusd
sudo systemctl enable circusd
Vérifiez l'état du cirque.
circusctl status
Si Circus a démarré correctement tous les processus de la taïga, vous verrez la sortie suivante.
user@vultr:~$ circusctl status
circusd-stats: active
plugin:flapping: active
taiga: active
taiga-events: active
Si l'un des processus n'est pas actif, exécutez sudo chmod -R 777 /home/taiga/logs
et redémarrez Circus. Vérifiez à nouveau l'état des processus du Cirque, cette fois, vous trouverez certainement le service en cours d'exécution.
Maintenant, nous avons installé et exécuté Taiga avec succès. Avant de pouvoir l'utiliser, nous devons exposer l'installation à l'aide de n'importe quel serveur Web de production.
Installer Nginx en tant que proxy inverse
Nous utiliserons Nginx comme proxy inverse pour servir l'application aux utilisateurs. Nous obtiendrons et installerons également des certificats SSL auprès de Let's Encrypt.
Certbot est le client officiel de délivrance des certificats pour Let's Encrypt CA. Ajoutez le référentiel Certbot PPA dans le système.
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
Installez Nginx et Certbot.
sudo apt -y install nginx certbot
Remarque : Pour obtenir des certificats de Let's Encrypt CA, vous devez vous assurer que le domaine pour lequel vous souhaitez générer les certificats est dirigé vers le serveur. Sinon, apportez les modifications nécessaires aux enregistrements DNS de votre domaine et attendez que le DNS se propage avant de refaire la demande de certificat. Certbot vérifie l'autorité de domaine avant de fournir les certificats.
Utilisez maintenant le serveur Web intégré dans Certbot pour générer les certificats pour votre domaine.
sudo certbot certonly --standalone -d taiga.example.com
Les certificats générés sont susceptibles d'être stockés dans le /etc/letsencrypt/live/taiga.example.com/
répertoire. Le certificat SSL sera conservé sous la forme fullchain.pem
et la clé privée sera enregistrée sous privkey.pem
.
Les certificats Let's Encrypt expirent dans 90 jours, il est donc recommandé de configurer le renouvellement automatique des certificats à l'aide des tâches Cron. Cron est un service système utilisé pour exécuter des tâches périodiques.
Ouvrez le fichier de tâche cron.
sudo crontab -e
Ajoutez la ligne suivante.
0 0 * * * /usr/bin/certbot renew --quiet
Le travail cron ci-dessus s'exécutera quotidiennement à minuit. Si le certificat doit expirer, il renouvellera automatiquement les certificats.
Générez un paramètre Diffie-Hellman puissant. Il fournit une couche de sécurité supplémentaire pour l'échange de données entre l'hôte et le serveur.
sudo openssl dhparam -out /etc/ssl/dhparam.pem 2048
Créez un nouveau bloc serveur Nginx pour servir le frontend de la taïga.
sudo nano /etc/nginx/sites-available/taiga
Remplissez le fichier avec les éléments suivants.
server {
listen 80;
server_name taiga.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name taiga.example.com;
access_log /home/taiga/logs/nginx.access.log;
error_log /home/taiga/logs/nginx.error.log;
large_client_header_buffers 4 32k;
client_max_body_size 50M;
charset utf-8;
index index.html;
# Frontend
location / {
root /home/taiga/taiga-front-dist/dist/;
try_files $uri $uri/ /index.html;
}
# Backend
location /api {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8001/api;
proxy_redirect off;
}
location /admin {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8001$request_uri;
proxy_redirect off;
}
# Static files
location /static {
alias /home/taiga/taiga-back/static;
}
# Media files
location /media {
alias /home/taiga/taiga-back/media;
}
location /events {
proxy_pass http://127.0.0.1:8888/events;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
}
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Public-Key-Pins 'pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY="; pin-sha256="633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q="; max-age=2592000; includeSubDomains';
ssl on;
ssl_certificate /etc/letsencrypt/live/taiga.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/taiga.example.com/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
ssl_session_cache shared:SSL:10m;
ssl_dhparam /etc/ssl/dhparam.pem;
ssl_stapling on;
ssl_stapling_verify on;
}
Assurez-vous de changer le domain name
et le path to the SSL certificates
. Activez l'hôte virtuel.
sudo ln -s /etc/nginx/sites-available/taiga /etc/nginx/sites-enabled/taiga
Vous pouvez maintenant redémarrer le serveur Web Nginx et l'activer pour démarrer automatiquement au démarrage.
sudo systemctl restart nginx
sudo systemctl status nginx
Enfin, corrigez la propriété et l'autorisation des fichiers Taiga.
sudo chown -R taiga:taiga /home/taiga/
sudo chmod o+x /home/taiga/
Conclusion
Vous pouvez maintenant accéder à l'installation de la taïga en allant sur https://taiga.example.com
. Connectez-vous en utilisant le compte administrateur initial avec le nom d'utilisateur " admin
" et le mot de passe " 123123
". Votre installation est maintenant prête pour une utilisation en production. Commencez par créer un nouveau projet ou évaluer le produit. Si vous gérez déjà un projet sur Github, Jira ou Trello, vous pouvez facilement importer les projets dans Taiga en utilisant les importateurs .