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

///
5 mins read

Содержание

  • Установка 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
Previous Story

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

Next Story

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

Latest from Blog

dd

dd (dataset definition) — программа UNIX, предназначенная как для копирования, так и для конвертации файлов. Название унаследовано от оператора DD

0 £0.00