إعداد NextCloud + ONLYOFFICE على نفس الخادم باستخدام Docker

يا هبر! أقدم انتباهكم إلى ترجمة المقال "إعداد NextCloud و ONLYOFFICE على خادم واحد باستخدام Docker".

من الصعب التقليل من قيمة مجموعات المكاتب عبر الإنترنت مثل محرر مستندات Google والتخزين السحابي في حياة الأشخاص المهتمين بالتكنولوجيا. أصبحت التكنولوجيا منتشرة على نطاق واسع لدرجة أنه حتى Microsoft ، التي هيمنت منذ فترة طويلة على سوق تطبيقات المكاتب ، ركزت مؤخرًا على تطوير تطبيق الويب Office 365 وإقناع المستخدمين بالتبديل إلى نموذج الاشتراك لاستخدام خدماتهم الخاصة. ندعو المهتمين بعملية تثبيت وتكوين التخزين الخاص بهم تحت cat.

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

مع الأخذ في الاعتبار جميع المعلومات المتاحة حول الحلول مفتوحة المصدر ، وجدنا مشروعين نشطين (مع التزامات في مستودع git للأشهر الـ 12 الماضية) تم تطويرهما للتخزين السحابي: NextCloud و OwnCloud ، ومجموعة المكتب النشطة الوحيدة ONLYOFFICE. تتمتع كلتا أداتي التخزين السحابي بنفس الوظائف تقريبًا ، واستند قرار اختيار NextCloud إلى وجود دليل على أنه يمكن دمجها مع ONLYOFFICE لتفاعل مستخدم مريح مع البرنامج. ومع ذلك ، عندما بدأنا في نشر الخدمات ، ظهر نقص المعلومات حول دمج الخدمات المذكورة أعلاه. وجدنا 3 مقاطع فيديو تعليمية حول كيفية الدمج:

لم يُجب أي من مقاطع الفيديو الثلاثة على سؤال تثبيت خدمة المستندات ONLYOFFICE على نفس الخادم الفعلي مثل NextCloud باستخدام nginx مشترك. بدلاً من ذلك ، استخدموا تقنيات الفصل مثل استخدام منافذ منفصلة لواجهة برمجة تطبيقات خدمة المستندات. كان الخيار الآخر المقترح هو نشر خادم منفصل لخدمة المستندات ، وتكوين مثيل nginx يدويًا المدمج في Document Service لتثبيت مفتاح وصول (مفتاح وصول معروف مسبقًا يؤكد الحق في الوصول إلى سحابة البيانات) وشهادات TLS. تم اعتبار الأساليب المذكورة أعلاه غير آمنة وغير فعالة بما فيه الكفاية ، لذلك قمنا بدمج NextCloud و ONLYOFFICE و nginx الشائع الذي يفصل الطلبات حسب أسماء النطاقات باستخدام docker-compose. هنا معلومات خطوة بخطوة حول كيفية القيام بذلك.

الخطوة 1: حاوية nginx

هذا إعداد بسيط للغاية ، لكن هذه الخطوة تتطلب معظم العمل لتهيئة الخادم الوكيل العكسي. أنشأنا أولاً تكوين docker-compose لـ nginx: صورة ثابتة.

version: '2'
services:
  nginx:
    image : nginx:stable
    restart: always
    volumes:
      - ./nginx/nginx-vhost.conf:/etc/nginx/conf.d/default.conf:ro
      - ./nginx/certificates:/mycerts 
    ports:
      - 443:443
      - 80:80

يؤدي هذا إلى إنشاء حاوية مع المنفذين 80 و 443 مفتوحين للجمهور ، وتعيين التكوين إلى nginx / nginx-vhost.conf ، وتحديد مخزن للشهادات التي تم إنشاؤها كشهادات موقعة ذاتيًا أو باستخدام Let's encrypt's certbot in / nginx / الشهادات. يجب أن يحتوي هذا الموقع على مجلدات لـ office.yourdomain.com و cloud.yourdomain.com ، مع ملفات fullchain1.pem و privkey1.pem في كل منها لسلسلة الشهادات والمفتاح الخاص للخادم ، على التوالي. يمكنك قراءة المزيد حول كيفية إنشاء شهادة موقعة ذاتيًا هنا. www.akadia.com/services/ssh_test_certificate.html (تعمل إعادة تسمية .key و. crt إلى .pem بدون تحويل بنية الملف لـ nginx).

بعد ذلك ، حددنا ملف vhost. نحدد أولاً سلوك المنفذ 80 كإعادة توجيه بسيطة إلى https ، لأن لا نريد السماح بأي حركة مرور http

server {
    listen 80;
    location / {
        return 301
            https://$host$request_uri;
    }
}

ثم أنشأنا خادمين افتراضيين على المنفذ 443 لخدماتنا:

server {
    listen 443 ssl;
    server_name cloud.yourdomain.com ;
    root /var/www/html;

    ssl_certificate     /mycerts/cloud.yourdomain.com/fullchain1.pem;
    ssl_certificate_key /mycerts/cloud.yourdomain.com/privkey1.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app:80;
    }
}
server {
    listen 443 ssl;
    server_name office.yourdomain.com;
    root /var/www/html;

    ssl_certificate     /mycerts/office.yourdomain.com/fullchain1.pem;
    ssl_certificate_key /mycerts/office.yourdomain.com/privkey1.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://onlyoffice:80;
    }
}

الخطوة الثانية: خدمة المستندات

نحتاج الآن إلى إضافة حاوية خدمة المستندات إلى docker-compose.yml. لا يوجد شيء خاص لتكوينه هنا.

services:
...
  onlyoffice:
    image: onlyoffice/documentserver
    restart: always

لكن لا تنس ربط حاوية nginx بخدمة المستندات:

services:
...
  nginx:
    ...
    depends_on:
      - onlyoffice

الخطوة 3: NextCloud

أولاً قم بإضافة خدمات جديدة:

services:
...
  db:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - /data/nextcloud_db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=#put some password here
      - MYSQL_PASSWORD=#put some other password here
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
  app:
    image: nextcloud
    depends_on:
      - db
      - onlyoffice
    restart: always

وأضف رابطًا إلى nginx:

services:
...
  nginx:
    ...
    depends_on:
      - app 

حان الوقت الآن لتحميل الحاويات.

docker-compose up -d  

بعد فترة ، سيبدأ nginx في إعادة توجيهك إلى الواجهة الأمامية لـ NextCloud ، وهي صفحة التكوين الافتراضية. ستحتاج إلى إدخال اسم المستخدم وكلمة المرور لأول مستخدم إداري وبيانات اعتماد قاعدة البيانات التي قدمتها في docker-compose.yml بمجرد اكتمال الإعداد ، ستتمكن من تسجيل الدخول. في حالتنا ، استغرق الانتظار دقيقة تقريبًا وتطلب تحديثًا إضافيًا لصفحة تسجيل الدخول قبل أن نتمكن من تسجيل الدخول إلى الخدمة السحابية.

نافذة إعدادات خدمة NextCloudإعداد NextCloud + ONLYOFFICE على نفس الخادم باستخدام Docker

الخطوة 4: ربط NextCloud و ONLYOFFICE

في هذه الخطوة ، ستحتاج إلى تثبيت تطبيق NextCloud ، الذي يربط وظيفة ONLYOFFICE. لنبدأ بلوحة تحكم التطبيق في الزاوية اليمنى العليا من القائمة. ابحث عن تطبيق ONLYOFFICE (ضمن Office والنص أو باستخدام البحث) ، وقم بتثبيته وتنشيطه.

بعد ذلك توجه إلى الإعدادات عبر القائمة في الزاوية اليمنى العليا وستجد عنصر ONLYOFFICE في القائمة اليسرى. اذهب إليه. سوف تحتاج إلى تسجيل العناوين كما هو موضح أدناه.

إعدادات تطبيق التكاملإعداد NextCloud + ONLYOFFICE على نفس الخادم باستخدام Docker

يتم استخدام العنوان الأول للارتباط ببعض ملفات js و css مباشرة من التطبيق الذي يعمل في المتصفح (هذا ما نحتاجه لفتح الوصول إلى خدمة ONLYOFFICE من خلال nginx). لم يتم استخدام المفتاح السري لأننا نثق في طبقة Docker المعزولة أكثر من مفتاح المصادقة الدائم. يتم استخدام العنوان الثالث بواسطة حاوية NextCloud للاتصال مباشرة بواجهة برمجة تطبيقات ONLYOFFICE ، ويستخدم اسم المضيف الداخلي الافتراضي من Docker. حسنًا ، يتم استخدام الحقل الأخير حتى يتمكن ONLYOFFICE من إعادة الطلبات إلى NextCloud API باستخدام عنوان IP خارجي أو عنوان Docker داخلي إذا كنت تستخدم شبكات Docker ، ولكن هذا غير مستخدم في حالتنا. تأكد من أن إعدادات جدار الحماية الخاص بك تسمح بهذه الأنواع من التفاعلات.

بعد الحفظ ، سيختبر NextCloud الاتصال ، وإذا كان كل شيء صحيحًا ، فسوف يعرض لك الإعدادات المتعلقة بالتكامل - على سبيل المثال ، ما هي أنواع الملفات التي يمكن تحريرها من خلال هذا التكامل. تخصيص كما تراه مناسبًا.

الخطوة الأخيرة: أين تجد المحرر

إذا عدت إلى مجلدات التخزين السحابية ونقرت على "+" لإنشاء ملف جديد ، فسيكون لديك خيار جديد لإنشاء مستند أو جدول بيانات أو عرض تقديمي. بمساعدتهم ، ستنشئ هذه الأنواع من الملفات وستكون قادرًا على الفور على تحريرها باستخدام ONLYOFFICE.

قائمة إنشاء الملفإعداد NextCloud + ONLYOFFICE على نفس الخادم باستخدام Docker

الملحق 1

يمكن العثور على المحتوى الكامل لـ docker-compose.yml هنا: https://pastebin.com/z1Ti1fTZ

المصدر: www.habr.com

إضافة تعليق