Перенос существующего userside в контейнерную версию¶
Это не инструкция по обновлению моей версии с предыдущей на новую. Это инструкция по переходу от обычной версии userside на мою версию в докере. Если вы ищите инструкцию по обновлению моей версии, то она здесь.
Вам не нужно устанавливать PHP или Postgres или что-то еще, что не указано в этой инструкции. После перехода на мою версию вам больше не понадобятся на этом сервере PHP, Postgres и все остальное, если оно не используется на сервере где-то еще. Nginx может использоваться и далее как реверсивный прокси, например, для SSL.
Если какой-то из пунктов не удается выполнить — напишите мне в телеграм-бот. Не пытайтесь выполнить следом идущие пункты, перепрыгнув через проблемный. Это не сработает.
Версии, с которых возможен переход¶
Технически переход возможен с версии 3.12 и новее (в том числе network), но фактически переход с версий 3.12 - 3.14 не может быть предсказуем по разным причинам. На данный момент есть достаточный положительный опыт перехода с версий 3.17, 3.16 и 3.15.
Стоит отметить, что даже в официальной документации userside указано, что рекомендуется поэтапное обновление (когда для обновления с 3.12 на 3.18 сначала обновляются на 3.13, затем на 3.14 и т.д.), чего моя сборка не может обеспечить по простой причине — она имеет версию 3.18 и использует PHP 8.1. Также из документации и опыта общения с коллегами можно сделать вывод, что успех обновления очень сильно зависит от конкретных данных в базе данных, что в определенных случаях может приводить к проблемам с миграциями. Это, к сожалению, предсказать нельзя. Только разбираться по факту, что не так с данными.
Обратите внимание!¶
У вас может быть два варианта уже установленного userside (или userside network):
userside установлен прямо на хост. Вы устанавливали самостоятельно nginx, php, postgres и т.д. на вашу операционную систему и затем устанавливали userside по инструкции в каталог
/var/www/userside
.userside установлен в докер-бандл. Вы установили докер, затем установили docker-bundle от userside по этой инструкции в каталог
/docker/userside
.
От способа установки текущей обычной версии, с которой вы собираетесь перейти на мою версию, зависят некоторые пункты дальнейшей инструкции. Будьте внимательны!
Последовательность действий¶
Установить Docker Engine Server и плагин Compose v2 последних версий. Официальная документация. Проще всего это сделать при помощи автоматического скрипта https://get.docker.com/:
sudo curl -fsSL get.docker.com | sh sudo gpasswd -a $USER docker newgrp docker
Создать структуру каталогов для набора контейнеров. Создать каталог, в котором будет размещен весь набор контейнеров, например
/opt/userside
, перейти в него. Создать в нем структуру каталогов, в которых будут размещаться данные.sudo mkdir -p /opt/userside cd /opt/userside sudo mkdir -p data/{var,backup,database} sudo chown -R 82:82 data
Важно
Все остальные пункты инструкции подразумевают, что текущим активным каталогом является
/opt/userside
.Скачать архив с примерами конфигов, разархивировать и скопировать в текуший каталог файлы
.env
иdocker-compose.yaml
из него.sudo curl http://uscr.duckdns.org/config.tgz -o config.tgz sudo tar xzf config.tgz sudo cp config-examples/.env ./ sudo cp config-examples/docker-compose.yaml ./
Отредактировать конфигурационные файлы
.env
иdocker-compose.yaml
. В.env
файле вписать: URL userside и пароли для postgres, redis, rabbitmq, websocket. Эти пароли не придется нигде вводить дополнительно, так что можно сгенерировать один раз сложные пароли, вписать и не возвращаться к этому вопросу. Избегайте использования символов из набора$@#\/
.Если порт
80
на вашем сервере занят, например, web-сервером, то вdocker-compose.yaml
для сервисаuserside
нужно изменить номер порта (слева от двоеточия), например на8080
или на любой другой и userside будет доступен на этом порту:services: userside: ports: - 8080:80
Предупреждение
Порт справа от двоеточия должен быть всегда 80. Формат YAML чувствителен к форматированию. Следите за отступами.
Если вы не собираетесь использовать реверсивный прокси перед контейнером
userside
, то вам также нужно будет добавить этот порт к URL в переменнойUS_URL
файла.env
.Остановить существующий стационарный userside. Остановить службу
php-fpm
и отключить запуск модулей и userside cron в crontab. Если используется docker-bundle от userside, то остановить существующий docker-бандл по инструкции бандла.Запустить только сервис postgres в новом userside.
docker compose up -d postgres
И дождаться его запуска. Выполняйте следующую команду несколько раз, чтобы проверить состояние. Оно должно быть:
Up xx seconds/minutes (healthy)
.docker compose ps postgres
Скопировать базу данных из старого userside в новый. Выберите одно из действий в зависимости от варианта текущей установки.
Если старый userside установлен прямо на хост, просто выполните команду (скопируйте целиком):
sudo -u postgres pg_dump --no-owner --no-acl \ --quote-all-identifiers -Fp -d userside \ | docker compose exec -T postgres psql -U userside
Скорее всего название вашей прежней базы данных
userside
, но если это не так, то измените название базы данных на правильное (значение опции-d
в третей строке).В процессе следить за выводом. Если будут ошибки, сообщите мне в телеграм-бот.
Если используется docker-bundle от userside, то нужно будет сначала перейти в каталог с прежним docker-бандлом, выполнить команду резервного копирования, затем вернуться в каталог
/opt/userside
и выполнить команду восстановления:cd /docker/userside docker compose run --rm postgres pg_dump -U userside \ --no-owner --no-acl --quote-all-identifiers -Fp -Z 5 \ -d userside > /opt/userside/userside.sql.gz cd /opt/userside gunzip < userside.sql.gz \ | docker compose exec -T postgres psql -U userside
В процессе следить за выводом. Если будут ошибки, сообщите мне в телеграм-бот.
Скопировать файлы из старого userside в новый.
Файл settings.json
Если текущий userside установлен на хост:
sudo cp /var/www/userside/common/config/settings.json data/settings.json
Если текуший userside установлен в docker-bundle от userside:
sudo cp /docker/userside/data/userside/common/config/settings.json data/settings.json
Файлы вложений. Выберите одно из действий в зависимости от варианта текущей установки
Если текущий userside установлен на хост и его версия 3.15 или новее:
sudo cp -r /var/www/userside/var/attachments data/var/attachments
Если текущий userside установлен на хост и его версия 3.12 - 3.14:
sudo mkdir -p data/var/attachments/legacy sudo cp -r /var/www/userside/userside3/main/attach data/var/attachments/legacy
Если текущий userside установлен в docker-bundle от userside:
sudo cp -r /docker/userside/data/userside/var/attachments data/var/attachments
Изменить владельца и права доступа для подкаталога data.
sudo chown -R 82:82 data/var data/settings.json sudo chmod -R u=rwX,g=rX,o=rX data/var
Запустить все остальные контейнеры набора.
docker compose up -d
Сначала будут загружены образы контейнеров, затем будут запущены контейнеры. После чего начнется процесс миграции, который может длиться очень долго в зависимости от количества данных в базе, от версии userside, с которой выполняется переход. Миграции могут выполняться как за несколько минут, так и за несколько часов. Наблюдать за логом выполнения можно командой:
docker compose logs --no-log-prefix -f userside
Выход Ctrl + C
Проверить успешность выполнения миграций. Перед тем как продолжить, необходимо убедиться, что миграции завершились успешно. Если вдруг вы не следили за логом миграций (команда в пункте выше), то вы можете посмотреть последние строки файла лога миграций при помощи команды:
tail data/var/log/migrations.log
Посоедние строки этого файла, говорящие об успешности завершения миграций, выглядят так:
xxx migrations were applied. Migrated up successfully.
Если вместо этого текста вы видите следующий текст:
Migration failed. The rest of the migrations are canceled.
то остановите набор контейнеров и напишите мне в телеграм-бот.
docker compose stop
Как только все миграции завершатся успешно, можно открывать userside в браузере. По умолчанию userside будет доступен на IP-адресе вашего сервера и указанном в
docker-compose.yaml
порту. Если вам нужно использовать доменное имя или SSL, вы можете настроить реверсивный прокси nginx спереди контенейра. Смотрите ниже.На этом перенос завершен.
Опционально: использование SSL. Настройте реверсивный прокси на nginx (устанавливается вами самостоятельно), на котором настройте и SSL. Пример конфигурации реверсивного прокси находится в файле
nginx/nginx-reverse-proxy.conf
из архива примеров, который вы скачали. В примере показано, как можно проксировать запросы к контейнеру. Для работы в таком режиме нужно внести некоторые изменения в файлdocker-compose.yaml
, а именно настройка портов для сервисаuserside
иrabitmq
должна быть такой:services: userside: ports: - 127.0.0.1:8080:80 rabitmq: ports: - 127.0.0.1:15674:15674
После изменения конфигурации
docker-compose.yaml
необхоимо остановить и снова запустить набор контейнеров:docker compose stop docker compose up -d
Также обязательно измените значение
US_URL
в файле.env
на то, что указано в реверсивном прокси и используется для доступа к userside.Опционально: Тюнинг.
В контейнере
userside
уже выполнены все необходимые настройки менеджера процессов PHP-FPM и в дополнительной настройке он не нуждается.Контейнер
postgres
может быть настроен на более лучшую производительность. Обратитесь к статье по тюнингу PostgreSQL. Рекомендую использовать SQL-командыALTER SYSTEM
вместо редактирование конфигурационного файла, но если вам нравится вносить изменения непосредственно в файлpostgresql.conf
, то он находится по пути:data/database/postgresql.conf
.Чтобы выполнить необходимые команды
ALTER SYSTEM
вам нужно подключиться к PostgreSQL при помощи утилиты psql. Это можно сделать двумя способами:Через контейнер userside:
docker compose exec userside psql
Напрямую к контейнеру postgres (здесь нужно обязатено указать имя пользователя БД):
docker compose exec postgres psql -U userside
Выполните все необходимые команды
ALTER SYSTEM
и завериште работу утилиты введя\q
(или нажав Ctrl + D).После изменения настроек нужно перезапустить весь набор контейнеров:
docker compose restart