كيفية تثبيت أداة إدارة مشروع Taiga على CentOS 7

Taiga هو تطبيق مجاني ومفتوح المصدر لإدارة المشاريع. بخلاف أدوات إدارة المشروع الأخرى ، يستخدم Taiga نهجًا رشيقًا تدريجيًا لإدارة تطوير المشروع. Taiga هو تطبيق قوي للغاية وقابل للتخصيص بالكامل. تمت كتابة الواجهة الخلفية لـ Taiga في Python باستخدام إطار Django. تمت كتابة الواجهة الأمامية في JavaScript باستخدام أطر عمل CoffeeScript و AngularJS. يحتوي Taiga على ميزات مثل التعاون في المشروع ، ولوحة Kanban ، وتتبع الأخطاء ، وإعداد التقارير ، وتتبع الوقت ، والتراكم ، و wiki ، والمزيد.

المتطلبات الأساسية

  • نسخة خادم Vultr CentOS 7 مع ذاكرة وصول عشوائي سعتها 1 غيغابايت على الأقل.
  • A المستخدم سودو .

في هذا البرنامج التعليمي ، سوف نستخدم 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

إنشاء مستخدم PostgreSQL جديد لـ Taiga.

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

قم بتثبيت Python 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 3.6 بدون استبدال الإصدار الافتراضي من Python. إذا قمت باستبدال Python الافتراضي في CentOS 7 ، فقد يكسر 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 للعمل. تثبيت إرلانج.

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

مطلوب Node.js الإصدار 7 أو الأحدث لترجمة الواجهة الأمامية ل Taiga. إضافة مستودع 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

استنساخ مستودع الواجهة الخلفية Taiga من GitHub والخروج من أحدث فرع مستقر.

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

قم بتكوين virtualenvwrapperلاستخدام Python 3.6 بدلاً من Python الافتراضي.

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

أخيرًا ، مصدر ~/.bashrcالملف.

source ~/.bashrc

الآن قم بإنشاء بيئة افتراضية جديدة لـ Taiga باستخدام Python 3.6.

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استبدل بمفتاح StrongMQPasswordالسر الفعلي وكلمة المرور الفعلية لمستخدم قائمة انتظار رسائل Taiga. إذا كان لديك خادم SMTP جاهزًا وترغب في استخدام ميزات إرسال البريد الإلكتروني على الفور ، يمكنك إلغاء تعليق خيارات البريد الإلكتروني وتعيين القيم المناسبة. إذا لم يكن لديك خادم بريد جاهز ، يمكنك تخطي إعداد ميزة البريد الإلكتروني الآن وتعيينها لاحقًا في ملف التكوين هذا.

إذا كنت ترغب في تمكين تسجيل دخول GitHub ، فأنشئ تطبيقًا في GitHub وقدم معرف عميل واجهة برمجة التطبيقات وسر العميل.

للتحقق على الفور من إمكانية بدء الواجهة الخلفية 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",

قم بإيقاف خادم الواجهة الخلفية Taiga بالضغط على " Ctrl + C" وإلغاء تنشيط البيئة الافتراضية.

deactivate

قم بتثبيت الواجهة الأمامية

الواجهة الأمامية Taiga هي عنصر Taiga الذي يخدم واجهة مستخدم الويب. استنساخ مستودع الواجهة الأمامية Taiga من Github والخروج من أحدث فرع مستقر.

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 هي خادم مأخذ ويب ، وتمكن الواجهة الأمامية Taiga من إظهار التغييرات في الوقت الفعلي في الوحدات مثل backlog و Kanban والمزيد. ويستخدم خادم RabbitMQ لمعالجة الرسائل.

استنساخ مستودع أحداث Taiga من Github.

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. أيضًا ، قم بتحديث StrongMQPasswordكلمة المرور الفعلية لمستخدم قائمة انتظار رسائل Taiga.

تكوين السيرك

السيرك هو مدير العمليات لتطبيقات Python. سنستخدم سيرك لتشغيل الواجهة الخلفية والأحداث Taiga.

العودة إلى sudoالمستخدم.

exit

ملاحظة : من الآن ستحتاج إلى تشغيل الأوامر باستخدام sudoالمستخدم.

تثبيت السيرك باستخدام 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.

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 كوكيل عكسي لخدمة التطبيق للمستخدمين. سنحصل أيضًا على شهادات SSL ونثبتها من Let's Encrypt.

قم بتثبيت Nginx و Certbot. Certbot هو العميل الرسمي لإصدار الشهادات لـ Let's Encrypt CA.

sudo yum -y install nginx certbot

ضبط إعدادات جدار الحماية للسماح معيار HTTPو HTTPSالموانئ من خلال جدار الحماية من الاحتياجات Certbot لإجراء اتصال HTTP للتحقق من المرجع المجال.

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 

قم بإنشاء كتلة خادم Nginx جديدة لخدمة واجهة Taiga الأمامية.

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 ، فيمكنك بسهولة استيراد المشاريع إلى Taiga باستخدام المستوردين .



نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

6 أشياء شديدة الجنون حول نينتندو سويتش

6 أشياء شديدة الجنون حول نينتندو سويتش

يعرف الكثير منكم أن Switch سيصدر في مارس 2017 وميزاته الجديدة. بالنسبة لأولئك الذين لا يعرفون ، قمنا بإعداد قائمة بالميزات التي تجعل "التبديل" "أداة لا غنى عنها".

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

هل تنتظر عمالقة التكنولوجيا للوفاء بوعودهم؟ تحقق من ما تبقى دون تسليم.

وظائف طبقات معمارية مرجعية للبيانات الضخمة

وظائف طبقات معمارية مرجعية للبيانات الضخمة

اقرأ المدونة لمعرفة الطبقات المختلفة في بنية البيانات الضخمة ووظائفها بأبسط طريقة.

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

اقرأ هذا لمعرفة مدى انتشار الذكاء الاصطناعي بين الشركات الصغيرة وكيف أنه يزيد من احتمالات نموها ومنح منافسيها القدرة على التفوق.

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

لقد أصبح حل CAPTCHA صعبًا جدًا على المستخدمين في السنوات القليلة الماضية. هل ستكون قادرة على أن تظل فعالة في اكتشاف البريد العشوائي والروبوتات في المستقبل القريب؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

مع تطور العلم بمعدل سريع ، واستلام الكثير من جهودنا ، تزداد أيضًا مخاطر تعريض أنفسنا إلى تفرد غير قابل للتفسير. اقرأ ، ماذا يمكن أن يعني التفرد بالنسبة لنا.

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

ما هو التطبيب عن بعد والرعاية الصحية عن بعد وأثره على الأجيال القادمة؟ هل هو مكان جيد أم لا في حالة الوباء؟ اقرأ المدونة لتجد طريقة عرض!

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

ربما سمعت أن المتسللين يكسبون الكثير من المال ، لكن هل تساءلت يومًا كيف يجنون هذا النوع من المال؟ دعنا نناقش.

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

أصدرت Apple مؤخرًا macOS Catalina 10.15.4 تحديثًا تكميليًا لإصلاح المشكلات ولكن يبدو أن التحديث يتسبب في المزيد من المشكلات التي تؤدي إلى إنشاء أجهزة macOS. قراءة هذه المادة لمعرفة المزيد