Содержание
- Установка 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
Свежие комментарии