نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول
نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول
Taiga هو تطبيق مجاني ومفتوح المصدر لإدارة المشاريع. بخلاف أدوات إدارة المشروع الأخرى ، يستخدم Taiga نهجًا رشيقًا تدريجيًا لإدارة تطوير المشروع. Taiga هو تطبيق قوي للغاية وقابل للتخصيص بالكامل. تمت كتابة الواجهة الخلفية لـ Taiga في Python باستخدام إطار Django. تمت كتابة الواجهة الأمامية في JavaScript باستخدام أطر عمل CoffeeScript و AngularJS. يحتوي Taiga على ميزات مثل التعاون في المشروع ، ولوحة Kanban ، وتتبع الأخطاء ، وإعداد التقارير ، وتتبع الوقت ، والتراكم ، و wiki ، والمزيد.
في هذا البرنامج التعليمي ، سوف نستخدم taiga.example.com
اسم النطاق الموجه إلى الخادم. استبدل جميع حالات التكرار taiga.example.com
باسم نطاقك الفعلي.
قم بتحديث نظامك الأساسي باستخدام الدليل كيفية تحديث CentOS 7 . بمجرد تحديث نظامك ، تابع تثبيت 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 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. تحتوي البيئة الافتراضية على أدلة التثبيت الخاصة بها ولا تشارك المكتبات مع البيئات الافتراضية العالمية والبيئية الأخرى.
يستخدم 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
كلمة مرور آمنة.
مطلوب 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 تعمل كمستخدم غير مميز.
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 من إظهار التغييرات في الوقت الفعلي في الوحدات مثل 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 كوكيل عكسي لخدمة التطبيق للمستخدمين. سنحصل أيضًا على شهادات 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 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول
يعرف الكثير منكم أن Switch سيصدر في مارس 2017 وميزاته الجديدة. بالنسبة لأولئك الذين لا يعرفون ، قمنا بإعداد قائمة بالميزات التي تجعل "التبديل" "أداة لا غنى عنها".
هل تنتظر عمالقة التكنولوجيا للوفاء بوعودهم؟ تحقق من ما تبقى دون تسليم.
اقرأ المدونة لمعرفة الطبقات المختلفة في بنية البيانات الضخمة ووظائفها بأبسط طريقة.
اقرأ هذا لمعرفة مدى انتشار الذكاء الاصطناعي بين الشركات الصغيرة وكيف أنه يزيد من احتمالات نموها ومنح منافسيها القدرة على التفوق.
لقد أصبح حل CAPTCHA صعبًا جدًا على المستخدمين في السنوات القليلة الماضية. هل ستكون قادرة على أن تظل فعالة في اكتشاف البريد العشوائي والروبوتات في المستقبل القريب؟
مع تطور العلم بمعدل سريع ، واستلام الكثير من جهودنا ، تزداد أيضًا مخاطر تعريض أنفسنا إلى تفرد غير قابل للتفسير. اقرأ ، ماذا يمكن أن يعني التفرد بالنسبة لنا.
ما هو التطبيب عن بعد والرعاية الصحية عن بعد وأثره على الأجيال القادمة؟ هل هو مكان جيد أم لا في حالة الوباء؟ اقرأ المدونة لتجد طريقة عرض!
ربما سمعت أن المتسللين يكسبون الكثير من المال ، لكن هل تساءلت يومًا كيف يجنون هذا النوع من المال؟ دعنا نناقش.
أصدرت Apple مؤخرًا macOS Catalina 10.15.4 تحديثًا تكميليًا لإصلاح المشكلات ولكن يبدو أن التحديث يتسبب في المزيد من المشكلات التي تؤدي إلى إنشاء أجهزة macOS. قراءة هذه المادة لمعرفة المزيد