Хочу разобрать, как развернуть 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
И я успешно авторизован.
Шаг №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.