Como instalar a ferramenta de gerenciamento de projetos Taiga no CentOS 7

Taiga é um aplicativo gratuito e de código aberto para gerenciamento de projetos. Ao contrário de outras ferramentas de gerenciamento de projetos, o Taiga usa uma abordagem ágil incremental para gerenciar o desenvolvimento do projeto. Taiga é uma aplicação muito poderosa e totalmente personalizável. O backend do Taiga é escrito em Python usando a estrutura do Django. O frontend é escrito em JavaScript usando as estruturas CoffeeScript e AngularJS. O Taiga inclui recursos como colaboração em projetos, quadro Kanban, rastreamento de bugs, relatórios, rastreamento de tempo, registros em atraso, wiki e muito mais.

Pré-requisitos

  • Uma instância do servidor Vultr CentOS 7 com pelo menos 1 GB de RAM.
  • Um usuário sudo .

Neste tutorial, usaremos taiga.example.comcomo o nome de domínio apontado para o servidor. Substitua todas as ocorrências de taiga.example.compelo seu nome de domínio real.

Atualize seu sistema básico usando o guia Como atualizar o CentOS 7 . Depois que seu sistema for atualizado, continue com a instalação do PostgreSQL.

Instale o PostgreSQL

O PostgreSQL é um sistema de banco de dados objeto-relacional conhecido por sua estabilidade e velocidade. O Taiga usa o PostgreSQL para armazenar seu banco de dados. Adicione o repositório PostgreSQL ao sistema.

sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-1.noarch.rpm

Instale o servidor de banco de dados PostgreSQL.

sudo yum -y install postgresql10-server postgresql10-contrib postgresql10 

Inicialize o banco de dados.

sudo /usr/pgsql-10/bin/postgresql-10-setup initdb

Inicie o servidor PostgreSQL e ative-o automaticamente no momento da inicialização.

sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10

Mude a senha do usuário padrão do PostgreSQL.

sudo passwd postgres

Efetue login como usuário do PostgreSQL.

sudo su - postgres

Crie um novo usuário do PostgreSQL para o Taiga.

createuser taiga 

O PostgreSQL fornece o psqlshell para executar consultas no banco de dados. Mude para o shell do PostgreSQL.

psql

Defina uma senha para o usuário recém-criado para o banco de dados Taiga.

ALTER USER taiga WITH ENCRYPTED password 'DBPassword';

Substitua DBPasswordpor uma senha segura. Crie um novo banco de dados para a instalação do Taiga.

CREATE DATABASE taiga OWNER taiga;

Saia do psqlshell.

\q

Mude para o sudousuário.

exit

Instale o Python 3

O Python 2.7 vem pré-instalado em um servidor CentOS 7, mas o Taiga requer o Python versão 3.4 ou posterior.

Vamos instalar o Python versão 3.6 a partir da fonte. Instale as ferramentas de compilação e o compilador necessários.

sudo yum -y install gcc autoconf flex bison libjpeg-turbo-devel freetype-devel zlib-devel zeromq3-devel gdbm-devel ncurses-devel automake libtool libffi-devel curl git tmux libxml2-devel libxslt-devel openssl-devel gcc-c++

Faça o download do código fonte do Python.

wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz

Extraia e configure a instalação do Python.

tar xf Python-3.6.3.tar.xz
cd Python-3.6.3
./configure --enable-optimizations --prefix=/usr

Faça uma instalação alternativa.

sudo make altinstall

Nota : Instalações alternativas instalam o Python 3.6 sem substituir a versão padrão do Python. Se você substituir o Python padrão no CentOS 7, ele poderá interromper o YUMgerenciador de repositório.

Agora você poderá verificar sua versão.

python3.6 -V

Você deve ver o seguinte.

[user@vultr Python-3.6.3]$ python3.6 -V
Python 3.6.3

Instale o ambiente virtual Python usando pip.

sudo pip3.6 install virtualenv virtualenvwrapper
sudo pip3.6 install --upgrade setuptools pip 

O ambiente virtual Python é usado para criar um ambiente virtual isolado para um projeto Python. Um ambiente virtual contém seus próprios diretórios de instalação e não compartilha bibliotecas com ambientes globais e outros ambientes virtuais.

Instale o RabbitMQ

Taiga usa RabbitMQ para processar a fila de mensagens. O RabbitMQ requer que as bibliotecas do Erlang funcionem. Instale o Erlang.

sudo yum -y install erlang

Importar chave de assinatura RabbitMQ GPG.

sudo rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc

Instale o RabbitMQ.

sudo yum -y install https://dl.bintray.com/rabbitmq/rabbitmq-server-rpm/rabbitmq-server-3.6.12-1.el7.noarch.rpm

Inicie e ative o servidor RabbitMQ.

sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server

Adicione o usuário RabbitMQ e o vhost. Além disso, forneça permissão ao usuário sobre o host.

sudo rabbitmqctl add_user taiga StrongMQPassword
sudo rabbitmqctl add_vhost taiga
sudo rabbitmqctl set_permissions -p taiga taiga ".*" ".*" ".*"

Certifique-se de substituir StrongMQPasswordpor uma senha segura.

Instalar Nodejs

O Node.js. versão 7 ou posterior é necessário para compilar o frontend do Taiga. Adicione o repositório do Node.js. versão 8.

curl -sL https://rpm.nodesource.com/setup_8.x | sudo -E bash -

Instale o Node.js e o pwgenutilitário.

sudo yum install -y nodejs pwgen

pwgenserá usado posteriormente para gerar uma forte cadeia secreta. Instale o CoffeeScript, pois ele será usado para compilar arquivos Taiga gravados com a estrutura do CoffeeScript.

sudo npm install -g coffee-script gulp

Instalar o Taiga Backend

Adicione um novo usuário do sistema ao Taiga para garantir que os processos do Taiga estejam em execução como um usuário não privilegiado.

sudo useradd -s /bin/bash taiga
sudo su - taiga

Nota : A partir de agora, todos os comandos precisam ser executados como usuário não privilegiado taigaaté que você seja solicitado a voltar ao sudousuário.

Crie um novo diretório para armazenar os arquivos de log.

mkdir -p ~/logs

Clone o repositório de back-end do Taiga no GitHub e faça check-out da última ramificação estável.

git clone https://github.com/taigaio/taiga-back.git taiga-back
cd taiga-back
git checkout stable

Configure virtualenvwrapperpara usar o Python 3.6 em vez do Python padrão.

echo "VIRTUALENVWRAPPER_PYTHON='/bin/python3.6'" >> ~/.bashrc
echo "source /usr/bin/virtualenvwrapper.sh" >> ~/.bashrc

Finalmente, forneça o ~/.bashrcarquivo.

source ~/.bashrc

Agora crie um novo ambiente virtual para o Taiga usando o Python 3.6.

mkvirtualenv -p /bin/python3.6 taiga
pip3.6 install --upgrade setuptools

Instale as dependências necessárias do Python usando pip.

pip3.6 install -r requirements.txt

Preencha o banco de dados com os dados iniciais necessários.

python3.6 manage.py migrate --noinput
python3.6 manage.py loaddata initial_user
python3.6 manage.py loaddata initial_project_templates
python3.6 manage.py compilemessages
python3.6 manage.py collectstatic --noinput

Os comandos acima gravam dados no banco de dados PostgreSQL. O Taiga também envia alguns dados de demonstração ou amostra que podem ser úteis para avaliar o produto. Se você deseja instalar os dados de amostra, execute o seguinte.

python3.6 manage.py sample_data

Nota : A instalação de dados de amostra é opcional e destina-se apenas à avaliação do produto.

Antes de continuarmos a criar o arquivo de configuração para o back-end do Taiga, precisamos gerar uma sequência secreta. Essa sequência será usada para criptografar os dados da sessão.

Gere uma sequência aleatória de 64 caracteres.

pwgen -s -1 64

Você deve ver a saída como uma sequência aleatória.

(taiga) [taiga@vultr taiga-back]$ pwgen -s -1 64
CZfjWjHctPwnLZsDysWqaZcYfRCviHbI4fVRwfhpbtAHPNBtmkcegpwpYjTtEziJ

Crie um novo arquivo de configuração para o Taiga Backend.

nano ~/taiga-back/settings/local.py

Preencha o arquivo com o seguinte código.

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"

Certifique-se de substituir o nome de domínio de exemplo pelo nome real no código acima. Além disso, substitua Generated_Secret_Keypela chave secreta real e StrongMQPasswordpela senha real do usuário da fila de mensagens do Taiga. Se você possui um servidor SMTP pronto e deseja usar os recursos de envio de email imediatamente, remova o comentário das opções de email e defina os valores apropriados. Se você não tiver um servidor de correio pronto, poderá pular a configuração do recurso de email por enquanto e configurá-lo posteriormente neste arquivo de configuração.

Se você deseja habilitar o login no GitHub, crie um aplicativo no GitHub e forneça o ID do cliente da API e o segredo do cliente.

Para verificar imediatamente se o backend do Taiga pode ser iniciado, execute o servidor Django embutido.

workon taiga
python manage.py runserver

Você verá a seguinte saída se o servidor foi iniciado com êxito.

(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 25, 2017 - 07:07:28
Django version 1.10.6, using settings 'settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Para verificar se a API pode ser acessada, abra outra sessão do terminal e execute o seguinte.

curl http://127.0.0.1:8000/api/v1/

Você verá uma saída semelhante retornada pela chamada da API.

[user@vultr ~]$ curl http://127.0.0.1:8000/api/v1/
{"locales": "http://127.0.0.1:8000/api/v1/locales", "auth": "http://127.0.0.1:8000/api/v1/auth", "users": "http://127.0.0.1:8000/api/v1/users", "roles": "http://127.0.0.1:8000/api/v1/roles", "user-storage": "http://127.0.0.1:8000/api/v1/user-storage", "notify-policies": "http://127.0.0.1:8000/api/v1/notify-policies", "projects": "http://127.0.0.1:8000/api/v1/projects", "projects/(?P<resource_id>\\d+)/fans": "http://127.0.0.1:8000/api/v1/projects/(?P<resource_id>\\d+)/fans", "projects/(?P<resource_id>\\d+)/watchers": "http://127.0.0.1:8000/api/v1/projects/(?P<resource_id>\\d+)/watchers", "project-templates": "http://127.0.0.1:8000/api/v1/project-templates",

Pare o servidor de back-end do Taiga pressionando " Ctrl + C" e desative o ambiente virtual.

deactivate

Instalar front-end

O front end do Taiga é o componente do Taiga que serve a interface do usuário da Web. Clone o repositório front-end do Taiga no Github e faça check-out da última ramificação estável.

cd ~
git clone https://github.com/taigaio/taiga-front-dist.git taiga-front-dist
cd taiga-front-dist
git checkout stable

Crie um novo arquivo de configuração para o front end do Taiga.

nano ~/taiga-front-dist/dist/conf.json

Preencha o arquivo com isso.

{
    "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
}

Certifique-se de substituir o exampledomínio pelo domínio real. Você também pode alterar o idioma padrão e outros parâmetros na configuração acima.

Instalar Taiga Events

Além do front-end e back-end, também precisamos instalar os eventos do Taiga. O Taiga events é um servidor de soquete da Web e permite que o frontend do Taiga mostre alterações em tempo real em módulos como backlog, Kanban e mais. Ele usa o servidor RabbitMQ para processamento de mensagens.

Clone o repositório de eventos Taiga no Github.

cd ~
git clone https://github.com/taigaio/taiga-events.git taiga-events
cd taiga-events

Instale as dependências do Node.js. usando npm.

npm install

Crie um novo arquivo de configuração para eventos do Taiga.

nano ~/taiga-events/config.json

Preencha o arquivo com o seguinte.

{
    "url": "amqp://taiga:StrongMQPassword@localhost:5672/taiga",
    "secret": "Generated_Secret_Key",
    "webSocketServer": {
        "port": 8888
    }
}

Substitua Generated_Secret_Keypela chave secreta longa de 64 caracteres que você gerou no passado. A chave secreta deve ser exatamente a mesma que você forneceu no arquivo de configuração de back-end do Taiga. Além disso, atualize StrongMQPasswordcom a senha real para o usuário da fila de mensagens do Taiga.

Configure Circus

Circus é um gerenciador de processos para aplicativos Python. Usaremos o Circus para executar eventos e eventos de Taiga.

Volte para o sudousuário.

exit

Nota : A partir de agora você precisará executar os comandos usando o sudousuário.

Instale o Circus usando pip.

sudo pip3.6 install circus

Crie novos diretórios para armazenar as configurações do Circus.

sudo mkdir /etc/circus
sudo mkdir /etc/circus/conf.d

Crie o arquivo de configuração padrão para o Circus.

sudo nano /etc/circus/circus.ini

Preencha o arquivo com a seguinte configuração.

[circus]
check_delay = 5
endpoint = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
include = /etc/circus/conf.d/*.ini

Crie um novo arquivo de configuração do Circus para executar o back-end do Taiga.

sudo nano /etc/circus/conf.d/taiga.ini

Preencha o arquivo com o seguinte.

[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.6/site-packages

Crie uma nova configuração do Circus para executar o Taiga Events.

sudo nano /etc/circus/conf.d/taiga-events.ini

Preencha o arquivo com o seguinte.

[watcher:taiga-events]
working_dir = /home/taiga/taiga-events
cmd = /usr/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

Agora precisaremos criar um systemdarquivo de serviço para executar o Circus. O uso systemdgarantirá que o Circus seja iniciado automaticamente durante a reinicialização e as falhas.

sudo nano /etc/systemd/system/circus.service

Preencher o arquivo.

[Unit]
Description=Circus process manager
After=syslog.target network.target nss-lookup.target
[Service]
Type=simple
ExecReload=/usr/bin/circusctl reload
ExecStart=/usr/bin/circusd /etc/circus/circus.ini
Restart=always
RestartSec=5

[Install]
WantedBy=default.target

Inicie o Circus e habilite para iniciar no momento da inicialização automaticamente.

sudo systemctl start circus
sudo systemctl enable circus

Verifique o status do Circus.

circusctl status

Você verá a seguinte saída.

[user@vultr ~]$ circusctl status
taiga: active
taiga-events: active

Agora, temos o Taiga instalado e funcionando com sucesso. Antes de podermos usá-lo, precisamos expor a instalação usando qualquer servidor Web de produção.

Instale o Nginx como um proxy reverso

Usaremos o servidor da web Nginx como um proxy reverso para atender o aplicativo aos usuários. Também obteremos e instalaremos certificados SSL no Let's Encrypt.

Instale o Nginx e o Certbot. Certbot é o cliente oficial de emissão de certificados para Let's Encrypt CA.

sudo yum -y install nginx certbot

Ajuste sua configuração de firewall para permitir o padrão HTTPe as HTTPSportas através do firewall, pois o Certbot precisa fazer uma conexão HTTP para verificar a autoridade do domínio.

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

Nota : Para obter certificados da Let's Encrypt CA, você deve garantir que o domínio para o qual você deseja gerar os certificados esteja apontado para o servidor. Caso contrário, faça as alterações necessárias nos registros DNS do seu domínio e aguarde a propagação do DNS antes de fazer a solicitação de certificado novamente. O Certbot verifica a autoridade do domínio antes de fornecer os certificados.

Agora use o servidor da Web incorporado no Certbot para gerar os certificados para o seu domínio.

sudo certbot certonly --standalone -d taiga.example.com

Os certificados gerados provavelmente serão armazenados no /etc/letsencrypt/live/taiga.example.com/diretório O certificado SSL será retido como fullchain.peme a chave privada será salva como privkey.pem.

Os certificados Let's Encrypt expiram em 90 dias, portanto, é recomendável configurar a renovação automática para os certificados usando trabalhos Cron. Cron é um serviço do sistema usado para executar tarefas periódicas.

Abra o arquivo de tarefa cron.

sudo crontab -e

Adicione a seguinte linha.

0 0 * * * /usr/bin/certbot renew --quiet

O trabalho cron acima será executado diariamente à meia-noite. Se o certificado estiver vencido, ele renovará automaticamente os certificados.

Gere um Diffie-Hellmanparâmetro forte . Ele fornece uma camada extra de segurança para troca de dados entre o host e o servidor.

sudo openssl dhparam -out /etc/ssl/dhparam.pem 2048 

Crie um novo bloco de servidor Nginx para atender ao frontend do Taiga.

sudo nano /etc/nginx/conf.d/taiga.conf

Preencha o arquivo com o seguinte.

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;

}

Certifique-se de alterar o nome do domínio e o caminho para os certificados SSL.

Agora você pode reiniciar o servidor da web Nginx e permitir que ele inicie automaticamente na inicialização.

sudo systemctl restart nginx
sudo systemctl status nginx

Por fim, corrija a propriedade e a permissão nos arquivos Taiga.

sudo chown -R taiga:taiga /home/taiga/
sudo chmod o+x /home/taiga/

Conclusão

Agora você pode acessar a instalação do Taiga acessando https://taiga.example.com. Faça login usando a conta de administrador inicial com nome de usuário " admin" e senha " 123123". Sua instalação está pronta para uso em produção. Comece criando um novo projeto ou avaliando o produto. Se você já estiver gerenciando um projeto no Github, Jira ou Trello, poderá importar facilmente os projetos para o Taiga usando os importadores .



Leave a Comment

A IA pode lutar contra o aumento do número de ataques de ransomware

A IA pode lutar contra o aumento do número de ataques de ransomware

Os ataques de ransomware estão aumentando, mas a IA pode ajudar a lidar com os vírus de computador mais recentes? AI é a resposta? Leia aqui para saber se é AI boone ou bane

ReactOS: Este é o futuro do Windows?

ReactOS: Este é o futuro do Windows?

ReactOS, um sistema operacional de código aberto e gratuito está aqui com a versão mais recente. Será que ela pode atender às necessidades dos usuários modernos do Windows e derrubar a Microsoft? Vamos descobrir mais sobre esse estilo antigo, mas uma experiência de sistema operacional mais recente.

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

O Whatsapp finalmente lançou o aplicativo Desktop para usuários de Mac e Windows. Agora você pode acessar o Whatsapp do Windows ou Mac facilmente. Disponível para Windows 8+ e Mac OS 10.9+

Como a IA pode levar a automação de processos ao próximo nível?

Como a IA pode levar a automação de processos ao próximo nível?

Leia isto para saber como a Inteligência Artificial está se tornando popular entre as empresas de pequena escala e como está aumentando as probabilidades de fazê-las crescer e dar vantagem a seus concorrentes.

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

Recentemente, a Apple lançou o macOS Catalina 10.15.4, uma atualização suplementar para corrigir problemas, mas parece que a atualização está causando mais problemas, levando ao bloqueio de máquinas mac. Leia este artigo para saber mais

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

O que é um sistema de arquivos de registro no diário e como ele funciona?

O que é um sistema de arquivos de registro no diário e como ele funciona?

Nosso computador armazena todos os dados de uma maneira organizada conhecida como sistema de arquivos Journaling. É um método eficiente que permite ao computador pesquisar e exibir arquivos assim que você clicar em search.https: //wethegeek.com/? P = 94116 & preview = true

Singularidade tecnológica: um futuro distante da civilização humana?

Singularidade tecnológica: um futuro distante da civilização humana?

À medida que a ciência evolui em um ritmo rápido, assumindo muitos de nossos esforços, os riscos de nos sujeitarmos a uma singularidade inexplicável também aumentam. Leia, o que a singularidade pode significar para nós.

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

O impacto da inteligência artificial na saúde 2021

O impacto da inteligência artificial na saúde 2021

A IA na área da saúde deu grandes saltos nas últimas décadas. Portanto, o futuro da IA ​​na área da saúde ainda está crescendo dia a dia.