Selectel мне прислал письмо, что я еще не все деньги из тестового гранта потратил и надо исправить это досадное упущение. И правильно, что напомнили я как раз хотел вспомнить как устанавливать и настраивать Next Cloud раз уж я решил съехать с Яндекс 360.
Что собственно планирую сделать

Для запуска нашего Next Cloud как я уже говорил будем использовать окружение облачного провайдера Selectel.
Что нам потребуется настроит в рамках настройки облачного окружения:
- Внешний IP-адрес
- Виртуальный Firewall
- Внутренняя виртуальная сеть
- VPS-сервер для запуска LNPP (Linux Nginx Postgresql PHP — как замена LAMP)
- S3 хранилище
- Managed Postgresql
Выглядит как нечто очень сложное, но на самом деле все это хозяйство настраивается очень просто. Причем, если говорить про VPS-сервер, то у Selectel имеются готовые образы как для запуска LAMP, так и уже готовый сервер с Next Cloud и естественно чистый образ с Linux на любой вкус и цвет. И мы в рамках этой статьи рассмотрим все варианты.
Пожалуйста, если вы захотите повторить все описанное в этой статье воспользуйтесь при заказе моей реферальной ссылкой это меня сподвигнет и дальше рассказывать про этого облачного провайдера и не тратить при этом свои деньги. Заранее спасибо https://selectel.ru/?ref_code=ca6dbd2e7e.
Подготовка окружения в облаке Selectel
Виртуальная сеть
Переходим в раздел Облачные серверы -> Сеть -> Приватная сеть -> Создать сеть.

Создаем приватную подсеть 192.168.90.0/24 и активируем в подсети DHCP-сервер.

Переходим в раздел публичные IP-адреса и регистрируем внешний IP-адрес который будем использовать для доступа к серверу в приватной подсети.

Получается 200 рублей в месяц. В принципе средий по рынку ценник.

Облачные серверы
Переходим в раздел Облачные серверы и создаем VPS.

Сервер создаем на базе Ubuntu 24.04 в конфигурации Standart.
- 2 vCPU на выделенных ядрах
- 4 ГБ RAM
- 16 ГБ Универсальный SSD диск

Итого получается 2 566,28 ₽ в месяц.
Настраиваем авторизацию по ключу.

Настраиваем публичный адрес и приватную подсеть.

Выбираем создать сервер.

Авторизуемся на сервере.
$ ssh root@178.72.128.175
Установка ПО
Для установки окружения для запуска воспользуемся Ansible Playbook который я разместил в своем репозитории.
Подготовим Inventory-файл ansible-nextcloud/inventory.ini.
[webservers]
nextcloud-server ansible_host=178.72.128.175 ansible_user=root
[webservers:vars]
ansible_python_interpreter=/usr/bin/python3
Настроим групповые переменные в файле ansible-nextcloud/group_vars/all.yml.
---
# Nextcloud version
nextcloud_version: "28.0.3"
nextcloud_domain: "cloud.interlan.xyz"
nextcloud_admin_user: "admin"
nextcloud_admin_password: "Qazxsw123"
# PostgreSQL settings
db_name: "nextcloud_db"
db_user: "nextcloud_user"
db_password: "Qazxsw123"
db_host: "localhost"
# PHP version
php_version: "8.3"
# Nginx settings
nginx_worker_processes: "auto"
nginx_worker_connections: 1024
# Nextcloud data directory
nextcloud_data_dir: "/var/www/nextcloud/data"
nextcloud_web_root: "/var/www/nextcloud"
# Let's Encrypt (set to true to enable SSL via certbot)
use_ssl: true
letsencrypt_email: "chernousov@interlan.xyz"
Применяем Play Book на созданный сервер и первым этапом подготовим сервер.
$ cd ./ansible-nextcloud/
$ ansible-playbook site.yml
Следующим этапом развернем Next Cloud командой.
$ ansible-playbook install.yml
Настраиваем WEB-доступ и сертификат SSL
Прописываем DNS-запись для домена и у меня используется Free IPA для управления DNS-серверами.

Группа доступа по умолчанию разрешает любой входящий трафик до сервера.

Лучше отредактировать правила и разрешить только порты 22, 80 и 443.
Проверяем, что Next Cloud теперь доступен из интернет
Просто переходим по адресу https://cloud.interlan.xyz/login.

Запуск с использованием подготовленного шаблона VPS
Как я сказал в самом начале у Selectel есть возможность использовать предварительно подготовленный шаблон VPS с уже настроенным Next Cloud и давайте сейчас рассмотрим и этот вариант.
Удаляем наш сервер который мы подготовили при помощи Ansible Playbook. Переходим в раздел Продукты -> Облачные серверы и выбираем Удалить сервер.

Подтверждаем, что сервер нам больше не нужен.

Прежде всего создаем публичный IP-адрес и привязываем к нему DNS-имя. На этапе подготовки сервера будет получен SSL-сертификат Let’s encrypt и если не выполнить эту часть сертификат получен не будет.

Переходим к созданию сервера и теперь источник выбираем на вкладке приложение.

Для автоматической подготовки сервера заполняем раздел «Автоматизация».
#cloud-config
write_files:
- path: "/opt/main.yml"
permissions: "0644"
content: |
nextcloud_admin_name: "administrator"
nextcloud_admin_pwd: "xxxPASSWORDxxx"
nextcloud_admin_email: "chernousov@interlan.xyz"
nextcloud_domain: "cloud.interlan.xyz"

Ждем окончания создания сервера и пробуем подключиться по ssh и проверяем доступность web-интерфейса.

При авторизации нас встречает такое веселое приветствие.

Веб интерфейс так-же доступен.

Фактически на запуск собственного Next Cloud сервера ушло меньше пяти минут. И продолжаем делать наш Next Cloud сервер более облачным.
Облачный кластер Postgresql от Selectel
Переходим в раздел базы данных и выбираем «Создать кластер».

Настраиваем конфигурацию.
- Указываем имя кластера
- Тип кластера Postgresql
- Версия Postgresql (в моем случае 16)
- Конфигурация ноды (в моем случае стандарт как и с VPS)
- Отказоустойчивость два узла
- Логирование если требуется
- Выбираем внутреннюю сеть если у нас их несколько

Вот в принципе и все и можно создавать кластер. Цена получается 11 532 рубля в месяц, что дороговато для Next Cloud, но нам просто на поиграться. Создание кластера занимает примерно 15 минут.

Переходим в созданный кластер и создаем пользователя базы данных.

Создаем базу данных и назначаем созданного пользователя ее владельцем.

Не забывайте про кодировку, это важно для например 1С.
На вкладке «Подключение» представлены инструкции для подключения к базе в кластере. Естественно, что это подключение действует только во внутренней виртуальной сети и не предназначено для доступа к кластеру из сети интернет. Сейчас переходим на VPS-сервер и пробуем подключиться к базе данных.
Проверяем что хост резолвится в DNS.
# nslookup master.1cad157e-cfb3-4694-8903-0f8fecdfbde3.c.dbaas.selcloud.ru
Server: 188.93.16.19
Address: 188.93.16.19#53
Non-authoritative answer:
master.1cad157e-cfb3-4694-8903-0f8fecdfbde3.c.dbaas.selcloud.ru canonical name = 2eac550d-e8bd-469d-83a6-50445bb93f4f.ru-3.c.dbaas.selcloud.ru.
Name: 2eac550d-e8bd-469d-83a6-50445bb93f4f.ru-3.c.dbaas.selcloud.ru
Address: 192.168.90.106
А вот по telnet нет доступа так-как VPS оказалась в другой подсети.

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

Настройки сети не применяются автоматически и потребуется вручную изменить конфигурацию сети. После внесения правок наш VPS-сервер доступен из интернет и имеет доступ к кластеру баз данных.
# psql "host=master.1cad157e-cfb3-4694-8903-0f8fecdfbde3.c.dbaas.selcloud.ru \
port=5432 \
dbname=nextcloud_db \
user=nextcloud_user \
sslmode=disable"
Password for user nextcloud_user:
psql (15.16 (Selectel 15.16-0+deb12u1), server 16.9 (Ubuntu 16.9-1.pgdg22.04+1ubuntu4))
WARNING: psql major version 15, server major version 16.
Some psql features might not work.
Type "help" for help.
nextcloud_db=>
Как видите мы успешно подключились к базе. Следующим этапом мы перенесем локальную базу в облачную и отключим локальную.
# su postgres
$ psql
psql (15.16 (Selectel 15.16-0+deb12u1))
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
nextcloud | ncadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | ncadmin=CTc/ncadmin
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
(4 rows)
postgres=#
База данных у нас называется nextcloud и нам надо сделать ее дамп и вылить в облако.
Делаем дамп.
$ pg_dump nextcloud > /tmp/dump.sql
Переносим в облако.
$ cat /tmp/dump.sql | psql "host=master.1cad157e-cfb3-4694-8903-0f8fecdfbde3.c.dbaas.selcloud.ru \
port=5432 \
dbname=nextcloud_db \
user=nextcloud_user \
sslmode=disable"
Меняем настройки Next Cloud для использования облачного кластера, а настройки находятся в файле /opt/nextcloud/config/config.php.
'dbname' => 'nextcloud_db',
'dbhost' => 'master.1cad157e-cfb3-4694-8903-0f8fecdfbde3.c.dbaas.selcloud.ru',
'dbtableprefix' => 'oc_',
'dbuser' => 'nextcloud_user',
'dbpassword' => 'Qazxsw123',
Использование S3 хранилища для хранения файлов
И финальное, что мы сделаем, это настроим Next Cloud для использования хранилища S3 как хранилище файлов. Такой подход стоит дешевле чем использовать виртуальный диск, а скорость нам для наших целей не особо принципиальна.
Создаем объектное хранилище S3 в облаке Selectel
Переходим в раздел S3 и создаем Бакет.

При создании задаем.
- Имя бакета (должно быть уникальным)
- Тип — Приватный
- Класс хранения — Стандартный

Хранилище создано и переходим в раздел подключение.

Переходим в раздел «Подключение».

В блоке управление S3-ключами создаем ключ доступа.

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

Задаем ключ доступа.

Переходим к настройке Next Cloud.
Подключаем объектное хранилище к Next Cloud
Далее подключим к Next Cloud приложение для поддержки внешнего хранилища в разделе «Приложения».

Устанавливаем приложение «External Storage Support».

После установки переходим в раздел «Параметры сервера».

Настраиваем внешнее хранилище на уровне сервера для чего переходим Параметры сервера -> Внешнее хранилище.
Выберите тип подключения через Ключ доступа. Внесите данные для авторизации.
- Корзина — имя контейнера, который хотите подключить.
- Имя хоста — URL для доступа: s3.ru-1.storage.selcloud.ru.
- Порт — 443.
- Регион — ru-3.
- Класс хранилища — Стандартное хранение/Холодное хранение. Выбирается в зависимости от указанных настроек при создании контейнера.
- Использовать SSL — использовать SSL при подключении.
- Использовать стиль пути — использовать метода подключения path-style, в котором используется URL вида .s3.storage.selcloud.ru.
- Устаревшая (v2) проверка подлинности — использовать устаревшую проверку подлинности SSL.
- Enable multipart copy — использовать сегментированную загрузку объектов.
- Ключ доступа — Access key.
- Секретный ключ — Secret key.
Например получаются такие настройки.

Вот собственно и все. Возможно кому пригодится эта инструкция, а мне надо на Selectel удалить все компоненты этого эксперимента.





