0

Nextcloud: запуск в Docker Compose с SSL от Let’s Encrypt

Содержание

  • Установка Docker и Docker Compose
  • Запуск Nexcloud
    • nginx-proxy
    • Let’s Encrypt Docker
    • MariaDB в Docker
    • Nextcloud
  • Настройка Nextcloud
  • Tags и полный docker-compose файл
  • systemd

Для запуска создадим Docker Compose стек, в котором будут:

  • NGINX: проксирующий веб-сервер
  • Lets Encrypt: клиент для генерации и обновления SSL-сертификатов
  • MariaDB: сервер баз данных для хранения настроек Nextcloud
  • Nextcloud: контейнер с PHP-FPM и исходным кодом Nextcloud

Документация

Для SSL используем клиент Lets Encrypt из docker-образа docker-letsencrypt-nginx-proxy-companion.

Установка Docker и Docker Compose

Создаём каталог для файла Compose:

~# mkdir /opt/nextcloud
~# cd /opt/nextcloud/

Приступаем к созданию стека.

Запуск Nexcloud

nginx-proxy

Создаём каталоги для файлов NGINX и Lets Encrypt:

# mkdir -p /data/nextcloud/nginx/{certs,vhost.d,html}

Создаём файл /opt/nextcloud/nextcloud-compose.yml:

version: '3'

services:

  nginx-proxy:
    image: jwilder/nginx-proxy:latest
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
    container_name: nextcloud-proxy
    networks:
      - nextcloud_network
    ports:
      - 80:80
      - 443:443
    volumes:
      - /data/nextcloud/nginx/vhost.d:/etc/nginx/vhost.d:rw
      - /data/nextcloud/nginx/html:/usr/share/nginx/html:rw
      - /data/nextcloud/nginx/certs:/etc/nginx/certs:ro
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: unless-stopped

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion:v1.12
    container_name: nextcloud-letsencrypt
    depends_on:
      - nginx-proxy
    networks:
      - nextcloud_network
    volumes:
      - /data/nextcloud/nginx/vhost.d:/etc/nginx/vhost.d:rw
      - /data/nextcloud/nginx/html:/usr/share/nginx/html:rw
      - /data/nextcloud/nginx/certs:/etc/nginx/certs:rw
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: unless-stopped

  mysql:
    image: mariadb:latest
    container_name: nextcloud-mysql
    networks:
      - nextcloud_network
    volumes:
      - /data/nextcloud/mysql:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MYSQL_ROOT_PASSWORD=mysql-root-p@ssw0rd
      - MYSQL_PASSWORD=nextcloud-p@ssw0rd
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    restart: unless-stopped

  nextcloud-app:
    image: nextcloud:20.0.7-apache
    container_name: nextcloud-app
    networks:
      - nextcloud_network
    depends_on:
      - letsencrypt
      - nginx-proxy
      - mysql
    volumes:
      - /data/nextcloud/app/html:/var/www/html
      - /data/nextcloud/app/config:/var/www/html/config
      - /data/nextcloud/app/custom_apps:/var/www/html/custom_apps
      - /data/nextcloud/app/data:/var/www/html/data
      - /data/nextcloud/app/themes:/var/www/html/themes
      - /etc/localtime:/etc/localtime:ro
    environment:
      - VIRTUAL_HOST=cloud.example.org
      - LETSENCRYPT_HOST=cloud.example.org
      - LETSENCRYPT_EMAIL=root@example.org
    restart: unless-stopped

networks:
  nextcloud_network:

Let’s Encrypt сгенерировал сертификат — проверяем:

MariaDB в Docker

Что бы хранить данные постоянно — создаём каталог:

# mkdir /data/nextcloud/mysql

Проверяем данные на диске:

# ll /data/nextcloud/mysql/

Nextcloud

Создаём каталоги:

# mkdir -p /data/nextcloud/app/{config,custom_apps,data,themes,html}

В файле Compose – Переменная VIRTUAL_HOST используется nginx-proxy для выбора направления что и куда проксировать, а LETSENCRYPT_HOST — самим Lets Encrypt контейнером для выбора имени хоста, для которого будет сгенерирован сертификат. См. документацию тут>>>.

Запускаем стек:

# docker-compose -f nextcloud-compose.yml up --force-recreate

Идем в браузер:

Настройка Nextcloud

адрес сервера баз данных указываем в том виде, в котором он указан в Compose-файле, т.е. в данном примере mysql — Docker сам выполнит DNS-resolution по имени контейнера в его IP из сети nextcloud_network:

systemd

Последним шагом — создаём systemd unit-файл для сервиса, как описано в посте Linux: systemd сервис для Docker Compose, назовём его /etc/systemd/system/nextcloud.service:

[Unit]
Description=Nextcloud stack
Requires=docker.service
After=docker.service

[Service]
Restart=always
WorkingDirectory=/opt/nextcloud
ExecStart=/usr/local/bin/docker-compose -f nextcloud-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f nextcloud-compose.yml down                                                                                                                                                                          

[Install]
WantedBy=multi-user.target

Запускаем сервис:

# systemctl start nextcloud
# systemctl status nextcloud
# systemctl enable nextcloud
Облачная платформа

Свежие комментарии

Подписка

Лучшие статьи

Как обойти блокировку Docker Hub

30.05.2024 Docker добавил Россию в список стран, которым заблокирован доступ к репозиторию Docker Hub. Docker Hub – основной источник образов для контейнеров. При

Рубрики

Популярное

1 docker

Установка Docker, Docker-Compose на Centos Stream.

Удалите старые версии: Старые версии Docker назывались docker или docker-engine. Если они установлены, удалите их вместе с соответствующими зависимостями. Установка с помощью репозитория: Перед первой
2

KUBERNETES

Сегодня мы поговорим о Kubernetes: в частности о теме microk8s vs minikube, kompose и helm. Обзорная экскурсия, так сказать. Написать статью о
3

Zabbix on Docker

Предпологается что у вас уже установлен Docker-Compose. Инструкцию по установке можете почитать тут Разверните zabbix с помощью Docker-compose: Сначала создайте папку, а
Previous Story

Использования команды dig для просмотра параметров DNS (DNS Lookup) в Linux

iptables
Next Story

Первичная настройка IPTables

Latest from Blog

Проброс портов в роутере MikroTik 2

Проброс портов в роутере MikroTik (port forwarding) позволяет организовать удаленный доступ из интернета к какому-нибудь устройству внутри вашей локальной сети (к IP-камере, Web, FTP или игровому серверу). В данной статье мы рассмотрим пример, как

How to set up WireGuard Client on Debian?

WireGuard is an extremely simple yet fast and modern VPN. Setting up the WireGuard VPN client on Debian is straightforward. In this tutorial, we will set up WireGuard VPN client on Debian
Go toTop

Don't Miss

Как обойти блокировку Docker Hub

30.05.2024 Docker добавил Россию в список стран, которым заблокирован доступ

Jenkins

Cистема с открытым исходным кодом, то есть продукт доступен для