Хочу разобрать, как развернуть OwnCloud задействуя Docker Compose на Ubuntu 18.04 Server с целью познакомиться по ближе к новым знаниями и если все удачно сложится, то переведу свой сервис с полноценной VM (OS: Ubuntu 18.04 + nginx + mysql + OwnCloud) в пользу Docker сервиса. Правда в моих масштабах это не столь важно, да и на работе, как коллегам, так и подрядчикам проще обслуживать схему выше чем схему Docker исполнения. Но все должно меняться же.

Шаг №1: Устанавливаю Docker в систему Ubuntu 18.04 Server:

ekzorchik@srv-bionic:~$ sudo apt-get install apt-transport-https ca-certificates software-properties-common curl -y

а вообще за основу беру свою заметку: "Как установить Docker на Ubuntu 18.04"

ekzorchik@srv-bionic:~$ docker -v

Docker version 20.10.14, build a224086

Шаг №2: Устанавливаю Docker Compose:

ekzorchik@srv-bionic:~$ sudo apt-get install -y docker-compose

Шаг №3: Собираем свой собственный Dockerfile (я пока отказался от этой идеи и задействовал ниже скачиваемый) посредством которого я разворачиваю сервис OwnCloud 10 на Ubuntu 18.04 Server:

На заметку: При составлении своего Dockerfile нужно как меньше использовать RUN, а вместо это все команды объединять через амперсанд.

ekzorchik@srv-bionic:~$ mkdir -p project/owncloud

OWNCLOUD_VERSION=10.9

OWNCLOUD_DOMAIN=localhost:8080

ADMIN_USERNAME=admin

ADMIN_PASSWORD=admin

HTTP_PORT=8080

Скачиваю официальный:

ekzorchik@srv-bionic:~/project/owncloud$ wget -O docker-compose.yml https://raw.githubusercontent.com/owncloud-docker/server/ce415fdaca0fec5444fd54b8f8268561348a4c9f/docker-compose.yml

version: '2.1'

volumes:
  files:
    driver: local
  mysql:
    driver: local
  backup:
    driver: local
  redis:
    driver: local

services:
  owncloud:
    image: owncloud/server:${OWNCLOUD_VERSION}
    restart: always
    ports:
      - ${HTTP_PORT}:8080
    depends_on:
      - db
      - redis
    environment:
      - OWNCLOUD_DOMAIN=${OWNCLOUD_DOMAIN}
      - OWNCLOUD_DB_TYPE=mysql
      - OWNCLOUD_DB_NAME=owncloud
      - OWNCLOUD_DB_USERNAME=owncloud
      - OWNCLOUD_DB_PASSWORD=owncloud
      - OWNCLOUD_DB_HOST=db
      - OWNCLOUD_ADMIN_USERNAME=${ADMIN_USERNAME}
      - OWNCLOUD_ADMIN_PASSWORD=${ADMIN_PASSWORD}
      - OWNCLOUD_MYSQL_UTF8MB4=true
      - OWNCLOUD_REDIS_ENABLED=true
      - OWNCLOUD_REDIS_HOST=redis
    healthcheck:
      test: ["CMD", "/usr/bin/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - files:/mnt/data

  db:
    image: webhippie/mariadb:latest
    restart: always
    environment:
      - MARIADB_ROOT_PASSWORD=owncloud
      - MARIADB_USERNAME=owncloud
      - MARIADB_PASSWORD=owncloud
      - MARIADB_DATABASE=owncloud
      - MARIADB_MAX_ALLOWED_PACKET=128M
      - MARIADB_INNODB_LOG_FILE_SIZE=64M
    healthcheck:
      test: ["CMD", "/usr/bin/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - mysql:/var/lib/mysql
      - backup:/var/lib/backup

  redis:
    image: webhippie/redis:latest
    restart: always
    environment:
      - REDIS_DATABASES=1
    healthcheck:
      test: ["CMD", "/usr/bin/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - redis:/var/lib/redis

Запускаю Docker Compose:

ekzorchik@srv-bionic:~/project/owncloud$ docker-compose up –d

Шаг №4: Проверяю работу OwnCloud в локальной сети

http://172.33.33.155:8080 и успешно авторизуюсь

  • Login: admin
  • Pass: admin

Шаг №5: Проверяю работу OwnCloud из вне:

У меня есть внешняя система которая связана с локальной сеть OpenVPN сервисом и исходя из этого на внешней системе настраиваю правило правило проброс порта.

root@ekzorchik:~# firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=8080:toaddr=172.33.33.155 --permanent

OwnCloud через Docker Compose

И я успешно авторизован.

Шаг №6: Смотрю, какие контейнеры Docker сейчас запущены:

ekzorchik@srv-bionic:~/project/owncloud$ docker ps

CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS                    PORTS                                       NAMES

b6f05ef9bbdf   owncloud/server:10.9       "/usr/bin/entrypoint…"   22 minutes ago   Up 22 minutes (healthy)   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   owncloud_owncloud_1

440984c0ae1c   webhippie/mariadb:latest   "/sbin/tini -- /usr/…"   22 minutes ago   Up 22 minutes (healthy)   3306/tcp                                    owncloud_db_1

7760e12fb68d   webhippie/redis:latest     "/sbin/tini -- /usr/…"   22 minutes ago   Up 22 minutes (healthy)   6379/tcp                                    owncloud_redis_1

ekzorchik@srv-bionic:~/project/owncloud$

Шаг №7: Хочу посмотреть какой owncloud.conf стоит в предустановленном контейнере:

ekzorchik@srv-bionic:~/project/owncloud$ docker exec -i -t b6f05ef9bbdf bash

и тут уже в /var/www/owncloud могу проанализировать содержимое

root@b6f05ef9bbdf: /var/www/owncloud # ls

AUTHORS       COPYING    apps           config       core      custom            index.html  lib  ocm-provider  ocs-provider  remote.php  robots.txt  status.php  version.php

CHANGELOG.md  README.md  apps-external  console.php  cron.php  db_structure.xml  index.php   occ  ocs           public.php    resources   settings    updater

root@b6f05ef9bbdf: /var/www/owncloud #

root@b6f05ef9bbdf: /var/www/owncloud # cat config/config.php

Шаг №8: Чтобы выйти из контейнера, в котором я сейчас нахожусь подключившись командой выше:

root@b6f05ef9bbdf: /var/www/owncloud # exit

exit

ekzorchik@srv-bionic:~/project/owncloud$

или через сочетание клавиш Ctrl + D

Шаг №9: Перезапускаю систему с целью проверить, а поднимутся ли контейнеры виртуальных машин, образующих сервис OwnCloud:

ekzorchik@srv-bionic:~/project/owncloud$ sudo reboot

ekzorchik@srv-bionic:~$ sudo netstat -tulpn | grep docker

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      845/docker-proxy

tcp6       0      0 :::8080                 :::*                    LISTEN      853/docker-proxy

ekzorchik@srv-bionic:~$ sudo apt-get install -y httpie

ekzorchik@srv-bionic:~$ http 172.33.33.155:8080

HTTP/1.1 302 Found

Cache-Control: no-store, no-cache, must-revalidate

Connection: Keep-Alive

Content-Length: 0

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; frame-src *; img-src * data: blob:; font-src 'self' data:; media-src *; connect-src *

Content-Type: text/html; charset=UTF-8

Date: Mon, 25 Apr 2022 08:11:16 GMT

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Keep-Alive: timeout=5, max=100

Location: http://172.33.33.155:8080/login

Pragma: no-cache

Server: Apache

Set-Cookie: ocotw0g9mr5d=3lm6u16ukcur3cs5imt7manruq; path=/; HttpOnly; SameSite=Strict

Set-Cookie: oc_sessionPassphrase=b3SLHSsJH%2BZzFq0ynRp3nMQFoF2NIxojczaPLxeDZMaxkFP1XB37%2FKHQKGIzppZ4f%2F21VPQkwoda6UJNbRnLZqGdOy8wgcoGPfCTp4nH5ppSslMb%2FbO0wnit0pu2%2BO5K; path=/; HttpOnly; SameSite=Strict

X-Content-Type-Options: nosniff

X-Download-Options: noopen

X-Frame-Options: SAMEORIGIN

X-Permitted-Cross-Domain-Policies: none

X-Robots-Tag: none

X-XSS-Protection: 0

ekzorchik@srv-bionic:~$

Вывод говорит что на адресе 172.33.33.155 и порт 8080 присутствует сервис, также вывод выше эквивалентен если использовать curl -I http://IP:8080

Итого, я получил опыт развертывания сервиса OwnCloud в докере и помощь коллеге которые обратился ко мне в телеграм, на тему почему правда у него при настроенном DMZ к системе где докер не работает доступ из вне. Выше я использую проброс порта и все завелось.

Как по мне я пока за использование полнофункциональной системы со своими наработками поднятия сервиса, а не работу в Docker – одним словом не вижу для себя практической значимости его использования.

На этом заметка завершена. С уважением автор блога Олло Александр aka ekzorchik.