Featured image of post تثبيت ownCloud infinite scale مع docker compose

تثبيت ownCloud infinite scale مع docker compose

برمجية ownCloud infinite scale هي برمجية جديدة لتستبدل الإصدار العادي من ownCloud و Nextcloud المكتوب بPHP. OCIS مكتوب بلغة Go واسرع بكثير, لدرجة انه لا يحتاج لقاعدة بيانات!

وجدت ان شروحاتهم ترتيبها غريب قليلا, لذلك كتبت هذا الشرح ليسهل تثبيت OCIS على الخوادم المنزلية مع docker

طريقة التثبيت

كما اسم ownCloud infinite scale يوضح, OCIS قابل للتوسع و يمكن تثبيته على عده خوادم لتحمل عدد اكبر من المستخدمين, مع فصل الخِدْمَات الداخلية ليتم توسيعها حسب الاستخدام. في هذا الشرح سوف اركز على طريقة التثبيت المناسبة للخوادم المنزلية و الاستخدام المحلي.

حتى اذا كان هدفك تثبيت OCIS في بيئة عمل كبيرة, هذه الطريقة بداية جيده لفهم طريقة عمل OCIS.

مِلَفّ docker-compose لOCIS

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
services:
  ocis:
    image: owncloud/ocis:5
    user: 1000:1000
    ports:
      - 127.0.0.1:9200:9200
    entrypoint:
      - /bin/sh
    # run ocis init to initialize a configuration file with random secrets
    # it will fail on subsequent runs, because the config file already exists
    # therefore we ignore the error and then start the ocis server
    command: ["-c", "ocis init || true; ocis server"]
    environment:
      OCIS_URL: https://owncloud.yourdomain.com
      OCIS_LOG_LEVEL: error # make oCIS less verbose
      PROXY_TLS: false # do not use SSL between reverse proxy and oCIS
      OCIS_INSECURE: true
      # basic auth (not recommended, but needed for eg. WebDav clients that do not support OpenID Connect)
      PROXY_ENABLE_BASIC_AUTH: false
      # admin user password
      IDM_ADMIN_PASSWORD: "admin" # this overrides the admin password from the configuration file
      # make settings service available to oCIS Hello
      SETTINGS_GRPC_ADDR: 0.0.0.0:9191
      GATEWAY_GRPC_ADDR: 0.0.0.0:9142 # make the REVA gateway accessible to the app drivers
      # email server (if configured)
      NOTIFICATIONS_SMTP_HOST: "xxxxxx"
      NOTIFICATIONS_SMTP_PORT: "xxxx"
      NOTIFICATIONS_SMTP_SENDER: "xxxxx"
      NOTIFICATIONS_SMTP_USERNAME: "xxxxxxxx"
      NOTIFICATIONS_SMTP_INSECURE: "xxxxxxx"
      # PROXY_TLS is set to "false", the download url has no https
      STORAGE_USERS_DATA_GATEWAY_URL: http://ocis:9200/data
      # separate directory for thumbnails
      THUMBNAILS_FILESYSTEMSTORAGE_ROOT: /var/lib/ocis-thumbnails
    volumes:
      - ./ocis-config:/etc/ocis
      - ./ocis-data:/var/lib/ocis
      - ./thumbnails:/var/lib/ocis-thumbnails
    logging:
      driver: "local"
    restart: always

هذا الأعداد الاولي لOCIS مع استخدام مجلد منفصل للthumbnails, ما يمكنك من تخزينها بشكل منفصل من البيانات الأساسية على SSD مثلا.

ستحتاج لتثبيت Reverse proxy لتشغيل OCIS, مثل Caddy او Nginx او Nginx proxy manager

هذه الإعدادات تتضمن كل خِدْمَات OCIS الأساسية, بإمكانك ان تستخدمه هكذا دون أصافات اذا كان كل ما تحتاجه هو فقط تخزين الملفات.

لكن بإمكانك أضافه بعض المميزات والتحسينات عبر اضافه برمجيات اختياريه:

تفعيل البحث داخل محتوى الملفات

افتراضيا يبني OCIS فِهْرِس البحث بناءا على اسم الملف او المجلد ومحتوى الملفات النصية. لكن بإمكانك تحسين البحث ليشمل محتوى ملفات عبر إضافة Apache tika الذي يستخدم OCR لقرائه محتوى ملفات PDF عبر التعرف تلقائيا على لغة المحتوى, للأسف التعرف التلقائي لا يدعم العربية (قائمة اللغات المدعومة).

هذا المِلَفّ يحتوي فقط على التغييرات التي يجب اضافتها للاعدادات الأولية في القسم السابق

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
services:
  ocis:
    environment: #add this to your yaml file!
      # better fulltext search
      SEARCH_EXTRACTOR_TYPE: tika
      SEARCH_EXTRACTOR_TIKA_TIKA_URL: http://tika:9998
      FRONTEND_FULL_TEXT_SEARCH_ENABLED: "true"

# better full text search
  tika:
    image: apache/tika:latest-full
    restart: always
    # command: apt update && apt install tesseract-ocr-xxx -y # add additional languages (only works if Tika supports auto-detection for that language)
    logging:
      driver: local

فحص تلقائي ضد الفيروسات

لحذف الفيروسات تِلْقائيًا عند التعرف عليها في الملفات المرفوعة, يمكن إضافة ClamAV كخدمة إضافية

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
services:
  ocis:
    enviroment:
      # ClamAV setup
      ANTIVIRUS_SCANNER_TYPE: clamav
      ANTIVIRUS_INFECTED_FILE_HANDLING: delete
      ANTIVIRUS_CLAMAV_SOCKET: "/var/run/clamav/clamd.sock"
      # enable the antivirus service
      OCIS_ADD_RUN_SERVICES: "antivirus"
      # configure the antivirus service
      POSTPROCESSING_STEPS: "virusscan"
    volumes:
      - clamav-socket:/var/run/clamav

  clamav:
    image: clamav/clamav:latest
    container_name: clamav
    # restart: always
    # ports:
    #   - '127.0.0.1:3310:3310'
    volumes:
      - ./clamav:/var/lib/clamav
      - clamav-socket:/tmp

volumes:
  clamav-socket:

Online office

احد اكبر الميزات في الإصدار السادس من OCIS هي إضافة أمكانية تضمين حُزْمَة تطبيقات المكتبية مثل Collabora (LibreOffice) و OnlyOffice.

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
services:
  ocis:
    image: owncloud/ocis-rolling:latest # use OCIS-rolling releases
    enviroment:
      NATS_NATS_HOST: 0.0.0.0 # make NATS accessible to ocis-collaboration
      NATS_NATS_PORT: 9233
      # make collabora the secure view app
      FRONTEND_APP_HANDLER_SECURE_VIEW_APP_ADDR: com.owncloud.api.collaboration.Collabora
      # fix CSP for collabora
      PROXY_CSP_CONFIG_FILE_LOCATION: /etc/ocis/csp.yaml
    volumes:
      - ./csp.yaml:/etc/ocis/csp.yaml # modifiy CSP policy to allow loading of Collabora in OCIS web ui
      
# the collaboration service isn't included in the embedded supervisor and needs to be run separately
  ocis-collaboration:
    image: owncloud/ocis-rolling:latest
    user: 1000:1000
    restart: always
    ports:
      - 127.0.0.1:9300:9300 #woopi server port
    depends_on:
      ocis:
        condition: service_started
      collabora:
        condition: service_healthy
    entrypoint:
      - /bin/sh
    command: [ "-c", "ocis collaboration server" ]
    environment:
      COLLABORATION_GRPC_ADDR: 0.0.0.0:9301
      COLLABORATION_HTTP_ADDR: 0.0.0.0:9300
      MICRO_REGISTRY: "nats-js-kv"
      MICRO_REGISTRY_ADDRESS: "ocis:9233"
      COLLABORATION_WOPI_SRC: https://wopiserver.owncloud.yourdomain.com
      COLLABORATION_APP_NAME: "Collabora"
      COLLABORATION_APP_ADDR: https://collabora.owncloud.yourdomain.com
      COLLABORATION_APP_ICON: https://collabora.owncloud.yourdomain.com/favicon.ico
      # COLLABORATION_APP_INSECURE: true
      # COLLABORATION_CS3API_DATAGATEWAY_INSECURE: true
      COLLABORATION_LOG_LEVEL: ${LOG_LEVEL:-info}
    volumes:
      - ./ocis-config:/etc/ocis
    logging:
      driver: local

  collabora:
    image: collabora/code:24.04.5.1.1
    ports:
      - 127.0.0.1:9980:9980
    environment:
      aliasgroup1: https://wopiserver.owncloud.yourdomain.com:443
      DONT_GEN_SSL_CERT: "YES"
      extra_params: --o:ssl.enable=false --o:ssl.termination=true --o:welcome.enable=false --o:net.frame_ancestors=owncloud.yourdomain.com
      username: admin
      password: admin
    cap_add:
      - MKNOD
    logging:
      driver: local
    restart: always
    command: ["bash", "-c", "coolconfig generate-proof-key ; /start-collabora-online.sh"]
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:9980/hosting/discovery" ]

أضفنا خدمتين جديده تحتاج لReverse proxy الاولى OCIS-collaboration التي تكشف المنفذ(port) 9300 و هي المسئولة عن خادم wopi و برمجية Collabora التي تستخدم منفذ 9980 لlibreoffice.

هناك خطوة إضافية, سنحتاج لتعديل سياسة امن المحتوى (Content security policy, CSP) للسماح بفتح LibreOffice داخل واجهه الويب لOCIS.

أنشئ مِلَفّ باسم csp.yaml و استخدم القالب الرسمي ليقوم بإضافة رابط collabora للقائمة الروابط المسموحة, تأكد من تغير https://${COLLABORA_DOMAIN|collabora.owncloud.test}/' الى الرابط الخاص بك لcollabora.

والآن اصبح لديك خادم OCIS كامل. هناك خِدْمَات اخرى لم اغطيها بالمقال مثل خدمه cloud import لتسهيل نقل الملفات من خِدْمَات تخزين سحابي اخرى. توجد قوالب اضافيه لكل الخِدْمَات الأخرى تحت مِلَفّ ocis_full في مستودع ownCloud infinite Scale.

الترتيب غريب قليلا, كل مِلَفّ yml هو عباره عن docker-compose واسم المِلَفّ يمثل الخدمة. تبدأ من مِلَفّ ocis.yml و بقية الملفات هي تكمله, والقوالب تفترض انك تستخدم trafeik.

تحت مجلد config تجد كل الملفات الإضافية للخدمات.

المصادر

https://github.com/owncloud/ocis/tree/master/deployments/examples/ocis_full

https://doc.owncloud.com/ocis/next/deployment/services/services.html

https://doc.owncloud.com/ocis/next/deployment/general/general-info.html#infinite-scale-supervised-services

FarisZR
مبني بستخدام Hugo
قالب Stack مصمم من Jimmy