CentOS 7에 Taiga 프로젝트 관리 도구를 설치하는 방법

Taiga는 프로젝트 관리를위한 무료 오픈 소스 응용 프로그램입니다. 다른 프로젝트 관리 도구와 달리 Taiga는 점진적인 민첩한 접근 방식을 사용하여 프로젝트 개발을 관리합니다. Taiga는 매우 강력하고 완전히 사용자 정의 가능한 응용 프로그램입니다. Taiga의 백엔드는 Django 프레임 워크를 사용하여 Python으로 작성되었습니다. 프론트 엔드는 CoffeeScript 및 AngularJS 프레임 워크를 사용하여 JavaScript로 작성됩니다. Taiga에는 프로젝트 협업, Kanban 보드, 버그 추적,보고, 시간 추적, 백 로그, 위키 등의 기능이 포함되어 있습니다.

전제 조건

이 학습서에서는 taiga.example.com서버를 가리키는 도메인 이름으로 사용 합니다. 모든 발생을 taiga.example.com실제 도메인 이름으로 바꾸십시오.

CentOS 7 업데이트 방법 안내서를 사용하여 기본 시스템을 업데이트하십시오 . 시스템이 업데이트되면 PostgreSQL 설치를 진행하십시오.

PostgreSQL 설치

PostgreSQL은 안정성과 속도로 유명한 객체 관계형 데이터베이스 시스템입니다. Taiga는 PostgreSQL을 사용하여 데이터베이스를 저장합니다. 시스템에 PostgreSQL 저장소를 추가하십시오.

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

PostgreSQL 데이터베이스 서버를 설치하십시오.

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

데이터베이스를 초기화하십시오.

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

PostgreSQL 서버를 시작하고 부팅시 자동으로 시작되도록합니다.

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

기본 PostgreSQL 사용자의 비밀번호를 변경하십시오.

sudo passwd postgres

PostgreSQL 사용자로 로그인하십시오.

sudo su - postgres

Taiga에 대한 새 PostgreSQL 사용자를 작성하십시오.

createuser taiga 

PostgreSQL은 psql데이터베이스에서 쿼리를 실행하기 위한 셸을 제공 합니다. PostgreSQL 셸로 전환하십시오.

psql

Taiga 데이터베이스에 대해 새로 작성된 사용자의 비밀번호를 설정하십시오.

ALTER USER taiga WITH ENCRYPTED password 'DBPassword';

DBPassword안전한 비밀번호로 교체하십시오 . Taiga 설치를위한 새 데이터베이스를 작성하십시오.

CREATE DATABASE taiga OWNER taiga;

psql쉘 에서 나갑니다.

\q

sudo사용자로 전환하십시오 .

exit

파이썬 3 설치

Python 2.7은 CentOS 7 서버에 사전 설치되어 제공되지만 Taiga에는 Python 버전 3.4 이상이 필요합니다.

소스에서 Python 버전 3.6을 설치합니다. 필요한 빌드 도구 및 컴파일러를 설치하십시오.

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

Python 소스 코드를 다운로드하십시오.

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

Python 설치를 추출하고 구성하십시오.

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

대체 설치를하십시오.

sudo make altinstall

참고 : 대체 설치는 기본 버전의 Python을 바꾸지 않고 Python 3.6을 설치합니다. CentOS 7에서 기본 Python을 바꾸면 YUM리포지토리 관리자 가 손상 될 수 있습니다 .

이제 버전을 확인할 수 있습니다.

python3.6 -V

다음을 볼 수 있습니다.

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

를 사용하여 Python Virtual Environment를 설치하십시오 pip.

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

Python 가상 환경은 Python 프로젝트를위한 격리 된 가상 환경을 만드는 데 사용됩니다. 가상 환경에는 고유 한 설치 디렉토리가 있으며 전역 및 기타 가상 환경과 라이브러리를 공유하지 않습니다.

RabbitMQ 설치

Taiga는 RabbitMQ를 사용하여 메시지 큐를 처리합니다. RabbitMQ를 사용하려면 Erlang 라이브러리가 작동해야합니다. Erlang을 설치하십시오.

sudo yum -y install erlang

RabbitMQ GPG 서명 키를 가져옵니다.

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

RabbitMQ를 설치하십시오.

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

RabbitMQ 서버를 시작하고 활성화하십시오.

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

RabbitMQ 사용자 및 vhost를 추가하십시오. 또한 호스트를 통해 사용자에게 권한을 제공하십시오.

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

StrongMQPassword안전한 비밀번호 로 교체하십시오 .

Nodejs 설치

Taiga의 프론트 엔드를 컴파일하려면 Node.js 버전 7 이상이 필요합니다. Node.js 버전 8 저장소를 추가하십시오.

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

Node.js와 pwgen유틸리티를 설치하십시오 .

sudo yum install -y nodejs pwgen

pwgen나중에 강력한 비밀 문자열을 생성하는 데 사용됩니다. CoffeeScript 프레임 워크로 작성된 Taiga 파일을 컴파일하는 데 사용되는 CoffeeScript를 설치하십시오.

sudo npm install -g coffee-script gulp

Taiga 백엔드 설치

Taiga 프로세스가 권한이없는 사용자로 실행되도록 Taiga의 새 시스템 사용자를 추가하십시오.

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

참고 : 이제부터는 사용자 taiga로 다시 전환하라는 메시지가 표시 될 때까지 모든 명령을 권한이없는 사용자로 실행해야합니다 sudo.

로그 파일을 저장할 새 디렉토리를 작성하십시오.

mkdir -p ~/logs

GitHub에서 Taiga 백엔드 저장소를 복제하고 안정적인 최신 분기를 체크 아웃하십시오.

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

virtualenvwrapper기본 Python 대신 Python 3.6을 사용하도록 구성 하십시오.

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

마지막으로 ~/.bashrc파일을 소싱 하십시오.

source ~/.bashrc

이제 Python 3.6을 사용하여 Taiga를위한 새로운 가상 환경을 만드십시오.

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

를 사용하여 필요한 Python 종속성을 설치하십시오 pip.

pip3.6 install -r requirements.txt

필요한 초기 데이터로 데이터베이스를 채우십시오.

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

위의 명령은 PostgreSQL 데이터베이스에 데이터를 씁니다. Taiga는 또한 제품 평가에 유용한 데모 또는 샘플 데이터도 제공합니다. 샘플 데이터를 설치하려면 다음을 실행하십시오.

python3.6 manage.py sample_data

참고 : 샘플 데이터 설치는 선택 사항이며 제품을 평가하기위한 것입니다.

Taiga 백엔드의 구성 파일을 작성하기 전에 비밀 문자열을 생성해야합니다. 이 문자열은 세션 데이터를 암호화하는 데 사용됩니다.

64 자의 임의 문자열을 생성하십시오.

pwgen -s -1 64

출력을 임의의 문자열로보아야합니다.

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

Taiga 백엔드에 대한 새 구성 파일을 작성하십시오.

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

다음 코드로 파일을 채우십시오.

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"

위의 코드에서 예제 도메인 이름을 실제 이름으로 바꾸십시오. 또한 Generated_Secret_Key실제 비밀 키와 StrongMQPasswordTaiga 메시지 큐 사용자의 실제 비밀번호로 바꾸십시오 . SMTP 서버가 준비되어 있고 이메일 전송 기능을 즉시 사용하려면 이메일 옵션의 주석을 해제하고 적절한 값을 설정하십시오. 메일 서버가 준비되지 않은 경우 지금 이메일 기능 설정을 건너 뛰고이 구성 파일에서 나중에 설정할 수 있습니다.

GitHub 로그인을 활성화하려면 GitHub에서 애플리케이션을 생성하고 API 클라이언트 ID 및 클라이언트 시크릿을 제공하십시오.

Taiga 백엔드를 시작할 수 있는지 즉시 확인하려면 내장 된 Django 서버를 실행하십시오.

workon taiga
python manage.py runserver

서버가 성공적으로 시작된 경우 다음 출력이 표시됩니다.

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

API에 액세스 할 수 있는지 확인하려면 다른 터미널 세션을 열고 다음을 실행하십시오.

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

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

" Ctrl + C" 를 눌러 Taiga 백엔드 서버를 중지하고 가상 환경을 비활성화하십시오.

deactivate

프론트 엔드 설치

Taiga 프론트 엔드는 웹 사용자 인터페이스를 제공하는 Taiga의 구성 요소입니다. Github에서 Taiga 프론트 엔드 저장소를 복제하고 안정적인 최신 분기를 체크 아웃하십시오.

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

Taiga 프론트 엔드에 대한 새 구성 파일을 작성하십시오.

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

이것으로 파일을 채 웁니다.

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

example도메인을 실제 도메인 으로 교체하십시오 . 위 구성에서 기본 언어 및 기타 매개 변수를 변경할 수도 있습니다.

타이가 이벤트 설치

프론트 엔드 및 백엔드 외에도 Taiga 이벤트도 설치해야합니다. Taiga 이벤트는 웹 소켓 서버이며, Taiga 프론트 엔드가 백 로그, Kanban 등과 같은 모듈의 실시간 변경 사항을 표시 할 수 있습니다. 메시지 처리에 RabbitMQ 서버를 사용합니다.

Github에서 Taiga 이벤트 저장소를 복제하십시오.

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

를 사용하여 Node.js 종속성을 설치하십시오 npm.

npm install

Taiga 이벤트에 대한 새 구성 파일을 작성하십시오.

nano ~/taiga-events/config.json

다음을 사용하여 파일을 채우십시오.

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

Generated_Secret_Key과거에 생성 한 실제 64 자 길이의 비밀 키로 바꿉니다 . 비밀 키는 Taiga 백엔드 구성 파일에서 제공 한 키와 정확히 동일해야합니다. 또한 StrongMQPasswordTaiga 메시지 큐 사용자의 실제 비밀번호로를 업데이트하십시오 .

서커스 구성

서커스는 Python 응용 프로그램의 프로세스 관리자입니다. 우리는 서커스를 사용하여 타이가 백엔드와 이벤트를 운영 할 것입니다.

sudo사용자 에게 다시 전환하십시오 .

exit

참고 : 이제부터는 sudouser를 사용하여 명령을 실행해야합니다 .

을 사용하여 서커스를 설치하십시오 pip.

sudo pip3.6 install circus

서커스 구성을 저장할 새 디렉토리를 만듭니다.

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

서커스의 기본 구성 파일을 만듭니다.

sudo nano /etc/circus/circus.ini

다음 구성으로 파일을 채우십시오.

[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

Taiga 백엔드를 실행하기위한 새 서커스 구성 파일을 작성하십시오.

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

다음을 사용하여 파일을 채우십시오.

[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

Taiga Events를 실행하기위한 새로운 서커스 구성을 만듭니다.

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

다음을 사용하여 파일을 채우십시오.

[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

이제 systemd서커스를 실행 하기 위해 서비스 파일을 만들어야합니다 . 를 사용 systemd하면 재부팅 및 실패시 서커스가 자동으로 시작됩니다.

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

파일을 채 웁니다.

[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

서커스를 시작하고 부팅시 자동으로 시작되도록합니다.

sudo systemctl start circus
sudo systemctl enable circus

서커스의 상태를 확인하십시오.

circusctl status

다음과 같은 출력이 표시됩니다.

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

이제 Taiga가 성공적으로 설치 및 실행되었습니다. 사용하려면 프로덕션 웹 서버를 사용하여 설치를 공개해야합니다.

리버스 프록시로 Nginx 설치

Nginx 웹 서버를 리버스 프록시로 사용하여 애플리케이션을 사용자에게 제공합니다. 또한 Let 's Encrypt에서 SSL 인증서를 얻어 설치합니다.

Nginx 및 Certbot을 설치하십시오. Certbot은 Let 's Encrypt CA의 공식 인증서 발급 클라이언트입니다.

sudo yum -y install nginx certbot

Certbot이 도메인 권한을 확인하기 위해 HTTP 연결을 만들어야하므로 방화벽을 통한 표준 HTTPHTTPS포트 를 허용하도록 방화벽 설정을 조정하십시오 .

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

참고 : Let 's Encrypt CA에서 인증서를 얻으려면 인증서를 생성하려는 도메인이 서버를 가리켜 야합니다. 그렇지 않은 경우 도메인의 DNS 레코드를 필요한대로 변경하고 인증서가 다시 요청되기 전에 DNS가 전파 될 때까지 기다리십시오. Certbot은 인증서를 제공하기 전에 도메인 권한을 확인합니다.

이제 Certbot의 내장 웹 서버를 사용하여 도메인의 인증서를 생성하십시오.

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

생성 된 인증서는 /etc/letsencrypt/live/taiga.example.com/디렉토리에 저장 될 수 있습니다 . SSL 인증서는로 유지되고 fullchain.pem개인 키는로 저장됩니다 privkey.pem.

인증서 암호화는 90 일 후에 만료되므로 Cron 작업을 사용하여 인증서에 대한 자동 갱신을 설정하는 것이 좋습니다. Cron은 정기적 인 작업을 실행하는 데 사용되는 시스템 서비스입니다.

크론 작업 파일을여십시오.

sudo crontab -e

다음 줄을 추가하십시오.

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

위의 cron 작업은 매일 자정에 실행됩니다. 인증서가 만료 예정인 경우 인증서가 자동으로 갱신됩니다.

강력한 Diffie-Hellman매개 변수를 생성하십시오 . 호스트와 서버 간의 데이터 교환을위한 추가 보안 계층을 제공합니다.

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

Taiga 프론트 엔드에 서비스 할 새 Nginx 서버 블록을 작성하십시오.

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

다음을 사용하여 파일을 채우십시오.

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;

}

도메인 이름과 SSL 인증서 경로를 변경하십시오.

이제 Nginx 웹 서버를 다시 시작하고 부팅시 자동으로 시작되도록 할 수 있습니다.

sudo systemctl restart nginx
sudo systemctl status nginx

마지막으로 Taiga 파일에 대한 소유권과 권한을 수정하십시오.

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

결론

로 이동하여 Taiga 설치에 액세스 할 수 있습니다 https://taiga.example.com. 사용자 이름 " admin"및 비밀번호 " 123123"로 초기 관리자 계정을 사용하여 로그인하십시오 . 이제 설치를 프로덕션 환경에서 사용할 수 있습니다. 새 프로젝트를 만들거나 제품을 평가하여 시작하십시오. Github, Jira 또는 Trello에서 이미 프로젝트를 관리하고 있다면 importers를 사용하여 프로젝트를 Taiga로 쉽게 가져올 수 있습니다 .



Leave a Comment

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

랜섬웨어 공격이 증가하고 있지만 AI가 최신 컴퓨터 바이러스를 처리하는 데 도움이 될 수 있습니까? AI가 답인가? AI boone 또는 bane인지 여기에서 읽으십시오.

ReactOS: 이것이 Windows의 미래입니까?

ReactOS: 이것이 Windows의 미래입니까?

오픈 소스이자 무료 운영 체제인 ReactOS가 최신 버전과 함께 제공됩니다. 현대 Windows 사용자의 요구 사항을 충족하고 Microsoft를 무너뜨릴 수 있습니까? 이 구식이지만 더 새로운 OS 환경에 대해 자세히 알아보겠습니다.

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

Whatsapp은 마침내 Mac 및 Windows 사용자용 데스크톱 앱을 출시했습니다. 이제 Windows 또는 Mac에서 Whatsapp에 쉽게 액세스할 수 있습니다. Windows 8 이상 및 Mac OS 10.9 이상에서 사용 가능

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

인공 지능이 소규모 회사에서 어떻게 인기를 얻고 있으며 어떻게 인공 지능이 성장할 가능성을 높이고 경쟁자가 우위를 점할 수 있는지 알아보려면 이 기사를 읽으십시오.

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

최근 Apple은 문제를 해결하기 위해 macOS Catalina 10.15.4 추가 업데이트를 출시했지만 이 업데이트로 인해 Mac 컴퓨터의 브릭킹으로 이어지는 더 많은 문제가 발생하는 것 같습니다. 자세히 알아보려면 이 기사를 읽어보세요.

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

우리 컴퓨터는 모든 데이터를 저널링 파일 시스템이라고 하는 체계적인 방식으로 저장합니다. 검색을 누르는 즉시 컴퓨터에서 파일을 검색하고 표시할 수 있는 효율적인 방법입니다.https://wethegeek.com/?p=94116&preview=true

기술적 특이점: 인류 문명의 먼 미래?

기술적 특이점: 인류 문명의 먼 미래?

과학이 빠른 속도로 발전하고 우리의 많은 노력을 인수함에 따라 설명할 수 없는 특이점에 처할 위험도 높아집니다. 특이점이 우리에게 무엇을 의미할 수 있는지 읽어보십시오.

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

2021년 의료 분야에서 인공 지능의 영향

2021년 의료 분야에서 인공 지능의 영향

의료 분야의 AI는 지난 수십 년 동안 큰 도약을 했습니다. 따라서 의료 분야에서 AI의 미래는 여전히 나날이 성장하고 있습니다.