Леонид МаслаковLenpaste

Установка Nextcloud в Docker

25.11.2021 (изменён 15.10.2023)

Nextcloud является отличной альтернативой Яндекс Диску или Google Drive, которую вы можете разместить на своём сервере.

В этой статье описана установка Nextcloud с помощью Docker Compose на сервер с Ubuntu/Debian, а так же настройка Nginx в качестве реверс прокси.

Требования к серверу такие:

  • операционная система Ubuntu/Debian;
  • 1 ядро процессора,
  • 512Мб ОЗУ,
  • 5 Гб свободного места на диске.

Так же можно использовать свой домен, но если его нет, то вместо __ДОМЕН_ТУТ__ следует указывать IP адрес сервера.

Установка и запуск Nextcloud

Установим Docker, Docker Compose, а так же редактор Micro на сервер:

apt update
apt install docker.io docker-compose micro

Создаём папку для хранения настроек и базы данных:

mkdir -p /srv/nextcloud
chmod -R 750 /srv/nextcloud
cd /srv/nextcloud/

Теперь нужно написать файл docker-compose.yml:

micro ./docker-compose.yml
version: "2"

services:
  nextcloud_db:
    # Лучше всегда указывать конкретную версию образа
    # что избежать "неожиданного" обновления до более новой версии.
    # То есть "postgres:14.9", а не "postgres:latest".
    #
    # Тоже самое касается Nextcloud,
    # то есть "nextcloud:27.1.2", а не "nextcloud:latest".
    image: postgres:14.9
    environment:
      - PGDATA=/var/lib/postgresql/data/pgdata
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=pass
    volumes:
      - "${PWD}/db:/var/lib/postgresql/data"

  nextcloud:
    image: nextcloud:27.1.2
    volumes:
      - "${PWD}/nextcloud/custom_apps:/var/www/html/custom_apps"
      - "${PWD}/nextcloud/config:/var/www/html/config"
      - "${PWD}/nextcloud/data:/var/www/html/data"
    ports:
      - "127.0.0.1:3040:80"
    depends_on:
      - nextcloud_db

CTRL+S - сохранить, CTRL+Q - выйти.

Запускаем Nextcloud и Postgres:

docker-compose up -d

Проверяем что БД и Nextcloud успешно запустились:

docker-compose ps

Результат должен быть примерно таким, рядом с “nextcloud_nextcloud_1” и “nextcloud_nextcloud_db_1” должно быть написано “Up”:

Если вы перезагрузите сервер, то БД и Nextcloud запустятся повторно автоматически.

Установка и настройка Nginx

Я рекомендую устанавливать Nginx в Docker, а напрямую на хост. Такой подход позволяет запускать несколько независимых docker-compose.yml, легче управлять SSL сертификатами, обслуживать IPv6 адреса, а также избегать простоя при обновлении Docker.

Устанавливаем Nginx на сервер:

apt install nginx

Запускаем Nginx и добавляем его в автозагрузку:

systemctl start nginx.service
systemctl enable nginx.service

Теперь нужно сконфигурировать Nginx:

micro /etc/nginx/sites-available/__ДОМЕН_ТУТ__
server {
	server_name __ДОМЕН_ТУТ__;
	listen 80;
	listen [::]:80;

    client_max_body_size 512M;
    client_body_timeout 300s;

	add_header Strict-Transport-Security 15552000;

	access_log /var/log/nginx/__ДОМЕН_ТУТ__.access.log combined;
	
	location / {
		proxy_pass http://localhost:3040/;
	}

	location ^~ /.well-known {
		location = /.well-known/carddav     { return 301 /remote.php/dav/; }
		location = /.well-known/caldav      { return 301 /remote.php/dav/; }

		location ^~ /.well-known            { return 301 /index.php$uri; }

		try_files $uri $uri/ =404;
	}

	// Запретить индексировать сайта поисковым системам (Яндексу, Гуглу).
	location = /robots.txt {
		return 200 'User-agent: *\nDisallow: /\n';
	}
}

Включаем конфигурацию и перезапускаем Nginx:

ln -s /etc/nginx/sites-available/__ДОМЕН_ТУТ__ /etc/nginx/sites-enabled/__ДОМЕН_ТУТ__
nginx -s reload

Если вы всё сделали правильно, то при переходе на http://__ДОМЕН_ТУТ__ вы увидите страницу с предложением настроить Nextcloud.

Добавление SSL сертификата

Этот шаг является необязательным, но я настоятельно рекомендую его выполнить, так как это позволит защитить ваши данные от перехвата между сервером и клиентом.

Устанавливаем Certbot:

apt install certbot python3-certbot-nginx

Запрашиваем SSL сертефикат у Let’s Encrypt:

certbot --nginx -d __ДОМЕН_ТУТ__

Дальше нужно будет указать адрес электронной почты, принять условия лицензии и согласиться или отказаться от получения новостных рассылок.

Если всё прошло успешно, то будет выведено такое сообщение:

Теперь по при переходе на https://__ДОМЕН_ТУТ__ будет открываться версия сайта, защищённая HTTPS.

Настройка Nextcloud

После запуска Nextcloud в первый раз нужно его настроить из веб-интерфейса.

На странице по адресу https://__ДОМЕН_ТУТ__ нужно указать логин и пароль от аккаунта администратора, а так же реквизиты для подключения к БД Postgres. Следует несколько раз проверить что выбран именно Postgres, а не SQLite, так как изменить этот выбор в будущем будет проблематично.

Вводим всё как на скриншоте, после чего нажимаем “Install” и ждём. Ждать придётся долго, минут 5-10.

На следующем шаге Nexcloud предлагает установить рекомендуемые приложения. Устанавливать или нет - это выбор каждого, в случаи чего установленные приложения можно будет удалить в любой момент.

Всё, установка завершена.

Изменение config.php

Nextcloud почти настроен, но остались вещи которые следует поменять в конфиге.

Первое изменения которое нужно сделать - это указать правильный домен и протокол:

micro /srv/nextcloud/nextcloud/config/config.php

Допишите следующие:

.....
  'overwritehost' => '__ДОМЕН_ТУТ__',
  'overwriteprotocol' => 'https',
);

Также следует поменять параметр “overwrite.cli.url”:

.....
  'overwrite.cli.url' => 'https://__ДОМЕН_ТУТ__',
.....

Перезапускать Nextcloud не требуется, конфиг примениться сразу после того как вы его сохраните.

Ссылки