نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول
نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول
Taiga هو تطبيق مجاني ومفتوح المصدر لإدارة المشاريع. بخلاف أدوات إدارة المشروع الأخرى ، يستخدم Taiga نهجًا رشيقًا تدريجيًا لإدارة تطوير المشروع. Taiga هو تطبيق قوي للغاية وقابل للتخصيص بالكامل. تمت كتابة الواجهة الخلفية لـ Taiga في Python باستخدام إطار Django. تمت كتابة الواجهة الأمامية في JavaScript باستخدام أطر عمل CoffeeScript و AngularJS. يحتوي Taiga على ميزات مثل التعاون في المشروع ، ولوحة Kanban ، وتتبع الأخطاء ، وإعداد التقارير ، وتتبع الوقت ، والتراكم ، و wiki ، والمزيد.
في هذا البرنامج التعليمي ، سوف نستخدم taiga.example.com
اسم النطاق الموجه إلى الخادم. استبدل جميع حالات التكرار taiga.example.com
باسم نطاقك الفعلي.
قم بتحديث نظامك الأساسي باستخدام الدليل كيفية تحديث Ubuntu 16.04 . بمجرد تحديث نظامك ، تابع تثبيت PostgreSQL.
PostgreSQL هو نظام قاعدة بيانات علائقية للكائنات ومعروف باستقراره وسرعته. يستخدم Taiga PostgreSQL لتخزين قاعدة بياناته. أضف مستودع PostgreSQL إلى النظام.
echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
قم باستيراد مفتاح توقيع GPG وقم بتحديث قوائم الحزم.
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
قم بتثبيت خادم قاعدة بيانات PostgreSQL.
sudo apt -y install postgresql
قم بتشغيل خادم PostgreSQL وتمكينه من البدء تلقائيًا في وقت التمهيد.
sudo systemctl start postgresql
sudo systemctl enable postgresql
قم بتغيير كلمة المرور لمستخدم 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
يحتاج Taiga إلى Python الإصدار 3.4 أو الأحدث و Python 3.5 مثبت مسبقًا في توزيع Ubuntu 16.04. قم بتثبيت بعض الحزم المطلوبة.
sudo apt -y install python3 python3-pip python3-dev python3-dev virtualenvwrapper
يتم استخدام بيئة Python الظاهرية لإنشاء بيئة افتراضية معزولة لمشروع Python. تحتوي البيئة الافتراضية على أدلة التثبيت الخاصة بها ولا تشارك المكتبات مع البيئات الافتراضية العالمية والبيئية الأخرى. بمجرد تثبيت Python 3 بنجاح ، يجب أن تكون قادرًا على التحقق من إصداره.
python3 -V
سترى ما يلي.
user@vultr:~$ python3 -V
Python 3.5.2
الترقية pip
، وهو تطبيق إدارة تبعية.
sudo pip3 install --upgrade setuptools pip
أيضًا ، قم بتثبيت بعض أدوات البناء التي ستكون مطلوبة لاحقًا لترجمة التبعيات.
sudo apt -y install build-essential binutils-doc autoconf flex bison libjpeg-dev libfreetype6-dev zlib1g-dev libzmq3-dev libgdbm-dev libncurses5-dev automake libtool libffi-dev curl git tmux gettext
يستخدم Taiga RabbitMQ لمعالجة قائمة انتظار الرسائل. يتطلب RabbitMQ مكتبات Erlang للعمل. تثبيت إرلانج.
sudo apt -y install erlang
إضافة مستودع RabbitMQ.
echo 'deb http://www.rabbitmq.com/debian/ stable main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list
استيراد مفتاح توقيع RabbitMQ GPG.
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
تحديث معلومات المستودع.
sudo apt update
قم بتثبيت RabbitMQ.
sudo apt -y install rabbitmq-server
قم بتشغيل وتمكين خادم 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://deb.nodesource.com/setup_8.x | sudo -E bash -
قم بتثبيت Node.js pwgen
والأداة المساعدة.
sudo apt install -y nodejs pwgen npm
pwgen
سيتم استخدامه لاحقًا لإنشاء سلسلة سرية قوية. قم بتثبيت CoffeeScript ، حيث سيتم استخدامه لتجميع ملفات Taiga المكتوبة في إطار عمل CoffeeScript.
sudo npm install -g coffee-script gulp
أضف مستخدم نظام جديد لـ Taiga للتأكد من أن عمليات Taiga تعمل كمستخدم غير مميز.
sudo adduser 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
الآن قم بإنشاء بيئة افتراضية جديدة لـ Taiga باستخدام Python 3.
mkvirtualenv -p /usr/bin/python3 taiga
pip3 install --upgrade setuptools
قم بتثبيت تبعيات Python المطلوبة باستخدام pip
.
pip3 install -r requirements.txt
تعبئة قاعدة البيانات بالبيانات الأولية اللازمة.
python3 manage.py migrate --noinput
python3 manage.py loaddata initial_user
python3 manage.py loaddata initial_project_templates
python3 manage.py compilemessages
python3 manage.py collectstatic --noinput
ستقوم الأوامر المذكورة أعلاه بكتابة البيانات في قاعدة بيانات PostgreSQL. يقوم Taiga أيضًا بشحن بعض البيانات التجريبية أو النموذجية التي يمكن أن تكون مفيدة لتقييم المنتج. إذا كنت ترغب في تثبيت نموذج البيانات ، فقم بتشغيل ما يلي.
python3 manage.py sample_data
ملاحظة : يعد تثبيت بيانات العينة اختياريًا ومقصودًا فقط لتقييم المنتج.
قبل أن نبدأ في إنشاء ملف التكوين للواجهة الخلفية لـ Taiga ، نحتاج إلى إنشاء سلسلة سرية. سيتم استخدام هذه السلسلة لتشفير بيانات الجلسة.
إنشاء سلسلة عشوائية من 64 حرفًا.
pwgen -s -1 64
يجب أن ترى الإخراج كسلسلة عشوائية.
(taiga) taiga@vultr:~/taiga-back$ pwgen -s -1 64
fhDfyYVJ4EH3tvAyUzmfWSeCXuf5sy5EEWrMQPaf9t3JSFrpiL6yvUEOWsFOTscP
قم بإنشاء ملف تكوين جديد للواجهة الخلفية لـ 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"
تأكد من استبدال example domain name
الرمز الفعلي في الرمز أعلاه. أيضًا ، 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 28, 2017 - 10:29:38
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/
{"webhooks": "http://127.0.0.1:8000/api/v1/webhooks", "invitations": "http://127.0.0.1:8000/api/v1/invitations", "severities": "http://127.0.0.1:8000/api/v1/severities", "memberships": "http://127.0.0.1:8000/api/v1/memberships", "user-storage": "http://127.0.0.1:8000/api/v1/user-storage", "epics/(?P<resource_id>\\d+)/voters": "http://127.0.0.1:8000/api/v1/epics/(?P<resource_id>\\d+)/voters", "wiki": "http://127.0.0.1:8000/api/v1/wiki", "priorities": "http://127.0.0.1:8000/api/v1/priorities", "userstories/attachments": "http://127.0.0.1:8000/api/v1/userstories/attachments", "epics/(?P<epic>[^/.]+)/related_userstories": "http://127.0.0.1:8000/api/v1/epics/(?P<epic>[^/.]+)/related_userstories", "timeline/user": "http://127.0.0.1:8000/api/v1/timeline/user", "userstories/(?P<resource_id>\\d+)/voters": "http://127.0.0.1:8000/api/v1/userstories/(?P<resource_id>\\d+)/voters", "wiki-links": "http://127.0.0.1:8000/api/v1/wiki-links", "epics/attachments": "http://127.0.0.1:8000/api/v1/epics/attachments", "issues/custom-attributes-values": "http://127.0.0.1:8000/api/v1/issues/custom-attributes-values
قم بإيقاف خادم الواجهة الخلفية 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 domain
المجال الفعلي. يمكنك أيضًا تغيير اللغة الافتراضية والمعلمات الأخرى في التكوين أعلاه.
بصرف النظر عن الواجهة الأمامية والخلفية ، نحتاج أيضًا إلى تثبيت أحداث 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
المستخدم.
sudo apt -y install circus
إنشاء ملف تكوين سيرك جديد لتشغيل الواجهة الخلفية 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.5/site-packages
إنشاء تكوين سيرك جديد لتشغيل أحداث Taiga.
sudo nano /etc/circus/conf.d/taiga-events.ini
تعبئة الملف.
[watcher:taiga-events]
working_dir = /home/taiga/taiga-events
cmd = /usr/local/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
أعد تشغيل السيرك وتمكين البدء في وقت التمهيد تلقائيًا.
sudo systemctl restart circusd
sudo systemctl enable circusd
تحقق من حالة السيرك.
circusctl status
إذا بدأ السيرك جميع عمليات Taiga بشكل صحيح ، فسترى الناتج التالي.
user@vultr:~$ circusctl status
circusd-stats: active
plugin:flapping: active
taiga: active
taiga-events: active
إذا رأيت أيًا من هذه العملية غير نشط ، فقم بتشغيل sudo chmod -R 777 /home/taiga/logs
السيرك وإعادة تشغيله. تحقق من حالة عمليات السيرك مرة أخرى ، هذه المرة ستجد بالتأكيد تشغيل الخدمة.
الآن ، قمنا بتثبيت وتشغيل Taiga بنجاح. قبل أن نتمكن من استخدامه ، نحتاج إلى الكشف عن التثبيت باستخدام أي خادم ويب للإنتاج.
سنستخدم Nginx كوكيل عكسي لخدمة التطبيق للمستخدمين. سنحصل أيضًا على شهادات SSL ونثبتها من Let's Encrypt.
Certbot هو العميل الرسمي لإصدار الشهادات لـ Let's Encrypt CA. قم بإضافة مستودع Certbot PPA إلى النظام.
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
قم بتثبيت Nginx و Certbot.
sudo apt -y install nginx certbot
ملاحظة : للحصول على شهادات من 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/sites-available/taiga
تعبئة الملف بما يلي.
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;
}
تأكد من تغيير domain name
و path to the SSL certificates
. قم بتمكين المضيف الظاهري.
sudo ln -s /etc/nginx/sites-available/taiga /etc/nginx/sites-enabled/taiga
يمكنك الآن إعادة تشغيل خادم الويب 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. قراءة هذه المادة لمعرفة المزيد