# Установка NextCloud на VPS под управлением Ubuntu при помощи Docker Compose

NextCloud — набор клиент-серверных программ, позволяющих организовать файловое хранилище как на хостинге, так и на VPS. В этой инструкции мы расскажем, как установить NextCloud на VPS под управлением Ubuntu.

Для начала работы нам понадобится предварительно настроенный сервер под управлением Ubuntu с предустановленным Docker и Docker-Compose.

# Установка NextCloud

Одно из преимуществ использования Docker-Compose — это возможность указать в одном конфигурационном файле все необходимые образы для установки и затем одной командой установить полноценную сборку.

Перед началом работы с конфигурационнным файлом создадим внутреннюю сеть, в которую будут включены все необходимые контейнеры, обеспечивающие работу NextCloud:

docker network create nextcloud_network

Эта команда создаст сеть nextcloud_network, в которой впоследствии будут размещаться контейнеры с образами.

Перейдём непосредственно к созданию конфигурационного файла и работе с образами.

Для работы NextCloud нам понадобится сам образ NextCloud, веб-сервер и система управления базами данных. В качестве веб-сервера будем использовать Nginx, а для работы с базами данных установим MariaDB.

Для начала работы создадим отдельную папку для Next Cloud и перейдём в неё:

mkdir nextcloud
cd nextcloud

Здесь создадим файл docker-compose.yml:

vim docker-compose.yml

В открывшемся пустом текстовом файле создадим первый блок для определния веб-сервера, который будем использовать в качестве прокси:

version: '3'  

services:

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

Здесь мы определили версию compose-файла и указали конкретный образ Nginx, который будем использовать в качестве прокси-сервера.

Далее переходим к базам данных. В этом же файле добавляем следующий блок:

db:
    image: mariadb
    container_name: nextcloud-mariadb
    networks:
      - nextcloud_network
    volumes:
      - db:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_PASSWORD=mysql
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    restart: unless-stopped

Это блок, в котором мы определили образ MariaDB и указали пароль для root-пользователя, новую базу данных для работы NextCloud, нового пользователя для неё и его пароль.

Далее указываем непосредственно образ NextCloud:

app:
    image: nextcloud:latest
    container_name: nextcloud-app
    networks:
      - nextcloud_network
    depends_on:
      - proxy
      - db
    volumes:
      - nextcloud:/var/www/html
      - ./app/config:/var/www/html/config
      - ./app/custom_apps:/var/www/html/custom_apps
      - ./app/data:/var/www/html/data
      - ./app/themes:/var/www/html/themes
      - /etc/localtime:/etc/localtime:ro
    environment:
      - VIRTUAL_HOST=nextcloud.YOUR-DOMAIN
    restart: unless-stopped

В строке VIRTUAL_HOST нужно указать адрес домена, на котором будем запускать NextCloud. Последнее, что нужно добавить в compose-файл, — это описание сети и томов:

volumes:
  nextcloud:
  db:

networks:
  nextcloud_network:

Теперь можно сохранять файл и запускать сборку:

sudo docker-compose up -d

Если не было ошибок при создании compose-файла, образ должен успешно собраться и стартовать. Проверить его работу можно следующей командой:

sudo docker ps -a

#Output

CONTAINER ID   IMAGE                        COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
c332505a3cde   nextcloud:latest             "/entrypoint.sh apac…"   2 hours ago   Up 2 hours   80/tcp                                                                     nextcloud-app
76ba29e7ba70   jwilder/nginx-proxy:alpine   "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nextcloud-proxy
3c75fae62a68   mariadb                      "docker-entrypoint.s…"   2 hours ago   Up 2 hours   3306/tcp                                                                   nextcloud-mariadb

После того как наша сборка будет установлена и запущена, можно начинать работу с NextCloud. Для этого в браузере зайдите по адресу, указанному в строке VIRTUAL_HOST из блока с описанием NextCloud.

Вы должны увидеть стартовую страницу приложения.

Готово — мы установили NextCloud на VPS под управлением Ubuntu.