Kako namestiti orodje za upravljanje projektov Taiga na CentOS 7

Taiga je brezplačna in odprtokodna aplikacija za vodenje projektov. Za razliko od drugih orodij za vodenje projektov, Taiga uporablja inkrementalni agilni pristop za upravljanje razvoja projekta. Taiga je zelo zmogljiva in popolnoma prilagodljiva aplikacija. Zadnja stran Taige je napisana v Pythonu z uporabo ogrodja Django. Frontend je napisan v JavaScriptu z uporabo okvirjev CoffeeScript in AngularJS. Taiga vključuje funkcije, kot so sodelovanje pri projektih, tabla Kanban, sledenje napakam, poročanje, sledenje časa, zaostanki, wiki in še več.

Predpogoji

  • Primerek strežnika Vultr CentOS 7 z vsaj 1 GB RAM-a.
  • Uporabnik sudo .

V tej vadnici bomo uporabili taiga.example.comime domene, ki je usmerjeno na strežnik. Zamenjajte vse pojavitve taiga.example.comz vašim dejanskim imenom domene.

Posodobite svoj osnovni sistem z uporabo priročnika Kako posodobiti CentOS 7 . Ko je vaš sistem posodobljen, nadaljujte z namestitvijo PostgreSQL.

Namestite PostgreSQL

PostgreSQL je objektno-relacijski sistem baz podatkov, znan po svoji stabilnosti in hitrosti. Taiga uporablja PostgreSQL za shranjevanje svoje baze podatkov. Dodajte repozitorij PostgreSQL v sistem.

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

Namestite strežnik baze podatkov PostgreSQL.

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

Inicializirajte bazo podatkov.

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

Zaženite strežnik PostgreSQL in omogočite, da se samodejno zažene ob zagonu.

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

Spremenite geslo za privzetega uporabnika PostgreSQL.

sudo passwd postgres

Prijavite se kot uporabnik PostgreSQL.

sudo su - postgres

Ustvarite novega uporabnika PostgreSQL za Taigo.

createuser taiga 

PostgreSQL ponuja psqllupino za izvajanje poizvedb v bazi podatkov. Preklopite na lupino PostgreSQL.

psql

Nastavite geslo za novoustvarjenega uporabnika za bazo podatkov Taiga.

ALTER USER taiga WITH ENCRYPTED password 'DBPassword';

Zamenjajte DBPasswordz varnim geslom. Ustvarite novo bazo podatkov za namestitev Taiga.

CREATE DATABASE taiga OWNER taiga;

Izstopite iz psqllupine.

\q

Preklopite na sudouporabnika.

exit

Namestite Python 3

Python 2.7 je vnaprej nameščen na strežniku CentOS 7, vendar Taiga zahteva Python različico 3.4 ali novejšo.

Python različico 3.6 bomo namestili iz vira. Namestite potrebna orodja za gradnjo in prevajalnik.

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++

Prenesite izvorno kodo Python.

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

Ekstrahirajte in konfigurirajte namestitev Pythona.

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

Naredite alternativno namestitev.

sudo make altinstall

Opomba : Alternativne namestitve namestijo Python 3.6 brez zamenjave privzete različice Pythona. Če zamenjate privzeti Python v CentOS 7, lahko pokvari YUMupravitelja skladišča.

Zdaj boste lahko preverili njegovo različico.

python3.6 -V

Videti bi morali naslednje.

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

Namestite navidezno okolje Python z uporabo pip.

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

Navidezno okolje Python se uporablja za ustvarjanje izoliranega virtualnega okolja za projekt Python. Navidezno okolje vsebuje lastne namestitvene imenike in ne deli knjižnic z globalnimi in drugimi navideznimi okolji.

Namestite RabbitMQ

Taiga uporablja RabbitMQ za obdelavo čakalne vrste sporočil. RabbitMQ zahteva, da knjižnice Erlang delujejo. Namesti Erlang.

sudo yum -y install erlang

Uvozi podpisni ključ RabbitMQ GPG.

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

Namestite RabbitMQ.

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

Zaženite in omogočite strežnik RabbitMQ.

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

Dodajte uporabnika RabbitMQ in vhost. Prav tako zagotovite dovoljenje uporabniku prek gostitelja.

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

Ne pozabite zamenjati StrongMQPasswordz varnim geslom.

Namestite Nodejs

Za prevajanje sprednjega dela Taige je potrebna različica Node.js 7 ali novejša. Dodajte skladišče Node.js različice 8.

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

Namestite Node.js in pwgenpripomoček.

sudo yum install -y nodejs pwgen

pwgenbo uporabljen kasneje za ustvarjanje močnega skrivnega niza. Namestite CoffeeScript, saj bo uporabljen za prevajanje datotek Taiga, napisanih z okvirjem CoffeeScript.

sudo npm install -g coffee-script gulp

Namestite Taiga Backend

Dodajte novega uporabnika sistema za Taigo, da zagotovite, da se procesi Taiga izvajajo kot neprivilegirani uporabnik.

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

Opomba : Od zdaj naprej je treba vse ukaze izvajati kot neprivilegirani uporabnik, taigadokler vas ne pozove, da preklopite nazaj na sudouporabnika.

Ustvarite nov imenik za shranjevanje dnevniških datotek.

mkdir -p ~/logs

Klonirajte zaledni repozitorij Taiga iz GitHuba in preverite najnovejšo stabilno vejo.

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

Konfigurirajte virtualenvwrapperza uporabo Pythona 3.6 namesto privzetega Pythona.

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

Končno, izvor ~/.bashrcdatoteke.

source ~/.bashrc

Zdaj ustvarite novo virtualno okolje za Taigo s Pythonom 3.6.

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

Namestite zahtevane odvisnosti Python z uporabo pip.

pip3.6 install -r requirements.txt

Bazo podatkov napolnite s potrebnimi začetnimi podatki.

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

Zgornji ukazi bodo zapisali podatke v bazo podatkov PostgreSQL. Taiga pošilja tudi nekaj demo ali vzorčnih podatkov, ki so lahko uporabni za oceno izdelka. Če želite namestiti vzorčne podatke, zaženite naslednje.

python3.6 manage.py sample_data

Opomba : Namestitev vzorčnih podatkov je neobvezna in je namenjena samo oceni izdelka.

Preden nadaljujemo z ustvarjanjem konfiguracijske datoteke za backend Taiga, moramo ustvariti skrivni niz. Ta niz bo uporabljen za šifriranje podatkov seje.

Ustvari naključni niz 64 znakov.

pwgen -s -1 64

Izhod bi morali videti kot naključni niz.

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

Ustvarite novo konfiguracijsko datoteko za Taiga Backend.

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

Napolnite datoteko z naslednjo kodo.

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"

Make sure to replace the example domain name with the actual one in the above code. Also, replace Generated_Secret_Key with the actual secret key and StrongMQPassword with the actual password for the Taiga message queue user. If you have an SMTP server ready and you wish to use email sending features immediately, you can uncomment the email options and set the appropriate values. If you do not have a mail server ready, you can skip setting up the email feature for now and set it later in this configuration file.

If you wish to enable GitHub login, create an application in GitHub and provide the API client ID and client secret.

To immediately check if the Taiga backend can be started, run the built-in Django server.

workon taiga
python manage.py runserver

You will see the following output if the server has started successfully.

(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.

To verify if the API can be accessed, open another terminal session and run the following.

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

You will see a similar output returned by the API call.

[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",

Stop the Taiga backend server by pressing "Ctrl + C" and deactivate the virtual environment.

deactivate

Install Frontend

The Taiga frontend is the component of Taiga which serves the Web user interface. Clone the Taiga frontend repository from Github and checkout the latest stable branch.

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

Create a new configuration file for the Taiga frontend.

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

Populate the file with this.

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

Make sure to replace the example domain with the actual domain. You can also change the default language and other parameters in the above configuration.

Install Taiga Events

Apart from the frontend and backend, we also need to install Taiga events. Taiga events is a web socket server, and it enables the Taiga frontend to show real-time changes in modules such as backlog, Kanban and more. It uses the RabbitMQ server for message processing.

Clone the Taiga events repository from Github.

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

Install the Node.js dependencies using npm.

npm install

Create a new configuration file for Taiga events.

nano ~/taiga-events/config.json

Populate the file with the following.

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

Replace Generated_Secret_Key with the actual 64 characters long secret key which you have generated in the past. The secret key should be exactly the same as the key you provided in the Taiga backend configuration file. Also, update the StrongMQPassword with the actual password for Taiga message queue user.

Configure Circus

Circus is a process manager for Python applications. We will use Circus to run Taiga backend and events.

Switch back to the sudo user.

exit

Note: From now you will need to run the commands using sudo user.

Install Circus using pip.

sudo pip3.6 install circus

Create new directories to store Circus configurations.

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

Create the default configuration file for Circus.

sudo nano /etc/circus/circus.ini

Populate the file with the following configuration.

[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

Create a new Circus configuration file for running the Taiga backend.

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

Populate the file with the following.

[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

Create a new Circus configuration for running Taiga Events.

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

Populate the file with the following.

[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

Now we will need to create a systemd service file to run Circus. Using systemd will ensure that Circus is automatically started during reboot and failures.

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

Populate the file.

[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

Zaženite Circus in omogočite samodejni zagon ob zagonu.

sudo systemctl start circus
sudo systemctl enable circus

Preverite stanje cirkusa.

circusctl status

Videli boste naslednji izhod.

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

Zdaj imamo Taigo uspešno nameščeno in zagnano. Preden ga lahko uporabimo, moramo izpostaviti namestitev s katerim koli produkcijskim spletnim strežnikom.

Namestite Nginx kot povratni proxy

Spletni strežnik Nginx bomo uporabili kot povratni proxy za serviranje aplikacije uporabnikom. Pridobili in namestili bomo tudi SSL certifikate podjetja Let's Encrypt.

Namestite Nginx in Certbot. Certbot je uradni odjemalec, ki izdaja potrdila za Let's Encrypt CA.

sudo yum -y install nginx certbot

Prilagodite nastavitev požarnega zidu, da omogočite standard HTTPin HTTPSvrata skozi požarni zid, saj mora Certbot vzpostaviti povezavo HTTP za preverjanje pooblastila domene.

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

Opomba : Če želite pridobiti potrdila od Let's Encrypt CA, morate zagotoviti, da je domena, za katero želite generirati potrdila, usmerjena proti strežniku. Če ne, naredite potrebne spremembe v zapisih DNS vaše domene in počakajte, da se DNS razširi, preden znova pošljete zahtevo za potrdilo. Certbot preveri avtoriteto domene, preden zagotovi potrdila.

Zdaj uporabite vgrajeni spletni strežnik v Certbot, da ustvarite potrdila za vašo domeno.

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

Ustvarjena potrdila bodo verjetno shranjena v /etc/letsencrypt/live/taiga.example.com/imeniku. Potrdilo SSL bo ohranjeno kot fullchain.pem, zasebni ključ pa bo shranjen kot privkey.pem.

Potrdila Let's Encrypt potečejo v 90 dneh, zato je priporočljivo, da nastavite samodejno podaljšanje za potrdila s pomočjo opravil Cron. Cron je sistemska storitev, ki se uporablja za izvajanje občasnih opravil.

Odprite datoteko opravila cron.

sudo crontab -e

Dodajte naslednjo vrstico.

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

Zgornje opravilo cron se bo izvajalo vsak dan ob polnoči. Če potrdilo poteče, bo potrdila samodejno podaljšana.

Ustvari močan Diffie-Hellmanparameter. Zagotavlja dodatno plast varnosti za izmenjavo podatkov med gostiteljem in strežnikom.

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

Ustvarite nov blok strežnika Nginx, ki bo služil vmesniku Taiga.

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

Napolnite datoteko z naslednjim.

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;

}

Ne pozabite spremeniti imena domene in poti do potrdil SSL.

Zdaj lahko znova zaženete spletni strežnik Nginx in omogočite, da se samodejno zažene ob zagonu.

sudo systemctl restart nginx
sudo systemctl status nginx

Končno popravite lastništvo in dovoljenje za datoteke Taiga.

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

Zaključek

Zdaj lahko dostopate do namestitve Taiga tako, da obiščete https://taiga.example.com. Prijavite se z začetnim skrbniškim računom z uporabniškim imenom " admin" in geslom " 123123". Vaša namestitev je zdaj pripravljena za uporabo v proizvodnji. Začnite z ustvarjanjem novega projekta ali oceno izdelka. Če že upravljate projekt na Githubu, Jira ali Trello, lahko projekte preprosto uvozite v Taigo z uvozniki .


Kako namestiti osTicket na FreeBSD 12

Kako namestiti osTicket na FreeBSD 12

Uporaba drugega sistema? osTicket je odprtokodni sistem za izdajo vstopnic za podporo strankam. Izvorna koda osTicket je javno gostovana na Githubu. V tej vadnici

Kako namestiti OpenMeetings na CentOS 7

Kako namestiti OpenMeetings na CentOS 7

Uporaba drugega sistema? Apache OpenMeetings je odprtokodna aplikacija za spletne konference. Napisana je v Javi in ​​podpira več strežnikov baz podatkov. jaz

Namestitev Microweberja v Debian 9

Namestitev Microweberja v Debian 9

Uporaba drugega sistema? Microweber je odprtokodna povleci in spusti CMS in spletna trgovina. Izvorna koda Microweber gostuje na GitHubu. Ta vodnik vam bo pokazal

Namestitev Akauntinga na Fedora 28

Namestitev Akauntinga na Fedora 28

Uporaba drugega sistema? Akaunting je brezplačna, odprtokodna in spletna računovodska programska oprema, zasnovana za mala podjetja in samostojne delavce. Zgrajena je pametno

Kako namestiti InvoicePlane na Fedora 28

Kako namestiti InvoicePlane na Fedora 28

Uporaba drugega sistema? InvoicePlane je brezplačna in odprtokodna aplikacija za izdajanje računov. Njegovo izvorno kodo lahko najdete v tem repozitoriju Github. Ta vodnik

Kako namestiti Open Web Analytics na CentOS 7

Kako namestiti Open Web Analytics na CentOS 7

Uporaba drugega sistema? Open Web Analytics (OWA) je odprtokodni program za spletno analitiko, ki ga lahko uporabite za sledenje in analizo, kako ljudje uporabljajo vaše spletno mesto.

Namestitev Microweberja na FreeBSD 12

Namestitev Microweberja na FreeBSD 12

Uporaba drugega sistema? Uvod Microweber je odprtokodna povleci in spusti CMS in spletna trgovina. Izvorna koda Microweber gostuje na GitHubu. Ta vodnik

Kako namestiti Matomo Analytics na Fedora 28

Kako namestiti Matomo Analytics na Fedora 28

Uporaba drugega sistema? Matomo (prej Piwik) je odprtokodna analitična platforma, odprta alternativa Google Analytics. Vir Matomo gostuje o

Kako namestiti Zammad 2.0 na CentOS 7

Kako namestiti Zammad 2.0 na CentOS 7

Uporaba drugega sistema? Zammad je odprtokodni sistem za pomoč uporabnikom/prodaja vstopnic, zasnovan za ekipe za podporo strankam. Z Zammadom, storitev za stranke

Kako namestiti X-Cart 5 na Ubuntu 18.04 LTS

Kako namestiti X-Cart 5 na Ubuntu 18.04 LTS

Uporaba drugega sistema? X-Cart je izjemno prilagodljiva odprtokodna platforma za e-trgovino s številnimi funkcijami in integracijami. Izvorna koda X-Cart je hoste

Kako namestiti Matomo Analytics na CentOS 7

Kako namestiti Matomo Analytics na CentOS 7

Uporaba drugega sistema? Matomo (prej Piwik) je odprtokodna analitična platforma, odprta alternativa Google Analytics. Vir Matomo gostuje o

Kako namestiti orodje za upravljanje projektov Taiga na CentOS 7

Kako namestiti orodje za upravljanje projektov Taiga na CentOS 7

Uporaba drugega sistema? Taiga je brezplačna in odprtokodna aplikacija za vodenje projektov. Za razliko od drugih orodij za vodenje projektov, Taiga uporablja inkremente

Kako namestiti Osclass na Fedora 28

Kako namestiti Osclass na Fedora 28

Uporaba drugega sistema? Osclass je odprtokodni projekt, ki vam omogoča preprosto ustvarjanje spletnega mesta za male oglase brez kakršnega koli tehničnega znanja. Njegov vir

Kako namestiti X-Cart 5 na FreeBSD 12

Kako namestiti X-Cart 5 na FreeBSD 12

Uporaba drugega sistema? X-Cart je izjemno prilagodljiva odprtokodna platforma za e-trgovino s številnimi funkcijami in integracijami. Izvorna koda X-Cart je hoste

Kako namestiti Dolibarr na Fedora 28

Kako namestiti Dolibarr na Fedora 28

Uporaba drugega sistema? Dolibarr je odprtokodno načrtovanje virov podjetja (ERP) in upravljanje odnosov s strankami (CRM) za podjetja. Dolibar

Namestitev Akauntinga na CentOS 7

Namestitev Akauntinga na CentOS 7

Uporaba drugega sistema? Akaunting je brezplačna, odprtokodna in spletna računovodska programska oprema, zasnovana za mala podjetja in samostojne delavce. Zgrajena je pametno

Kako namestiti Attendize na Fedora 29

Kako namestiti Attendize na Fedora 29

Uporaba drugega sistema? Uvod Attendize je odprtokodna platforma za prodajo vstopnic in upravljanje dogodkov, ki temelji na Laravel PHP Framework. Attendiz

Kako namestiti Attendize na CentOS 7

Kako namestiti Attendize na CentOS 7

Uporaba drugega sistema? Uvod Attendize je odprtokodna platforma za prodajo vstopnic in upravljanje dogodkov, ki temelji na Laravel PHP Framework. Attendiz

Kako namestiti Sentrifugo HRM na CentOS 7

Kako namestiti Sentrifugo HRM na CentOS 7

Uporaba drugega sistema? Sentrifugo HRM je brezplačna in odprtokodna aplikacija za upravljanje človeških virov. Je bogat s funkcijami in ga je enostavno konfigurirati

Namestite Pydio 7 na CentOS 7

Namestite Pydio 7 na CentOS 7

Pydio je alternativa programski opremi, kot sta ownCloud in NextCloud. Pydio je tudi odprtokoden, kar pomeni, da ne stane nič za uporabo in ga upravlja a

Vzpon strojev: aplikacije AI v resničnem svetu

Vzpon strojev: aplikacije AI v resničnem svetu

Umetna inteligenca ni v prihodnosti, tukaj je prav v sedanjosti. V tem blogu preberite, kako so aplikacije umetne inteligence vplivale na različne sektorje.

DDOS napadi: kratek pregled

DDOS napadi: kratek pregled

Ste tudi vi žrtev DDOS napadov in ste zmedeni glede načinov preprečevanja? Preberite ta članek, če želite rešiti svoja vprašanja.

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Morda ste že slišali, da hekerji zaslužijo veliko denarja, a ste se kdaj vprašali, kako zaslužijo takšen denar? razpravljajmo.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Ali želite videti revolucionarne izume Googla in kako so ti izumi danes spremenili življenje vsakega človeka? Nato preberite v blogu in si oglejte Googlove izume.

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Koncept samovozečih avtomobilov, ki zapeljejo na ceste s pomočjo umetne inteligence, so sanje, ki jih imamo že nekaj časa. A kljub številnim obljubam jih ni nikjer. Preberite ta blog, če želite izvedeti več…

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Ker se znanost hitro razvija in prevzame veliko naših prizadevanj, se povečuje tudi tveganje, da se podvržemo nerazložljivi singularnosti. Preberite, kaj bi za nas lahko pomenila singularnost.

Razvoj shranjevanja podatkov – Infografika

Razvoj shranjevanja podatkov – Infografika

Metode shranjevanja podatkov so se lahko razvijale od rojstva podatkov. Ta blog pokriva razvoj shranjevanja podatkov na podlagi infografike.

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Preberite blog, če želite na najpreprostejši način spoznati različne plasti v arhitekturi velikih podatkov in njihove funkcionalnosti.

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

V tem digitalno vodenem svetu so pametne naprave za dom postale ključni del življenja. Tukaj je nekaj neverjetnih prednosti pametnih naprav za dom o tem, kako naredijo naše življenje vredno življenja in poenostavijo.

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Pred kratkim je Apple izdal macOS Catalina 10.15.4 dopolnilno posodobitev za odpravo težav, vendar se zdi, da posodobitev povzroča več težav, ki vodijo do opečenja računalnikov Mac. Preberite ta članek, če želite izvedeti več