Установка 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 не требуется, конфиг примениться сразу после того как вы его сохраните.