عندما كان أحدهم يعلم أن أي وثيقة كان بسبب التدمير ، أو حتى عندما رأى أحدهم خردة من الورق النفايات ، كان إجراءً تلقائيًا لرفع رفرف أقرب ثقب للذاكرة وإسقاطه ، حيث سيتم تحريكه على تيار من الهواء الدافئ إلى الأفران الهائلة التي تم إخفاؤها في مكان ما في المبنى
- من عام 1984 بواسطة جورج أورويل
ثقب الذاكرة هو منظم قضية دعم. إنه مصمم لتوفير وسيلة لتنظيم وتفتيش مشكلات الدعم المشترك وحلها.
ستحتاج إلى ما يلي لتجميع وتشغيل التطبيق:
mkdir memory-hole
cd memory-hole
curl -O https://raw.githubusercontent.com/yogthos/memory-hole/master/docker-compose.yml
docker-compose up
سيكون التطبيق متاحًا على http://localhost:8000 بمجرد بدء تشغيله.
اتبع الخطوات هذه لتكوين قاعدة البيانات للتطبيق:
تأكد من تثبيت امتداد citext على postgreSQL.
قم بتشغيل أمر psql :
psql -U <superuser|postgres user> -d postgres -h localhost
إنشاء دور دور للوصول إلى قاعدة البيانات:
CREATE ROLE memoryhole;
اضبط كلمة المرور للدور:
password memoryhole;
اختياريا ، قم بإنشاء مخطط ومنح ترخيص دور ثول memoryhole :
CREATE SCHEMA memoryhole AUTHORIZATION memoryhole;
GRANT ALL ON SCHEMA memoryhole TO memoryhole;
GRANT ALL ON ALL TABLES IN SCHEMA memoryhole TO memoryhole;
أضف امتداد citext إلى المخطط:
CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA memoryhole;
تأكد من السماح بتسجيل الدخول بتسجيل الدخول:
ALTER ROLE "memoryhole" WITH LOGIN;
الخروج من القشرة
q
يجب أن يؤدي هذا الإعداد إلى مماثلة :database-url (على سبيل المثال على الجهاز المحلي).
:database-url " jdbc:postgresql://localhost/postgres?user=memoryhole&password=memoryhole "يمكن لـ H2 DB استخدام سيناريوهات الاستضافة المختلفة ، والتي تتوفر في قائمة الميزات الخاصة بها.
يمكن أن يؤدي هذا الإعداد إلى اتباع :database-url على الجهاز المحلي.
:database-url " jdbc:h2:~/memory-hole-dev " عند استخدام H2 DB للتطوير أو الإنتاج ، يجب أن يكون قد تم تعيين Migratus بشكل صحيح :migration-dir يشير إلى هجرات محددة H2 لملء مخططها.
:migration-dir " migrations/h2 " قم بإنشاء ملف profiles.clj في دليل المشروع مع إعدادات التكوين لقاعدة البيانات. يمكن تكوين دليل الترحيل اختياريا و LDAP ، على سبيل المثال:
{ :profiles/dev
{ :env
{ :database-url " jdbc:postgresql://localhost/postgres?user=memoryhole&password=memoryhole "
:migration-dir " migrations/postgresql "
; ;ldap is optional, will use internal table otherwise
; ;Admin users (able to manage groups) defined by their sAMAccountName
:ldap-admin-users [ " my-ldap-sAMAccountName " " another-ldap-sAMAccountName " ]
; ;Or Admin Groups defined by their distinguished names
:ldap-admin-groups [ " CN=some-ldap-group,OU=foo123,DC=domain,DC=ca " ]
:ldap
{ :host
{ :address " my-ldap-server.ca "
:domain " domain.ca "
:port 389
:connect-timeout ( * 1000 5 )
:timeout ( * 1000 30 )}}}}}تشغيل الهجرات
lein run migrate
سيؤدي ذلك إلى إنشاء الجداول وإضافة مستخدم مسؤول افتراضي ، تسجيل الدخول الافتراضي هو: admin/admin .
لبدء خادم ويب للتطبيق ، قم بتشغيل:
lein run
لتجميع الواجهة الأمامية ClojureScript ، تشغيل:
lein figwheel
lein uberjar
سيؤدي ذلك إلى إنتاج أرشيف target/uberjar/memory-hole.jar الذي يمكن تشغيله على النحو التالي:
java -Dconf=conf.edn -jar memory-hole.jar migrate
java -Dconf=conf.edn -jar memory-hole.jar
يجب أن يحتوي ملف conf.edn على التكوين مثل عنوان URL لقاعدة البيانات التي سيتم استخدامها في الإنتاج. الخيارات التالية متوفرة.
:database-url " jdbc:postgresql://localhost/postgres?user=memoryhole&password=memoryhole "اعتمادًا على الواجهة الخلفية DB المحددة ، يجب تعيين دليل الترحيل ، على سبيل المثال.
:migration-dir " migrations/postgresql " يقوم منفذ HTTP الافتراضي بـ 3000 ، لتعيين منفذ مخصص ، أضف المفتاح التالي إلى التكوين:
:port 80يتخلف التطبيق عن استخدام متجر جلسة قائم على الذاكرة من جانب الخادم.
يمكن تعيين عدد الجلسات قبل أوقات جلسة الذاكرة في الخارج باستخدام مفتاح :memory-session على النحو التالي:
:memory-session
{ :max-age 3600 } إذا كنت ترغب في استخدام متجر الذاكرة القائم على ملف تعريف الارتباط ، فأضف مفتاحًا :cookie-session للتكوين. يجب أن يشير مفتاح :cookie-session إلى خريطة تحتوي على مفتاحين اختياريين:
:key - مفتاح سري يستخدم لتشفير ملف تعريف الارتباط للجلسة:cookie-attrs - خريطة تحتوي على سمات ملفات تعريف الارتباط اختيارية::http-only - تقييد ملف تعريف الارتباط على http إذا كان صحيحًا (افتراضي):secure - تقييد ملف تعريف الارتباط إلى عناوين URL HTTPS إذا كان صحيحًا:max-age - عدد الثواني حتى ينتهي ملف تعريف الارتباطقد يبدو تكوين مثال على النحو التالي:
:cookie-session
{ :key " a 16-byte secret "
:cookie-attrs
{ :secure true
:max-age 3600 }} يجب وضع تكوين اتصال LDAP ضمن مفتاح :ldap على النحو التالي:
:ldap
{ :host
{ :address " my-ldap-server.ca "
:domain " domain.ca "
:port 389
:connect-timeout ( * 1000 5 )
:timeout ( * 1000 30 )}} هناك خياران لإدارة مجموعات المستخدمين عند استخدام LDAP ، يمكنك إما تعيين مستخدمي المسؤول باستخدام sAMAccountName ، أو تحديد المجموعات التي تتوافق مع مفتاح memberOf .
:ldap-admin-users [ " my-ldap-sAMAccountName " " another-ldap-sAMAccountName " ]:ldap-admin-groups [ " CN=some-ldap-group,OU=foo123,DC=domain,DC=ca " ] لتمكين دعم HTTPS في الإنتاج ، أضف التكوين التالي ضمن مفتاح :ssl :
:ssl
{ :port 3001
:keystore " keystore.jks "
:keystore-pass " changeit " } لتعطيل الوصول إلى HTTP ، قم بتعيين :port إلى nil :
:port nilبدلاً من ذلك ، يمكنك توضيح التطبيق مع Nginx في الإنتاج. انظر هنا للحصول على تفاصيل حول تكوين nginx.
مثال كامل conf.edn :
{ :database-url " jdbc:postgresql://localhost/postgres?user=memoryhole&password=memoryhole "
:cookie-session
{ :key " a 16-byte secret "
:cookie-attrs
{ :max-age 60 }}
:port nil
:ssl
{ :port 3001
:keystore " keystore.jks "
:keystore-pass " changeit " }}يمكن أن يتم تنظيم التطبيق مع Nginx إلى مسار مخصص على النحو التالي:
server {
listen ...;
...
location /memory-hole {
proxy_pass http://127.0.0.1:3000;
}
...
}
ستحتاج بعد ذلك إلى إضافة :app-context في ملف conf.edn مع السياق:
{ :database-url " jdbc:postgresql://localhost/postgres?user=memoryhole&password=memoryhole "
:port 3000
:app-context " /memory-hole " }كتب ريان بالدوين التنفيذ الأصلي للأداة. يعتمد التطبيق على المخطط الأصلي واستعلامات SQL.
حقوق الطبع والنشر © 2016 Dmitri Sotnikov