Запуск Next Cloud в облаке Selectel

Оцените статью

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

Что собственно планирую сделать

Next Cloud в облаке Selectel

Для запуска нашего 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

Виртуальная сеть

Переходим в раздел Облачные серверы -> Сеть -> Приватная сеть -> Создать сеть.

Selectel создать приватную сеть.

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

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

Регистрация публичного IP-адреса.

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

200 рублей в месяц

Облачные серверы

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

Создаем облачный сервер.

Сервер создаем на базе Ubuntu 24.04 в конфигурации Standart.

  • 2 vCPU на выделенных ядрах
  • 4 ГБ RAM
  • 16 ГБ Универсальный SSD диск
Итого получается 2 566,28 ₽ в месяц.

Итого получается 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-серверами.

DNS-запись для Next Cloud

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

Группа безопасности по умолчанию.

Лучше отредактировать правила и разрешить только порты 22, 80 и 443.

Проверяем, что Next Cloud теперь доступен из интернет

Просто переходим по адресу https://cloud.interlan.xyz/login.

Next Cloud работает

Запуск с использованием подготовленного шаблона VPS

Как я сказал в самом начале у Selectel есть возможность использовать предварительно подготовленный шаблон VPS с уже настроенным Next Cloud и давайте сейчас рассмотрим и этот вариант.

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

Selectel удалить VPS-сервер.

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

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

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

Новый публичный IP-адрес

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

Шаблон VPS для Next Cloud

Для автоматической подготовки сервера заполняем раздел «Автоматизация».

#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-интерфейса.

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

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

SelectOS от Selectel

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

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

Фактически на запуск собственного Next Cloud сервера ушло меньше пяти минут. И продолжаем делать наш Next Cloud сервер более облачным.

Облачный кластер Postgresql от Selectel

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

Облачный кластер баз данных от 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-ключами создаем ключ доступа.

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

S3 ключи

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

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

Переходим к настройке Next Cloud.

Подключаем объектное хранилище к Next Cloud

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

Next Cloud раздел Приложения

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

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 удалить все компоненты этого эксперимента.

Похожие записи

Настройка взаимодействия RED ADM и Windows Active Directory

Сегодня проведем несколько экспериментов по настройке взаимодействия RED ADM и Windows Active Directory. Есть несколько способов настройки доверия для упрощения миграции с решений Microsoft на Российское ПО и сегодня их…

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Так как на севере делать абсолютно нечего, то я продолжаю заниматься саморазвитием 🙂 На этой неделе вспоминаю и углубляю свои знания в Docker. Лучший способ запомнить тему, это вести конспект…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Настройка взаимодействия RED ADM и Windows Active Directory

Настройка взаимодействия RED ADM и Windows Active Directory

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Установка основного контроллера домена на базе REDADM

Установка основного контроллера домена на базе REDADM

zVirt работа с шаблонами виртуальных машин

zVirt работа с шаблонами виртуальных машин

Подробная инструкция по работе с томами (volumes) в Docker

Подробная инструкция по работе с томами (volumes) в Docker

Сетевые возможности Docker

Сетевые возможности Docker