<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.userside.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Uscld2</id>
	<title>WiKi - UserSide - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.userside.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Uscld2"/>
	<link rel="alternate" type="text/html" href="https://wiki.userside.eu/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Uscld2"/>
	<updated>2026-05-07T21:42:05Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Python-update&amp;diff=21070</id>
		<title>Python-update</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Python-update&amp;diff=21070"/>
		<updated>2026-02-24T10:29:38Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Python-update_EN|en]] | [[Python-update|ru]]&lt;br /&gt;
&lt;br /&gt;
Если версия Python, установленная на вашей ОС, не поддерживается модулями или поллером, то необходимо установить дополнительно новую версию Python, удовлетворяющую всем требованиям.&lt;br /&gt;
&lt;br /&gt;
Важно: Изменять системную версию Python на новую - не рекомендуется! Единственный правильный способ - это установить новую версию параллельно системной. Иначе могут перестать работать различные системные службы и утилиты, использующие Python.&lt;br /&gt;
&lt;br /&gt;
Сначала убедитесь, что у вас установлены все необходимые глобальные пакеты в Python, которые необходимы глобально для запуска виртуального окружения, для сборки других зависимостей.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv pkg-config libffi-dev libssl-dev zlib1g-dev zlibc&lt;br /&gt;
&lt;br /&gt;
После того, как все установлено, зайдите на сайт https://www.python.org/downloads/source/ и скопируйте номер последней версии текущей ветки или предыдущей, если текущая ветка слишком свежая. Например, если последняя версия 3.14.1, то надежней все таки установить версию 3.13.12, т.к. сразу после выхода новой версии (3.14) есть вероятность того, что не все зависимые пакеты ее поддерживают.&lt;br /&gt;
&lt;br /&gt;
Далее вам нужно создать временную переменную окружения, значение которой будет содержать номер версии Python, которую вы собираетесь установить.&lt;br /&gt;
&lt;br /&gt;
 PY_VER=3.13.12&lt;br /&gt;
&lt;br /&gt;
Далее приведены команды, которые вы просто выполняете по одной, одну за другой, чтобы контролировать процесс и в случае ошибки не выполнять остальные команды. Копируйте по одной строке и выполняйте:&lt;br /&gt;
 curl -o python.tgz &amp;quot;https://www.python.org/ftp/python/${PY_VER}/Python-${PY_VER}.tgz&amp;quot;&lt;br /&gt;
 tar xzf python.tgz&lt;br /&gt;
 cd Python-${PY_VER}&lt;br /&gt;
 ./configure --enable-optimizations&lt;br /&gt;
 make -j $(nproc)&lt;br /&gt;
 sudo -H make altinstall&lt;br /&gt;
 curl -sS https://bootstrap.pypa.io/get-pip.py | sudo -H python3.13&lt;br /&gt;
 cd ..&lt;br /&gt;
 sudo rm -rf Python-${PY_VER} python.tgz&lt;br /&gt;
&lt;br /&gt;
После выполнения всех этих действий у вас в системе будет установлена дополнительно еще одна версия Python. В данном случае это Python 3.13 а также инструмент pip тоже с версией 3.13. Системная версия Python изменена не будет и мы не рекомендуем ее изменять, так как некоторые системные компоненты могут быть зависимы от нее.&lt;br /&gt;
&lt;br /&gt;
Чтобы использовать именно эту версию python и pip, вам нужно указывать целиком имена файлов, которые вы запускаете. Например:&lt;br /&gt;
 python3.13 --version&lt;br /&gt;
 pip3.13 --version&lt;br /&gt;
&lt;br /&gt;
Теперь, чтобы создать виртуальное окружение для какого-либо модуля либо поллера, вам нужно использовать следующий синтаксис:&lt;br /&gt;
 sudo python3.13 -m venv venv&lt;br /&gt;
 sudo venv/bin/pip install -U pip wheel&lt;br /&gt;
 и т.д.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Python-update&amp;diff=21012</id>
		<title>Python-update</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Python-update&amp;diff=21012"/>
		<updated>2025-10-22T10:14:03Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Python-update_EN|en]] | [[Python-update|ru]]&lt;br /&gt;
&lt;br /&gt;
Если версия Python, установленная на вашей ОС, не поддерживается модулями или поллером, то необходимо установить дополнительно новую версию Python, удовлетворяющую всем требованиям.&lt;br /&gt;
&lt;br /&gt;
Важно: Изменять системную версию Python на новую - не рекомендуется! Единственный правильный способ - это установить новую версию параллельно системной. Иначе могут перестать работать различные системные службы и утилиты, использующие Python.&lt;br /&gt;
&lt;br /&gt;
Сначала убедитесь, что у вас установлены все необходимые глобальные пакеты в Python, которые необходимы глобально для запуска виртуального окружения, для сборки других зависимостей.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv pkg-config libffi-dev libssl-dev zlib1g-dev zlibc&lt;br /&gt;
&lt;br /&gt;
После того, как все установлено, зайдите на сайт https://www.python.org/downloads/source/ и скопируйте номер последней версии текущей ветки или предыдущей, если текущая ветка слишком свежая. Например, если последняя версия 3.14.1, то надежней все таки установить версию 3.13.9, т.к. сразу после выхода новой версии (3.14) есть вероятность того, что не все зависимые пакеты ее поддерживают.&lt;br /&gt;
&lt;br /&gt;
Далее вам нужно создать временную переменную окружения, значение которой будет содержать номер версии Python, которую вы собираетесь установить.&lt;br /&gt;
&lt;br /&gt;
 PY_VER=3.13.9&lt;br /&gt;
&lt;br /&gt;
Далее приведены команды, которые вы просто выполняете по одной, одну за другой, чтобы контролировать процесс и в случае ошибки не выполнять остальные команды. Копируйте по одной строке и выполняйте:&lt;br /&gt;
 curl -o python.tgz &amp;quot;https://www.python.org/ftp/python/${PY_VER}/Python-${PY_VER}.tgz&amp;quot;&lt;br /&gt;
 tar xzf python.tgz&lt;br /&gt;
 cd Python-${PY_VER}&lt;br /&gt;
 ./configure --enable-optimizations&lt;br /&gt;
 make -j $(nproc)&lt;br /&gt;
 sudo -H make altinstall&lt;br /&gt;
 curl -sS https://bootstrap.pypa.io/get-pip.py | sudo -H python3.13&lt;br /&gt;
 cd ..&lt;br /&gt;
 sudo rm -rf Python-${PY_VER} python.tgz&lt;br /&gt;
&lt;br /&gt;
После выполнения всех этих действий у вас в системе будет установлена дополнительно еще одна версия Python. В данном случае это Python 3.13 а также инструмент pip тоже с версией 3.13. Системная версия Python изменена не будет и мы не рекомендуем ее изменять, так как некоторые системные компоненты могут быть зависимы от нее.&lt;br /&gt;
&lt;br /&gt;
Чтобы использовать именно эту версию python и pip, вам нужно указывать целиком имена файлов, которые вы запускаете. Например:&lt;br /&gt;
 python3.13 --version&lt;br /&gt;
 pip3.13 --version&lt;br /&gt;
&lt;br /&gt;
Теперь, чтобы создать виртуальное окружение для какого-либо модуля либо поллера, вам нужно использовать следующий синтаксис:&lt;br /&gt;
 sudo python3.13 -m venv venv&lt;br /&gt;
 sudo venv/bin/pip install -U pip wheel&lt;br /&gt;
 и т.д.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Python-update&amp;diff=21011</id>
		<title>Python-update</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Python-update&amp;diff=21011"/>
		<updated>2025-10-22T10:00:17Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Python-update_EN|en]] | [[Python-update|ru]]&lt;br /&gt;
&lt;br /&gt;
Если версия Python, установленная на вашей ОС, не поддерживается модулями или поллером, то необходимо установить дополнительно новую версию Python, удовлетворяющую всем требованиям.&lt;br /&gt;
&lt;br /&gt;
Важно: Изменять системную версию Python на новую - не рекомендуется! Единственный правильный способ - это установить новую версию параллельно системной. Иначе могут перестать работать различные системные службы и утилиты, использующие Python.&lt;br /&gt;
&lt;br /&gt;
Сначала убедитесь, что у вас установлены все необходимые глобальные пакеты в Python, которые необходимы глобально для запуска виртуального окружения, для сборки других зависимостей.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv pkg-config libffi-dev libssl-dev&lt;br /&gt;
&lt;br /&gt;
После того, как все установлено, зайдите на сайт https://www.python.org/downloads/source/ и скопируйте номер последней версии текущей ветки или предыдущей, если текущая ветка слишком свежая. Например, если последняя версия 3.14.1, то надежней все таки установить версию 3.13.9, т.к. сразу после выхода новой версии (3.14) есть вероятность того, что не все зависимые пакеты ее поддерживают.&lt;br /&gt;
&lt;br /&gt;
Далее вам нужно создать временную переменную окружения, значение которой будет содержать номер версии Python, которую вы собираетесь установить.&lt;br /&gt;
&lt;br /&gt;
 PY_VER=3.13.9&lt;br /&gt;
&lt;br /&gt;
Далее приведены команды, которые вы просто выполняете по одной, одну за другой, чтобы контролировать процесс и в случае ошибки не выполнять остальные команды. Копируйте по одной строке и выполняйте:&lt;br /&gt;
 curl -o python.tgz &amp;quot;https://www.python.org/ftp/python/${PY_VER}/Python-${PY_VER}.tgz&amp;quot;&lt;br /&gt;
 tar xzf python.tgz&lt;br /&gt;
 cd Python-${PY_VER}&lt;br /&gt;
 ./configure --enable-optimizations&lt;br /&gt;
 make -j $(nproc)&lt;br /&gt;
 sudo -H make altinstall&lt;br /&gt;
 curl -sS https://bootstrap.pypa.io/get-pip.py | sudo -H python3.13&lt;br /&gt;
 cd ..&lt;br /&gt;
 sudo rm -rf Python-${PY_VER} python.tgz&lt;br /&gt;
&lt;br /&gt;
После выполнения всех этих действий у вас в системе будет установлена дополнительно еще одна версия Python. В данном случае это Python 3.13 а также инструмент pip тоже с версией 3.13. Системная версия Python изменена не будет и мы не рекомендуем ее изменять, так как некоторые системные компоненты могут быть зависимы от нее.&lt;br /&gt;
&lt;br /&gt;
Чтобы использовать именно эту версию python и pip, вам нужно указывать целиком имена файлов, которые вы запускаете. Например:&lt;br /&gt;
 python3.13 --version&lt;br /&gt;
 pip3.13 --version&lt;br /&gt;
&lt;br /&gt;
Теперь, чтобы создать виртуальное окружение для какого-либо модуля либо поллера, вам нужно использовать следующий синтаксис:&lt;br /&gt;
 sudo python3.13 -m venv venv&lt;br /&gt;
 sudo venv/bin/pip install -U pip wheel&lt;br /&gt;
 и т.д.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Python-update&amp;diff=21010</id>
		<title>Python-update</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Python-update&amp;diff=21010"/>
		<updated>2025-10-22T09:54:39Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Python-update_EN|en]] | [[Python-update|ru]]&lt;br /&gt;
&lt;br /&gt;
Если версия Python, установленная на вашей ОС, не поддерживается модулями или поллером, то необходимо установить дополнительно новую версию Python, удовлетворяющую всем требованиям.&lt;br /&gt;
&lt;br /&gt;
Важно: Изменять системную версию Python на новую - не рекомендуется! Единственный правильный способ - это установить новую версию параллельно системной. Иначе могут перестать работать различные системные службы и утилиты, использующие Python.&lt;br /&gt;
&lt;br /&gt;
Сначала убедитесь, что у вас установлены все необходимые глобальные пакеты в Python, которые необходимы глобально для запуска виртуального окружения, для сборки других зависимостей.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv pkg-config libffi-dev libssl-dev&lt;br /&gt;
&lt;br /&gt;
После того, как все установлено, зайдите на сайт https://www.python.org/downloads/source/ и скопируйте номер последней версии текущей ветки или предыдущей, если текущая ветка слишком свежая. Например, если последняя версия 3.14.1, то надежней все таки установить версию 3.13.9, т.к. сразу после выхода новой версии (3.14) есть вероятность того, что не все зависимые пакеты ее поддерживают.&lt;br /&gt;
&lt;br /&gt;
Далее вам нужно создать временную переменную окружения, значение которой будет содержать номер версии Python, которую вы собираетесь установить.&lt;br /&gt;
&lt;br /&gt;
 PY_VER=3.13.9&lt;br /&gt;
&lt;br /&gt;
Далее приведены команды, которые вы просто выполняете по одной, одну за другой, чтобы контролировать процесс и в случае ошибки не выполнять остальные команды. Копируйте по одной строке и выполняйте:&lt;br /&gt;
 curl -o python.tgz &amp;quot;https://www.python.org/ftp/python/${PY_VER}/Python-${PY_VER}.tgz&amp;quot;&lt;br /&gt;
 tar xzf python.tgz&lt;br /&gt;
 cd Python-${PY_VER}&lt;br /&gt;
 ./configure --enable-optimizations&lt;br /&gt;
 make -j $(nproc)&lt;br /&gt;
 sudo -H make altinstall&lt;br /&gt;
 curl -sS https://bootstrap.pypa.io/get-pip.py | sudo -H python3.12&lt;br /&gt;
 cd ..&lt;br /&gt;
 sudo rm -rf Python-${PY_VER} python.tgz&lt;br /&gt;
&lt;br /&gt;
После выполнения всех этих действий у вас в системе будет установлена дополнительно еще одна версия Python. В данном случае это Python 3.13 а также инструмент pip тоже с версией 3.13. Системная версия Python изменена не будет и мы не рекомендуем ее изменять, так как некоторые системные компоненты могут быть зависимы от нее.&lt;br /&gt;
&lt;br /&gt;
Чтобы использовать именно эту версию python и pip, вам нужно указывать целиком имена файлов, которые вы запускаете. Например:&lt;br /&gt;
 python3.13 --version&lt;br /&gt;
 pip3.13 --version&lt;br /&gt;
&lt;br /&gt;
Теперь, чтобы создать виртуальное окружение для какого-либо модуля либо поллера, вам нужно использовать следующий синтаксис:&lt;br /&gt;
 sudo python3.13 -m venv venv&lt;br /&gt;
 sudo venv/bin/pip install -U pip wheel&lt;br /&gt;
 и т.д.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Python-update&amp;diff=21009</id>
		<title>Python-update</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Python-update&amp;diff=21009"/>
		<updated>2025-10-22T09:53:04Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Python-update_EN|en]] | [[Python-update|ru]]&lt;br /&gt;
&lt;br /&gt;
Если версия Python, установленная на вашей ОС, не поддерживается модулями или поллером, то необходимо установить дополнительно новую версию Python, удовлетворяющую всем требованиям.&lt;br /&gt;
&lt;br /&gt;
Важно: Изменять системную версию Python на новую - не рекомендуется! Единственный правильный способ - это установить новую версию параллельно системной. Иначе могут перестать работать различные системные службы и утилиты, использующие Python.&lt;br /&gt;
&lt;br /&gt;
Сначала убедитесь, что у вас установлены все необходимые глобальные пакеты в Python, которые необходимы глобально для запуска виртуального окружения, для сборки других зависимостей.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv libffi-dev libssl-dev pkg-config&lt;br /&gt;
&lt;br /&gt;
После того, как все установлено, зайдите на сайт https://www.python.org/downloads/source/ и скопируйте номер последней версии текущей ветки или предыдущей, если текущая ветка слишком свежая. Например, если последняя версия 3.14.1, то надежней все таки установить версию 3.13.9, т.к. сразу после выхода новой версии (3.14) есть вероятность того, что не все зависимые пакеты ее поддерживают.&lt;br /&gt;
&lt;br /&gt;
Далее вам нужно создать временную переменную окружения, значение которой будет содержать номер версии Python, которую вы собираетесь установить.&lt;br /&gt;
&lt;br /&gt;
 PY_VER=3.13.9&lt;br /&gt;
&lt;br /&gt;
Далее приведены команды, которые вы просто выполняете по одной, одну за другой, чтобы контролировать процесс и в случае ошибки не выполнять остальные команды. Копируйте по одной строке и выполняйте:&lt;br /&gt;
 curl -o python.tgz &amp;quot;https://www.python.org/ftp/python/${PY_VER}/Python-${PY_VER}.tgz&amp;quot;&lt;br /&gt;
 tar xzf python.tgz&lt;br /&gt;
 cd Python-${PY_VER}&lt;br /&gt;
 ./configure --enable-optimizations&lt;br /&gt;
 make -j $(nproc)&lt;br /&gt;
 sudo -H make altinstall&lt;br /&gt;
 curl -sS https://bootstrap.pypa.io/get-pip.py | sudo -H python3.12&lt;br /&gt;
 cd ..&lt;br /&gt;
 sudo rm -rf Python-${PY_VER} python.tgz&lt;br /&gt;
&lt;br /&gt;
После выполнения всех этих действий у вас в системе будет установлена дополнительно еще одна версия Python. В данном случае это Python 3.13 а также инструмент pip тоже с версией 3.13. Системная версия Python изменена не будет и мы не рекомендуем ее изменять, так как некоторые системные компоненты могут быть зависимы от нее.&lt;br /&gt;
&lt;br /&gt;
Чтобы использовать именно эту версию python и pip, вам нужно указывать целиком имена файлов, которые вы запускаете. Например:&lt;br /&gt;
 python3.13 --version&lt;br /&gt;
 pip3.13 --version&lt;br /&gt;
&lt;br /&gt;
Теперь, чтобы создать виртуальное окружение для какого-либо модуля либо поллера, вам нужно использовать следующий синтаксис:&lt;br /&gt;
 sudo python3.13 -m venv venv&lt;br /&gt;
 sudo venv/bin/pip install -U pip wheel&lt;br /&gt;
 и т.д.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Usm_asterisk&amp;diff=20993</id>
		<title>Usm asterisk</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Usm_asterisk&amp;diff=20993"/>
		<updated>2025-09-03T07:08:35Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Usm_asterisk_EN|en]] | [[Usm_asterisk|ru]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;USM_ASTERISK&#039;&#039;&#039; - модуль, взаимодействующий с Asterisk и обрабатывающий информацию о поступающих звонках абонентов&lt;br /&gt;
&lt;br /&gt;
Данный модуль является заменой устаревшему win-модулю [[us_asteriskcall]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Рекомендации по настройке системы Asterisk]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Общие данные ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Язык модуля:&#039;&#039;&#039; Perl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Текущая версия:&#039;&#039;&#039; см. на странице: [[Модули]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Минимальная версия Asterisk:&#039;&#039;&#039; 10.x&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Статус модуля:&#039;&#039;&#039; [http://userside.ua/price.php Платный]&lt;br /&gt;
&lt;br /&gt;
Необходимые модули Perl:&lt;br /&gt;
 EV&lt;br /&gt;
 Asterisk::AMI&lt;br /&gt;
 Time::Local&lt;br /&gt;
 LWP::UserAgent&lt;br /&gt;
 HTTP::Request&lt;br /&gt;
 FindBin&lt;br /&gt;
&lt;br /&gt;
== Возможности ==&lt;br /&gt;
&lt;br /&gt;
Для каждого пользователя указывается внутренний SIP-номер, который требуется контролировать. Например у пользователя на столе стоит аппаратный телефон, имеющий внутренний номер 5007 &#039;&#039;(либо программный телефон)&#039;&#039;. Значит в учетной записи пользователя необходимо указать его номер 5007.&lt;br /&gt;
&lt;br /&gt;
[[Файл:20150719_05.PNG|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
При поступлении звонка на номер пользователя - в браузер будет выведена информация о входящем звонке. При этом если по входящему номеру будет выполнен поиск в базе абонентов и, при нахождении, выведена информация по абоненту.&lt;br /&gt;
&lt;br /&gt;
[[Файл:20150719_04.PNG|thumb|375px|center]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:20150719_01.PNG|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
Кроме абонентов выполняется поиск по телефонным номерам сотрудников&lt;br /&gt;
&lt;br /&gt;
[[Файл:20150719_02.PNG|thumb|479px|center]]&lt;br /&gt;
&lt;br /&gt;
Уведомления выводятся по очереди и во всех открытых вкладках САП &amp;quot;UserSide&amp;quot; у пользователя&lt;br /&gt;
&lt;br /&gt;
[[Файл:20150719_03.PNG|thumb|373px|center]]&lt;br /&gt;
&lt;br /&gt;
В разделе &amp;quot;Сообщения - Список звонков&amp;quot; можно просмотреть список всех звонков&lt;br /&gt;
&lt;br /&gt;
[[Файл:20151129-145926.png|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
Также в [[Карточка абонента|карточке абонента]] на вкладке &amp;quot;Тех.поддержка&amp;quot; видны все его звонки&lt;br /&gt;
&lt;br /&gt;
[[Файл:2015_07_19_14_59_46.png|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
Для нескольких пользователей возможно указание одинаковых контролируемых номеров. Но лучше этим не пользоваться, т.к. в отчете по звонкам будет трудно понять какому именно пользователю все-таки поступил звонок.&lt;br /&gt;
&lt;br /&gt;
== Настройка  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Настройка Asterisk&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В системе Asterisk для взаимодействия используется модуль Manager, который настраивается в файле &#039;&#039;/etc/asterisk/manager.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В этом файле необходимо добавить блок настроек для пользователя, от имени которого будет происходить взаимодействие между Asterisk и usm_asterisk&lt;br /&gt;
&lt;br /&gt;
Пример блока, который необходимо вписать в файл manager.conf&lt;br /&gt;
&lt;br /&gt;
 [userside]&lt;br /&gt;
 secret = usm_asterisk_secret&lt;br /&gt;
 deny = 0.0.0.0/0.0.0.0&lt;br /&gt;
 permit = 192.168.1.2/255.255.255.255&lt;br /&gt;
 read = all,system,call,log,verbose,command,agent,user,config&lt;br /&gt;
 write = all,system,call,log,verbose,command,agent,user,config&lt;br /&gt;
&lt;br /&gt;
 Здесь:&lt;br /&gt;
 userside — имя пользователя&lt;br /&gt;
 usm_asterisk_secret — пароль&lt;br /&gt;
 192.168.1.2 — адрес сервера, на котором функционирует модуль usm_asterisk&lt;br /&gt;
 &lt;br /&gt;
После выполнения этой команды необходимо войти в консоль asterisk и выполнить команду перезагрузки конфигурации&lt;br /&gt;
&lt;br /&gt;
 $ asterisk -r&lt;br /&gt;
 &amp;gt; reload&lt;br /&gt;
 &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Настройка UserSide&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Убедитесь, что в конфигурационном файле ERP &amp;quot;UserSide&amp;quot; указан [[UserSide API Key|API-ключ]].&lt;br /&gt;
&lt;br /&gt;
Далее этот ключ понадобится в файле настроек модуля usm_asterisk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Настройка модуля usm_asterisk&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Для работы модулю требуются модули perl: EV, Asterisk::AMI, Time::Local, LWP::UserAgent, HTTP::Request::Common, FindBin&lt;br /&gt;
 &lt;br /&gt;
2. В &amp;quot;UserSide&amp;quot; назначьте пользователям внутренние номера телефонов, при вызовах на которые должны отображаться уведомления&lt;br /&gt;
&lt;br /&gt;
3. Создайте каталог, например, /opt/userside и скопируйте туда архив с модулем. Разархивируйте. Перейдите в каталог с разархивированным модулем.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/userside/uem_asterisk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Скопируйте пример конфигурации usm_asterisk.conf.example с именем usm_asterisk.conf и настройте в нем следующее:&lt;br /&gt;
&lt;br /&gt;
 - Подключение к asterisk-manager&lt;br /&gt;
 - Подключение к api UserSide&lt;br /&gt;
 - Путь хранения логов, если нужно&lt;br /&gt;
 - В переменой $zastertype укажите значение в соответствии с используемой версией Asterisk:&lt;br /&gt;
  1 - Asterisk == 11 (AMI v1)&lt;br /&gt;
  2 - Asterisk &amp;lt;= 10 (AMI v1)&lt;br /&gt;
  3 - Asterisk &amp;gt;= 12 (AMI v2)&lt;br /&gt;
 - Перечислите в значении переменой @zasterfromcontexts все транки, на которых необходима обработка входящих соединений.&lt;br /&gt;
  Формат записи, например: (&amp;quot;from-gsm&amp;quot;, &amp;quot;from-pstn&amp;quot;, &amp;quot;from-external&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
5. Скопируйте файл usm_asterisk.conf-supervisor в /etc/supervisor/conf.d/usm_asterisk.conf&lt;br /&gt;
&lt;br /&gt;
6. Выполните тестовый запуск модуля:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo perl usm_asterisk.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Убедитесь, что нет ошибок. Если ошибок нет — остановите (Ctrl+C).&lt;br /&gt;
&lt;br /&gt;
7. Перезапустите службу супервизора, чтобы он прочитал новую конфигурацию и перезапустил службы:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart supervisor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Убедитесь, что модуль работает (его состояние должно быть RUNNING):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl status usm_asterisk&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9. Настройте демон newslog &#039;&#039;(/etc/newslog.conf)&#039;&#039; на ротацию логов модуля. Просто добавьте строку:&lt;br /&gt;
&lt;br /&gt;
 /var/log/usm_asterisk.*        644  10     200  *     GJC&lt;br /&gt;
&lt;br /&gt;
10. Проверьте работоспособность модуля, выполнив телефонный вызов. Контролировать работу модуля можно наблюдая за логами в реальном времени (путь указан для примере, путь к вашим логам зависит от параметра ps_logpath файла конфигурации usm_asterisk.conf):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tail -f /var/log/usm_asterisk.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Запуск в Docker-окружении ==&lt;br /&gt;
&lt;br /&gt;
Если Вы используете USERSIDE в Docker-окружении, то вам наверняка будет интересно запускать в отдельных Docker-контейнерах и внешние модули usm.&lt;br /&gt;
&lt;br /&gt;
Мы предоставляем docker-окружение для запуска модуля usm_asterisk (окружение не содержит файла модуля - его необходимо загрузить из личного кабинета самостоятельно).&lt;br /&gt;
&lt;br /&gt;
Загрузить docker-окружение можно по ссылке: https://github.com/userside/usm_asterisk-docker-env/releases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Действия, необходимые для проведения отладки работы модуля usm_asterisk ==&lt;br /&gt;
&lt;br /&gt;
* Остановите модуль используя супервизор:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop usm_asterisk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Измените в конфигурационном файле модуля usm_asterisk.conf параметры $ps_consolelog = 1, если необходимо выводить лог на экран, а не в файл, и/или, если необходимо выводить ответы API-сервера, $ps_apianswlog = 1&lt;br /&gt;
* Запустите модуль вручную при помощи следующей команды. При запуске модуль выведет информацию об этом на экран.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl usm_asterisk.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* После окончания отладочных работ остановите работу модуля Ctrl+C, измените параметры $ps_consolelog и $ps_apianswlog, установив их в 0, запустите модуль используя супервизор:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start usm_asterisk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Подключение к AMI Asterisk (для информации)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 telnet 127.0.0.1 5038 | tee ami.log&lt;br /&gt;
&lt;br /&gt;
Аутентификация (скопируйте текст и вставьте в сессию AMI, предварительно изменив имя и пароль):&lt;br /&gt;
&lt;br /&gt;
 Action: login&lt;br /&gt;
 Username: admin&lt;br /&gt;
 Secret: passwd1234&lt;br /&gt;
&lt;br /&gt;
Дважды нажмите Enter&lt;br /&gt;
&lt;br /&gt;
При правильном входе должны увидеть:&lt;br /&gt;
&lt;br /&gt;
 Response: Success Message: Authentication accepted&lt;br /&gt;
&lt;br /&gt;
Выполните входящий вызов, который поступит на группу пользователей (Queue), после чего пользователь должен ответить и положить трубку.&lt;br /&gt;
После окончания работы с AMI выполните:&lt;br /&gt;
&lt;br /&gt;
 Action: logoff&lt;br /&gt;
&lt;br /&gt;
Результат (файл ami.log) пришлите нам, предварительно заархивировав.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_PostgreSQL_version_upgrade&amp;diff=20982</id>
		<title>HOWTO: PostgreSQL version upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_PostgreSQL_version_upgrade&amp;diff=20982"/>
		<updated>2025-08-21T06:11:43Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
This section describes the procedure for upgrading PostgreSQL &#039;&#039;between major versions&#039;&#039; (for example, from version 11 to version 17).&lt;br /&gt;
&lt;br /&gt;
An upgrade within a version (for example, from version 17.1 to 17.2) &#039;&#039;happens automatically and does not require additional actions&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;We recommend that you familiarize yourself with the official upgrade instructions&#039;&#039;&#039; on the [https://www.postgresql.org/docs/current/upgrading.html postgresql.org] website.&lt;br /&gt;
&lt;br /&gt;
In the Debian distribution and those based on it, there is a [https://packages.debian.org/sid/postgresql-common postgresql-common] package, which is installed automatically when the PostgreSQL package is installed. The postgresql-common package includes tools that simplify working with PostgreSQL database clusters, including upgrading DB clusters.&lt;br /&gt;
&lt;br /&gt;
A database cluster ([https://www.postgresql.org/docs/current/glossary.html Database cluster]) in PostgreSQL refers to a server instance along with all the databases it serves, and not a distributed system as one might think.&lt;br /&gt;
&lt;br /&gt;
The following example will show how to upgrade a DB cluster from version 11 to version 17 using the tools from the &#039;&#039;&#039;postgresql-common&#039;&#039;&#039; package.&lt;br /&gt;
&lt;br /&gt;
== Upgrade procedure ==&lt;br /&gt;
# Stop USERSIDE.&lt;br /&gt;
# Upgrade the current version of the postgresql package within its major version (e.g., from 11.5 to 11.22).&lt;br /&gt;
# Upgrade the postgis package version to the latest version (e.g., from 2.5 to 3.3.4).&lt;br /&gt;
# Update the PostGIS extension in all databases of the cluster.&lt;br /&gt;
# Install the new version of the postgresql package without removing the old one (e.g., 17.1).&lt;br /&gt;
# Make a backup copy of the database and settings.&lt;br /&gt;
# Delete the DB cluster that was created automatically by the script during the new version installation.&lt;br /&gt;
# Perform the upgrade of the old version DB cluster to the new version cluster.&lt;br /&gt;
# Check if USERSIDE is working correctly.&lt;br /&gt;
# Delete the old version DB cluster, obsolete packages, and backup copies.&lt;br /&gt;
&lt;br /&gt;
Set aside time for this operation. It can take quite a long time depending on the size of the database and the server&#039;s performance. Also, make sure you have enough free disk space, which will be needed for the cluster upgrade (at least as much as the current cluster occupies, but more is better).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR Watch the video instruction on asciinema].&lt;br /&gt;
&lt;br /&gt;
== Step-by-step instructions ==&lt;br /&gt;
The SQL queries with the &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; operator provided below are for reference to determine the currently installed versions.&lt;br /&gt;
&lt;br /&gt;
=== Stop USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PHP version is given as an example. Use the one that is used on your system.&lt;br /&gt;
&lt;br /&gt;
Comment out the startup of all modules and userside in crontab. If you are using [[Usm_poller_(as_satellite)_EN|satellites]], stop the services on them as well.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade the current postgresql version within the major version ===&lt;br /&gt;
Check the current versions of the PostgreSQL and PostGIS system packages. Upgrade the currently installed versions of PostgreSQL and PostGIS to the latest versions within their major versions, and also, if the current version of PostGIS is below 3, additionally install the PostGIS 3 package for your version of PostgreSQL. If you already have PostGIS 3 installed, you only need to update it to the latest version.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# get the postgresql version and the postgis extension version for the userside database&lt;br /&gt;
sudo -u postgres psql -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# update the current package versions&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
# only if the current postgis version is lower than 3, additionally install postgis-3 for the current postgres version&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Instead of 11 and 2.5, of course, specify the versions that are actually installed on your system.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade the postgis extension to the latest version ===&lt;br /&gt;
After updating the postgis package, you must accordingly update the postgis extension itself in the databases where this extension is present. You may have, for example, a copy of the userside database for testing - do not forget about it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second command will display the current version of the PostGIS extension after the update.&lt;br /&gt;
&lt;br /&gt;
=== Upgrading from PostGIS 2.5 to PostGIS 3.x ===&lt;br /&gt;
If the previous &amp;lt;code&amp;gt;SELECT PostGIS_full_version()&amp;lt;/code&amp;gt; query displays information like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POSTGIS=&amp;quot;3.3.4 3.3.4&amp;quot; [EXTENSION] . . .&lt;br /&gt;
. . .&lt;br /&gt;
[UNPACKAGED!] (raster procs from &amp;quot;2.5.5 r0&amp;quot; need upgrade)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then the following information is for you. Otherwise, skip this section.&lt;br /&gt;
&lt;br /&gt;
There is some difference between PosGIS versions 2 and 3 that requires additional actions during the upgrade.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# the same query twice&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
# remove the raster extension, which was previously part of the postgis extension&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;DROP EXTENSION postgis_raster&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install new package versions ===&lt;br /&gt;
Also, remove the old postgis version 2 package if it was installed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-17 postgresql-17-postgis-3&lt;br /&gt;
sudo apt purge -y postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Make a backup copy of the database and configuration ===&lt;br /&gt;
The cluster migration tool does this absolutely safely, but extra caution will not be superfluous. Make temporary backup copies of the necessary databases and configuration, which can be safely deleted at the end of the update.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The /backup directory must exist and must be writable by all users.&lt;br /&gt;
&lt;br /&gt;
=== Delete the automatically created DB cluster ===&lt;br /&gt;
Using the &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; utility from postgresql-common, see what your DB clusters look like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The command output will be approximately as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5433 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The 17/main cluster was created automatically by the postgresql installation script and uses the new port 5433. It needs to be stopped and deleted — it is not needed, as a cluster migration procedure will be performed, which will create a new cluster automatically.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 17 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Running the &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; command again should show that you have one cluster left, &#039;&#039;&#039;11/main&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Perform the upgrade of the old version DB cluster to the new version cluster ===&lt;br /&gt;
Stop the postgresql service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start the DB cluster &#039;&#039;&#039;11/main&#039;&#039;&#039; upgrade process using the &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; utility from the postgresql-common package. This action may take a lot of time and disk space.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After the upgrade operation is complete, you will see the new state of the clusters (the old version should be in &#039;&#039;&#039;down&#039;&#039;&#039; mode and port 5432 is now assigned to the new cluster &#039;&#039;&#039;17/main&#039;&#039;&#039;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5432 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start the postgres service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Check USERSIDE operation ===&lt;br /&gt;
First, run the commands that display the versions to make sure that the database is now running on the new version DB cluster:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should see postgresql version 17 and postgis version 3.x.x.&lt;br /&gt;
&lt;br /&gt;
Now start the FPM service and go to USERSIDE through a browser.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Since other services are stopped, you will probably see errors related to them, but the USERSIDE interface should open without database connection errors.&lt;br /&gt;
If everything is successful, then uncomment the previously commented lines in crontab and start the external services managed by supervisor, including on the satellite:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleanup after a successful upgrade ===&lt;br /&gt;
If USERSIDE is working correctly and there are no database interaction errors, you can delete the old cluster and packages. You can also, if you wish, delete the emergency backups or wait a few days to be absolutely sure they will not be needed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency* /backup/postgres_config_emergency.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20981</id>
		<title>HOWTO: Обновление версии PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20981"/>
		<updated>2025-08-21T06:07:32Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
В данном разделе описана процедура обновления PostgreSQL &#039;&#039;между основными версиями&#039;&#039; (например, с версии 11 на версию 17).&lt;br /&gt;
&lt;br /&gt;
Обновление внутри версии (например, с версии 17.1 на версию 17.2) &#039;&#039;происходит автоматически и не требует дополнительных действий&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рекомендуем ознакомиться с официальными инструкциями по обновлению&#039;&#039;&#039; на сайте [https://www.postgresql.org/docs/current/upgrading.html postgresql.org].&lt;br /&gt;
&lt;br /&gt;
В дистрибутиве Debian и основанных на нем существует пакет [https://packages.debian.org/sid/postgresql-common postgresql-common], устанавливаемый автоматически при установке пакета PostgreSQL. В состав postgresql-common входят инструменты, упрощающие работу с кластерами баз данных PostgreSQL. В том числе и обновление кластеров БД.&lt;br /&gt;
&lt;br /&gt;
Кластером баз данных ([https://www.postgresql.org/docs/current/glossary.html Database cluster]) в PostgreSQL называется экземпляр сервера вместе со всеми обслуживаемыми БД, а не распределенную систему, как может показаться.&lt;br /&gt;
&lt;br /&gt;
В следующем примере будет показано обновление кластера БД с версии 11 на версию 17 используя инструменты из пакета &#039;&#039;&#039;postgresql-common&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Порядок обновления ==&lt;br /&gt;
# Остановить USERSIDE.&lt;br /&gt;
# Обновить текущую версию пакета postgresql в пределах основной версии (например, с 11.5 до 11.22).&lt;br /&gt;
# Обновить версию пакета postgis до самой последней версии (например, с 2.5 до 3.3.4).&lt;br /&gt;
# Обновить расширение PostGIS во всех базах данных кластера.&lt;br /&gt;
# Установить новую версию пакета postgresql не удаляя старой (например 17.1)&lt;br /&gt;
# Сделать запасную резервную копию базы данных и настроек&lt;br /&gt;
# Удалить кластер БД, созданный автоматически сценарием при установке новой версии&lt;br /&gt;
# Выполнить обновление кластера БД старой версии до кластера новой версии&lt;br /&gt;
# Проверить работу USERSIDE&lt;br /&gt;
# Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии&lt;br /&gt;
&lt;br /&gt;
Выделите время на эту операцию. Она может занять довольно продролжительное время в зависимости от размера базы данных и производительности сервера. Также обязательно убедитесь в наличии свободного места, которое понадобится для обновления кластера (как минимум столько же, сколько занимает текущий кластер, но лучше больше).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR Посмотреть видеоинструкцию на asciinema].&lt;br /&gt;
&lt;br /&gt;
== Пошаговая инструкция ==&lt;br /&gt;
SQL-запросы с оператором &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, приведенные далее, необходимы для определения текущих установленных версий в качестве справочной информации.&lt;br /&gt;
&lt;br /&gt;
=== Остановить USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Версия php указана для примера. Используйте ту, что испльзуется у вас.&lt;br /&gt;
&lt;br /&gt;
Закомментируйте запуск всех модулей и userside в crontab. Если используете [[Usm_poller_(as_satellite)|сателлиты]], остановите службы и на них.&lt;br /&gt;
&lt;br /&gt;
=== Обновить текущую версии postgresql в пределах основной версии ===&lt;br /&gt;
Проверить текущие версии системных пакетов PostgreSQL и PostGIS. Обновить текущие установленные версии PostgreSQL и PostGIS до посладних версий в пределах их основных версий, а также, если текущая версия PostGIS ниже 3, установить дополнительно пакет PostGIS 3 для вашей версии PostgreSQL. Если у вас уже сейчас установлен PostGIS 3, то вам нужно только лишь его обновить до последней версии.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# получить версию postgresql и версию расширения postgis для базы данных userside&lt;br /&gt;
sudo -u postgres psql -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# обновить такущие версии пакетов&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
# только если текущая версия postgis ниже 3, дополнительно установить postgis-3 для текущей версии postgres&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вместо 11 и 2.5, конечно же, укажите те версии, которе фактически установлены у вас.&lt;br /&gt;
&lt;br /&gt;
=== Обновить расширение postgis до самой последней версии ===&lt;br /&gt;
После обновления пакета postgis необходимо соответственно обновить и само расширение postgis в базах данных, где это расширение присутствует. У вас может быть, например, копия базы данных userside для тестов - не забудьте про нее.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вторая команда отобразит текущую версию расширения PostGIS после обновления.&lt;br /&gt;
&lt;br /&gt;
=== Обновление с PostGIS 2.5 на PostGIS 3.x ===&lt;br /&gt;
Если предыдущий запрос &amp;lt;code&amp;gt;SELECT PostGIS_full_version()&amp;lt;/code&amp;gt; отображает информацию подобно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POSTGIS=&amp;quot;3.3.4 3.3.4&amp;quot; [EXTENSION] . . .&lt;br /&gt;
. . .&lt;br /&gt;
[UNPACKAGED!] (raster procs from &amp;quot;2.5.5 r0&amp;quot; need upgrade)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
То следующая информация для вас. Иначе пропустите этот раздел.&lt;br /&gt;
&lt;br /&gt;
Между версиям PosGIS 2 и 3 существует некоторая разница, которая требует дополнительных действий при обновлении.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# дважды один и тот же запрос&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
# удалить расширение raster, которое раньше было частью расширения postgis&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;DROP EXTENSION postgis_raster&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установить новые версии пакетов ===&lt;br /&gt;
Также удалить старый пакет postgis версии 2, если он был установлен.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-17 postgresql-17-postgis-3&lt;br /&gt;
sudo apt purge -y postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сделать запасную резервную копию базы данных и конфигурации ===&lt;br /&gt;
Инструмент миграции кластеров делает это абсолютно безопасно, однако дополнительная осторожность лишней не будет. Сделайте запасные временные резервные копии нужных баз данных и конфигурации, которые в конце обновления можно будет смело удалить.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Каталог /backup должен существовать и должен быть доступен для записи всем пользователям.&lt;br /&gt;
&lt;br /&gt;
=== Удалить автоматически созданный кластер БД ===&lt;br /&gt;
При помощи утилиты &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; из postgresql-common посмотрите, как выглядят ваши кластеры БД:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вывод команды будет примерно следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5433 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Кластер 17/main был создан автоматически сценарием установки postgresql и использует новый порт 5433. Его нужно остановить и удалить — он не нужен, т.к. будет выполняться процедура миграции кластера, которая создаст новый кластер автоматически.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 17 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Повторное выполнение команды &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; должно показать, что у вас остался один кластер &#039;&#039;&#039;11/main&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Выполнить обновление кластера БД старой версии до кластера новой версии ===&lt;br /&gt;
Остановите службу postgresql&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите процесс обновления кластера БД &#039;&#039;&#039;11/main&#039;&#039;&#039; используя утилиту &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; из пакета postgresql-common. Это действие может занять много времени и дискового пространства.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После завершения операции обновления вы увидите новое состояние кластеров (старая версия должна находиться в режиме &#039;&#039;&#039;down&#039;&#039;&#039; и порт 5432 теперь назначен новому кластеру &#039;&#039;&#039;17/main&#039;&#039;&#039;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5432 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите службу postgres&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверить работу USERSIDE ===&lt;br /&gt;
Сначала выполните команды, отображающие версии, чтобы убедиться что база данных теперь работает на кластере БД новой версии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вы должны увидеть 17ю версию postgresql и 3.x.x версию postgis.&lt;br /&gt;
&lt;br /&gt;
Теперь запустите службу FPM и зайдите в USERSIDE через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так как другие службы остановлены, вы, вероятно, увидите ошибки связанные с ними, но при этом интерфейс USERSIDE должен открыться без ошибок подключения к базе данных.&lt;br /&gt;
Если все успешно, то раскомментируйте закомментированные ранее строки в crontab и запустите внешние службы, находящиеся под управлением supervisor, в том числе на сателлите:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Очистка после успешного обновления ===&lt;br /&gt;
Если USERSIDE работает корректно, ошибок взаимодействия с БД нет, то можно удалить старый кластер и пакеты. Вы также, по желанию, можете удалить аварийные резервные копии или подождать несколько дней, чтобы точно убедиться, что они не пригодятся.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency* /backup/postgres_config_emergency.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20980</id>
		<title>HOWTO: Обновление версии PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20980"/>
		<updated>2025-08-21T06:01:41Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
В данном разделе описана процедура обновления PostgreSQL &#039;&#039;между основными версиями&#039;&#039; (например, с версии 11 на версию 17).&lt;br /&gt;
&lt;br /&gt;
Обновление внутри версии (например, с версии 17.1 на версию 17.2) &#039;&#039;происходит автоматически и не требует дополнительных действий&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рекомендуем ознакомиться с официальными инструкциями по обновлению&#039;&#039;&#039; на сайте [https://www.postgresql.org/docs/current/upgrading.html postgresql.org].&lt;br /&gt;
&lt;br /&gt;
В дистрибутиве Debian и основанных на нем существует пакет [https://packages.debian.org/sid/postgresql-common postgresql-common], устанавливаемый автоматически при установке пакета PostgreSQL. В состав postgresql-common входят инструменты, упрощающие работу с кластерами баз данных PostgreSQL. В том числе и обновление кластеров БД.&lt;br /&gt;
&lt;br /&gt;
Кластером баз данных ([https://www.postgresql.org/docs/current/glossary.html Database cluster]) в PostgreSQL называется экземпляр сервера вместе со всеми обслуживаемыми БД, а не распределенную систему, как может показаться.&lt;br /&gt;
&lt;br /&gt;
В следующем примере будет показано обновление кластера БД с версии 11 на версию 17 используя инструменты из пакета &#039;&#039;&#039;postgresql-common&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Порядок обновления ==&lt;br /&gt;
# Остановить USERSIDE.&lt;br /&gt;
# Обновить текущую версию пакета postgresql в пределах основной версии (например, с 11.5 до 11.22).&lt;br /&gt;
# Обновить версию пакета postgis до самой последней версии (например, с 2.5 до 3.3.4).&lt;br /&gt;
# Обновить расширение PostGIS во всех базах данных кластера.&lt;br /&gt;
# Установить новую версию пакета postgresql не удаляя старой (например 17.1)&lt;br /&gt;
# Сделать запасную резервную копию базы данных и настроек&lt;br /&gt;
# Удалить кластер БД, созданный автоматически сценарием при установке новой версии&lt;br /&gt;
# Выполнить обновление кластера БД старой версии до кластера новой версии&lt;br /&gt;
# Проверить работу USERSIDE&lt;br /&gt;
# Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии&lt;br /&gt;
&lt;br /&gt;
Выделите время на эту операцию. Она может занять довольно продролжительное время в зависимости от размера базы данных и производительности сервера. Также обязательно убедитесь в наличии свободного места, которое понадобится для обновления кластера (как минимум столько же, сколько занимает текущий кластер, но лучше больше).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR Посмотреть видеоинструкцию на asciinema].&lt;br /&gt;
&lt;br /&gt;
== Пошаговая инструкция ==&lt;br /&gt;
SQL-запросы с оператором &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, приведенные далее, необходимы для определения текущих установленных версий в качестве справочной информации.&lt;br /&gt;
&lt;br /&gt;
=== Остановить USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Версия php указана для примера. Используйте ту, что испльзуется у вас.&lt;br /&gt;
&lt;br /&gt;
Закомментируйте запуск всех модулей и userside в crontab. Если используете [[Usm_poller_(as_satellite)|сателлиты]], остановите службы и на них.&lt;br /&gt;
&lt;br /&gt;
=== Обновить текущую версии postgresql в пределах основной версии ===&lt;br /&gt;
Проверить текущие версии системных пакетов PostgreSQL и PostGIS. Обновить текущие установленные версии PostgreSQL и PostGIS до посладних версий в пределах их основных версий, а также, если текущая версия PostGIS ниже 3, установить дополнительно пакет PostGIS 3 для вашей версии PostgreSQL. Если у вас уже сейчас установлен PostGIS 3, то вам нужно только лишь его обновить до последней версии.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# получить версию postgresql и версию расширения postgis для базы данных userside&lt;br /&gt;
sudo -u postgres psql -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# обновить такущие версии пакетов&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
# только если текущая версия postgis ниже 3, дополнительно установить postgis-3 для текущей версии postgres&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вместо 11 и 2.5, конечно же, укажите те версии, которе фактически установлены у вас.&lt;br /&gt;
&lt;br /&gt;
=== Обновить расширение postgis до самой последней версии ===&lt;br /&gt;
После обновления пакета postgis необходимо соответственно обновить и само расширение postgis в базах данных, где это расширение присутствует. У вас может быть, например, копия базы данных userside для тестов - не забудьте про нее.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вторая команда отобразит текущую версию расширения PostGIS после обновления.&lt;br /&gt;
&lt;br /&gt;
=== Обновление с PostGIS 2.5 на PostGIS 3.x ===&lt;br /&gt;
Если предыдущий запрос &amp;lt;code&amp;gt;SELECT PostGIS_full_version()&amp;lt;/code&amp;gt; отображает информацию подобно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POSTGIS=&amp;quot;3.3.4 3.3.4&amp;quot; [EXTENSION] . . .&lt;br /&gt;
. . .&lt;br /&gt;
[UNPACKAGED!] (raster procs from &amp;quot;2.5.5 r0&amp;quot; need upgrade)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
То следующая информация для вас. Иначе пропустите этот раздел.&lt;br /&gt;
&lt;br /&gt;
Между версиям PosGIS 2 и 3 существует некоторая разница, которая требует дополнительных действий при обновлении.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# дважды один и тот же запрос&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
# удалить расширение raster, которое раньше было частью расширения postgis&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;DROP EXTENSION postgis_raster&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установить новые версии пакетов ===&lt;br /&gt;
Также удалить старый пакет postgis версии 2, если он был установлен.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-17 postgresql-17-postgis-3&lt;br /&gt;
sudo apt purge -y postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сделать запасную резервную копию базы данных и конфигурации ===&lt;br /&gt;
Инструмент миграции кластеров делает это абсолютно безопасно, однако дополнительная осторожность лишней не будет. Сделайте запасные временные резервные копии нужных баз данных и конфигурации, которые в конце обновления можно будет смело удалить.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Каталог /backup должен существовать и должен быть доступен для записи всем пользователям.&lt;br /&gt;
&lt;br /&gt;
=== Удалить автоматически созданный кластер БД ===&lt;br /&gt;
При помощи утилиты &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; из postgresql-common посмотрите, как выглядят ваши кластеры БД:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вывод команды будет примерно следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5433 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Кластер 17/main был создан автоматически сценарием установки postgresql и использует новый порт 5433. Его нужно остановить и удалить — он не нужен, т.к. будет выполняться процедура миграции кластера, которая создаст новый кластер автоматически.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 17 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Повторное выполнение команды &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; должно показать, что у вас остался один кластер &#039;&#039;&#039;11/main&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Выполнить обновление кластера БД старой версии до кластера новой версии ===&lt;br /&gt;
Остановите службу postgresql&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите процесс обновления кластера БД &#039;&#039;&#039;11/main&#039;&#039;&#039; используя утилиту &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; из пакета postgresql-common. Это действие может занять много времени и дискового пространства.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После завершения операции обновления вы увидите новое состояние кластеров (старая версия должна находиться в режиме &#039;&#039;&#039;down&#039;&#039;&#039; и порт 5432 теперь назначен новому кластеру &#039;&#039;&#039;17/main&#039;&#039;&#039;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5432 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите службу postgres&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверить работу USERSIDE ===&lt;br /&gt;
Сначала выполните команды, отображающие версии, чтобы убедиться что база данных теперь работает на кластере БД новой версии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вы должны увидеть 17ю версию postgresql и 3.x.x версию postgis.&lt;br /&gt;
&lt;br /&gt;
Теперь запустите службу FPM и зайдите в USERSIDE через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так как другие службы остановлены, вы, вероятно, увидите ошибки связанные с ними, но при этом интерфейс USERSIDE должен открыться без ошибок подключения к базе данных.&lt;br /&gt;
Если все успешно, то раскомментируйте закомментированные ранее строки в crontab и запустите внешние службы, находящиеся под управлением supervisor, в том числе на сателлите:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Очистка после успешного обновления ===&lt;br /&gt;
Если USERSIDE работает корректно, ошибок взаимодействия с БД нет, то можно удалить старый кластер и пакеты. Вы также, по желанию, можете удалить аварийные резервные копии или подождать несколько дней, чтобы точно убедиться, что они не пригодятся.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency* /backup/postgres_config_emergency.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20979</id>
		<title>HOWTO: Обновление версии PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20979"/>
		<updated>2025-08-20T18:13:38Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
В данном разделе описана процедура обновления PostgreSQL &#039;&#039;между основными версиями&#039;&#039; (например, с версии 11 на версию 17).&lt;br /&gt;
&lt;br /&gt;
Обновление внутри версии (например, с версии 17.1 на версию 17.2) &#039;&#039;происходит автоматически и не требует дополнительных действий&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рекомендуем ознакомиться с официальными инструкциями по обновлению&#039;&#039;&#039; на сайте [https://www.postgresql.org/docs/current/upgrading.html postgresql.org].&lt;br /&gt;
&lt;br /&gt;
В дистрибутиве Debian и основанных на нем существует пакет [https://packages.debian.org/sid/postgresql-common postgresql-common], устанавливаемый автоматически при установке пакета PostgreSQL. В состав postgresql-common входят инструменты, упрощающие работу с кластерами баз данных PostgreSQL. В том числе и обновление кластеров БД.&lt;br /&gt;
&lt;br /&gt;
Кластером баз данных ([https://www.postgresql.org/docs/current/glossary.html Database cluster]) в PostgreSQL называется экземпляр сервера вместе со всеми обслуживаемыми БД, а не распределенную систему, как может показаться.&lt;br /&gt;
&lt;br /&gt;
В следующем примере будет показано обновление кластера БД с версии 11 на версию 17 используя инструменты из пакета &#039;&#039;&#039;postgresql-common&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Порядок обновления ==&lt;br /&gt;
# Остановить USERSIDE.&lt;br /&gt;
# Обновить текущую версии postgresql в пределах основной версии (например, с 11.5 до 11.22).&lt;br /&gt;
# Обновить расширение postgis до самой последней версии (например, с 2.5 до 3.3.4). Также обязательно обновить расширение и в самой базе данных.&lt;br /&gt;
# Установить новую версию postgresql не удаляя старой (например 17.1)&lt;br /&gt;
# Сделать запасную резервную копию базы данных и настроек&lt;br /&gt;
# Удалить кластер БД, созданный автоматически сценарием при установке новой версии&lt;br /&gt;
# Выполнить обновление кластера БД старой версии до кластера новой версии&lt;br /&gt;
# Проверить работу USERSIDE&lt;br /&gt;
# Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии&lt;br /&gt;
&lt;br /&gt;
Выделите время на эту операцию. Она может занять довольно продролжительное время в зависимости от размера базы данных и производительности сервера. Также обязательно убедитесь в наличии свободного места, которое понадобится для обновления кластера (как минимум столько же, сколько занимает текущий кластер, но лучше больше).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR Посмотреть видеоинструкцию на asciinema].&lt;br /&gt;
&lt;br /&gt;
== Пошаговая инструкция ==&lt;br /&gt;
SQL-запросы с оператором &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, приведенные далее, необходимы для определения текущих установленных версий в качестве справочной информации.&lt;br /&gt;
&lt;br /&gt;
=== Остановить USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Версия php указана для примера. Используйте ту, что испльзуется у вас.&lt;br /&gt;
&lt;br /&gt;
Закомментируйте запуск всех модулей и userside в crontab.&lt;br /&gt;
&lt;br /&gt;
=== Обновить текущую версии postgresql в пределах основной версии ===&lt;br /&gt;
Проверить текущие версии системных пакетов PostgreSQL и PostGIS. Обновить текущие установленные версии PostgreSQL и PostGIS до посладних версий, а также, если текущая версия PostGIS ниже 3, установить дополнительно пакет PostGIS 3 для вашей версии PostgreSQL. Если у вас уже сейчас установлен PostGIS 3, то вам нужно только лишь его обновить до последней версии.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
# только если текущая версия postgis ниже 3&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вместо 11 и 2.5 укажите те версии, которе фактически установлены у вас.&lt;br /&gt;
&lt;br /&gt;
=== Обновить расширение postgis до самой последней версии ===&lt;br /&gt;
Обязательно также обновить расширение postgis в самих базах данных! У вас может быть несколько баз данных, в которые установлено это расширение. Например, у вас на сервре есть еще тестовая база данных (копия основной для тестов). Проверьте все существующие базы данных сервера на наличие расширения PostGIS и обновите его в каждой базе данных. Вы можете просто попытаться обновить расширение во всех базах данных, там где его нет — будет просто ошибка обновления. Далее показано как обновить в базе данных userisde. Проделайте это для всех баз данных, в которые оно установлено.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Обновление с PostGIS 2.5 на PostGIS 3.x ===&lt;br /&gt;
Если предыдущий запрос &amp;lt;code&amp;gt;SELECT PostGIS_full_version()&amp;lt;/code&amp;gt; отображает информацию подобно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POSTGIS=&amp;quot;3.3.4 3.3.4&amp;quot; [EXTENSION] . . .&lt;br /&gt;
. . .&lt;br /&gt;
[UNPACKAGED!] (raster procs from &amp;quot;2.5.5 r0&amp;quot; need upgrade)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
То следующая информация для вас.&lt;br /&gt;
&lt;br /&gt;
Между версиям PosGIS 2 и 3 существует некоторая разница, которая требует дополнительных действий при обновлении. Если вы после выполнения предыдущего запроса не увидели такой проблем, то следующие действия выполнять не нужно — переходите к следующему разделу.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# дважды один и тот же запрос&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;DROP EXTENSION postgis_raster&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установить новые версии пакетов ===&lt;br /&gt;
А также удалить старый пакет postgis версии 2, если он был.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-17 postgresql-17-postgis-3&lt;br /&gt;
sudo apt purge postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сделать запасную резервную копию базы данных и настроек ===&lt;br /&gt;
Инструмент миграции кластеров между версиями делает это абсолютно безопасно, однако дополнительная осторожность лишней не будет. Сделайте запасные временные резервные копии, которые в конце обновления можно будет удалить.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Каталог /backup должен существовать и должен быть доступен для записи всем пользователям.&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД, созданный автоматически сценарием при установке новой версии ===&lt;br /&gt;
При помощи утилиты &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; из postgresql-common посмотрите, как выглядят ваши кластеры БД:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вывод команды будет примерно следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5433 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Кластер 17/main был создан автоматически сценарием установки postgresql и использует новый порт 5433. Его нужно остановить и удалить — он не нужен, т.к. будет выполняться процедура миграции кластера, которая создаст новый кластер автоматически.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 17 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Повторное выполнение команды &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; должно показать, что у вас остался один кластер &#039;&#039;&#039;11/main&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Выполнить обновление кластера БД старой версии до кластера новой версии ===&lt;br /&gt;
Остановите службу postgresql&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите процесс обновления кластера БД &#039;&#039;&#039;11/main&#039;&#039;&#039; используя утилиту &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; из пакета postgresql-common. Это действие может занять много времени и дискового пространства.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После завершения операции обновления вы увидите новое состояние кластеров (старая версия должна находиться в режиме &#039;&#039;&#039;down&#039;&#039;&#039; и порт 5432 теперь используется новым кластером):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5432 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите службу postgres&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверить работу USERSIDE ===&lt;br /&gt;
Сначала выполните команды, отображающие версии, чтобы убедиться что база данных теперь работает на кластере БД новой версии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вы должны увидеть 17ю версию postgresql и 3.x.x версию postgis.&lt;br /&gt;
&lt;br /&gt;
Теперь запустите службу FPM и зайдите в USERSIDE через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так как другие службы остановлены, вы, вероятно, увидите ошибки связанные с ними, но при этом интерфейс USERSIDE должен открыться без ошибок подключения к базе данных.&lt;br /&gt;
Если все успешно, то раскомментируйте закомментированные ранее строки в crontab и запустите внешние службы, находящиеся под управлением supervisor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии ===&lt;br /&gt;
Если USERSIDE работает корректно, ошибок взаимодействия с БД нет, то можно удалить старый кластер и пакеты. Вы также, по желанию, можете удалить аварийные резервные копии или подождать несколько дней, чтобы точно убедиться, что они не пригодятся.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency* /backup/postgres_config_emergency.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20978</id>
		<title>HOWTO: Обновление версии PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20978"/>
		<updated>2025-08-20T18:13:14Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
В данном разделе описана процедура обновления PostgreSQL &#039;&#039;между основными версиями&#039;&#039; (например, с версии 11 на версию 17).&lt;br /&gt;
&lt;br /&gt;
Обновление внутри версии (например, с версии 17.1 на версию 17.2) &#039;&#039;происходит автоматически и не требует дополнительных действий&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рекомендуем ознакомиться с официальными инструкциями по обновлению&#039;&#039;&#039; на сайте [https://www.postgresql.org/docs/current/upgrading.html postgresql.org].&lt;br /&gt;
&lt;br /&gt;
В дистрибутиве Debian и основанных на нем существует пакет [https://packages.debian.org/sid/postgresql-common postgresql-common], устанавливаемый автоматически при установке пакета PostgreSQL. В состав postgresql-common входят инструменты, упрощающие работу с кластерами баз данных PostgreSQL. В том числе и обновление кластеров БД.&lt;br /&gt;
&lt;br /&gt;
Кластером баз данных ([https://www.postgresql.org/docs/current/glossary.html Database cluster]) в PostgreSQL называется экземпляр сервера вместе со всеми обслуживаемыми БД, а не распределенную систему, как может показаться.&lt;br /&gt;
&lt;br /&gt;
В следующем примере будет показано обновление кластера БД с версии 11 на версию 17 используя инструменты из пакета &#039;&#039;&#039;postgresql-common&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Порядок обновления ==&lt;br /&gt;
# Остановить USERSIDE.&lt;br /&gt;
# Обновить текущую версии postgresql в пределах основной версии (например, с 11.5 до 11.22).&lt;br /&gt;
# Обновить расширение postgis до самой последней версии (например, с 2.5 до 3.3.4). Также обязательно обновить расширение и в самой базе данных.&lt;br /&gt;
# Установить новую версию postgresql не удаляя старой (например 17.1)&lt;br /&gt;
# Сделать запасную резервную копию базы данных и настроек&lt;br /&gt;
# Удалить кластер БД, созданный автоматически сценарием при установке новой версии&lt;br /&gt;
# Выполнить обновление кластера БД старой версии до кластера новой версии&lt;br /&gt;
# Проверить работу USERSIDE&lt;br /&gt;
# Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии&lt;br /&gt;
&lt;br /&gt;
Выделите время на эту операцию. Она может занять довольно продролжительное время в зависимости от размера базы данных и производительности сервера. Также обязательно убедитесь в наличии свободного места, которое понадобится для обновления кластера (как минимум столько же, сколько занимает текущий кластер, но лучше больше).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR Посмотреть видеоинструкцию на asciinema].&lt;br /&gt;
&lt;br /&gt;
== Пошаговая инструкция ==&lt;br /&gt;
SQL-запросы с оператором &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, приведенные далее, необходимы для определения текущих установленных версий в качестве справочной информации.&lt;br /&gt;
&lt;br /&gt;
=== Остановить USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Версия php указана для примера. Используйте ту, что испльзуется у вас.&lt;br /&gt;
&lt;br /&gt;
Закомментируйте запуск всех модулей и userside в crontab.&lt;br /&gt;
&lt;br /&gt;
=== Обновить текущую версии postgresql в пределах основной версии ===&lt;br /&gt;
Проверить текущие версии системных пакетов PostgreSQL и PostGIS. Обновить текущие установленные версии PostgreSQL и PostGIS до посладних версий, а также, если текущая версия PostGIS ниже 3, установить дополнительно пакет PostGIS 3 для вашей версии PostgreSQL. Если у вас уже сейчас установлен PostGIS 3, то вам нужно только лишь его обновить до последней версии.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
# только если текущая версия postgis ниже 3&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вместо 11 и 2.5 укажите те версии, которе фактически установлены у вас.&lt;br /&gt;
&lt;br /&gt;
=== Обновить расширение postgis до самой последней версии ===&lt;br /&gt;
Обязательно также обновить расширение postgis в самих базах данных! У вас может быть несколько баз данных, в которые установлено это расширение. Например, у вас на сервре есть еще тестовая база данных (копия основной для тестов). Проверьте все существующие базы данных сервера на наличие расширения PostGIS и обновите его в каждой базе данных. Вы можете просто попытаться обновить расширение во всех базах данных, там где его нет — будет просто ошибка обновления. Далее показано как обновить в базе данных userisde. Проделайте это для всех баз данных, в которые оно установлено.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Обновление с PostGIS 2.5 на PostGIS 3.x ===&lt;br /&gt;
Если предыдущий запрос &amp;lt;code&amp;gt;SELECT PostGIS_full_version()&amp;lt;/code&amp;gt; отображает информацию подобно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POSTGIS=&amp;quot;3.3.4 3.3.4&amp;quot; [EXTENSION] . . .&lt;br /&gt;
. . .&lt;br /&gt;
[UNPACKAGED!] (raster procs from &amp;quot;2.5.5 r0&amp;quot; need upgrade)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
То следующая информация для вас.&lt;br /&gt;
&lt;br /&gt;
Между версиям PosGIS 2 и 3 существует некоторая разница, которая требует дополнительных действий при обновлении. Если вы после выполнения предыдущего запроса не увидели такой проблем, то следующие действия выполнять не нужно — переходите к следующему разделу.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# дважды один и тот же запрос&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;DROP EXTENSION postgis_raster&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установить новые версии пакетов ===&lt;br /&gt;
А также удалить старый пакет postgis версии 2, если он был.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-17 postgresql-17-postgis-3&lt;br /&gt;
sudo apt purge postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сделать запасную резервную копию базы данных и настроек ===&lt;br /&gt;
Инструмент миграции кластеров между версиями делает это абсолютно безопасно, однако дополнительная осторожность лишней не будет. Сделайте запасные временные резервные копии, которые в конце обновления можно будет удалить.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Каталог /backup должен существовать и должен быть доступен для записи всем пользователям.&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД, созданный автоматически сценарием при установке новой версии ===&lt;br /&gt;
При помощи утилиты &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; из postgresql-common посмотрите, как выглядят ваши кластеры БД:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вывод команды будет примерно следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5433 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Кластер 17/main был создан автоматически сценарием установки postgresql и использует новый порт 5433. Его нужно остановить и удалить — он не нужен, т.к. будет выполняться процедура миграции кластера, которая создаст новый кластер автоматически.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 17 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Повторное выполнение команды &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; должно показать, что у вас остался один кластер &#039;&#039;&#039;11/main&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Выполнить обновление кластера БД старой версии до кластера новой версии ===&lt;br /&gt;
Остановите службу postgresql&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите процесс обновления кластера БД &#039;&#039;&#039;11/main&#039;&#039;&#039; используя утилиту &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; из пакета postgresql-common. Это действие может занять много времени и дискового пространства.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После завершения операции обновления вы увидите новое состояние кластеров (старая версия должна находиться в режиме &#039;&#039;&#039;down&#039;&#039;&#039; и порт 5432 теперь используется новым кластером):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5432 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите службу postgres&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверить работу USERSIDE ===&lt;br /&gt;
Сначала выполните команды, отображающие версии, чтобы убедиться что база данных теперь работает на кластере БД новой версии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вы должны увидеть 17ю версию postgresql и 3.x.x версию postgis.&lt;br /&gt;
&lt;br /&gt;
Теперь запустите службу FPM и зайдите в USERSIDE через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так как другие службы остановлены, вы, вероятно, увидите ошибки связанные с ними, но при этом интерфейс USERSIDE должен открыться без ошибок подключения к базе данных.&lt;br /&gt;
Если все успешно, то раскомментируйте закомментированные ранее строки в crontab и запустите внешние службы, находящиеся под управлением supervisor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии ===&lt;br /&gt;
Если USERSIDE работает корректно, ошибок взаимодействия с БД нет, то можно удалить старый кластер и пакеты. Вы также, по желанию, можете удалить аварийные резервные копии или подождать несколько дней, чтобы точно убедиться, что они не пригодятся.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency* /backup/postgres_config_emergency.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20977</id>
		<title>HOWTO: Обновление версии PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20977"/>
		<updated>2025-08-20T18:09:47Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
В данном разделе описана процедура обновления PostgreSQL &#039;&#039;между основными версиями&#039;&#039; (например, с версии 11 на версию 17).&lt;br /&gt;
&lt;br /&gt;
Обновление внутри версии (например, с версии 17.1 на версию 17.2) &#039;&#039;происходит автоматически и не требует дополнительных действий&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рекомендуем ознакомиться с официальными инструкциями по обновлению&#039;&#039;&#039; на сайте [https://www.postgresql.org/docs/current/upgrading.html postgresql.org].&lt;br /&gt;
&lt;br /&gt;
В дистрибутиве Debian и основанных на нем существует пакет [https://packages.debian.org/sid/postgresql-common postgresql-common], устанавливаемый автоматически при установке пакета PostgreSQL. В состав postgresql-common входят инструменты, упрощающие работу с кластерами баз данных PostgreSQL. В том числе и обновление кластеров БД.&lt;br /&gt;
&lt;br /&gt;
Кластером баз данных ([https://www.postgresql.org/docs/current/glossary.html Database cluster]) в PostgreSQL называется экземпляр сервера вместе со всеми обслуживаемыми БД, а не распределенную систему, как может показаться.&lt;br /&gt;
&lt;br /&gt;
В следующем примере будет показано обновление кластера БД с версии 11 на версию 17 используя инструменты из пакета &#039;&#039;&#039;postgresql-common&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Порядок обновления ==&lt;br /&gt;
# Остановить USERSIDE.&lt;br /&gt;
# Обновить текущую версии postgresql в пределах основной версии (например, с 11.5 до 11.22).&lt;br /&gt;
# Обновить расширение postgis до самой последней версии (например, с 2.5 до 3.3.4). Также обязательно обновить расширение и в самой базе данных.&lt;br /&gt;
# Установить новую версию postgresql не удаляя старой (например 17.1)&lt;br /&gt;
# Сделать запасную резервную копию базы данных и настроек&lt;br /&gt;
# Удалить кластер БД, созданный автоматически сценарием при установке новой версии&lt;br /&gt;
# Выполнить обновление кластера БД старой версии до кластера новой версии&lt;br /&gt;
# Проверить работу USERSIDE&lt;br /&gt;
# Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии&lt;br /&gt;
&lt;br /&gt;
Выделите время на эту операцию. Она может занять довольно продролжительное время в зависимости от размера базы данных и производительности сервера. Также обязательно убедитесь в наличии свободного места, которое понадобится для обновления кластера (как минимум столько же, сколько занимает текущий кластер, но лучше больше).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR Посмотреть видеоинструкцию на asciinema].&lt;br /&gt;
&lt;br /&gt;
== Пошаговая инструкция ==&lt;br /&gt;
SQL-запросы с оператором &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, приведенные далее, необходимы для определения текущих установленных версий в качестве справочной информации.&lt;br /&gt;
&lt;br /&gt;
=== Остановить USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Версия php указана для примера. Используйте ту, что испльзуется у вас.&lt;br /&gt;
&lt;br /&gt;
Закомментируйте запуск всех модулей и userside в crontab.&lt;br /&gt;
&lt;br /&gt;
=== Обновить текущую версии postgresql в пределах основной версии ===&lt;br /&gt;
Проверить текущие версии системных пакетов PostgreSQL и PostGIS. Обновить текущие установленные версии PostgreSQL и PostGIS до посладних версий, а также, если текущая версия PostGIS ниже 3, установить дополнительно пакет PostGIS 3 для вашей версии PostgreSQL. Если у вас уже сейчас установлен PostGIS 3, то вам нужно только лишь его обновить до последней версии.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
# только если текущая версия postgis ниже 3&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вместо 11 и 2.5 укажите те версии, которе фактически установлены у вас.&lt;br /&gt;
&lt;br /&gt;
=== Обновить расширение postgis до самой последней версии ===&lt;br /&gt;
Обязательно также обновить расширение postgis в самих базах данных! У вас может быть несколько баз данных, в которые установлено это расширение. Например, у вас на сервре есть еще тестовая база данных (копия основной для тестов). Проверьте все существующие базы данных сервера на наличие расширения PostGIS и обновите его в каждой базе данных. Вы можете просто попытаться обновить расширение во всех базах данных, там где его нет — будет просто ошибка обновления. Далее показано как обновить в базе данных userisde. Проделайте это для всех баз данных, в которые оно установлено.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Обновление с PostGIS 2.5 на PostGIS 3.x&lt;br /&gt;
Если предыдущий запрос &amp;lt;code&amp;gt;SELECT PostGIS_full_version()&amp;lt;/code&amp;gt; отображает информацию подобно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POSTGIS=&amp;quot;3.3.4 3.3.4&amp;quot; [EXTENSION] . . .&lt;br /&gt;
. . .&lt;br /&gt;
[UNPACKAGED!] (raster procs from &amp;quot;2.5.5 r0&amp;quot; need upgrade)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
То следующая информация для вас.&lt;br /&gt;
&lt;br /&gt;
Между версиям PosGIS 2 и 3 существует некоторая разница, которая требует дополнительных действий при обновлении. Если вы после выполнения предыдущего запроса не увидели такой проблем, то следующие действия выполнять не нужно — переходите к следующему разделу.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# дважды один и тот же запрос&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT postgis_extensions_upgrade()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;DROP EXTENSION postgis_raster&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установить новые версии пакетов ===&lt;br /&gt;
А также удалить старый пакет postgis версии 2, если он был.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-17 postgresql-17-postgis-3&lt;br /&gt;
sudo apt purge postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сделать запасную резервную копию базы данных и настроек ===&lt;br /&gt;
Инструмент миграции кластеров между версиями делает это абсолютно безопасно, однако дополнительная осторожность лишней не будет. Сделайте запасные временные резервные копии, которые в конце обновления можно будет удалить.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Каталог /backup должен существовать и должен быть доступен для записи всем пользователям.&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД, созданный автоматически сценарием при установке новой версии ===&lt;br /&gt;
При помощи утилиты &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; из postgresql-common посмотрите, как выглядят ваши кластеры БД:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вывод команды будет примерно следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5433 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Кластер 17/main был создан автоматически сценарием установки postgresql и использует новый порт 5433. Его нужно остановить и удалить — он не нужен, т.к. будет выполняться процедура миграции кластера, которая создаст новый кластер автоматически.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 17 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Повторное выполнение команды &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; должно показать, что у вас остался один кластер &#039;&#039;&#039;11/main&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Выполнить обновление кластера БД старой версии до кластера новой версии ===&lt;br /&gt;
Остановите службу postgresql&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите процесс обновления кластера БД &#039;&#039;&#039;11/main&#039;&#039;&#039; используя утилиту &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; из пакета postgresql-common. Это действие может занять много времени и дискового пространства.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После завершения операции обновления вы увидите новое состояние кластеров (старая версия должна находиться в режиме &#039;&#039;&#039;down&#039;&#039;&#039; и порт 5432 теперь используется новым кластером):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5432 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите службу postgres&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверить работу USERSIDE ===&lt;br /&gt;
Сначала выполните команды, отображающие версии, чтобы убедиться что база данных теперь работает на кластере БД новой версии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вы должны увидеть 17ю версию postgresql и 3.x.x версию postgis.&lt;br /&gt;
&lt;br /&gt;
Теперь запустите службу FPM и зайдите в USERSIDE через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так как другие службы остановлены, вы, вероятно, увидите ошибки связанные с ними, но при этом интерфейс USERSIDE должен открыться без ошибок подключения к базе данных.&lt;br /&gt;
Если все успешно, то раскомментируйте закомментированные ранее строки в crontab и запустите внешние службы, находящиеся под управлением supervisor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии ===&lt;br /&gt;
Если USERSIDE работает корректно, ошибок взаимодействия с БД нет, то можно удалить старый кластер и пакеты. Вы также, по желанию, можете удалить аварийные резервные копии или подождать несколько дней, чтобы точно убедиться, что они не пригодятся.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency* /backup/postgres_config_emergency.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_PostgreSQL_version_upgrade&amp;diff=20976</id>
		<title>HOWTO: PostgreSQL version upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_PostgreSQL_version_upgrade&amp;diff=20976"/>
		<updated>2025-08-20T12:13:47Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
This section describes how to upgrade PostgreSQL &#039;&#039;between major versions&#039;&#039; (e.g., from version 11 to version 17).&lt;br /&gt;
&lt;br /&gt;
Upgrading within a version (e.g., from version 17.1 to version 17.2) &#039;&#039;is automatic and requires no additional steps.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;We recommend reading the official upgrade instructions&#039;&#039;&#039; at [https://www.postgresql.org/docs/current/upgrading.html postgresql.org].&lt;br /&gt;
&lt;br /&gt;
In the Debian distribution and those based on it, there is a package [https://packages.debian.org/sid/postgresql-common postgresql-common] that is installed automatically when the PostgreSQL package is installed. Postgresql-common includes tools to simplify working with PostgreSQL database clusters. This includes updating database clusters.&lt;br /&gt;
&lt;br /&gt;
A [https://www.postgresql.org/docs/current/glossary.html database cluster] in PostgreSQL is a server instance together with all the maintained databases, not a distributed system as it may seem.&lt;br /&gt;
&lt;br /&gt;
The following example will show how to upgrade a database cluster from version 11 to version 17 using the tools in the &#039;&#039;&#039;postgresql-common&#039;&#039;&#039; package.&lt;br /&gt;
&lt;br /&gt;
== Upgrade order ==&lt;br /&gt;
# Stop USERSIDE.&lt;br /&gt;
# Upgrade the current version of postgresql within the major version (e.g., from 11.5 to 11.22).&lt;br /&gt;
# Upgrade the postgis extension to the latest version (e.g. from 2.5 to 3.3.4). Also be sure to update the extension in the database itself.&lt;br /&gt;
# Install a new version of postgresql without uninstalling the old one (e.g. 17.1).&lt;br /&gt;
# Make a backup copy of the database and settings&lt;br /&gt;
# Delete the database cluster created automatically by the script when installing the new version&lt;br /&gt;
# Upgrade the database cluster of the old version to the cluster of the new version&lt;br /&gt;
# Check USERSIDE operation&lt;br /&gt;
# Remove the old version database cluster, obsolete packages and spare backups&lt;br /&gt;
&lt;br /&gt;
Allocate time for this operation. It can take quite a long time depending on the size of the database and the performance of the server. Also, make sure you have the free space you will need to upgrade the cluster (at least as much as the current cluster, but more is better).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR View video tutorial on asciinema].&lt;br /&gt;
&lt;br /&gt;
== Step-by-step instructions ==&lt;br /&gt;
&lt;br /&gt;
=== Stop USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.1-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The php version is for example. Use the one you are using.&lt;br /&gt;
&lt;br /&gt;
Comment out the startup of all modules and userside in crontab.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade the current version of postgresql within the major version ===&lt;br /&gt;
Check the current versions. Upgrade the current PostgreSQL and PostGIS packages:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Instead of 11 and 2.5, specify the versions you actually have installed.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade the postgis extension to the latest version ===&lt;br /&gt;
Be sure to upgrade the extension in the database as well! If the previous commands also showed the presence of an extension in the postgres database, then postgis needs to be updated for it as well.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install a new version of postgresql without uninstalling the old one ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-17 postgresql-17-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Make a backup of the database and settings ===&lt;br /&gt;
The number 11 in the filename is the PostgreSQL version number to which this backup belongs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency_11.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency_11.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency_11.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The /backup directory must exist and must be writable by all users.&lt;br /&gt;
&lt;br /&gt;
=== Remove the database cluster created automatically by the script when installing a new version ===&lt;br /&gt;
Using the &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; utility from postgresql-common, see what your database clusters look like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The output of the command will be approximately as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5433 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The 17/main cluster was created automatically by the postgresql installation script. It needs to be stopped and deleted.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 17 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Running the &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; command again should show that you have one &#039;&#039;&#039;11/main&#039;&#039;&#039; cluster left.&lt;br /&gt;
&lt;br /&gt;
=== Perform an upgrade of the old version database cluster to the new version database cluster ===&lt;br /&gt;
Stop the postgresql service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start the &#039;&#039;&#039;11/main&#039;&#039;&#039; database cluster upgrade process using the &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; utility from the postgresql-common package. This may take a lot of time and disc space.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After the upgrade operation is complete, you will see the new state of the clusters (the old version should be in &#039;&#039;&#039;down&#039;&#039;&#039; mode):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5432 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start the postgres service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verify the operation of USERSIDE ===&lt;br /&gt;
First run the commands displaying the versions to verify that the database is now running on the new version database cluster:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should see version 17 of postgresql and version 3.3.4 of postgis. Maybe by the time you read these lines, the postgis version will be newer.&lt;br /&gt;
&lt;br /&gt;
Now start the FPM service and go to USERSIDE through your browser.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.1-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Since the other services are stopped, you will probably see errors related to them, but the USERSIDE interface should open without database connection errors.&lt;br /&gt;
If everything is successful, then uncomment the previously commented lines in crontab and start the external services under supervisor control:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Remove the old version database cluster, obsolete packages, and spare backups ===&lt;br /&gt;
If USERSIDE is running correctly, and there are no database communication errors, you can remove the old cluster and packages. You can also optionally delete the emergency backups or wait a few days to make sure they are not needed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-2.5 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency_11* /backup/postgres_config_emergency_11.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20975</id>
		<title>HOWTO: Обновление версии PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20975"/>
		<updated>2025-08-20T12:11:56Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
В данном разделе описана процедура обновления PostgreSQL &#039;&#039;между основными версиями&#039;&#039; (например, с версии 11 на версию 17).&lt;br /&gt;
&lt;br /&gt;
Обновление внутри версии (например, с версии 17.1 на версию 17.2) &#039;&#039;происходит автоматически и не требует дополнительных действий&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рекомендуем ознакомиться с официальными инструкциями по обновлению&#039;&#039;&#039; на сайте [https://www.postgresql.org/docs/current/upgrading.html postgresql.org].&lt;br /&gt;
&lt;br /&gt;
В дистрибутиве Debian и основанных на нем существует пакет [https://packages.debian.org/sid/postgresql-common postgresql-common], устанавливаемый автоматически при установке пакета PostgreSQL. В состав postgresql-common входят инструменты, упрощающие работу с кластерами баз данных PostgreSQL. В том числе и обновление кластеров БД.&lt;br /&gt;
&lt;br /&gt;
Кластером баз данных ([https://www.postgresql.org/docs/current/glossary.html Database cluster]) в PostgreSQL называется экземпляр сервера вместе со всеми обслуживаемыми БД, а не распределенную систему, как может показаться.&lt;br /&gt;
&lt;br /&gt;
В следующем примере будет показано обновление кластера БД с версии 11 на версию 17 используя инструменты из пакета &#039;&#039;&#039;postgresql-common&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Порядок обновления ==&lt;br /&gt;
# Остановить USERSIDE.&lt;br /&gt;
# Обновить текущую версии postgresql в пределах основной версии (например, с 11.5 до 11.22).&lt;br /&gt;
# Обновить расширение postgis до самой последней версии (например, с 2.5 до 3.3.4). Также обязательно обновить расширение и в самой базе данных.&lt;br /&gt;
# Установить новую версию postgresql не удаляя старой (например 17.1)&lt;br /&gt;
# Сделать запасную резервную копию базы данных и настроек&lt;br /&gt;
# Удалить кластер БД, созданный автоматически сценарием при установке новой версии&lt;br /&gt;
# Выполнить обновление кластера БД старой версии до кластера новой версии&lt;br /&gt;
# Проверить работу USERSIDE&lt;br /&gt;
# Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии&lt;br /&gt;
&lt;br /&gt;
Выделите время на эту операцию. Она может занять довольно продролжительное время в зависимости от размера базы данных и производительности сервера. Также обязательно убедитесь в наличии свободного места, которое понадобится для обновления кластера (как минимум столько же, сколько занимает текущий кластер, но лучше больше).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR Посмотреть видеоинструкцию на asciinema].&lt;br /&gt;
&lt;br /&gt;
== Пошаговая инструкция ==&lt;br /&gt;
SQL-запросы с оператором &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, приведенные далее, необходимы для определения текущих установленных версий в качестве справочной информации.&lt;br /&gt;
&lt;br /&gt;
=== Остановить USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Версия php указана для примера. Используйте ту, что испльзуется у вас.&lt;br /&gt;
&lt;br /&gt;
Закомментируйте запуск всех модулей и userside в crontab.&lt;br /&gt;
&lt;br /&gt;
=== Обновить текущую версии postgresql в пределах основной версии ===&lt;br /&gt;
Проверить текущие версии. Обновить текущие пакеты PostgreSQL и PostGIS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вместо 11 и 2.5 укажите те версии, которе фактически установлены у вас.&lt;br /&gt;
&lt;br /&gt;
=== Обновить расширение postgis до самой последней версии ===&lt;br /&gt;
Обязательно также обновить расширение в базе данных! Если предыдущие команды также показали наличие расширения в базе данных postgres, то postgis нужно обновить и для нее.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d postgres -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установить новую версию postgresql не удаляя старой ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-17 postgresql-17-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сделать запасную резервную копию базы данных и настроек ===&lt;br /&gt;
Число 11 в имени файлов — это номер версии PostgreSQL, к которой относится эта резервная копия.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency_11.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency_11.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency_11.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Каталог /backup должен существовать и должен быть доступен для записи всем пользователям.&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД, созданный автоматически сценарием при установке новой версии ===&lt;br /&gt;
При помощи утилиты &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; из postgresql-common посмотрите, как выглядят ваши кластеры БД:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вывод команды будет примерно следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5433 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Кластер 17/main был создан автоматически сценарием установки postgresql. Его нужно остановить и удалить.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 17 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Повторное выполнение команды &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; должно показать, что у вас остался один кластер &#039;&#039;&#039;11/main&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Выполнить обновление кластера БД старой версии до кластера новой версии ===&lt;br /&gt;
Остановите службу postgresql&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите процесс обновления кластера БД &#039;&#039;&#039;11/main&#039;&#039;&#039; используя утилиту &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; из пакета postgresql-common. Это действие может занять много времени и дискового пространства.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После завершения операции обновления вы увидите новое состояние кластеров (старая версия должна находиться в режиме &#039;&#039;&#039;down&#039;&#039;&#039;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
17  main    5432 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите службу postgres&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверить работу USERSIDE ===&lt;br /&gt;
Сначала выполните команды, отображающие версии, чтобы убедиться что база данных теперь работает на кластере БД новой версии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вы должны увидеть 17ю версию postgresql и 3.3.4 версию postgis. Может быть к тому времени, как вы будете читать эти строки, версия postgis будет более новой.&lt;br /&gt;
&lt;br /&gt;
Теперь запустите службу FPM и зайдите в USERSIDE через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так как другие службы остановлены, вы, вероятно, увидите ошибки связанные с ними, но при этом интерфейс USERSIDE должен открыться без ошибок подключения к базе данных.&lt;br /&gt;
Если все успешно, то раскомментируйте закомментированные ранее строки в crontab и запустите внешние службы, находящиеся под управлением supervisor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии ===&lt;br /&gt;
Если USERSIDE работает корректно, ошибок взаимодействия с БД нет, то можно удалить старый кластер и пакеты. Вы также, по желанию, можете удалить аварийные резервные копии или подождать несколько дней, чтобы точно убедиться, что они не пригодятся.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-2.5 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency_11* /backup/postgres_config_emergency_11.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_3.18&amp;diff=20492</id>
		<title>Обновление 3.18</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_3.18&amp;diff=20492"/>
		<updated>2025-07-08T11:34:18Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Upgrade_3.18|en]] | [[Обновление_3.18|ru]]&lt;br /&gt;
&lt;br /&gt;
Версия: &#039;&#039;&#039;[[3.18]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Требуется версия: &#039;&#039;&#039;[[3.12]] и выше&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Несколько слов от автора ==&lt;br /&gt;
* Мы двигаемся дальше. Это &amp;quot;военная версия&amp;quot; 3.18. Её разработка была долгая и осложнённая военными действиями, перебоями с энергоснабжением и многим другим. &lt;br /&gt;
&lt;br /&gt;
*  Сделано немало и опять же особенно мы старались сделать упор на доработку всяческих мелочей. Прошу вдумчиво ознакомиться со [[3.18|списком изменений]]&lt;br /&gt;
&lt;br /&gt;
* Обратите внимание на страницу [[&amp;quot;Горячие клавиши&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* В версии 3.18 объявляются устаревшими разделы:&lt;br /&gt;
** &amp;quot;[[Заявка на подключение]]&amp;quot;. В версии 3.19 раздел будет удалён. Используйте раздел &amp;quot;[[API]]&amp;quot; для организации приема заявок и создания задач&lt;br /&gt;
** &amp;quot;[[Общая схема коммутации]]&amp;quot;. В версии 3.19 раздел будет удалён. Используйте в работе раздел &amp;quot;[[Схемы коммутации]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* [[Обновление]]. &#039;&#039;&#039;Рекомендую иметь два инстанса системы&#039;&#039;&#039;. Отдельно действующую и отдельно тестовую. На тестовой вы можете периодически обновлять базу данных с действующей системы и проводить обновление, убеждаясь, что всё работает, ознакомиться с нововведениями или выявлять моменты, которые у вас перестали работать.&lt;br /&gt;
&lt;br /&gt;
* Наша группа в Telegram для взаимного общения клиентов между собой: https://t.me/usersideeu и канал для новостей: https://t.me/userside&lt;br /&gt;
&lt;br /&gt;
== Особенности в проведении обновления ==&lt;br /&gt;
&lt;br /&gt;
При обновлении в Docker-окружении, обратитесь к [https://github.com/userside/userside-docker/tree/v3.18 инструкциям] в репозитории Docker-бандла.&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.10 - ознакомьтесь со страницей: [[Обновление 3.11]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.11 и ранее - ознакомьтесь со страницей: [[Обновление 3.12]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.12 и ранее - ознакомьтесь со страницей: [[Обновление 3.13]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.13 и ранее - ознакомьтесь со страницей: [[Обновление 3.14]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.14 и ранее - ознакомьтесь со страницей: [[Обновление 3.15]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.15 и ранее - ознакомьтесь со страницей: [[Обновление 3.16]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.16 и ранее - ознакомьтесь со страницей: [[Обновление 3.17]]&lt;br /&gt;
&lt;br /&gt;
* Версия 3.18 требует PHP версии 8.1. Вы можете установить все необходимые пакеты дополнительно к уже существующей иной версии PHP. Если используете LDAP, то установите также php8.1-ldap. Если используете TurboSMS, то установите php8.1-soap.&lt;br /&gt;
 sudo apt install -y php8.1-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&lt;br /&gt;
* Если версия php8.1 отсутствует в вашем репозитории, то воспользуйтесь альтернативным репозиторием, например, deb.sury.org, добавив его в систему следующим образом и затем повторив команду установки PHP8.1 приведенную пунктом выше:&lt;br /&gt;
 sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
 sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
&lt;br /&gt;
* Измените конфигурацию PHP следующим образом и перезапустите службу php-fpm.&lt;br /&gt;
Обратите внимание, что если ваш часовой пояс &amp;lt;code&amp;gt;Europe/Kiev&amp;lt;/code&amp;gt;, то вместо &amp;lt;code&amp;gt;$(cat /etc/timezone)&amp;lt;/code&amp;gt; Вы должны написать &amp;lt;code&amp;gt;Europe/Kyiv&amp;lt;/code&amp;gt;. В Debian 11 еще не внесены изменения по переименованию часового пояса, в то время как в PHP 8.1 изменения уже внесены.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.1/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_input_time.*@max_input_time = 300@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
 &lt;br /&gt;
sudo systemctl restart php8.1-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* В NGINX измените используемую версию PHP для обновляемой копии USERSIDE. Если вы следовали инструкциям по установке системы, то в файле /etc/nginx/conf.d/default.conf или userside.conf или в другом, который вы использовали для настройки userside, измените строку:&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php7.4-fpm.sock;&lt;br /&gt;
на строку&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.1-fpm.sock;&lt;br /&gt;
и перечитайте конфигурацию nginx:&lt;br /&gt;
 sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
* Обратите внимание, что при вызове команды &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; из командной строки, теперь будет вызываться php8.1, так как это последняя установленная версия. Если вы где-либо до сих пор используете php7.4, то вам нужно изменить вызов php в этих местах либо изменить альтернативную команду php, чтобы она запускала нужную вам версию.&lt;br /&gt;
&lt;br /&gt;
* USERSIDE 3.18 &#039;&#039;требует Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать. Если у вас на хосте неподдерживаемая версия (&amp;quot;end-of-life&amp;quot;), то нужно обязательно [[Python-update|установить дополнительно]] более свежую версию Python.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Остановите супервизор и все контролируемые им службы:&lt;br /&gt;
 sudo systemctl stop supervisor&lt;br /&gt;
&lt;br /&gt;
* Теперь консольный скрипт, запускающий различные команды из командной строки, имеет имя &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; вместо &amp;lt;code&amp;gt;userside&amp;lt;/code&amp;gt;. Вам нужно изменить везде команду запуска с &amp;lt;code&amp;gt;php /var/www/userside/userside&amp;lt;/code&amp;gt; на &amp;lt;code&amp;gt;php /var/www/userside/run&amp;lt;/code&amp;gt;.&lt;br /&gt;
** В файле /etc/cron.d/userside нужно заменить строку:&lt;br /&gt;
 * * * * *   www-data   /usr/bin/php /var/www/userside/userside cron &amp;gt; /dev/null&lt;br /&gt;
на строку:&lt;br /&gt;
 * * * * *   www-data   /usr/bin/php /var/www/userside/run cron &amp;gt; /dev/null&lt;br /&gt;
** В файле /etc/supervisor/conf.d/us-core-worker.conf нужно заменить строку:&lt;br /&gt;
 command=/usr/bin/php /var/www/userside/userside queue/listen&lt;br /&gt;
на строку:&lt;br /&gt;
 command=/usr/bin/php /var/www/userside/run queue/listen&lt;br /&gt;
&lt;br /&gt;
* Пользователю RabbitMQ, который используется в USERSIDE, необходимо дать права на мониторинг, чтобы USERSIDE мог осуществлять мониторинг работы сервера. Для этого выполните (при условии, что имя вашего пользователя &amp;lt;code&amp;gt;userside&amp;lt;/code&amp;gt;):&lt;br /&gt;
 sudo rabbitmqctl set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
Если вы используете vhost оличный от корневого (по умолчанию), то также нужно добавить соответствующую опцию, например для vhost &amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt;:&lt;br /&gt;
 sudo rabbitmqctl --vhost copy set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Удалите рудиментарные очереди:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl delete_queue userside.core&lt;br /&gt;
sudo rabbitmqctl delete_queue userside.microservice.poller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* С помощью автоматического [[Инсталлятор|инсталлятора]] выполните [[Обновление|обновление]]:&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
* Следующее действие нужно выполнять только если вы [[Python-update|обновили Python]]. Если не обновляли, можно не выполнять:&lt;br /&gt;
 sudo rm -rf /var/www/userside/microservice/poller/venv&lt;br /&gt;
 sudo python3.11 -m venv /var/www/userside/microservice/poller/venv&lt;br /&gt;
&lt;br /&gt;
* Необходимо обновить (установить) зависимости для поллера:&lt;br /&gt;
 cd /var/www/userside/microservice/poller&lt;br /&gt;
 sudo venv/bin/pip3 install --upgrade pip&lt;br /&gt;
 sudo venv/bin/pip3 install -U -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
* Обратите внимание, что начиная с версии 3.18, фоновыми службами выполняется значительная часть работы по взаимодействию с сетевым оборудованием. Запустите супервизор:&lt;br /&gt;
 sudo systemctl start supervisor&lt;br /&gt;
И проследите, чтобы все службы запустились и работали корректно (RUNNING):&lt;br /&gt;
 sudo supervisorctl status&lt;br /&gt;
Вы должны увидеть 5 экземпляров службы us-poller и 10 экземпляров службы us-core-worker, либо то количество, которое вы самостоятельно указали в конфигурационных файлах супервизора.&lt;br /&gt;
&lt;br /&gt;
* Начиная с версии 3.18 вместо модулей сателлитов (usm_satellite), устанавливаемых на удаленных узлах для проксирования команд взаимодействия с оборудованием, теперь используются точно такие же поллеры, как и в ядре системы, но с обязательным указанием идентификатора &amp;quot;сетеллита&amp;quot; в настройках. Обязательно ознакомьтесь с действиями, необходимыми для перехода с usm_satellite на usm_poller [[Сателлиты|в соответствующем разделе]].&lt;br /&gt;
&lt;br /&gt;
* В версии 3.18 мы очень сильно переработали структуру базы данных. Поменялась как основная схема так и имена всех таблиц, почти всех полей и, зачастую, типы этих полей. Во-первых обновление может занять длительное время, а во-вторых если вы в работе использовали прямое чтение из базы данных - всё это нуждается в переработке.&lt;br /&gt;
&lt;br /&gt;
* Переработан низкоуровневый опрос оборудования &#039;&#039;(FDB, ARP, опрос интерфейсов и т.п.)&#039;&#039;. Всё это теперь выполняется поллерами ядра. После обновления проверьте работоспособность опроса FDB-таблиц и прочего.&lt;br /&gt;
&lt;br /&gt;
* Метки абонентов объединены с общими метками по системе. Соответственно в файлах конфигурации модулей взаимодействия с биллингами (либо в API) требуется изменить ID меток на новые (если вы это используете). Например для модуля usm_utm5 это переменная $markMerge&lt;br /&gt;
&lt;br /&gt;
* Удалена работа с JABBER. Используйте службу уведомлений &amp;quot;Custom HTTP request&amp;quot; либо Messenger &#039;&#039;(Telegram)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Если вы до сих пор не перенастроили API-ключ [[UserSide API Key|на новую систему]] - сделайте это. В версии 3.18 $zapikey удален и API-перестанет работать для тех, кто не провёл перенастройку.&lt;br /&gt;
&lt;br /&gt;
* Если в версии 3.17 вы до сих пор не [[Обновление 3.17|настроили работу с WebSTOMP]] - нужно это сделать иначе перестанет работать часть системы&lt;br /&gt;
&lt;br /&gt;
* Не забудьте обновить все модули на их свежие версии&lt;br /&gt;
&lt;br /&gt;
* В полере (usm_poller) который теперь используется для взаимодействия с оборудованием, для аутентификации в SNMP v1 и v2 используется одно комьюнити. Но в пользовательском интерфейсе USERSIDE для обратной совместимости пока что оставлены два поля (ro и rw). Какое из значений будет использовано описано ниже в алгоритме выбора единственного SNMP-community. Чтобы упростить для себя эту задачу, вы можете использовать одно и то же комьюнити для двух полей. Например, если вы хотите предоставить для Userside доступ только на чтение, то в оба поля (ro и rw) впишите комьюнити с правами на чтение. Если хотите предоставить полный доступ, то также в оба поля впишите один и тот же комьюнити с полными правами. Также стоит учитывать, что незаполненное поле будет заполнено из глобальных настроек Userside.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Селектор SNMP-community.png|обрамить|центр]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Список изменений:&#039;&#039;&#039; [[3.18|просмотреть]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Проведение обновления:&#039;&#039;&#039; [[Обновление|инструкция]]&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Upgrade_3.18&amp;diff=20491</id>
		<title>Upgrade 3.18</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Upgrade_3.18&amp;diff=20491"/>
		<updated>2025-07-08T11:34:09Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Upgrade_3.18|en]] | [[Обновление_3.18|ru]]&lt;br /&gt;
&lt;br /&gt;
Version: &#039;&#039;&#039;[[3.18_EN|3.18]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Version required: &#039;&#039;&#039;[[3.12_EN|3.12]]&#039;&#039;&#039; and above&lt;br /&gt;
&lt;br /&gt;
== A few words from the author - version features ==&lt;br /&gt;
&lt;br /&gt;
* A lot of work has been done and especially we have tried to emphasise on fine-tuning all sorts of little things. Please read the [[3.18_EN| list of changes]] thoughtfully.&lt;br /&gt;
&lt;br /&gt;
* Please take a look at the [[&amp;quot;Hot keys&amp;quot;]] page.&lt;br /&gt;
&lt;br /&gt;
* Version 3.18 declares obsolete sections:&lt;br /&gt;
** &amp;quot;[[Application for connection]]&amp;quot;. In version 3.19, the section will be removed. Use the &amp;quot;[[API_EN|API]]&amp;quot; section to organise receiving applications and creating tasks&lt;br /&gt;
** &amp;quot;[[General commutation scheme]]&amp;quot;. In version 3.19, the section will be removed. Use the &amp;quot;[[Commutation schemes]]&amp;quot; section in your work&lt;br /&gt;
&lt;br /&gt;
* [[Upgrade]]. &#039;&#039;&#039;Recommended to have two instances of the system&#039;&#039;&#039;. A separate running one and a separate test one. On the test one you can periodically update the database from the live system and perform updates to make sure everything is working, familiarise yourself with innovations or identify things that have stopped working for you.&lt;br /&gt;
&lt;br /&gt;
* Our group in Telegram for mutual communication between clients: https://t.me/usersideeu and a channel for news: https://t.me/userside&lt;br /&gt;
&lt;br /&gt;
== Features of the upgrade ==&lt;br /&gt;
&lt;br /&gt;
When upgrading in a Docker environment, refer to [https://github.com/userside/userside-docker/tree/v3.18 instructions] in the Docker bundle repository.&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from version 3.10 - check out the page: [[Upgrade 3.11]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from version 3.11 and earlier - check out the page: [[Upgrade 3.12]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from version 3.12 and earlier - check out the page: [[Upgrade 3.13]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from version 3.13 and earlier - check out the page: [[Upgrade 3.14]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from version 3.14 and earlier - check out the page: [[Upgrade 3.15]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from version 3.15 and earlier - check out the page: [[Upgrade 3.16]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from version 3.16 and earlier - check out the page: [[Upgrade 3.17]]&lt;br /&gt;
&lt;br /&gt;
* Version 3.18 requires PHP version 8.1. You can install all the necessary packages in addition to your existing different PHP version. If you are using LDAP, also install php8.1-ldap. If you are using TurboSMS, install php8.1-soap.&lt;br /&gt;
 sudo apt install -y php8.1-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&lt;br /&gt;
* If php8.1 is not in your repository, use an alternative repository such as deb.sury.org by adding it to your system as follows and then repeating the PHP8.1 installation command above:&lt;br /&gt;
 sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
 sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
&lt;br /&gt;
* Change the PHP configuration as follows and restart the php-fpm service.&lt;br /&gt;
Note that if your time zone is &amp;lt;code&amp;gt;Europe/Kiev&amp;lt;/code&amp;gt;, then instead of &amp;lt;code&amp;gt;$(cat /etc/timezone)&amp;lt;/code&amp;gt; You must write &amp;lt;code&amp;gt;Europe/Kyiv&amp;lt;/code&amp;gt;. Debian 11 has not yet made the time zone renaming changes, while PHP 8.1 has already made the changes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.1/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_input_time.*@max_input_time = 300@&amp;quot; /etc/php/8.1/fpm/php.ini&lt;br /&gt;
 &lt;br /&gt;
sudo systemctl restart php8.1-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In NGINX, change the PHP version used for the updated copy of USERSIDE. If you followed the system installation instructions, in /etc/nginx/conf.d/default.conf or userside.conf or whatever you used to configure userside, change the line:&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php7.4-fpm.sock;&lt;br /&gt;
per line&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.1-fpm.sock;&lt;br /&gt;
and reread the nginx configuration:&lt;br /&gt;
 sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
* Note that when the command is invoked &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; from the command line, php8.1 will now be called, since it is the latest version installed. If you&#039;re still using php7.4 anywhere, you&#039;ll need to change the php call in those places or change the alternate php command to run the version you need.&lt;br /&gt;
&lt;br /&gt;
* USERSIDE 3.18 &#039;&#039;requires Python3 of any currently supported version. The status of versions can be viewed here:&amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. It is recommended to use a version with &amp;quot;security&amp;quot; or &amp;quot;bugfix&amp;quot; status. Versions marked as &amp;quot;end-of-life&amp;quot; are not supported. Versions marked as &amp;quot;feature&amp;quot; are not recommended. If you have an unsupported version (&amp;quot;end-of-life&amp;quot;) installed on your host, you should be sure to [[Python-update_EN|install additionally]] a more recent version of Python.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Stop the supervisor and all services under its control:&lt;br /&gt;
 sudo systemctl stop supervisor&lt;br /&gt;
&lt;br /&gt;
* The console script that runs various commands from the command line is now named &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;userside&amp;lt;/code&amp;gt;. You need to change the launch command everywhere from &amp;lt;code&amp;gt;php /var/www/userside/userside&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;php /var/www/userside/run&amp;lt;/code&amp;gt;.&lt;br /&gt;
** In the file /etc/cron.d/userside you need to replace the line:&lt;br /&gt;
 * * * * *   www-data   /usr/bin/php /var/www/userside/userside cron &amp;gt; /dev/null&lt;br /&gt;
per line:&lt;br /&gt;
 * * * * *   www-data   /usr/bin/php /var/www/userside/run cron &amp;gt; /dev/null&lt;br /&gt;
** In the file /etc/supervisor/conf.d/us-core-worker.conf you need to replace the line:&lt;br /&gt;
 command=/usr/bin/php /var/www/userside/userside queue/listen&lt;br /&gt;
per line:&lt;br /&gt;
 command=/usr/bin/php /var/www/userside/run queue/listen&lt;br /&gt;
&lt;br /&gt;
* The RabbitMQ user used by USERSIDE needs to be given monitoring privileges so that USERSIDE can monitor the operation of the server. To do this, execute (assuming your user name is &amp;lt;code&amp;gt;userside&amp;lt;/code&amp;gt;):&lt;br /&gt;
 sudo rabbitmqctl set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
If you are using a vhost other than the root (default), you should also add the appropriate option, e.g. for vhost &amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt;:&lt;br /&gt;
 sudo rabbitmqctl --vhost copy set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Remove rudimentary queues:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl delete_queue userside.core&lt;br /&gt;
sudo rabbitmqctl delete_queue userside.microservice.poller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use the automatic [[Installer|installer]] to perform an [[Upgrade|upgrade]]:&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
* The following action only needs to be performed if you [[Python-update_EN| updated Python]]. If you haven&#039;t updated, you don&#039;t need to do it:&lt;br /&gt;
 sudo rm -rf /var/www/userside/microservice/poller/venv&lt;br /&gt;
 sudo python3.11 -m venv /var/www/userside/microservice/poller/venv&lt;br /&gt;
&lt;br /&gt;
* It is necessary to update (install) the dependencies for poller:&lt;br /&gt;
 cd /var/www/userside/microservice/poller&lt;br /&gt;
 sudo venv/bin/pip3 install --upgrade pip&lt;br /&gt;
 sudo venv/bin/pip3 install -U -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
* Note that as of version 3.18, background services do much of the work of interacting with network hardware. Start the supervisor:&lt;br /&gt;
 sudo systemctl start supervisor&lt;br /&gt;
And make sure that all services start and run correctly (RUNNING):&lt;br /&gt;
 sudo supervisorctl status&lt;br /&gt;
You should see 5 instances of the us-poller service and 10 instances of the us-core-worker service, or the number you have specified yourself in the supervisor configuration files.&lt;br /&gt;
&lt;br /&gt;
* As of version 3.18, instead of satellite modules (usm_satellite) installed on remote nodes to proxy hardware communication commands, the exact same pollers are now used as in the system kernel, but with the mandatory &amp;quot;setellite&amp;quot; identifier in the settings. Be sure to review the steps required to switch from usm_satellite to usm_poller [[Satellites|in the appropriate section]].&lt;br /&gt;
&lt;br /&gt;
* In version 3.18, we&#039;ve reworked the database structure a lot. Both the basic schema and the names of all tables, almost all fields and, often, the types of these fields have changed. Firstly, updating can take a long time, and secondly, if you used direct reading from the database - all this needs to be reworked.&lt;br /&gt;
&lt;br /&gt;
* Reworked low-level hardware polling &#039;&#039;(FDB, ARP, interface polling, etc)&#039;&#039;. All of this is now done by kernel pollers. After the update, check if FDB tables and other polling works.&lt;br /&gt;
&lt;br /&gt;
* Customers&#039; labels are combined with common labels in the system. Accordingly, in the configuration files of billing interaction modules (or in the API) it is required to change the IDs of labels to new ones (if you use it). For example, for the usm_utm5 module this is the $markMerge variable&lt;br /&gt;
&lt;br /&gt;
* Removed JABBER interaction. Use the &amp;quot;Custom HTTP request&amp;quot; notification service or Messenger &#039;&#039;(Telegram)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* If you have not yet reconfigured the [[UserSide_API_Key_EN| to the new system]] - do so. In version 3.18, $zapikey is removed and the API key will stop working for those who have not reconfigured.&lt;br /&gt;
&lt;br /&gt;
* If in version 3.17 you still haven&#039;t [[Upgrade 3.17|configured WebSTOMP]], you need to do so or parts of the system will stop working&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t forget to update all modules to their latest versions&lt;br /&gt;
&lt;br /&gt;
* In the poller (usm_poller), which is now used to interact with the hardware, one community is used for authentication in SNMP v1 and v2. But in the USERSIDE user interface, two fields (ro and rw) are left for now for backward compatibility. Which of the values will be used is described below in the algorithm for selecting a single SNMP-community. To simplify this for you, you can use the same community for the two fields. For example, if you want to give Userside read-only access, then enter the read-only community in both fields (ro and rw). If you want to grant full access, then also enter the same community with full permissions in both fields. It is also worth considering that the blank field will be filled in from the global Userside settings.&lt;br /&gt;
&lt;br /&gt;
[[File:Snmp_community_select_en.png|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;List of Changes:&#039;&#039;&#039; [[3.18_EN|view]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Performing the upgrade:&#039;&#039;&#039; [[Upgrade|instruction]]&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Upgrade_3.19&amp;diff=20490</id>
		<title>Upgrade 3.19</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Upgrade_3.19&amp;diff=20490"/>
		<updated>2025-07-08T11:33:54Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Upgrade_3.19|en]] | [[Обновление_3.19|ru]]&lt;br /&gt;
&lt;br /&gt;
Version: &#039;&#039;&#039;[[3.19_EN|3.19]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Version required: &#039;&#039;&#039;[[3.12_EN|3.12]] and above&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== A few words from the author ==&lt;br /&gt;
* In version 3.19 we have done a lot to universalise and customise the system. Now every customer can switch off unused sections, create and operate completely arbitrary sections and entities, and change the naming of basic terms such as &amp;quot;Customers&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Now we have &amp;quot;[[Two-Factor Authentication (2FA)]]&amp;quot;. Don&#039;t neglect security and use it.&lt;br /&gt;
&lt;br /&gt;
* Most files in the userside web directory have, for security reasons, changed their location several levels up and are now inaccessible via the web. Also changed the name of the directory that should be the root directory for the web to the default name public.&lt;br /&gt;
&lt;br /&gt;
* System page/link routing has been changed&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
It was: /?core_section=customer&amp;amp;action=show&amp;amp;id=1234&lt;br /&gt;
It became: /customer/1234&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In version 3.19, the sections are declared obsolete:&lt;br /&gt;
** &amp;quot;Layout of construction lengths and assembled couplings for cable line routes&amp;quot;. In version 3.20 the section will be removed&lt;br /&gt;
** &amp;quot;[[Unknown MAC-addresses]]&amp;quot;. In version 3.20 the section will be removed&lt;br /&gt;
** &amp;quot;Technical support interface&amp;quot;. In version 3.20 the section will be removed&lt;br /&gt;
&lt;br /&gt;
* [[Upgrade]]. &#039;&#039;&#039;Recommended to have two instances of the system&#039;&#039;&#039;. A separate operational one and a separate test one. On the test one you can periodically update the database from the operational system and perform updates to make sure that everything is working, familiarise yourself with innovations or identify things that have stopped working for you.&lt;br /&gt;
&lt;br /&gt;
* Our Telegram group for mutual communication of clients with each other: https://t.me/usersideeu and the news channel: https://t.me/userside&lt;br /&gt;
&lt;br /&gt;
== Specifics in performing the upgrade ==&lt;br /&gt;
&lt;br /&gt;
When upgrading in a Docker environment, refer to the [https://github.com/userside/userside-docker/tree/v3.18 instructions] in the Docker bundle repository.&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.10 - check out the page: [[Upgrade 3.11]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.11 and before - check out the page: [[Upgrade 3.12]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.12 and before - check out the page: [[Upgrade 3.13]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.13 and before - check out the page: [[Upgrade 3.14]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.14 and before - check out the page: [[Upgrade 3.15]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.15 and before - check out the page: [[Upgrade 3.16]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.16 and before - check out the page: [[Upgrade 3.17]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.17 and before - check out the page: [[Upgrade 3.18]]&lt;br /&gt;
&lt;br /&gt;
* Move/remove extraneous files, directories, etc. from the userside directory (/var/www/userside). Only distribution files of the system itself and files that the system creates during its operation should be there. Userside modules (usm) should not be stored there either. Use separate directories for them (e.g. /opt/userside). Extraneous files in the userside directory can be removed during the upgrade process.&lt;br /&gt;
&lt;br /&gt;
* Save the userside3/main/config/custom_api.php and userside3/main/skins/user_style.css &#039;&#039;(if any)&#039;&#039; files. These can come in handy in case of update errors and deleting them when doing so.&lt;br /&gt;
&lt;br /&gt;
* Most files in the userside web directory have, for security reasons, changed their location several levels up and are now inaccessible via the web.&lt;br /&gt;
&lt;br /&gt;
* Version 3.19 requires PHP version 8.3. You can install all the necessary packages in addition to your existing different PHP version. If you are using LDAP, also install php8.3-ldap. If you are using TurboSMS, install php8.3-soap.&lt;br /&gt;
 sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&lt;br /&gt;
* If php8.3 is not in your repository, use an alternative repository such as deb.sury.org by adding it to your system as follows and then repeating the PHP8.3 installation command above:&lt;br /&gt;
 sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
 sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
&lt;br /&gt;
* Change the PHP configuration as follows and restart the php-fpm service.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_input_time.*@max_input_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
 &lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create a new public directory inside the userside directory (if you have it installed elsewhere, edit the command before executing):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /var/www/userside/public&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the NGINX server configuration (/etc/nginx/conf.d/userside.conf), change the paths to the root directory. The line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root   /var/www/userside/userside3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace it with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root   /var/www/userside/public;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Also change there &amp;lt;code&amp;gt;location /&amp;lt;/code&amp;gt; in its entirety for the next:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
location / {&lt;br /&gt;
    try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Also there for &amp;lt;code&amp;gt;location ~ \.php$&amp;lt;/code&amp;gt; change the value for fastcgi_pass from:&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.1-fpm.sock;&lt;br /&gt;
to&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
and reread the nginx configuration:&lt;br /&gt;
 sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
* For the websocket-user (websock-user) of the RabbitMQ broker, you need to change the permissions as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If your websocket-user name is different from websock-user, specify it instead of websock-user in the above commands.&lt;br /&gt;
&lt;br /&gt;
* Note that when you invoke the command &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; from the command line, php8.3 will now be invoked, since it is the latest version installed. If you&#039;re still using php8.1 anywhere, you&#039;ll need to change the php call in those places or change the alternate php command to run the version you want.&lt;br /&gt;
&lt;br /&gt;
* USERSIDE 3.19 &#039;&#039;requires Python3 of any currently supported version. The status of versions can be viewed here:&amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. It is recommended to use a version with &amp;quot;security&amp;quot; or &amp;quot;bugfix&amp;quot; status. Versions marked as &amp;quot;end-of-life&amp;quot; are not supported. Versions marked as &amp;quot;feature&amp;quot; are not recommended. If you have an unsupported version (&amp;quot;end-of-life&amp;quot;) installed on your host, you should be sure to [[Python-update_EN|install additionally]] a more recent version of Python.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Use the automatic [[Installer|installer]] to perform [[Upgrade|upgrade]]:&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
* The following action only needs to be performed if you [[Python-update EN| updated Python]]. If you haven&#039;t updated, you don&#039;t need to do it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo rm -rf venv&lt;br /&gt;
sudo python3.11 -m venv venv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* You need to update (install) the dependencies for poller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo venv/bin/pip install --upgrade pip&lt;br /&gt;
sudo venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* And restart the services&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Redesigned low-level interrogation of equipment &#039;&#039;(PON, TDR)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* The system of two SNMP-communities is replaced by one SNMP-community. This one SNMP-community will be the one that was specified in the rw-community field. If the rw-community field was empty - the value of the ro-community field will be used&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t forget to upgrade all modules to their latest versions&lt;br /&gt;
&lt;br /&gt;
* If you are using the [[Usm_pon_EN|usm_pon]] module - reconfigure it to run at the required frequency in system cron, depending on how many OLTs you have. The module now polls only one device per run &#039;&#039;(previously all devices were polled simultaneously without the ability to mitigate load and skip unnecessary devices)&#039;&#039;. Devices will be polled one at a time. At each startup, the next device with polling enabled will be polled.&lt;br /&gt;
&lt;br /&gt;
* You can now configure separate notification templates for different types of tasks. Check your existing templates for correct migrations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;List of changes:&#039;&#039;&#039; [[3.19_EN|view]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Performing an upgrade:&#039;&#039;&#039; [[Upgrade|instruction]]&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Upgrade_3.19&amp;diff=20489</id>
		<title>Upgrade 3.19</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Upgrade_3.19&amp;diff=20489"/>
		<updated>2025-07-08T11:33:43Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Upgrade_3.19|en]] | [[Обновление_3.19|ru]]&lt;br /&gt;
&lt;br /&gt;
Version: &#039;&#039;&#039;[[3.19_EN|3.19]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Version required: &#039;&#039;&#039;[[3.19_EN|3.12]] and above&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== A few words from the author ==&lt;br /&gt;
* In version 3.19 we have done a lot to universalise and customise the system. Now every customer can switch off unused sections, create and operate completely arbitrary sections and entities, and change the naming of basic terms such as &amp;quot;Customers&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Now we have &amp;quot;[[Two-Factor Authentication (2FA)]]&amp;quot;. Don&#039;t neglect security and use it.&lt;br /&gt;
&lt;br /&gt;
* Most files in the userside web directory have, for security reasons, changed their location several levels up and are now inaccessible via the web. Also changed the name of the directory that should be the root directory for the web to the default name public.&lt;br /&gt;
&lt;br /&gt;
* System page/link routing has been changed&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
It was: /?core_section=customer&amp;amp;action=show&amp;amp;id=1234&lt;br /&gt;
It became: /customer/1234&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In version 3.19, the sections are declared obsolete:&lt;br /&gt;
** &amp;quot;Layout of construction lengths and assembled couplings for cable line routes&amp;quot;. In version 3.20 the section will be removed&lt;br /&gt;
** &amp;quot;[[Unknown MAC-addresses]]&amp;quot;. In version 3.20 the section will be removed&lt;br /&gt;
** &amp;quot;Technical support interface&amp;quot;. In version 3.20 the section will be removed&lt;br /&gt;
&lt;br /&gt;
* [[Upgrade]]. &#039;&#039;&#039;Recommended to have two instances of the system&#039;&#039;&#039;. A separate operational one and a separate test one. On the test one you can periodically update the database from the operational system and perform updates to make sure that everything is working, familiarise yourself with innovations or identify things that have stopped working for you.&lt;br /&gt;
&lt;br /&gt;
* Our Telegram group for mutual communication of clients with each other: https://t.me/usersideeu and the news channel: https://t.me/userside&lt;br /&gt;
&lt;br /&gt;
== Specifics in performing the upgrade ==&lt;br /&gt;
&lt;br /&gt;
When upgrading in a Docker environment, refer to the [https://github.com/userside/userside-docker/tree/v3.18 instructions] in the Docker bundle repository.&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.10 - check out the page: [[Upgrade 3.11]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.11 and before - check out the page: [[Upgrade 3.12]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.12 and before - check out the page: [[Upgrade 3.13]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.13 and before - check out the page: [[Upgrade 3.14]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.14 and before - check out the page: [[Upgrade 3.15]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.15 and before - check out the page: [[Upgrade 3.16]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.16 and before - check out the page: [[Upgrade 3.17]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.17 and before - check out the page: [[Upgrade 3.18]]&lt;br /&gt;
&lt;br /&gt;
* Move/remove extraneous files, directories, etc. from the userside directory (/var/www/userside). Only distribution files of the system itself and files that the system creates during its operation should be there. Userside modules (usm) should not be stored there either. Use separate directories for them (e.g. /opt/userside). Extraneous files in the userside directory can be removed during the upgrade process.&lt;br /&gt;
&lt;br /&gt;
* Save the userside3/main/config/custom_api.php and userside3/main/skins/user_style.css &#039;&#039;(if any)&#039;&#039; files. These can come in handy in case of update errors and deleting them when doing so.&lt;br /&gt;
&lt;br /&gt;
* Most files in the userside web directory have, for security reasons, changed their location several levels up and are now inaccessible via the web.&lt;br /&gt;
&lt;br /&gt;
* Version 3.19 requires PHP version 8.3. You can install all the necessary packages in addition to your existing different PHP version. If you are using LDAP, also install php8.3-ldap. If you are using TurboSMS, install php8.3-soap.&lt;br /&gt;
 sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&lt;br /&gt;
* If php8.3 is not in your repository, use an alternative repository such as deb.sury.org by adding it to your system as follows and then repeating the PHP8.3 installation command above:&lt;br /&gt;
 sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
 sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
&lt;br /&gt;
* Change the PHP configuration as follows and restart the php-fpm service.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_input_time.*@max_input_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
 &lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create a new public directory inside the userside directory (if you have it installed elsewhere, edit the command before executing):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /var/www/userside/public&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the NGINX server configuration (/etc/nginx/conf.d/userside.conf), change the paths to the root directory. The line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root   /var/www/userside/userside3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace it with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root   /var/www/userside/public;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Also change there &amp;lt;code&amp;gt;location /&amp;lt;/code&amp;gt; in its entirety for the next:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
location / {&lt;br /&gt;
    try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Also there for &amp;lt;code&amp;gt;location ~ \.php$&amp;lt;/code&amp;gt; change the value for fastcgi_pass from:&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.1-fpm.sock;&lt;br /&gt;
to&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
and reread the nginx configuration:&lt;br /&gt;
 sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
* For the websocket-user (websock-user) of the RabbitMQ broker, you need to change the permissions as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If your websocket-user name is different from websock-user, specify it instead of websock-user in the above commands.&lt;br /&gt;
&lt;br /&gt;
* Note that when you invoke the command &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; from the command line, php8.3 will now be invoked, since it is the latest version installed. If you&#039;re still using php8.1 anywhere, you&#039;ll need to change the php call in those places or change the alternate php command to run the version you want.&lt;br /&gt;
&lt;br /&gt;
* USERSIDE 3.19 &#039;&#039;requires Python3 of any currently supported version. The status of versions can be viewed here:&amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. It is recommended to use a version with &amp;quot;security&amp;quot; or &amp;quot;bugfix&amp;quot; status. Versions marked as &amp;quot;end-of-life&amp;quot; are not supported. Versions marked as &amp;quot;feature&amp;quot; are not recommended. If you have an unsupported version (&amp;quot;end-of-life&amp;quot;) installed on your host, you should be sure to [[Python-update_EN|install additionally]] a more recent version of Python.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Use the automatic [[Installer|installer]] to perform [[Upgrade|upgrade]]:&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
* The following action only needs to be performed if you [[Python-update EN| updated Python]]. If you haven&#039;t updated, you don&#039;t need to do it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo rm -rf venv&lt;br /&gt;
sudo python3.11 -m venv venv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* You need to update (install) the dependencies for poller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo venv/bin/pip install --upgrade pip&lt;br /&gt;
sudo venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* And restart the services&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Redesigned low-level interrogation of equipment &#039;&#039;(PON, TDR)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* The system of two SNMP-communities is replaced by one SNMP-community. This one SNMP-community will be the one that was specified in the rw-community field. If the rw-community field was empty - the value of the ro-community field will be used&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t forget to upgrade all modules to their latest versions&lt;br /&gt;
&lt;br /&gt;
* If you are using the [[Usm_pon_EN|usm_pon]] module - reconfigure it to run at the required frequency in system cron, depending on how many OLTs you have. The module now polls only one device per run &#039;&#039;(previously all devices were polled simultaneously without the ability to mitigate load and skip unnecessary devices)&#039;&#039;. Devices will be polled one at a time. At each startup, the next device with polling enabled will be polled.&lt;br /&gt;
&lt;br /&gt;
* You can now configure separate notification templates for different types of tasks. Check your existing templates for correct migrations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;List of changes:&#039;&#039;&#039; [[3.19_EN|view]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Performing an upgrade:&#039;&#039;&#039; [[Upgrade|instruction]]&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_3.19&amp;diff=20488</id>
		<title>Обновление 3.19</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_3.19&amp;diff=20488"/>
		<updated>2025-07-08T11:33:34Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Upgrade_3.19|en]] | [[Обновление_3.19|ru]]&lt;br /&gt;
&lt;br /&gt;
Версия: &#039;&#039;&#039;[[3.19]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Требуется версия: &#039;&#039;&#039;[[3.12]] и выше&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Несколько слов от автора ==&lt;br /&gt;
* В версии 3.19 мы очень много сделали для универсализации и индивидуализации системы. Теперь каждый клиент может отключить неиспользуемые разделы, создать совершенно произвольные разделы и сущности и оперировать ими, а также изменять наименование базовых терминов - таких как &amp;quot;Абоненты&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* У нас появилась &amp;quot;[[Двухфакторная аутентификация (2FA)]]&amp;quot;. Не пренебрегайте безопасностью и используйте её.&lt;br /&gt;
&lt;br /&gt;
* Большинство файлов из веб-директории userside с целью безопасности изменили своё местоположение на несколько уровней выше и теперь недоступны через веб. Также изменилось имя каталога, который должен быть корневым для web, на стандартное имя public.&lt;br /&gt;
&lt;br /&gt;
* Изменена маршрутизация страниц/ссылок системы&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Было: /?core_section=customer&amp;amp;action=show&amp;amp;id=1234&lt;br /&gt;
Стало: /customer/1234&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* В версии 3.19 объявляются устаревшими разделы:&lt;br /&gt;
** &amp;quot;Схема размещения строительных длин и смонтированных муфт для трасс кабельных линий&amp;quot;. В версии 3.20 раздел будет удалён&lt;br /&gt;
** &amp;quot;[[Неизвестные MAC-адреса]]&amp;quot;. В версии 3.20 раздел будет удалён&lt;br /&gt;
** &amp;quot;Интерфейс технической поддержки&amp;quot;. В версии 3.20 раздел будет удалён&lt;br /&gt;
&lt;br /&gt;
* [[Обновление]]. &#039;&#039;&#039;Рекомендую иметь два инстанса системы&#039;&#039;&#039;. Отдельно действующую и отдельно тестовую. На тестовой вы можете периодически обновлять базу данных с действующей системы и проводить обновление, убеждаясь, что всё работает, ознакомиться с нововведениями или выявлять моменты, которые у вас перестали работать.&lt;br /&gt;
&lt;br /&gt;
* Наша группа в Telegram для взаимного общения клиентов между собой: https://t.me/usersideeu и канал для новостей: https://t.me/userside&lt;br /&gt;
&lt;br /&gt;
== Особенности в проведении обновления ==&lt;br /&gt;
&lt;br /&gt;
При обновлении в Docker-окружении, обратитесь к [https://github.com/userside/userside-docker/tree/v3.18 инструкциям] в репозитории Docker-бандла.&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.10 - ознакомьтесь со страницей: [[Обновление 3.11]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.11 и ранее - ознакомьтесь со страницей: [[Обновление 3.12]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.12 и ранее - ознакомьтесь со страницей: [[Обновление 3.13]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.13 и ранее - ознакомьтесь со страницей: [[Обновление 3.14]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.14 и ранее - ознакомьтесь со страницей: [[Обновление 3.15]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.15 и ранее - ознакомьтесь со страницей: [[Обновление 3.16]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.16 и ранее - ознакомьтесь со страницей: [[Обновление 3.17]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.17 и ранее - ознакомьтесь со страницей: [[Обновление 3.18]]&lt;br /&gt;
&lt;br /&gt;
* Перенесите/удалите посторонние файлы, каталоги и прочее из директории userside (/var/www/userside). Там должны находится только дистрибутивные файлы самой системы и файлы, которые система создает во время своей работы. Модули userside (usm) также не должны там хранится. Используйте отдельные каталоги для них (например, /opt/userside). Посторонние файлы из директории userside могут быть удалены в процессе обновления&lt;br /&gt;
&lt;br /&gt;
* Сохраните файлы &#039;&#039;(при их наличии)&#039;&#039;&lt;br /&gt;
 userside3/main/config/custom_api.php &lt;br /&gt;
 userside3/main/skins/user_style.css&lt;br /&gt;
 userside3/main/js/user_script.js&lt;br /&gt;
&lt;br /&gt;
Они могут пригодится в случае ошибок обновления и их удаления при этом. Если вы использовали собственные значки для типов сооружений связи и самостоятельно их загружали в какой-то каталог, что доступен из веб - то также их сохраните.&lt;br /&gt;
&lt;br /&gt;
* Большинство файлов из веб-директории userside с целью безопасности изменили своё местоположение на несколько уровней выше и теперь недоступны через веб.&lt;br /&gt;
&lt;br /&gt;
* Версия 3.19 требует PHP версии 8.3. Вы можете установить все необходимые пакеты дополнительно к уже существующей иной версии PHP. Если используете LDAP, то установите также php8.3-ldap. Если используете TurboSMS, то установите php8.3-soap.&lt;br /&gt;
 sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&lt;br /&gt;
* Если версия php8.3 отсутствует в вашем репозитории, то воспользуйтесь альтернативным репозиторием, например, deb.sury.org, добавив его в систему следующим образом и затем повторив команду установки PHP8.3 приведенную пунктом выше:&lt;br /&gt;
 sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
 sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
&lt;br /&gt;
* Измените конфигурацию PHP следующим образом и перезапустите службу php-fpm.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_input_time.*@max_input_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
 &lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* создайте новый каталог public внутри каталога userside (если у вас установлено в другом месте, отредактируйте команду перед выполнением):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /var/www/userside/public&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* В настройке NGINX-сервера (/etc/nginx/conf.d/userside.conf) измените пути к корневому каталогу. Строку:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root   /var/www/userside/userside3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Замените на:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root   /var/www/userside/public;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Там же измените &amp;lt;code&amp;gt;location /&amp;lt;/code&amp;gt; целиком на следующий:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
location / {&lt;br /&gt;
    try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Там же для &amp;lt;code&amp;gt;location ~ \.php$&amp;lt;/code&amp;gt; измените значение для fastcgi_pass с:&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.1-fpm.sock;&lt;br /&gt;
на&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
и перечитайте конфигурацию nginx:&lt;br /&gt;
 sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
* Для websocket-пользователя (websock-user) брокера RabbitMQ необходимо изменить разрешения следующим образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если имя вашего websocket-пользователя отличается от websock-user, то укажите его вместо websock-user в приведенных выше командах.&lt;br /&gt;
&lt;br /&gt;
* Обратите внимание, что при вызове команды &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; из командной строки, теперь будет вызываться php8.3, так как это последняя установленная версия. Если вы где-либо до сих пор используете php8.1, то вам нужно изменить вызов php в этих местах либо изменить альтернативную команду php, чтобы она запускала нужную вам версию.&lt;br /&gt;
&lt;br /&gt;
* USERSIDE 3.19 &#039;&#039;требует Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать. Если у вас на хосте неподдерживаемая версия (&amp;quot;end-of-life&amp;quot;), то нужно обязательно [[Python-update|установить дополнительно]] более свежую версию Python.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* С помощью автоматического [[Инсталлятор|инсталлятора]] выполните [[Обновление|обновление]]:&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
* Следующее действие нужно выполнять только если вы [[Python-update|обновили Python]]. Если не обновляли, можно не выполнять:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo rm -rf venv&lt;br /&gt;
sudo python3.11 -m venv venv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Необходимо обновить (установить) зависимости для поллера:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo venv/bin/pip install --upgrade pip&lt;br /&gt;
sudo venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* И перезапустить службы&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Переработан низкоуровневый опрос оборудования &#039;&#039;(PON, TDR)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Система двух SNMP-community заменена на один SNMP-community. Этим одним SNMP-community будет то, которое было указано в поле rw-community. Если поле rw-community было пустое - то будет использовано значение поля ro-community&lt;br /&gt;
&lt;br /&gt;
* Не забудьте обновить все модули на их свежие версии&lt;br /&gt;
&lt;br /&gt;
* Если вы используете модуль [[usm_pon]] - перенастройте в системном cron его запуск на нужную частоту в зависимости от количества у вас OLT. Теперь модуль опрашивает только одно устройство за запуск &#039;&#039;(ранее опрашивались все устройства одновременно без возможности смягчения нагрузки и пропуска ненужных устройств)&#039;&#039;. Устройства будут опрашиваться по очереди. При каждом запуске на опрос будет подаваться следующее устройство у которого включен такой опрос.&lt;br /&gt;
&lt;br /&gt;
* Для разных типов задач теперь можно настраивать отдельные шаблоны по уведомлениям. Проверьте в ваших существующих шаблонах корректность миграций.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Список изменений:&#039;&#039;&#039; [[3.19|просмотреть]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Проведение обновления:&#039;&#039;&#039; [[Обновление|инструкция]]&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_3.20&amp;diff=20487</id>
		<title>Обновление 3.20</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_3.20&amp;diff=20487"/>
		<updated>2025-07-08T11:33:10Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Upgrade_3.20|en]] | [[Обновление_3.20|ru]]&lt;br /&gt;
&lt;br /&gt;
Версия: &#039;&#039;&#039;[[3.20]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Требуется версия: &#039;&#039;&#039;[[3.12]] и выше&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Несколько слов от автора ==&lt;br /&gt;
* Версию 3.19 мы дорабатывали динамически. Добавляли в рабочем порядке как небольшие возможности так и крупные доработки. Цель - чтоб клиенты не ждали год новую версию и новые востребованные функции, а пользовались ими уже сейчас. Соответственно почти все изменения, что указаны как доработки версии 3.20 - они постепенно становились доступны для версии 3.19. Скажем версия 3.19.54 мало чем отличается от версии 3.20.0. Строго говоря нововведения версии 3.20.0 - это те моменты на которые мы хотели обратить внимание по сравнению с версией 3.19.0.&lt;br /&gt;
&lt;br /&gt;
* Таким образом обновление с 3.19 на 3.20 &amp;quot;бесшовное&amp;quot; и ничем особо не отличается от обновления скажем с 3.19.52 на 3.19.53. Дополнительных библиотек/модулей устанавливать не требуется&lt;br /&gt;
&lt;br /&gt;
* [[Лимиты объектов|Убран лимит]] на количество адресных объектов &#039;&#039;(здания, улицы, населенные пункты)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* В версии 3.20 удалены разделы:&lt;br /&gt;
** &amp;quot;Схема размещения строительных длин и смонтированных муфт для трасс кабельных линий&amp;quot;&lt;br /&gt;
** &amp;quot;[[Неизвестные MAC-адреса]]&amp;quot;&lt;br /&gt;
** &amp;quot;Интерфейс технической поддержки&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* [[Обновление]]. &#039;&#039;&#039;Рекомендую иметь два инстанса системы&#039;&#039;&#039;. Отдельно действующую и отдельно тестовую. На тестовой вы можете периодически обновлять базу данных с действующей системы и проводить обновление, убеждаясь, что всё работает, ознакомиться с нововведениями или выявлять моменты, которые у вас перестали работать.&lt;br /&gt;
&lt;br /&gt;
* Наша группа в Telegram для взаимного общения клиентов между собой: https://t.me/usersideeu и канал для новостей: https://t.me/userside&lt;br /&gt;
&lt;br /&gt;
== Особенности в проведении обновления ==&lt;br /&gt;
&lt;br /&gt;
При обновлении в Docker-окружении, обратитесь к [https://github.com/userside/userside-docker/tree/v3.18 инструкциям] в репозитории Docker-бандла.&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.10 - ознакомьтесь со страницей: [[Обновление 3.11]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.11 и ранее - ознакомьтесь со страницей: [[Обновление 3.12]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.12 и ранее - ознакомьтесь со страницей: [[Обновление 3.13]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.13 и ранее - ознакомьтесь со страницей: [[Обновление 3.14]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.14 и ранее - ознакомьтесь со страницей: [[Обновление 3.15]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.15 и ранее - ознакомьтесь со страницей: [[Обновление 3.16]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.16 и ранее - ознакомьтесь со страницей: [[Обновление 3.17]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.17 и ранее - ознакомьтесь со страницей: [[Обновление 3.18]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.18 и ранее - ознакомьтесь со страницей: [[Обновление 3.19]]&lt;br /&gt;
&lt;br /&gt;
* Перенесите/удалите посторонние файлы, каталоги и прочее из директории userside. Там должны находится только дистрибутивные файлы самой системы и файлы, которые система создает во время своей работы. Модули userside (usm) также не должны там хранится. Используйте отдельные каталоги для них (например, /opt/userside). Посторонние файлы из директории userside могут быть удалены в процессе обновления&lt;br /&gt;
&lt;br /&gt;
* С помощью автоматического [[Инсталлятор|инсталлятора]] выполните [[Обновление|обновление]]:&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
* Не забудьте обновить все модули на их свежие версии&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Список изменений:&#039;&#039;&#039; [[3.20|просмотреть]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Проведение обновления:&#039;&#039;&#039; [[Обновление|инструкция]]&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=20402</id>
		<title>Установка</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=20402"/>
		<updated>2025-06-20T10:06:39Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
[[Installation|en]] | [[Установка|ru]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ВНИМАНИЕ: Данная инструкция актуальна для версий ERP USERSIDE 3.19&#039;&#039;&#039;&lt;br /&gt;
* [[Установка для версии 3.18|Инструкция для версии 3.18]]&lt;br /&gt;
* [[Установка для версии 3.17|Инструкция для версии 3.11-3.17]]&lt;br /&gt;
* [[Установка для версии 3.10 и более ранних|Инструкция для версии 3.10 и ранее]].&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
В целях упрощения будут рассмотрены команды для операционной системы &#039;&#039;&#039;Linux Debian 12 (bookworm)&#039;&#039;&#039;. Для опытных системных администраторов не составит труда использовать аналогичные команды для другой операционной системы. Если же вы не чувствуете себя уверено в администрировании операционных систем, то мы рекомендуем вам использовать операционную систему &#039;&#039;&#039;Debian&#039;&#039;&#039; либо &#039;&#039;&#039;Ubuntu Server LTS&#039;&#039;&#039;. Из-за их простоты, а также по причине того, что наша техническая поддержка значительно лучше разбирается в Debian-подобных дистрибутивах. Вероятность подсказать что-либо не касающееся ERP USERSIDE, но касающееся администрирования операционной системы, будет значительно выше, если у вас будет Debian или подобный дистрибутив на его основе.&lt;br /&gt;
&lt;br /&gt;
С другой стороны, если вы опытный системный администратор и имеете навыки и опыт работы с Docker, возможно для вас будет более удобным вариант использования готового окружения на базе Docker-образов, которые мы подготовили специально, включив в них всё необходимое для работы ERP USERSIDE. В этом случае вам не придется ничего настраивать, кроме как выполнить простые настройки Docker-бандла https://github.com/userside/userside-docker.&lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Для работы ERP USERSIDE необходимы различные системные приложения и службы, такие как интерпретатор языка PHP с набором расширений, WEB-сервер, система управления базами данных и прочие. В этом разделе будут перечислены такие требования в зависимости от версии ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание, что ваша операционная система должна быть сконфигурирована с корректным часовым поясом и локалью. От этого зависит правильность отображения информации и корректность сортировки.&lt;br /&gt;
&lt;br /&gt;
Список требуемых расширений PHP содержит все расширения, не входящие в состав ядра PHP. Часть из этих расширений может поставляться вместе с основным пакетом PHP либо в составе пакета php-common, другая же часть должна быть установлена дополнительно. &lt;br /&gt;
&lt;br /&gt;
=== 3.19 (текущая стабильная) ===&lt;br /&gt;
* PHP: 8.3&lt;br /&gt;
* Расширения PHP: ctype, gd, json, libxml, mbstring, openssl, pdo, pdo_pgsql, posix, simplexml, snmp, sockets, zlib, pcntl&lt;br /&gt;
* Дополнительные расширения PHP: ldap, soap&lt;br /&gt;
* Python: &#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать.&#039;&#039;&lt;br /&gt;
* Модули Python: pip, venv&lt;br /&gt;
* PostgreSQL: 12+ (желательно 16)&lt;br /&gt;
* Redis: 5+ (желательно 7)&lt;br /&gt;
* RabbitMQ: 3.10+ (желательно 3.13)&lt;br /&gt;
* Supervisor&lt;br /&gt;
&lt;br /&gt;
== Основные договорённости ==&lt;br /&gt;
Каталог, в который устанавливается ERP USERSIDE - &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Внутри этого каталога должен быть подкаталог public, который является корневым каталогом для WEB-сервера. Если вы хотите использовать другой каталог для ERP USERSIDE, не забывайте вносить соответствующие исправления во все примеры из данной инструкции.&lt;br /&gt;
&lt;br /&gt;
Создайте каталоги:&lt;br /&gt;
 sudo mkdir -p /var/www/userside/public /var/log/usm_poller&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside /var/log/usm_poller&lt;br /&gt;
&lt;br /&gt;
Вам необходимо выделить доменное имя для ERP USERSIDE. В примерах ниже используется userside.mycompany.com, но вам необходимо будет заменить его на свое. Пропишите это доменное имя в /etc/hosts, если оно отличается от имени хоста, на котором производистя установка.&lt;br /&gt;
&lt;br /&gt;
== Установка необходимых компонентов ==&lt;br /&gt;
Сперва установите утилиты, которые будут необходимы далее в процессе установки. Они необходимы для любой верии ERP USERSIDE. Вы можете копировать строки по одной и вставлять их в командную строку вашей операционной системы.&lt;br /&gt;
&lt;br /&gt;
Следующие строки скопируйте и вставьте целиком:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/contrib-non-free.list &amp;lt;&amp;lt; EOL&lt;br /&gt;
deb http://deb.debian.org/debian/ $(lsb_release -sc) contrib non-free non-free-firmware&lt;br /&gt;
EOL&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt full-upgrade -y&lt;br /&gt;
sudo apt install -y gnupg ca-certificates lsb-release debian-archive-keyring debian-keyring libsnmp-dev snmp-mibs-downloader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
==== Альтернативный официальный репозиторий ====&lt;br /&gt;
Мы настоятельно рекомендуем использовать последнюю версию PostgreSQL, так как это всегда положительно сказывается на скорости работы. Добавьте в систему официальный репозиторий Postgres:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo install -d /usr/share/postgresql-common/pgdg&lt;br /&gt;
&lt;br /&gt;
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc&lt;br /&gt;
&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main&amp;quot; &amp;gt; /etc/apt/sources.list.d/pgdg.list&#039;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если у вас другая операционная система, вы можете найти необходимые команды для нее на [https://www.postgresql.org/download/ официальном сайте PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
&#039;&#039;&#039;Внимание!&#039;&#039;&#039; Перед установкой PostgreSQL в вашей операционной системе должна быть установлена ваша местная локаль и корректный часовой пояс! Это можно сделать и позже, но будет намного проще, если это будет сделано до установки PostgreSQL. Выполните следующую команду, чтобы убедиться, что нужная локаль присутствует:&lt;br /&gt;
 locale -a&lt;br /&gt;
&lt;br /&gt;
Если среди перечисленных нет вашей местной локали, то установите ее. Для этого достаточно отредактировать файл /etc/locale.gen убрав комментарии перед строкой (строками) с нужной локалью, а затем выполнить команду:&lt;br /&gt;
 sudo locale-gen&lt;br /&gt;
&lt;br /&gt;
Если вам нужно изменить локаль по умолчанию, то выполните:&lt;br /&gt;
 sudo dpkg-reconfigure locales&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить часовой пояс, выполните:&lt;br /&gt;
 sudo timedatectl set-timezone Europe/Kyiv&lt;br /&gt;
&lt;br /&gt;
Теперь можно перейти к установке PostgreSQL:&lt;br /&gt;
 sudo apt install -y postgresql-16 postgresql-16-postgis-3&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Создайте пользователя и базу данных для ERP USERSIDE. В примере ниже создается пользователь с именем userside и база данных с таким же именем. Если ваша локаль не uk_UA, не забудьте изменить команду. Затем к базе данных подключается расширение PostGis, необходимое для работы с географическими данными. После выполнения первой строки, вам необходимо будет дважды ввести пароль для нового пользователя - запишите этот пароль, он понадобится вам далее для установки ERP USERSIDE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres createuser userside -P&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ваш PostgreSQL установлен &#039;&#039;&#039;на другом сервере&#039;&#039;&#039;, то вам необходимо будет внести коррекции в файлы postgresql.conf и pg_hba.conf, расположенные в каталоге /etc/postgresql/16/main/. В файле postgresql.conf необходимо раскомментировать и изменить значение параметра &amp;lt;code&amp;gt;listen_addresses&amp;lt;/code&amp;gt;, указав там все IP-адреса интерфейсов сервера, на которых он может принимать подключения к PostgreSQL. В файле pg_hba.conf необходимо в самом конце добавить строку по аналогии с предыдущими, указывающую, с какого адреса может подключаться пользователь ERP USERSIDE. Но если ваш PostgreSQL расположен на том же сервере, что и USERSIDE - нет необходимости вносить какие либо корректировки в эти файлы.&lt;br /&gt;
&lt;br /&gt;
=== Redis ===&lt;br /&gt;
Стандартный репозиторий Debian 12 включает версию Redis 7.0.15. Эта версия подходит для работы ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
 sudo apt install -y redis-server&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
По умолчанию Redis принимает подключения без пароля, но мы настоятельно рекомендуем установить пароль. Так как пароль передается в открытом виде (Redis не предусматривает шифрования, т.к. делает упор на скорость обработки запросов и лишние этапы вроде шифрования не применяются), вам нужно создать действительно длинный и сложный пароль, например, используя утилиту &#039;&#039;&#039;openssl&#039;&#039;&#039; следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rand --hex 32&lt;br /&gt;
&lt;br /&gt;
На выходе вы получите случайный набор из 32 байт в 16-ричном виде, который и будете использовать в качестве пароля. Далее нужно будет вместо слова &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; подставить эту сгенерированную строку. Запишите его. Далее в настройках вы будете указывать эту строку как пароль Redis.&lt;br /&gt;
&lt;br /&gt;
Укажите полученный хэш парольной фразы в конфигурационном файле Redis:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^.*requirepass .*@requirepass MYPASSWORDHERE@g&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
где вместо &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; укажите хэш парольной фразы поулченый ранее.&lt;br /&gt;
&lt;br /&gt;
Также необходимо отключить таймаут (на некоторых версиях Redis он включен):&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^timeout .*@timeout 0@&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
Перезапустите Redis и убедитесь, что он работает (в ответ должны получить PONG):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart redis&lt;br /&gt;
redis-cli -h 127.0.0.1 -p 6379 -a MYPASSWORDHERE ping&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RabbitMQ ===&lt;br /&gt;
Стандартный репозиторий Debian 12 включает старую версию RabbitMQ 3.10. Вы можете использовать ее — она поддерживается. Однако, эта версия относительно старая и лучшим вариантом будет установить новую версию из альтернативных репозиториев. На [https://www.rabbitmq.com/install-debian.html официальном сайте RabbitMQ] находится достаточно подробная информация по установке RabbitMQ для каждой операционной системы.&lt;br /&gt;
&lt;br /&gt;
==== Добавление альтернативных репозиториев ====&lt;br /&gt;
Следующий блок скопируйте и вставьте целиком в командную строку&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-server-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/rabbitmq.list &amp;lt;&amp;lt;EOF&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
Убедитесь, что в /etc/hosts есть запись для имени вашего хоста. Отсутствие такрой записи (например, если вы изменили имя хоста после инсталляции) является основной ошибкой, возникающей при установке RabbitMQ. Так что лучше еще раз убедитесь, что запись соответствующая имени хосту имеется.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y erlang-base \&lt;br /&gt;
                    erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \&lt;br /&gt;
                    erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \&lt;br /&gt;
                    erlang-runtime-tools erlang-snmp erlang-ssl \&lt;br /&gt;
                    erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl&lt;br /&gt;
&lt;br /&gt;
sudo apt install rabbitmq-server -y --fix-missing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка необходимых дополнений ====&lt;br /&gt;
Следующие две строки выполняйте по одной за раз!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_management --offline&lt;br /&gt;
&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_web_stomp --offline&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Скопируйте и вставьте целиком следующий блок:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/rabbitmq/rabbitmq.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
listeners.tcp.default = 5672&lt;br /&gt;
&lt;br /&gt;
consumer_timeout = 2400000&lt;br /&gt;
&lt;br /&gt;
web_stomp.port = 15674&lt;br /&gt;
web_stomp.cowboy_opts.max_keepalive = 60&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать пользователей. Мы рекомендуем использовать &#039;&#039;&#039;три различных пользователя&#039;&#039;&#039;: для администрирования сервера (полные права), для userside и модулей (полные права но без административных) и пользователя web-stomp для websocket (минимальные права на чтение определенных объектов брокера). Но вы можете создать только два: администратора, который также будете использоваться для USERSIDE, и пользователя для websocket. Это обязательно должны быть минимум два разных пользователя, так как пароль для websocket пользователя передается в браузер и может быть легко прочитан пользователем. Далее будет показан пример для рекомендуемых трех пользователей. &lt;br /&gt;
&lt;br /&gt;
Создайте &#039;&#039;&#039;пользователя для администрирования&#039;&#039;&#039; RabbitMQ. В данном примере используется имя пользователя &#039;&#039;&#039;admin&#039;&#039;&#039; и пароль &#039;&#039;&#039;пароль_администратора&#039;&#039;&#039;. Пользователю сразу после создания присваивается тэг &amp;lt;code&amp;gt;administrator&amp;lt;/code&amp;gt;, наделяющий пользователя максимальными правами администратора и затем устанавливаются разрешения для vhost &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; позволяющие полный доступ к конфигурированию, записи и чтению всего в пределах этого vhost*.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;admin&amp;quot; &amp;quot;пароль_администратора&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;admin&amp;quot; &amp;quot;administrator&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;admin&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создайте &#039;&#039;&#039;пользователя, от имени которого будут работать ERP USERSIDE&#039;&#039;&#039; и модули. Пример для имени пользователя &#039;&#039;&#039;userside&#039;&#039;&#039; (наделять админскими правами этого пользователя не нужно):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;userside&amp;quot; &amp;quot;пароль_системы&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;userside&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;websocket&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Создайте &#039;&#039;&#039;пользователя WebSTOMP&#039;&#039;&#039;. Он понадобится для использования уведомлений через WebSocket. Вместо &#039;&#039;&#039;websock-user&#039;&#039;&#039; вы можете указать другое имя пользователя. Вместо &#039;&#039;&#039;пароль_websocket&#039;&#039;&#039; укажите свой пароль, но этот пароль будет передаваться в открытом виде в браузер, так что не делайте его похожим на остальные пароли:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;websock-user&amp;quot; &amp;quot;пароль_websocket&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внимание! Имя пользователя и пароль WebSTOMP вам нужно будет указать в настройках в интерфейсе USERSIDE (Меню: Настройки - Основные - Websocket).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;* vhost - это виртуальный хост внутри RabbitMQ, позволяющий разграничить различные варианты использования одного и того же сервера разными приложениями. Как, например, разные базы данных на одном сервере СУБД. vhost по умолчанию имеет имя / и почти всегда вам этого достаточно. Но если вы планируете, например, запустить несколько копий ERP USERSIDE на одном сервере, то для каждой копии вам нужно будет создать свой vhost и, соответственно, пользователей для него. Подробней обратитесь к [https://www.rabbitmq.com/vhosts.html официальному руководству].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Перезапустите службу rabbitmq:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rabbitmq-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Управление ====&lt;br /&gt;
Одна из команд, приведенных выше, устанавливает в RabbitMQ модуль управления, предоставляющий удобный WEB-интерфейс для мониторинга, диагностики и управления сервером RabbitMQ. При помощи этого модуля можно осуществлять мониторинг сервера, следить за количеством сообщений в очередях и другими состояниями. Всё это можно делать и используя консольную утилиту &amp;lt;code&amp;gt;rabbitmqctl&amp;lt;/code&amp;gt;, но использование WEB-интерфейса может быть значительно наглядней и удобней.&lt;br /&gt;
&lt;br /&gt;
По умолчанию WEB-интерфейс управления доступен по адресу http://userside.mycompany.com:15672. Рекомендуем использовать фаервол, чтобы ограничить доступ к этому интерфейсу управления.&lt;br /&gt;
&lt;br /&gt;
Подробнее о модуле управления можно [https://www.rabbitmq.com/management.html прочитать на официальном сайте RabbitMQ].&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
==== Альтернативный репозиторий ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
Выполните следующие команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы планируете использовать LDAP, необходимо установить расширение php-ldap:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-ldap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы планируете использовать отправку SMS используя TurboSMS, также понадобится расширение php-soap:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-soap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Далее приведены команды, вносящие изменения в файлы конфигурации.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;request_terminate_timeout =.*@request_terminate_timeout = 300@&amp;quot; /etc/php/8.3/fpm/pool.d/www.conf&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NGINX ===&lt;br /&gt;
==== Альтернативный официальный репозиторий ====&lt;br /&gt;
Версия NGINX, поставляемая в репозитории Debian, полностью подходит для использования и нет необходимости в добавлении альтернативного репозитория. Однако, если вам хочется всегда иметь последнюю версию, то выполните следующие строки, чтобы добавить в операционную систему официальный репозиторий nginx:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \&lt;br /&gt;
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
echo &amp;quot;deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \&lt;br /&gt;
http://nginx.org/packages/debian `lsb_release -cs` nginx&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/sources.list.d/nginx.list&lt;br /&gt;
echo -e &amp;quot;Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/preferences.d/99nginx&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если у вас другая операционная система, вы можете найти необходимые команды для нее на официальном сайте NGINX: https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^user.*;@user www-data www-data;@&amp;quot; &amp;quot;/etc/nginx/nginx.conf&amp;quot;&lt;br /&gt;
sudo systemctl restart nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующий пример настройки подразумевает, что ERP USERSIDE будет установлен в стандартный каталог системы &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Если вы желаете установить ERP USERSIDE в другой каталог, пожалуйста, не забывайте исправлять его во всех последующих примерах. Чтобы не ошибиться, мы рекомендуем использовать именно каталог &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь отредактируйте файл /etc/nginx/conf.d/default.conf. Либо удалите его и создайте файл с именем /etc/nginx/conf.d/userside.conf. В любом случае, не зависимо от вашего выбора, содержимое файла должно быть следующим (вместо userside.mycompany.com укажите свое доменное имя):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen       80 default_server;&lt;br /&gt;
    server_name  userside.mycompany.com;&lt;br /&gt;
    charset      utf-8;&lt;br /&gt;
    client_max_body_size 100M;&lt;br /&gt;
&lt;br /&gt;
    access_log  /var/log/nginx/userside-access.log;&lt;br /&gt;
    error_log   /var/log/nginx/userside-error.log;&lt;br /&gt;
&lt;br /&gt;
    root   /var/www/userside/public;&lt;br /&gt;
    index  index.php;&lt;br /&gt;
&lt;br /&gt;
    location = /favicon.ico { access_log off; log_not_found off; }&lt;br /&gt;
    location = /robots.txt  { access_log off; log_not_found off; }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~* ^.+\.(css|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {&lt;br /&gt;
        access_log    off;&lt;br /&gt;
        log_not_found off;&lt;br /&gt;
        expires       max;&lt;br /&gt;
        add_header    Pragma public;&lt;br /&gt;
        add_header    Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ \.php$ {&lt;br /&gt;
        try_files     $uri =404;&lt;br /&gt;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
        fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
        fastcgi_index index.php;&lt;br /&gt;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
        fastcgi_read_timeout 300;&lt;br /&gt;
        include       fastcgi_params;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location /ws {&lt;br /&gt;
        proxy_pass http://127.0.0.1:15674/ws;&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header Connection &amp;quot;Upgrade&amp;quot;;&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ /\.ht { deny  all; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также, возможно, вы захотите настроить SSL и что-либо еще. Эта тема выходит за рамки данной инстуркции.&lt;br /&gt;
&lt;br /&gt;
Если Вы установили RabbitMQ &#039;&#039;&#039;на другом сервере&#039;&#039;&#039;, либо изменили значение порта WebSTOMP с 15674 на какой-то другой, то укажите IP-адрес сервера с RabbitMQ и номер порта в строке &amp;lt;code&amp;gt;proxy_pass http://127.0.0.1:15674/ws;&amp;lt;/code&amp;gt;. Протокол должен оставаться http. Путь должен оставаться /ws.&lt;br /&gt;
&lt;br /&gt;
Проверьте конфигурацию и если она в порядке перезагрузите nginx:&lt;br /&gt;
 sudo nginx -t &amp;amp;&amp;amp; sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Если у вас на хосте неподдерживаемая версия (&amp;quot;end-of-life&amp;quot;), то нужно обязательно [[Python-update|установить дополнительно]] более свежую версию Python.&lt;br /&gt;
&lt;br /&gt;
==== Установка необходимых пакетов ====&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv libffi-dev pkg-config&lt;br /&gt;
&lt;br /&gt;
=== Supervisor ===&lt;br /&gt;
 sudo apt install -y supervisor&lt;br /&gt;
&lt;br /&gt;
== Загрузка и запуск инсталлятора ==&lt;br /&gt;
&lt;br /&gt;
См. также: [[Инсталлятор|Справку по инсталлятору]]&lt;br /&gt;
&lt;br /&gt;
1. перейти в каталог системы&lt;br /&gt;
 cd /var/www/userside&lt;br /&gt;
&lt;br /&gt;
2. загрузить скрипт-инсталлятор&lt;br /&gt;
 sudo -u www-data php -r &amp;quot;copy(&#039;https://my.userside.eu/install&#039;, &#039;userside_install.phar&#039;);&amp;quot; &lt;br /&gt;
&lt;br /&gt;
3. запустить инсталлятор&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
В процессе работы инсталлятор проверяет соответствие техническим требованиям, запрашивает параметры доступа и проверяет соединения со службами сервера.&lt;br /&gt;
&lt;br /&gt;
Вы можете ввести любой доступный вам номер версии ERP USERSIDE для установки. Для этого можете ввести порядковый номер версии из списка (он содержит только последние версии каждой ветки) либо ввести номер версии целиком, если ее нет в списке.&lt;br /&gt;
&lt;br /&gt;
По окончанию работы инсталлятора будет выведено сообщение об успешной установке.&lt;br /&gt;
&lt;br /&gt;
Если вы произвели установку не от имени пользователя веб-сервера, то обязательно после окончания установки сделайте его владельцем всех файлов userside рекурсивно!&lt;br /&gt;
&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside&lt;br /&gt;
 sudo chmod -R u=rwX,g=rwX,o=r /var/www/userside&lt;br /&gt;
&lt;br /&gt;
== Настройка после установки ==&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация системных служб ===&lt;br /&gt;
После установки необходимо скопировать примеры конфигурационных файлов системных служб и, при необходимости, настроить их (например, указать путь к каталогу userside, если он отличается от /var/www/userside). Выполните команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp etc/us-core-worker.conf-example /etc/supervisor/conf.d/us-core-worker.conf&lt;br /&gt;
sudo cp microservice/poller/etc/usm_poller.conf-example /etc/supervisor/conf.d/usm_poller.conf&lt;br /&gt;
sudo cp etc/logrotate-example /etc/logrotate.d/userside&lt;br /&gt;
sudo cp microservice/poller/etc/logrotate-example /etc/logrotate.d/usm_poller&lt;br /&gt;
sudo cp etc/crontab-example /etc/cron.d/userside&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка необходимых зависимостей для usm_poller ===&lt;br /&gt;
Создайте виртуальное окружение venv для python и установите зависимые модули, как показано далее:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H python3 -m venv venv&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Запуск супервизора ===&lt;br /&gt;
Супервизор контролирует работу служб, указанных в его конфигурации. Для запуска супервизора выполните:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart supervisor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После запуска супервизора, спустя несколько секунд можно понаблюдать за состоянием всех контролируемых им служб. Все службы должны быть в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сразу после установки ==&lt;br /&gt;
На этом установка ERP USERSIDE закончена. Теперь выполните следующие шаги:&lt;br /&gt;
* Откройте страницу системы &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://userside.mydomain.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; и выполните вход &#039;&#039;(по умолчанию имя пользователя: Admin, пароль: 1234)&#039;&#039;.&lt;br /&gt;
* Выполните настройку Websocket в разделе: Настройка - Основная - WebSocket. Включите и впишите имя пользователя и пароль WebStomp пользователя, которого вы создавали ранее в разделе RabbitMQ.&lt;br /&gt;
* Выполните основные настройки в разделе: [[Настройка - Основная|Настройка - Основная]].&lt;br /&gt;
* Настройте взаимодействие с [[Поддерживаемые биллинги|биллингом]] в соответствии с [[Настройка взаимодействия с биллингом|инструкциями]].&lt;br /&gt;
* Ознакомьтесь с инструкциями на странице: [[С чего начать?]].&lt;br /&gt;
* Настройте [[UserSide API Key|API-ключ]].&lt;br /&gt;
&lt;br /&gt;
== Обновление системы ==&lt;br /&gt;
Мы стараемся делать все возможное, чтобы вероятность сквоздного обновления с любой версии до последней версии было успешным. Однако, иногда бывает так, что из-за каки-то старинных проблем со структурой базы данных, которые никогда не мешали работать раньше, может возникнуть ситуация, при которой сквоздное обновление невозможно. В таком случае вам придется обновляться поэтапно на каждую следующую последнюю версию. Например, с 3.14.80 сначала на 3.15.60, затем на 3.16.39 и так далее.&lt;br /&gt;
&lt;br /&gt;
Перед обновлением обязательно прочитайте обо всех изменениях, которые необходимо выполнить для обновления для каждой версии, которая лежит между вашей и той, на которую вы собираетесь обновиться.&lt;br /&gt;
&lt;br /&gt;
Мы рекомендуем сделать копию системы для безопасного проведения обновления. Обратитесь к разделу [[HOWTO: Клонирование USERSIDE]]. Вы всегда можете удалить копию и начать сначала. Это просто и безопасно. Но если вы желаете обновить работающую систему, то выполняйте его в моменты наименьшей нагрузки с запасом по времени, необходимым для аварийного восстановления, если вдруг что-то пойдет не так. Всегда обязательно делайте резервную копию базы данных и файлов перед обновлениями. Если обновление будет прервано, особенно на этапе миграции данных, то есть риск того, что восстановить корректно данные будет очень непросто или даже невозможно. В общем, ответственность за наличие актуальной резервной копии лежит целиком на вас.&lt;br /&gt;
&lt;br /&gt;
==== Процесс обновления ====&lt;br /&gt;
Мы настоятельно рекомендуем выполнять тестовые обновления на [[HOWTO:_Клонирование_USERSIDE|копии системы]].&lt;br /&gt;
&lt;br /&gt;
Для проведения обновления запустите инсталлятор в режиме install и следуйте инструкциям:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После обновления USERSIDE нужно обязательно обновить зависимости usm_poller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно перезапустить все службы, которолируемые супервизором и проследить чтобы все они запустились и были в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание системы ==&lt;br /&gt;
Для поддержания системы в рабочем состоянии и обеспечения надежной ее работы в будущем рекомендуется выполнять несколько простых дейсвтий:&lt;br /&gt;
* периодически создавать резервную копию базы данных&lt;br /&gt;
* периодически создавать резервную копию загруженных файлов (это можно сделать просто архивируя каталог /var/www/userside/var/attachments и файл .env)&lt;br /&gt;
* периодически наблюдать за производительностью сервера (при помощи htop, atop) и брокера RabbitMQ и принимать решения о масштабировании пулов fpm, фоновых процессов ядра и микросервисов&lt;br /&gt;
&lt;br /&gt;
=== Резервное копирование ===&lt;br /&gt;
Установите периодическое резервное копирование базы данных и пользовательских файлов. Желательно минимум раз в сутки в моменты наименьшей нагрузки на сервер. В PostgreSQL существует два способа создать резервную копию базы данных: dump и sql-script. У каждого из них есть свои преимущества и недостатки. Первый создает безопасный дамп базы данных целиком, а второй создает SQL-скрипт, выполняя который можно восстановить как структуру так и данные. Рекомендуем обратиться к [https://www.postgresql.org/docs/current/app-pgdump.html документации по использованию команды pg_dump] для выбора более подходящего для вас способа или набора параметров.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены две команды для создания резервной копии базы данных — выбирайте одну из них и добавляйте в ваш crontab:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# SQL-script&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside &amp;gt; /backup/userside.sql.gz&lt;br /&gt;
&lt;br /&gt;
# DUMP&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside &amp;gt; /backup/userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для создания минимальной резервной копии &#039;&#039;&#039;файлов&#039;&#039;&#039; можно использовать следующую команду (для версии 3.15 и новее):&lt;br /&gt;
 sudo tar -czf /backup/userside.tgz .env common/config/settings.json var/attachments&lt;br /&gt;
Этих файлов вместе с базой данных будет достаточно для восстановления работы USERSIDE. Но вы можете выполнять резервное копирование всего каталога /var/www/userside для большей надежности.&lt;br /&gt;
&lt;br /&gt;
=== Восстановление из резервной копии ===&lt;br /&gt;
Для восстановления из дампа используется команда pg_restore. [https://postgrespro.ru/docs/postgresql/13/app-pgrestore Документация по использованию pg_restore]. Для восстановления из SQL-скрипта используется утилита psql. [https://www.postgresql.org/docs/current/app-psql.html Документация по использованию psql].&lt;br /&gt;
&lt;br /&gt;
Перед восстановлением базы данных из резервной копии нужно обязательно остановить работу USERSIDE.&lt;br /&gt;
&lt;br /&gt;
1. Остановить cron userside и всех модулей&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside-modules ~/cron&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Остановить работу фоновых служб&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Остановить работу php-fpm&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Только после этого можно приступать к восстановлению базы данных из резервной копии.&lt;br /&gt;
&lt;br /&gt;
==== SQL-script ====&lt;br /&gt;
Для восстановления БД из резервной копии в виде SQL-скрипта, сначала нужно пересоздать базу данных, а затем восстановить в пустую базу данных резервную копию:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
gunzip &amp;lt; userside.sql.gz | sudo -u postgres psql -d userside -v ON_ERROR_STOP=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DUMP ====&lt;br /&gt;
Дамп содержит целиком базу данных со всеми ее элементами. Поэтому перед восстановлением базы данных из дампа её не должно существовать на сервере — удалите базу данных перед восстановлением из дампа. Также важно, чтобы пользователь базы данных (владелец всех элементов) уже существовал — создайте его перед восстановлением, если вы восстанавливаете базу данных на новом сервере, где нужного пользователя еще нет.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание, что структура дампа может быть несовместима между разными версиями PostgreSQL. Это не обязательно так, но вполне вероятно.&lt;br /&gt;
&lt;br /&gt;
Для восстановления из дампа используйте команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres pg_restore --clean --if-exists --create --exit-on-error --dbname=postgres userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Обратите внимание, что имя базы данных в команде обязательно должно быть &#039;&#039;&#039;postgres&#039;&#039;&#039;, так как из дампа восстанавливается вся база данных целиком, а не ее содержимое.&lt;br /&gt;
&lt;br /&gt;
==== После восстановления базы данных ====&lt;br /&gt;
После восстановления базы данных любым способом, необходимо очистить кэш ERP USERSIDE, т.к. в кэше теперь находятся данные, отличные от данных в базе. Перейтите в каталог /var/www/userside и выполните команду очистки кэша (первую, если используется пароль или вторую, если не используется):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -a $US_REDIS_PASSWORD -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Восстановите работу служб, которые были остановлены перед выполнением резервной копии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mv ~/cron/* /etc/cron.d&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Выполните команду восстановления, чтобы файлы системы соответствовали версии базы данных и проверить систему на целостность файлов.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar repair&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_USERSIDE_cloning&amp;diff=20384</id>
		<title>HOWTO: USERSIDE cloning</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_USERSIDE_cloning&amp;diff=20384"/>
		<updated>2025-05-30T07:04:46Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_USERSIDE_cloning|en]] | [[HOWTO:_Клонирование_USERSIDE|ru]]&lt;br /&gt;
&lt;br /&gt;
== Copy of system for testing or research ==&lt;br /&gt;
&lt;br /&gt;
If you need to make a copy of the system to try out the new version before the actual upgrade, or to do anything else, there are a few simple steps to follow:&lt;br /&gt;
&lt;br /&gt;
* copy the application files&lt;br /&gt;
 cd /var/www/&lt;br /&gt;
 sudo cp -r userside userside-copy&lt;br /&gt;
&lt;br /&gt;
* configure the web server to work with the copy - copy the configuration file, edit and re-read the nginx configuration:&lt;br /&gt;
 sudo cp /etc/nginx/conf.d/userside.conf /etc/nginx/conf.d/userside-copy.conf&lt;br /&gt;
 sudo sed -i &amp;quot;s@/var/www/userside/userside3@/var/www/userside-copy/userside3@&amp;quot; &amp;quot;/etc/nginx/conf.d/userside-copy.conf&amp;quot;&lt;br /&gt;
 sudo sed -i &amp;quot;s@/var/log/nginx/userside@/var/log/nginx/userside-copy@&amp;quot; &amp;quot;/etc/nginx/conf.d/userside-copy.conf&amp;quot;&lt;br /&gt;
 sudo sed -i &amp;quot;s@старое.доменное.имя@новое.доменное.имя@&amp;quot; &amp;quot;/etc/nginx/conf.d/userside-copy.conf&amp;quot;&lt;br /&gt;
 sudo systemctl reload nginx&lt;br /&gt;
&lt;br /&gt;
* Copy the database (or create a new database and restore it from a backup):&lt;br /&gt;
 sudo -u postgres createdb -e --encoding=&amp;quot;UTF-8&amp;quot; --locale=&amp;quot;ru_RU.UTF-8&amp;quot; --owner=userside --template=userside userside_copy&lt;br /&gt;
If you are copying the database to another server, you will need to create a role, necessarily the same as in the dump, before restoring it:&lt;br /&gt;
 sudo -u postgres createuser userside -P&lt;br /&gt;
&lt;br /&gt;
* In version 3.13 and newer, go to the directory with the new copy, edit the environment variables in the .env file so that they work with the new database and with the other (free) redis database (in the main installation you probably have the redis database number 0; you can use the other 15 available by default). Variables are responsible for this:&lt;br /&gt;
 US_URL=http://new.domain.name&lt;br /&gt;
 US_DB_DSN=pgsql:host=localhost;dbname=userside_copy;port=5432&lt;br /&gt;
 US_REDIS_DB=1&lt;br /&gt;
&lt;br /&gt;
* For versions up to 3.13, edit the database connection parameters in common/config/db.php and the URL in userside3/main/config/config.php&lt;br /&gt;
&lt;br /&gt;
* In version 3.16 and newer you need to create an additional vhost for RabbitMQ, and then specify it in the .env file for the &#039;&#039;&#039;US_AMQP_DSN&#039;&#039;&#039; variable. The example below uses &#039;&#039;&#039;copy&#039;&#039;&#039; as the name of the new vhost (change to something more convenient for you if necessary). First run the command that creates the vhost, then add permissions for users within that vhost:&lt;br /&gt;
 sudo rabbitmqctl add_vhost copy&lt;br /&gt;
 sudo rabbitmqctl set_permissions -p &amp;quot;copy&amp;quot; &amp;quot;admin&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
 sudo rabbitmqctl set_permissions -p &amp;quot;copy&amp;quot; &amp;quot;userside&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
 sudo rabbitmqctl set_permissions -p &amp;quot;copy&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
 sudo rabbitmqctl --vhost copy set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now change the variable US_AMQP_DSN of the .env file this way:&lt;br /&gt;
 US_AMQP_DSN=amqp://userside:yourpassword@127.0.0.1:5672/copy&lt;br /&gt;
&lt;br /&gt;
* In version 3.16 and newer you will also need to recreate the venv for the poller microservice:&lt;br /&gt;
 cd /var/www/userside-copy/microservice/poller&lt;br /&gt;
 sudo rm -rf venv&lt;br /&gt;
 sudo -H python3 -m venv venv&lt;br /&gt;
 sudo -H venv/bin/pip install --upgrade -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
* Also starting with version 3.16 you will need to copy the supervisor configuration for the kernel background processes and the poller microservice. Also note that before version 3.18 the usm_poller.conf file was called us-poller-microservice.conf:&lt;br /&gt;
 sudo cp /etc/supervisor/conf.d/us-core-worker.conf /etc/supervisor/conf.d/us-copy-core-worker.conf&lt;br /&gt;
 sudo sed -i &amp;quot;s@us-core-worker@us-copy-core-worker@&amp;quot; &amp;quot;/etc/supervisor/conf.d/us-copy-core-worker.conf&amp;quot;&lt;br /&gt;
 sudo sed -i &amp;quot;s@/var/www/userside/@/var/www/userside-copy/@&amp;quot; &amp;quot;/etc/supervisor/conf.d/us-copy-core-worker.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 sudo cp /etc/supervisor/conf.d/usm_poller.conf /etc/supervisor/conf.d/usm_poller_copy.conf&lt;br /&gt;
 sudo sed -i &amp;quot;s@usm_poller@usm_poller_copy@&amp;quot; &amp;quot;/etc/supervisor/conf.d/usm_poller_copy.conf&amp;quot;&lt;br /&gt;
 sudo sed -i &amp;quot;s@/var/www/userside/@/var/www/userside-copy/@&amp;quot; &amp;quot;/etc/supervisor/conf.d/usm_poller_copy.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl restart supervisor&lt;br /&gt;
&lt;br /&gt;
* it is now possible to open your copy in the browser.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9A%D0%BB%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_USERSIDE&amp;diff=20383</id>
		<title>HOWTO: Клонирование USERSIDE</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9A%D0%BB%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_USERSIDE&amp;diff=20383"/>
		<updated>2025-05-30T07:04:32Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_USERSIDE_cloning|en]] | [[HOWTO:_Клонирование_USERSIDE|ru]]&lt;br /&gt;
&lt;br /&gt;
== Копия системы для тестирования или исследований ==&lt;br /&gt;
&lt;br /&gt;
Если вам понадобилось сделать копию системы, чтобы испытать новую версию перед фактическим обновлением, или выполнить еще какие либо действия, то вам необходимо выполнить несколько простых шагов:&lt;br /&gt;
&lt;br /&gt;
* скопируйте файлы приложения&lt;br /&gt;
 cd /var/www/&lt;br /&gt;
 sudo cp -r userside userside-copy&lt;br /&gt;
&lt;br /&gt;
* настройте web-сервер для работы с копией - скопируйте конфигурационный файл, отредактируйте и перечитайте конфигурацию nginx:&lt;br /&gt;
 sudo cp /etc/nginx/conf.d/userside.conf /etc/nginx/conf.d/userside-copy.conf&lt;br /&gt;
 sudo sed -i &amp;quot;s@/var/www/userside/userside3@/var/www/userside-copy/userside3@&amp;quot; &amp;quot;/etc/nginx/conf.d/userside-copy.conf&amp;quot;&lt;br /&gt;
 sudo sed -i &amp;quot;s@/var/log/nginx/userside@/var/log/nginx/userside-copy@&amp;quot; &amp;quot;/etc/nginx/conf.d/userside-copy.conf&amp;quot;&lt;br /&gt;
 sudo sed -i &amp;quot;s@старое.доменное.имя@новое.доменное.имя@&amp;quot; &amp;quot;/etc/nginx/conf.d/userside-copy.conf&amp;quot;&lt;br /&gt;
 sudo systemctl reload nginx&lt;br /&gt;
&lt;br /&gt;
* скопируйте базу данных (или создайте новую базу данных и восстановите ее из резервной копии):&lt;br /&gt;
 sudo -u postgres createdb -e --encoding=&amp;quot;UTF-8&amp;quot; --locale=&amp;quot;uk_UA.UTF-8&amp;quot; --owner=userside --template=userside userside_copy&lt;br /&gt;
если вы копируете базу данных на другой сервер, перед восстановлением вам нужно будет создать роль, обязательно такую же, как в дампе:&lt;br /&gt;
 sudo -u postgres createuser userside -P&lt;br /&gt;
&lt;br /&gt;
* В версии 3.13 и новее перейдите в каталог с новой копией, отредактируйте переменные окружения в файле .env таким образом, чтобы они работали с новой базой данных и с другой (свободной) базой данных redis (в основной инсталляции у вас, скорее всего, используется база данных redis под номером 0; вы можете использовать еще 15, имеющихся по умолчанию). За это отвечают переменные:&lt;br /&gt;
 US_URL=http://новое.доменное.имя&lt;br /&gt;
 US_DB_DSN=pgsql:host=localhost;dbname=userside_copy;port=5432&lt;br /&gt;
 US_REDIS_DB=1&lt;br /&gt;
&lt;br /&gt;
* Очистите базу данных Redis, которую собираетесь использовать:&lt;br /&gt;
 redis-cli -n 1 -a пароль_redis FLUSHDB&lt;br /&gt;
&lt;br /&gt;
* В версии до 3.13 отредактируйте параметры подключения к БД в файле common/config/db.php и URL в файле userside3/main/config/config.php&lt;br /&gt;
&lt;br /&gt;
* В версии 3.16 и новее вам необходимо создать дополнительный vhost для RabbitMQ, а затем указать его в .env файле для переменной &#039;&#039;&#039;US_AMQP_DSN&#039;&#039;&#039;. В примере ниже в качестве имени нового vhost используется &#039;&#039;&#039;copy&#039;&#039;&#039; (измените на более удобное для вас, если в этом есть необходимость).Сперва выполните команду, создающую vhost, затем добавьте разрешения для пользователей в пределах этого vhost:&lt;br /&gt;
 sudo rabbitmqctl add_vhost copy&lt;br /&gt;
 sudo rabbitmqctl set_permissions -p &amp;quot;copy&amp;quot; &amp;quot;admin&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
 sudo rabbitmqctl set_permissions -p &amp;quot;copy&amp;quot; &amp;quot;userside&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
 sudo rabbitmqctl set_permissions -p &amp;quot;copy&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
 sudo rabbitmqctl --vhost copy set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Теперь измените переменную US_AMQP_DSN файла .env таким образом:&lt;br /&gt;
 US_AMQP_DSN=amqp://userside:вашпароль@127.0.0.1:5672/copy&lt;br /&gt;
&lt;br /&gt;
* В версии 3.16 и новее вам также придется пересоздать venv для микросервиса поллера:&lt;br /&gt;
 cd /var/www/userside-copy/microservice/poller&lt;br /&gt;
 sudo rm -rf venv&lt;br /&gt;
 sudo -H python3 -m venv venv&lt;br /&gt;
 sudo -H venv/bin/pip install --upgrade -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
* Также начиная с версии 3.16 нужно будет скопировать конфигурацию супервизора для фоновых процессов ядра и микросервиса поллеров. Обратите внимание, что до версии 3.18 файл usm_poller.conf назывался us-poller-microservice.conf:&lt;br /&gt;
 sudo cp /etc/supervisor/conf.d/us-core-worker.conf /etc/supervisor/conf.d/us-copy-core-worker.conf&lt;br /&gt;
 sudo sed -i &amp;quot;s@us-core-worker@us-copy-core-worker@&amp;quot; &amp;quot;/etc/supervisor/conf.d/us-copy-core-worker.conf&amp;quot;&lt;br /&gt;
 sudo sed -i &amp;quot;s@/var/www/userside/@/var/www/userside-copy/@&amp;quot; &amp;quot;/etc/supervisor/conf.d/us-copy-core-worker.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 sudo cp /etc/supervisor/conf.d/usm_poller.conf /etc/supervisor/conf.d/usm_poller_copy.conf&lt;br /&gt;
 sudo sed -i &amp;quot;s@usm_poller@usm_poller_copy@&amp;quot; &amp;quot;/etc/supervisor/conf.d/usm_poller_copy.conf&amp;quot;&lt;br /&gt;
 sudo sed -i &amp;quot;s@/var/www/userside/@/var/www/userside-copy/@&amp;quot; &amp;quot;/etc/supervisor/conf.d/usm_poller_copy.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl restart supervisor&lt;br /&gt;
&lt;br /&gt;
* теперь можно открыть в браузере вашу копию.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Upgrade_3.19&amp;diff=20382</id>
		<title>Upgrade 3.19</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Upgrade_3.19&amp;diff=20382"/>
		<updated>2025-05-29T14:46:10Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Upgrade_3.19|en]] | [[Обновление_3.19|ru]]&lt;br /&gt;
&lt;br /&gt;
Version: &#039;&#039;&#039;[[3.19_EN|3.19]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Version required: &#039;&#039;&#039;[[3.19_EN|3.10]] and above&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== A few words from the author ==&lt;br /&gt;
* In version 3.19 we have done a lot to universalise and customise the system. Now every customer can switch off unused sections, create and operate completely arbitrary sections and entities, and change the naming of basic terms such as &amp;quot;Customers&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Now we have &amp;quot;[[Two-Factor Authentication (2FA)]]&amp;quot;. Don&#039;t neglect security and use it.&lt;br /&gt;
&lt;br /&gt;
* Most files in the userside web directory have, for security reasons, changed their location several levels up and are now inaccessible via the web. Also changed the name of the directory that should be the root directory for the web to the default name public.&lt;br /&gt;
&lt;br /&gt;
* System page/link routing has been changed&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
It was: /?core_section=customer&amp;amp;action=show&amp;amp;id=1234&lt;br /&gt;
It became: /customer/1234&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In version 3.19, the sections are declared obsolete:&lt;br /&gt;
** &amp;quot;Layout of construction lengths and assembled couplings for cable line routes&amp;quot;. In version 3.20 the section will be removed&lt;br /&gt;
** &amp;quot;[[Unknown MAC-addresses]]&amp;quot;. In version 3.20 the section will be removed&lt;br /&gt;
** &amp;quot;Technical support interface&amp;quot;. In version 3.20 the section will be removed&lt;br /&gt;
&lt;br /&gt;
* [[Upgrade]]. &#039;&#039;&#039;Recommended to have two instances of the system&#039;&#039;&#039;. A separate operational one and a separate test one. On the test one you can periodically update the database from the operational system and perform updates to make sure that everything is working, familiarise yourself with innovations or identify things that have stopped working for you.&lt;br /&gt;
&lt;br /&gt;
* Our Telegram group for mutual communication of clients with each other: https://t.me/usersideeu and the news channel: https://t.me/userside&lt;br /&gt;
&lt;br /&gt;
== Specifics in performing the upgrade ==&lt;br /&gt;
&lt;br /&gt;
When upgrading in a Docker environment, refer to the [https://github.com/userside/userside-docker/tree/v3.18 instructions] in the Docker bundle repository.&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.10 - check out the page: [[Upgrade 3.11]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.11 and before - check out the page: [[Upgrade 3.12]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.12 and before - check out the page: [[Upgrade 3.13]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.13 and before - check out the page: [[Upgrade 3.14]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.14 and before - check out the page: [[Upgrade 3.15]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.15 and before - check out the page: [[Upgrade 3.16]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.16 and before - check out the page: [[Upgrade 3.17]]&lt;br /&gt;
&lt;br /&gt;
* If you are upgrading from a version 3.17 and before - check out the page: [[Upgrade 3.18]]&lt;br /&gt;
&lt;br /&gt;
* Move/remove extraneous files, directories, etc. from the userside directory (/var/www/userside). Only distribution files of the system itself and files that the system creates during its operation should be there. Userside modules (usm) should not be stored there either. Use separate directories for them (e.g. /opt/userside). Extraneous files in the userside directory can be removed during the upgrade process.&lt;br /&gt;
&lt;br /&gt;
* Save the userside3/main/config/custom_api.php and userside3/main/skins/user_style.css &#039;&#039;(if any)&#039;&#039; files. These can come in handy in case of update errors and deleting them when doing so.&lt;br /&gt;
&lt;br /&gt;
* Most files in the userside web directory have, for security reasons, changed their location several levels up and are now inaccessible via the web.&lt;br /&gt;
&lt;br /&gt;
* Version 3.19 requires PHP version 8.3. You can install all the necessary packages in addition to your existing different PHP version. If you are using LDAP, also install php8.3-ldap. If you are using TurboSMS, install php8.3-soap.&lt;br /&gt;
 sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&lt;br /&gt;
* If php8.3 is not in your repository, use an alternative repository such as deb.sury.org by adding it to your system as follows and then repeating the PHP8.3 installation command above:&lt;br /&gt;
 sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
 sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
&lt;br /&gt;
* Change the PHP configuration as follows and restart the php-fpm service.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_input_time.*@max_input_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
 &lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create a new public directory inside the userside directory (if you have it installed elsewhere, edit the command before executing):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /var/www/userside/public&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the NGINX server configuration (/etc/nginx/conf.d/userside.conf), change the paths to the root directory. The line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root   /var/www/userside/userside3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace it with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root   /var/www/userside/public;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Also change there &amp;lt;code&amp;gt;location /&amp;lt;/code&amp;gt; in its entirety for the next:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
location / {&lt;br /&gt;
    try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Also there for &amp;lt;code&amp;gt;location ~ \.php$&amp;lt;/code&amp;gt; change the value for fastcgi_pass from:&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.1-fpm.sock;&lt;br /&gt;
to&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
and reread the nginx configuration:&lt;br /&gt;
 sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
* For the websocket-user (websock-user) of the RabbitMQ broker, you need to change the permissions as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If your websocket-user name is different from websock-user, specify it instead of websock-user in the above commands.&lt;br /&gt;
&lt;br /&gt;
* Note that when you invoke the command &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; from the command line, php8.3 will now be invoked, since it is the latest version installed. If you&#039;re still using php8.1 anywhere, you&#039;ll need to change the php call in those places or change the alternate php command to run the version you want.&lt;br /&gt;
&lt;br /&gt;
* USERSIDE 3.19 &#039;&#039;requires Python3 of any currently supported version. The status of versions can be viewed here:&amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. It is recommended to use a version with &amp;quot;security&amp;quot; or &amp;quot;bugfix&amp;quot; status. Versions marked as &amp;quot;end-of-life&amp;quot; are not supported. Versions marked as &amp;quot;feature&amp;quot; are not recommended. If you have an unsupported version (&amp;quot;end-of-life&amp;quot;) installed on your host, you should be sure to [[Python-update_EN|install additionally]] a more recent version of Python.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Use the automatic [[Installer|installer]] to perform [[Upgrade|upgrade]]:&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
* The following action only needs to be performed if you [[Python-update EN| updated Python]]. If you haven&#039;t updated, you don&#039;t need to do it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo rm -rf venv&lt;br /&gt;
sudo python3.11 -m venv venv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* You need to update (install) the dependencies for poller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo venv/bin/pip install --upgrade pip&lt;br /&gt;
sudo venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* And restart the services&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Redesigned low-level interrogation of equipment &#039;&#039;(PON, TDR)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* The system of two SNMP-communities is replaced by one SNMP-community. This one SNMP-community will be the one that was specified in the rw-community field. If the rw-community field was empty - the value of the ro-community field will be used&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t forget to upgrade all modules to their latest versions&lt;br /&gt;
&lt;br /&gt;
* If you are using the [[Usm_pon_EN|usm_pon]] module - reconfigure it to run at the required frequency in system cron, depending on how many OLTs you have. The module now polls only one device per run &#039;&#039;(previously all devices were polled simultaneously without the ability to mitigate load and skip unnecessary devices)&#039;&#039;. Devices will be polled one at a time. At each startup, the next device with polling enabled will be polled.&lt;br /&gt;
&lt;br /&gt;
* You can now configure separate notification templates for different types of tasks. Check your existing templates for correct migrations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;List of changes:&#039;&#039;&#039; [[3.19_EN|view]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Performing an upgrade:&#039;&#039;&#039; [[Upgrade|instruction]]&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_3.19&amp;diff=20381</id>
		<title>Обновление 3.19</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_3.19&amp;diff=20381"/>
		<updated>2025-05-29T14:45:25Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Upgrade_3.19|en]] | [[Обновление_3.19|ru]]&lt;br /&gt;
&lt;br /&gt;
Версия: &#039;&#039;&#039;[[3.19]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Требуется версия: &#039;&#039;&#039;[[3.10]] и выше&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Несколько слов от автора ==&lt;br /&gt;
* В версии 3.19 мы очень много сделали для универсализации и индивидуализации системы. Теперь каждый клиент может отключить неиспользуемые разделы, создать совершенно произвольные разделы и сущности и оперировать ими, а также изменять наименование базовых терминов - таких как &amp;quot;Абоненты&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* У нас появилась &amp;quot;[[Двухфакторная аутентификация (2FA)]]&amp;quot;. Не пренебрегайте безопасностью и используйте её.&lt;br /&gt;
&lt;br /&gt;
* Большинство файлов из веб-директории userside с целью безопасности изменили своё местоположение на несколько уровней выше и теперь недоступны через веб. Также изменилось имя каталога, который должен быть корневым для web, на стандартное имя public.&lt;br /&gt;
&lt;br /&gt;
* Изменена маршрутизация страниц/ссылок системы&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Было: /?core_section=customer&amp;amp;action=show&amp;amp;id=1234&lt;br /&gt;
Стало: /customer/1234&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* В версии 3.19 объявляются устаревшими разделы:&lt;br /&gt;
** &amp;quot;Схема размещения строительных длин и смонтированных муфт для трасс кабельных линий&amp;quot;. В версии 3.20 раздел будет удалён&lt;br /&gt;
** &amp;quot;[[Неизвестные MAC-адреса]]&amp;quot;. В версии 3.20 раздел будет удалён&lt;br /&gt;
** &amp;quot;Интерфейс технической поддержки&amp;quot;. В версии 3.20 раздел будет удалён&lt;br /&gt;
&lt;br /&gt;
* [[Обновление]]. &#039;&#039;&#039;Рекомендую иметь два инстанса системы&#039;&#039;&#039;. Отдельно действующую и отдельно тестовую. На тестовой вы можете периодически обновлять базу данных с действующей системы и проводить обновление, убеждаясь, что всё работает, ознакомиться с нововведениями или выявлять моменты, которые у вас перестали работать.&lt;br /&gt;
&lt;br /&gt;
* Наша группа в Telegram для взаимного общения клиентов между собой: https://t.me/usersideeu и канал для новостей: https://t.me/userside&lt;br /&gt;
&lt;br /&gt;
== Особенности в проведении обновления ==&lt;br /&gt;
&lt;br /&gt;
При обновлении в Docker-окружении, обратитесь к [https://github.com/userside/userside-docker/tree/v3.18 инструкциям] в репозитории Docker-бандла.&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.10 - ознакомьтесь со страницей: [[Обновление 3.11]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.11 и ранее - ознакомьтесь со страницей: [[Обновление 3.12]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.12 и ранее - ознакомьтесь со страницей: [[Обновление 3.13]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.13 и ранее - ознакомьтесь со страницей: [[Обновление 3.14]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.14 и ранее - ознакомьтесь со страницей: [[Обновление 3.15]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.15 и ранее - ознакомьтесь со страницей: [[Обновление 3.16]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.16 и ранее - ознакомьтесь со страницей: [[Обновление 3.17]]&lt;br /&gt;
&lt;br /&gt;
* Если вы обновляетесь с версии 3.17 и ранее - ознакомьтесь со страницей: [[Обновление 3.18]]&lt;br /&gt;
&lt;br /&gt;
* Перенесите/удалите посторонние файлы, каталоги и прочее из директории userside (/var/www/userside). Там должны находится только дистрибутивные файлы самой системы и файлы, которые система создает во время своей работы. Модули userside (usm) также не должны там хранится. Используйте отдельные каталоги для них (например, /opt/userside). Посторонние файлы из директории userside могут быть удалены в процессе обновления&lt;br /&gt;
&lt;br /&gt;
* Сохраните файлы &#039;&#039;(при их наличии)&#039;&#039;&lt;br /&gt;
 userside3/main/config/custom_api.php &lt;br /&gt;
 userside3/main/skins/user_style.css&lt;br /&gt;
 userside3/main/js/user_script.js&lt;br /&gt;
&lt;br /&gt;
Они могут пригодится в случае ошибок обновления и их удаления при этом. Если вы использовали собственные значки для типов сооружений связи и самостоятельно их загружали в какой-то каталог, что доступен из веб - то также их сохраните.&lt;br /&gt;
&lt;br /&gt;
* Большинство файлов из веб-директории userside с целью безопасности изменили своё местоположение на несколько уровней выше и теперь недоступны через веб.&lt;br /&gt;
&lt;br /&gt;
* Версия 3.19 требует PHP версии 8.3. Вы можете установить все необходимые пакеты дополнительно к уже существующей иной версии PHP. Если используете LDAP, то установите также php8.3-ldap. Если используете TurboSMS, то установите php8.3-soap.&lt;br /&gt;
 sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&lt;br /&gt;
* Если версия php8.3 отсутствует в вашем репозитории, то воспользуйтесь альтернативным репозиторием, например, deb.sury.org, добавив его в систему следующим образом и затем повторив команду установки PHP8.3 приведенную пунктом выше:&lt;br /&gt;
 sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
 sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
&lt;br /&gt;
* Измените конфигурацию PHP следующим образом и перезапустите службу php-fpm.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_input_time.*@max_input_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
 &lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* создайте новый каталог public внутри каталога userside (если у вас установлено в другом месте, отредактируйте команду перед выполнением):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /var/www/userside/public&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* В настройке NGINX-сервера (/etc/nginx/conf.d/userside.conf) измените пути к корневому каталогу. Строку:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root   /var/www/userside/userside3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Замените на:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root   /var/www/userside/public;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Там же измените &amp;lt;code&amp;gt;location /&amp;lt;/code&amp;gt; целиком на следующий:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
location / {&lt;br /&gt;
    try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Там же для &amp;lt;code&amp;gt;location ~ \.php$&amp;lt;/code&amp;gt; измените значение для fastcgi_pass с:&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.1-fpm.sock;&lt;br /&gt;
на&lt;br /&gt;
 fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
и перечитайте конфигурацию nginx:&lt;br /&gt;
 sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
* Для websocket-пользователя (websock-user) брокера RabbitMQ необходимо изменить разрешения следующим образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если имя вашего websocket-пользователя отличается от websock-user, то укажите его вместо websock-user в приведенных выше командах.&lt;br /&gt;
&lt;br /&gt;
* Обратите внимание, что при вызове команды &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; из командной строки, теперь будет вызываться php8.3, так как это последняя установленная версия. Если вы где-либо до сих пор используете php8.1, то вам нужно изменить вызов php в этих местах либо изменить альтернативную команду php, чтобы она запускала нужную вам версию.&lt;br /&gt;
&lt;br /&gt;
* USERSIDE 3.19 &#039;&#039;требует Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать. Если у вас на хосте неподдерживаемая версия (&amp;quot;end-of-life&amp;quot;), то нужно обязательно [[Python-update|установить дополнительно]] более свежую версию Python.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* С помощью автоматического [[Инсталлятор|инсталлятора]] выполните [[Обновление|обновление]]:&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
* Следующее действие нужно выполнять только если вы [[Python-update|обновили Python]]. Если не обновляли, можно не выполнять:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo rm -rf venv&lt;br /&gt;
sudo python3.11 -m venv venv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Необходимо обновить (установить) зависимости для поллера:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo venv/bin/pip install --upgrade pip&lt;br /&gt;
sudo venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* И перезапустить службы&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Переработан низкоуровневый опрос оборудования &#039;&#039;(PON, TDR)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Система двух SNMP-community заменена на один SNMP-community. Этим одним SNMP-community будет то, которое было указано в поле rw-community. Если поле rw-community было пустое - то будет использовано значение поля ro-community&lt;br /&gt;
&lt;br /&gt;
* Не забудьте обновить все модули на их свежие версии&lt;br /&gt;
&lt;br /&gt;
* Если вы используете модуль [[usm_pon]] - перенастройте в системном cron его запуск на нужную частоту в зависимости от количества у вас OLT. Теперь модуль опрашивает только одно устройство за запуск &#039;&#039;(ранее опрашивались все устройства одновременно без возможности смягчения нагрузки и пропуска ненужных устройств)&#039;&#039;. Устройства будут опрашиваться по очереди. При каждом запуске на опрос будет подаваться следующее устройство у которого включен такой опрос.&lt;br /&gt;
&lt;br /&gt;
* Для разных типов задач теперь можно настраивать отдельные шаблоны по уведомлениям. Проверьте в ваших существующих шаблонах корректность миграций.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Список изменений:&#039;&#039;&#039; [[3.19|просмотреть]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Проведение обновления:&#039;&#039;&#039; [[Обновление|инструкция]]&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Installation&amp;diff=20373</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Installation&amp;diff=20373"/>
		<updated>2025-05-20T13:16:38Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Main agreements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
[[Installation|en]] | [[Установка|ru]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ATTENTION: These instructions are valid for ERP USERSIDE versions 3.19&#039;&#039;&#039;&lt;br /&gt;
* [[Installation for version 3.18|Instruction for version 3.18]]&lt;br /&gt;
* [[Installation for version 3.17|Instruction for version 3.11-3.17]]&lt;br /&gt;
* [[Installation for version 3.10 and earlier|Instruction for version 3.10 and earlier]].&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
For the sake of simplicity, the commands for the &#039;&#039;&#039;Linux Debian 12 (bookworm)&#039;&#039;&#039; operating system will be considered. For experienced system administrators, it should not be difficult to use similar commands for another operating system. If you do not feel confident in administering operating systems, we recommend you to use &#039;&#039;&#039;Debian&#039;&#039;&#039; or &#039;&#039;&#039;Ubuntu Server LTS&#039;&#039;&#039;. Because of their simplicity and because our technical support is much more familiar with Debian-like distributions. The likelihood of being able to tell you something not related to ERP USERSIDE, but related to operating system administration, will be much higher if you have Debian or a similar distribution based on it.&lt;br /&gt;
&lt;br /&gt;
On the other hand, if you are an experienced system administrator and have skills and experience with Docker, it may be more convenient for you to use a ready-made environment based on Docker images that we have prepared specially, including everything you need to run ERP USERSIDE. In this case, you will not have to configure anything, except to perform simple Docker-bundle settings https://github.com/userside/userside-docker.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
ERP USERSIDE requires various system applications and services such as PHP interpreter with a set of extensions, WEB server, database management system and others. This section will list such requirements depending on the version of ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
Also note that your operating system must be configured with the correct time zone and locale. The correct display of information and correct sorting depends on this.&lt;br /&gt;
&lt;br /&gt;
The list of required PHP extensions contains all extensions that are not part of the PHP core. Some of these extensions may come with the core PHP package or as part of the php-common package, while others must be installed additionally. &lt;br /&gt;
&lt;br /&gt;
=== 3.19 (current stable) ===&lt;br /&gt;
* PHP: 8.3&lt;br /&gt;
* PHP extensions: ctype, gd, json, libxml, mbstring, openssl, pdo, pdo_pgsql, posix, simplexml, snmp, sockets, zlib, pcntl&lt;br /&gt;
* Additional PHP extensions: ldap, soap&lt;br /&gt;
* Python: &#039;&#039;Requires Python3 of any currently supported version. The status of versions can be viewed here:&amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. It is recommended to use a version with &amp;quot;security&amp;quot; or &amp;quot;bugfix&amp;quot; status. Versions marked as &amp;quot;end-of-life&amp;quot; are not supported. Versions marked as &amp;quot;feature&amp;quot; are not recommended.&#039;&#039;&lt;br /&gt;
* Python modules: pip, venv&lt;br /&gt;
* PostgreSQL: 12+ (preferably 16)&lt;br /&gt;
* Redis: 5+ (preferably 7)&lt;br /&gt;
* RabbitMQ: 3.10+ (preferably 3.13)&lt;br /&gt;
* Supervisor&lt;br /&gt;
&lt;br /&gt;
== Main agreements ==&lt;br /&gt;
The directory where ERP USERSIDE is installed is &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Inside this directory there should be a subdirectory public, which is the root directory for the WEB server. If you want to use a different directory for ERP USERSIDE, remember to make the appropriate corrections to all the examples in these instructions.&lt;br /&gt;
&lt;br /&gt;
Create the directory:&lt;br /&gt;
 sudo mkdir -p /var/www/userside/public /var/log/usm_poller&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside /var/log/usm_poller&lt;br /&gt;
&lt;br /&gt;
You will need to allocate a domain name for ERP USERSIDE. The examples below use userside.mycompany.com, but you will need to change it to your own. Write this domain name in /etc/hosts if it is different from the hostname of the installation.&lt;br /&gt;
&lt;br /&gt;
== Installation of the required components ==&lt;br /&gt;
First install the utilities that will be required later in the installation process. They are required for any ERP USERSIDE program. You can copy the lines one at a time and paste them into the command line of your operating system.&lt;br /&gt;
&lt;br /&gt;
Copy and paste the following lines in their entirety:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/contrib-non-free.list &amp;lt;&amp;lt; EOL&lt;br /&gt;
deb http://deb.debian.org/debian/ $(lsb_release -sc) contrib non-free non-free-firmware&lt;br /&gt;
EOL&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt full-upgrade -y&lt;br /&gt;
sudo apt install -y gnupg ca-certificates lsb-release debian-archive-keyring debian-keyring libsnmp-dev snmp-mibs-downloader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
==== Alternative official repository ====&lt;br /&gt;
We strongly recommend using the latest version of PostgreSQL, as this always has a positive impact on speed. Add the official Postgres repository to the system:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo install -d /usr/share/postgresql-common/pgdg&lt;br /&gt;
&lt;br /&gt;
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc&lt;br /&gt;
&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main&amp;quot; &amp;gt; /etc/apt/sources.list.d/pgdg.list&#039;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you have a different operating system, you can find the necessary commands for it at [https://www.postgresql.org/download/ official PostgreSQL website].&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&#039;&#039;&#039;Attention!&#039;&#039;&#039; Before installing PostgreSQL, your operating system must have your local locale and correct time zone set! This can be done later, but it will be much easier if it is done before installing PostgreSQL. Run the following command to make sure the correct locale is present:&lt;br /&gt;
 locale -a&lt;br /&gt;
&lt;br /&gt;
If your local locale is not among those listed, then install it. To do this, simply edit the /etc/locale.gen file by removing the comments before the line(s) with the desired locale, and then run the command:&lt;br /&gt;
 sudo locale-gen&lt;br /&gt;
&lt;br /&gt;
If you need to change the default locale, run:&lt;br /&gt;
 sudo dpkg-reconfigure locales&lt;br /&gt;
&lt;br /&gt;
To change the time zone, execute:&lt;br /&gt;
 sudo timedatectl set-timezone Europe/Kyiv&lt;br /&gt;
&lt;br /&gt;
Now you can move on to the PostgreSQL installation:&lt;br /&gt;
 sudo apt install -y postgresql-16 postgresql-16-postgis-3&lt;br /&gt;
&lt;br /&gt;
==== Setting ====&lt;br /&gt;
Create a user and database for ERP USERSIDE. The example below creates a user named userside and a database with the same name. If your locale is not uk_UA, remember to change the command. The PostGis extension needed to work with geographic data is then connected to the database. After doing the first line, you will need to enter the password for the new user twice - make a note of this password, you will need it later to set up ERP USERSIDE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres createuser userside -P&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your PostgreSQL is installed &#039;&#039;&#039;on another server&#039;&#039;&#039;, you will need to make corrections to the postgresql.conf and pg_hba.conf files located in the /etc/postgresql/16/main/ directory. In the postgresql.conf file, you must uncomment and change the value of the parameter &amp;lt;code&amp;gt;listen_addresses&amp;lt;/code&amp;gt;, specifying there all IP addresses of the server interfaces on which it can accept connections to PostgreSQL. In the pg_hba.conf file you need to add a line at the very end, similar to the previous ones, indicating from which address the ERP USERSIDE user can connect. But if your PostgreSQL is located on the same server as USERSIDE - there is no need to make any adjustments to these files.&lt;br /&gt;
&lt;br /&gt;
=== Redis ===&lt;br /&gt;
The Debian 12 standard repository includes Redis version 7.0.15. This version is suitable for running ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
 sudo apt install -y redis-server&lt;br /&gt;
&lt;br /&gt;
==== Setting ====&lt;br /&gt;
By default Redis accepts connections without a password, but we strongly recommend setting a password. Since the password is transmitted in the clear (Redis does not provide encryption because it focuses on speed of request processing and extra steps like encryption are not applied), you need to create a really long and complex password, for example, using the &#039;&#039;&#039;openssl&#039;&#039;&#039; utility as follows:&lt;br /&gt;
&lt;br /&gt;
 openssl rand --hex 32&lt;br /&gt;
&lt;br /&gt;
The output will be a random set of 32 bytes in 16-character form, which you will use as a password. Next, you will need to substitute this generated string in place of the word &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039;. Write it down. Then you will specify this string as the Redis password in the settings.&lt;br /&gt;
&lt;br /&gt;
Specify the generated passphrase hash in the Redis configuration file:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^.*requirepass .*@requirepass MYPASSWORDHERE@g&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
where instead of &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; specify the hash of the passphrase received earlier.&lt;br /&gt;
&lt;br /&gt;
You should also disable timeout (on some versions of Redis it is enabled):&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^timeout .*@timeout 0@&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
Restart Redis and make sure it works (should get PONG in response):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart redis&lt;br /&gt;
redis-cli -h 127.0.0.1 -p 6379 -a MYPASSWORDHERE ping&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RabbitMQ ===&lt;br /&gt;
The Debian 12 standard repository includes an older version of RabbitMQ 3.10. You can use it - it is supported. However, this version is relatively old and your best bet is to install a newer version from alternative repositories. The [https://www.rabbitmq.com/install-debian.html official RabbitMQ website] has fairly detailed information on installing RabbitMQ for each operating system.&lt;br /&gt;
&lt;br /&gt;
==== Adding alternative repositories ====&lt;br /&gt;
Copy and paste the following block in its entirety into the command line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-server-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/rabbitmq.list &amp;lt;&amp;lt;EOF&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
Make sure that /etc/hosts has an entry for your hostname. The lack of such an entry (for example, if you changed the hostname after installation) is a major error that occurs when installing RabbitMQ. So it is better to make sure again that there is an entry for the hostname.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y erlang-base \&lt;br /&gt;
                    erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \&lt;br /&gt;
                    erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \&lt;br /&gt;
                    erlang-runtime-tools erlang-snmp erlang-ssl \&lt;br /&gt;
                    erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl&lt;br /&gt;
&lt;br /&gt;
sudo apt install rabbitmq-server -y --fix-missing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation of necessary add-ons ====&lt;br /&gt;
Do the next two lines one at a time!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_management --offline&lt;br /&gt;
&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_web_stomp --offline&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Setting ====&lt;br /&gt;
Copy and paste the following block in its entirety:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/rabbitmq/rabbitmq.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
listeners.tcp.default = 5672&lt;br /&gt;
&lt;br /&gt;
web_stomp.port = 15674&lt;br /&gt;
web_stomp.cowboy_opts.max_keepalive = 60&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to create users. We recommend using &#039;&#039;&#039;three different users&#039;&#039;&#039;: for server administration (full rights), for userside and modules (full rights but no administrative rights) and the web-stomp user for websocket (minimal rights to read certain broker objects). But you can only create two: an admin user, which will also be used for userside, and a user for websocket. These must necessarily be at least two different users, since the password for the websocket user is passed to the browser and can be easily read by the user. The following will show an example for the recommended three users. &lt;br /&gt;
&lt;br /&gt;
Create a &#039;&#039;&#039;user for administration&#039;&#039;&#039; RabbitMQ. This example uses the username &#039;&#039;&#039;admin&#039;&#039;&#039; and password &#039;&#039;&#039;admin_password&#039;&#039;&#039;. &lt;br /&gt;
A tag &amp;lt;code&amp;gt;administrator&amp;lt;/code&amp;gt; is assigned to the user immediately after creation, giving the user maximum administrator rights and then set permissions for vhost &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; allowing full access to configure, write and read everything within that vhost*.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;admin&amp;quot; &amp;quot;admin_password&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;admin&amp;quot; &amp;quot;administrator&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;admin&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a &#039;&#039;&#039;user on behalf of which ERP USERSIDE&#039;&#039;&#039; and modules will run. Example for the user name &#039;&#039;&#039;userside&#039;&#039;&#039; (you do not need to give admin rights to this user):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;userside&amp;quot; &amp;quot;system_password&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;userside&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;websocket&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Create a &#039;&#039;&#039;WebSTOMP user&#039;&#039;&#039; . You will need it to use notifications via WebSocket. Instead of &#039;&#039;&#039;websock-user&#039;&#039;&#039; you can specify a different user name. Instead of &#039;&#039;&#039;password_websocket&#039;&#039;&#039; specify your password, but this password will be passed in the clear to the browser, so don&#039;t make it similar to other passwords:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;websock-user&amp;quot; &amp;quot;password_websocket&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention!: You will need to specify the WebSTOMP username and password in the settings in the USERSIDE interface (Menu: Settings - Main - Websocket).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;* vhost - is a virtual host within RabbitMQ that allows different applications to differentiate between different uses of the same server. Like, for example, different databases on the same DBMS server. The default vhost is named / and almost always this is enough for you. But if you plan, for example, to run multiple copies of ERP USERSIDE on the same server, then for each copy you will need to create a different vhost and, accordingly, users for it. Please refer to [https://www.rabbitmq.com/vhosts.html official manual] for more details.‘’&lt;br /&gt;
&lt;br /&gt;
Restart the rabbitmq service:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rabbitmq-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Management ====&lt;br /&gt;
One of the commands above installs a management module in RabbitMQ that provides a convenient WEB interface to monitor, diagnose, and manage the RabbitMQ server. With this module you can monitor the server, keep track of the number of messages in queues and other statuses. All this can be done using the console utility as well &amp;lt;code&amp;gt;rabbitmqctl&amp;lt;/code&amp;gt;, but using the WEB-interface can be much clearer and more convenient.&lt;br /&gt;
&lt;br /&gt;
By default, the WEB management interface is available at http://userside.mycompany.com:15672. We recommend using a firewall to restrict access to this control interface.&lt;br /&gt;
&lt;br /&gt;
More details about the control module can be [https://www.rabbitmq.com/management.html read on the official RabbitMQ website].&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
==== Alternative repository ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
Execute the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you plan to use LDAP, you need to install the php-ldap extension:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-ldap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you plan to use TurboSMS to send SMS, you will also need the php-soap extension:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-soap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Setting ====&lt;br /&gt;
The following are commands that make changes to the configuration files.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;request_terminate_timeout =.*@request_terminate_timeout = 300@&amp;quot; /etc/php/8.3/fpm/pool.d/www.conf&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NGINX ===&lt;br /&gt;
==== Alternative official repository ====&lt;br /&gt;
The version of NGINX supplied in the Debian repository is fully usable and there is no need to add an alternative repository. However, if you want to always have the latest version, run the following lines to add the official nginx repository to your operating system:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \&lt;br /&gt;
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
echo &amp;quot;deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \&lt;br /&gt;
http://nginx.org/packages/debian `lsb_release -cs` nginx&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/sources.list.d/nginx.list&lt;br /&gt;
echo -e &amp;quot;Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/preferences.d/99nginx&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you have a different operating system, you can find the necessary commands for it on the official NGINX website: https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Setting ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^user.*;@user www-data www-data;@&amp;quot; &amp;quot;/etc/nginx/nginx.conf&amp;quot;&lt;br /&gt;
sudo systemctl restart nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following configuration example assumes that the ERP USERSIDE will be set to the system&#039;s default directory &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. If you wish to install ERP USERSIDE in a different directory, please remember to fix it in all subsequent examples. In order not to make a mistake, we recommend to use exactly the directory &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Now edit the file /etc/nginx/conf.d/default.conf. Or delete it and create a file named /etc/nginx/conf.d/userside.conf. In either case, regardless of your choice, the contents of the file should be as follows (instead of userside.mycompany.com, specify your domain name):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen       80 default_server;&lt;br /&gt;
    server_name  userside.mycompany.com;&lt;br /&gt;
    charset      utf-8;&lt;br /&gt;
    client_max_body_size 100M;&lt;br /&gt;
&lt;br /&gt;
    access_log  /var/log/nginx/userside-access.log;&lt;br /&gt;
    error_log   /var/log/nginx/userside-error.log;&lt;br /&gt;
&lt;br /&gt;
    root   /var/www/userside/public;&lt;br /&gt;
    index  index.php;&lt;br /&gt;
&lt;br /&gt;
    location = /favicon.ico { access_log off; log_not_found off; }&lt;br /&gt;
    location = /robots.txt  { access_log off; log_not_found off; }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~* ^.+\.(css|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {&lt;br /&gt;
        access_log    off;&lt;br /&gt;
        log_not_found off;&lt;br /&gt;
        expires       max;&lt;br /&gt;
        add_header    Pragma public;&lt;br /&gt;
        add_header    Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ \.php$ {&lt;br /&gt;
        try_files     $uri =404;&lt;br /&gt;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
        fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
        fastcgi_index index.php;&lt;br /&gt;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
        fastcgi_read_timeout 300;&lt;br /&gt;
        include       fastcgi_params;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location /ws {&lt;br /&gt;
        proxy_pass http://127.0.0.1:15674/ws;&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header Connection &amp;quot;Upgrade&amp;quot;;&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ /\.ht { deny  all; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want to configure SSL and something else. This topic is beyond the scope of this manual.&lt;br /&gt;
&lt;br /&gt;
If you have installed RabbitMQ &#039;&#039;&#039;on another server&#039;&#039;&#039;, or changed the value of the WebSTOMP port from 15674 to some other, then specify the IP address of the server with RabbitMQ and the port number in the line &amp;lt;code&amp;gt;proxy_pass http://127.0.0.1:15674/ws;&amp;lt;/code&amp;gt;. The protocol must remain http. The path must remain /ws.&lt;br /&gt;
&lt;br /&gt;
Check the configuration and if it is ok restart nginx:&lt;br /&gt;
 sudo nginx -t &amp;amp;&amp;amp; sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&#039;&#039;Requires Python3 of any currently supported version. The status of versions can be viewed here:&amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. It is recommended to use a version with &amp;quot;security&amp;quot; or &amp;quot;bugfix&amp;quot; status. Versions marked as &amp;quot;end-of-life&amp;quot; are not supported. Versions marked as &amp;quot;feature&amp;quot; are not recommended.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have an unsupported version (&amp;quot;end-of-life&amp;quot;) installed on your host, you should be sure to [[Python-update_EN|install additionally]] a more recent version of Python.&lt;br /&gt;
&lt;br /&gt;
==== Installing the required packages ====&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv libffi-dev pkg-config&lt;br /&gt;
&lt;br /&gt;
=== Supervisor ===&lt;br /&gt;
 sudo apt install -y supervisor&lt;br /&gt;
&lt;br /&gt;
== Downloading and launching the installer ==&lt;br /&gt;
&lt;br /&gt;
See also: [[Installer|Installer Help]]&lt;br /&gt;
&lt;br /&gt;
1. navigate to the system catalogue&lt;br /&gt;
 cd /var/www/userside&lt;br /&gt;
&lt;br /&gt;
2. download the installer script&lt;br /&gt;
 sudo -u www-data php -r &amp;quot;copy(&#039;https://my.userside.eu/install&#039;, &#039;userside_install.phar&#039;);&amp;quot; &lt;br /&gt;
&lt;br /&gt;
3. run installer&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
During operation, the installer verifies compliance with technical requirements, requests access parameters, and checks connections to server services.&lt;br /&gt;
&lt;br /&gt;
You can enter any ERP USERSIDE version number available to you for installation. To do this, you can enter the version number from the list (it contains only the latest version of each branch) or enter the entire version number if it is not on the list.&lt;br /&gt;
&lt;br /&gt;
When the installer finishes, a message will be displayed indicating that the installation was successful.&lt;br /&gt;
&lt;br /&gt;
If you did not install as a web server user, be sure to make that user the owner of all userside files recursively after the installation is complete!&lt;br /&gt;
&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside&lt;br /&gt;
 sudo chmod -R u=rwX,g=rwX,o=r /var/www/userside&lt;br /&gt;
&lt;br /&gt;
== Setting up after installation ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration of system services ===&lt;br /&gt;
After installation, copy the sample configuration files of the system services and, if necessary, customise them (for example, specify the path to the userside directory if it is different from /var/www/userside). Run the commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp etc/us-core-worker.conf-example /etc/supervisor/conf.d/us-core-worker.conf&lt;br /&gt;
sudo cp microservice/poller/etc/usm_poller.conf-example /etc/supervisor/conf.d/usm_poller.conf&lt;br /&gt;
sudo cp etc/logrotate-example /etc/logrotate.d/userside&lt;br /&gt;
sudo cp microservice/poller/etc/logrotate-example /etc/logrotate.d/usm_poller&lt;br /&gt;
sudo cp etc/crontab-example /etc/cron.d/userside&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation of necessary dependencies for usm_poller ===&lt;br /&gt;
Create a venv virtual environment for python and install the dependent modules as shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H python3 -m venv venv&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Running the supervisor ===&lt;br /&gt;
The Supervisor controls the operation of the services specified in its configuration. To launch the supervisor, run the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart supervisor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After the supervisor is launched, after a few seconds you can observe the state of all the services it controls. All services must be in the RUNNING state:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Immediately after the installation ==&lt;br /&gt;
This completes the installation of ERP USERSIDE. Now perform the following steps:&lt;br /&gt;
* Open the system page &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://userside.mydomain.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; and login &#039;&#039;(default username: Admin, password: 1234)&#039;&#039;.&lt;br /&gt;
* Configure Websocket under: Settings - Main - WebSocket. Enable and enter the username and password of the WebStomp user you created earlier under RabbitMQ.&lt;br /&gt;
* Make main settings in the section: [[Settings_-_Main|Settings - Main]].&lt;br /&gt;
* Configure interaction with [[Supported_billings|billing]] according to the [[Setting_up_interactions_with_a_billing|instructions]].&lt;br /&gt;
* Read the instructions on the page: [[Start_EN|Where to start?]].&lt;br /&gt;
* Configure the [[UserSide_API_Key|API Key]].&lt;br /&gt;
&lt;br /&gt;
== System upgrade ==&lt;br /&gt;
We try to do our best to ensure that the likelihood of an end-to-end upgrade from any version to the latest version is successful. However, it sometimes happens that due to some ancient problems with the database structure that never prevented you from working before, a situation may arise in which an end-to-end upgrade is not possible. In this case you will have to upgrade step by step to each next latest version. For example, from 3.14.80 first to 3.15.60, then to 3.16.39, and so on.&lt;br /&gt;
&lt;br /&gt;
Before upgrading, be sure to read about all the changes you need to make to upgrade for each version that lies between yours and the one you are going to upgrade to.&lt;br /&gt;
&lt;br /&gt;
We recommend making a copy of your system to safely perform the upgrade. Refer to [[HOWTO: USERSIDE cloning]]. You can always delete the copy and start over. This is easy and safe. But if you wish to upgrade a running system, perform it at times of least stress, with time to spare for disaster recovery if something goes wrong. Always be sure to back up your database and files before upgrading. If an update is interrupted, especially during the data migration phase, there is a risk that it will be very difficult or even impossible to restore the data correctly. In general, the responsibility for having an up-to-date backup lies entirely with you.&lt;br /&gt;
&lt;br /&gt;
==== Upgrade process ====&lt;br /&gt;
We strongly recommend performing test upgrades on a [[HOWTO: USERSIDE cloning|copy of the system]].&lt;br /&gt;
&lt;br /&gt;
To perform an upgrade, run the installer in install mode and follow the instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After upgrading the USERSIDE, you should be sure to upgrade the usm_poller dependencies:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we need to restart all the services that are supervised by the supervisor and make sure that all of them start and are in the RUNNING state:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== System maintenance ==&lt;br /&gt;
To keep the system up to date and to ensure reliable operation in the future, it is recommended that you follow a few simple steps:&lt;br /&gt;
* periodically back up the database&lt;br /&gt;
* periodically create a backup copy of uploaded files (this can be done simply by archiving the /var/www/userside/var/attachments directory and the .env file)&lt;br /&gt;
* periodically monitor server performance (using htop, atop) and the RabbitMQ broker and make decisions about scaling fpm pools, kernel background processes and microservices&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
Set up periodic backups of the database and user files. Preferably at least once a day when the server is least loaded. In PostgreSQL, there are two ways to back up the database: dump and sql-script. Each of them has its own advantages and disadvantages. The first one creates a secure dump of the entire database, while the second one creates a SQL script that can restore both structure and data. We recommend referring to [https://www.postgresql.org/docs/current/app-pgdump.html documentation on how to use the pg_dump command] for a more suitable method or set of parameters for you.&lt;br /&gt;
&lt;br /&gt;
Below are two commands for creating a database backup - choose one of them and add it to your crontab:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# SQL-script&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside &amp;gt; /backup/userside.sql.gz&lt;br /&gt;
&lt;br /&gt;
# DUMP&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside &amp;gt; /backup/userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To create a minimal backup of &#039;&#039;&#039;files&#039;&#039;&#039; you can use the following command (for version 3.15 and later):&lt;br /&gt;
 sudo tar -czf /backup/userside.tgz .env common/config/settings.json var/attachments&lt;br /&gt;
These files together with the database will be enough to restore USERSIDE. But you can back up the entire /var/www/userside directory for more reliability.&lt;br /&gt;
&lt;br /&gt;
=== Restoring from a backup ===&lt;br /&gt;
The pg_restore command is used to restore from a dump. [https://postgrespro.ru/docs/postgresql/13/app-pgrestore Documentation on using pg_restore]. The psql utility is used to restore from a SQL script. [https://www.postgresql.org/docs/current/app-psql.html Documentation on using psql].&lt;br /&gt;
&lt;br /&gt;
Before restoring the database from a backup, you must be sure to stop USERSIDE.&lt;br /&gt;
&lt;br /&gt;
1. Stop cron userside and all modules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside-modules ~/cron&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Stop running background services&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Stop php-fpm from running&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only then can you proceed to restore the database from a backup copy.&lt;br /&gt;
&lt;br /&gt;
==== SQL-script ====&lt;br /&gt;
To restore a database from a backup as a SQL script, you must first recreate the database and then restore to an empty backup database:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
gunzip &amp;lt; userside.sql.gz | sudo -u postgres psql -d userside -v ON_ERROR_STOP=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DUMP ====&lt;br /&gt;
The dump contains the entire database with all its elements. Therefore, before restoring a database from a dump, it must not exist on the server - delete the database before restoring from a dump. It is also important that the database user (the owner of all items) already exists - create it before restoring if you are restoring the database on a new server where the required user does not exist yet.&lt;br /&gt;
&lt;br /&gt;
Also note that the dump structure may not be compatible between different versions of PostgreSQL. This is not necessarily the case, but it is likely.&lt;br /&gt;
&lt;br /&gt;
To restore from the dump, use the commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres pg_restore --clean --if-exists --create --exit-on-error --dbname=postgres userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the database name in the command must be &#039;&#039;&#039;postgres&#039;&#039;&#039;, because the entire database is restored from the dump, not its contents.&lt;br /&gt;
&lt;br /&gt;
==== After restoring the database ====&lt;br /&gt;
After restoring the database in any way, you must clear the ERP USERSIDE cache, as the cache now contains different data from the database. Go to the /var/www/userside directory and run the clear cache command (first, if a password is used, or second, if it is not used):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -a $US_REDIS_PASSWORD -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Restore services that were stopped before performing the backup:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mv ~/cron/* /etc/cron.d&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Run the restore command to make the system files match the database version and check the system for file integrity.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar repair&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=20372</id>
		<title>Установка</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=20372"/>
		<updated>2025-05-20T13:16:27Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Основные договорённости */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
[[Installation|en]] | [[Установка|ru]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ВНИМАНИЕ: Данная инструкция актуальна для версий ERP USERSIDE 3.19&#039;&#039;&#039;&lt;br /&gt;
* [[Установка для версии 3.18|Инструкция для версии 3.18]]&lt;br /&gt;
* [[Установка для версии 3.17|Инструкция для версии 3.11-3.17]]&lt;br /&gt;
* [[Установка для версии 3.10 и более ранних|Инструкция для версии 3.10 и ранее]].&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
В целях упрощения будут рассмотрены команды для операционной системы &#039;&#039;&#039;Linux Debian 12 (bookworm)&#039;&#039;&#039;. Для опытных системных администраторов не составит труда использовать аналогичные команды для другой операционной системы. Если же вы не чувствуете себя уверено в администрировании операционных систем, то мы рекомендуем вам использовать операционную систему &#039;&#039;&#039;Debian&#039;&#039;&#039; либо &#039;&#039;&#039;Ubuntu Server LTS&#039;&#039;&#039;. Из-за их простоты, а также по причине того, что наша техническая поддержка значительно лучше разбирается в Debian-подобных дистрибутивах. Вероятность подсказать что-либо не касающееся ERP USERSIDE, но касающееся администрирования операционной системы, будет значительно выше, если у вас будет Debian или подобный дистрибутив на его основе.&lt;br /&gt;
&lt;br /&gt;
С другой стороны, если вы опытный системный администратор и имеете навыки и опыт работы с Docker, возможно для вас будет более удобным вариант использования готового окружения на базе Docker-образов, которые мы подготовили специально, включив в них всё необходимое для работы ERP USERSIDE. В этом случае вам не придется ничего настраивать, кроме как выполнить простые настройки Docker-бандла https://github.com/userside/userside-docker.&lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Для работы ERP USERSIDE необходимы различные системные приложения и службы, такие как интерпретатор языка PHP с набором расширений, WEB-сервер, система управления базами данных и прочие. В этом разделе будут перечислены такие требования в зависимости от версии ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание, что ваша операционная система должна быть сконфигурирована с корректным часовым поясом и локалью. От этого зависит правильность отображения информации и корректность сортировки.&lt;br /&gt;
&lt;br /&gt;
Список требуемых расширений PHP содержит все расширения, не входящие в состав ядра PHP. Часть из этих расширений может поставляться вместе с основным пакетом PHP либо в составе пакета php-common, другая же часть должна быть установлена дополнительно. &lt;br /&gt;
&lt;br /&gt;
=== 3.19 (текущая стабильная) ===&lt;br /&gt;
* PHP: 8.3&lt;br /&gt;
* Расширения PHP: ctype, gd, json, libxml, mbstring, openssl, pdo, pdo_pgsql, posix, simplexml, snmp, sockets, zlib, pcntl&lt;br /&gt;
* Дополнительные расширения PHP: ldap, soap&lt;br /&gt;
* Python: &#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать.&#039;&#039;&lt;br /&gt;
* Модули Python: pip, venv&lt;br /&gt;
* PostgreSQL: 12+ (желательно 16)&lt;br /&gt;
* Redis: 5+ (желательно 7)&lt;br /&gt;
* RabbitMQ: 3.10+ (желательно 3.13)&lt;br /&gt;
* Supervisor&lt;br /&gt;
&lt;br /&gt;
== Основные договорённости ==&lt;br /&gt;
Каталог, в который устанавливается ERP USERSIDE - &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Внутри этого каталога должен быть подкаталог public, который является корневым каталогом для WEB-сервера. Если вы хотите использовать другой каталог для ERP USERSIDE, не забывайте вносить соответствующие исправления во все примеры из данной инструкции.&lt;br /&gt;
&lt;br /&gt;
Создайте каталоги:&lt;br /&gt;
 sudo mkdir -p /var/www/userside/public /var/log/usm_poller&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside /var/log/usm_poller&lt;br /&gt;
&lt;br /&gt;
Вам необходимо выделить доменное имя для ERP USERSIDE. В примерах ниже используется userside.mycompany.com, но вам необходимо будет заменить его на свое. Пропишите это доменное имя в /etc/hosts, если оно отличается от имени хоста, на котором производистя установка.&lt;br /&gt;
&lt;br /&gt;
== Установка необходимых компонентов ==&lt;br /&gt;
Сперва установите утилиты, которые будут необходимы далее в процессе установки. Они необходимы для любой верии ERP USERSIDE. Вы можете копировать строки по одной и вставлять их в командную строку вашей операционной системы.&lt;br /&gt;
&lt;br /&gt;
Следующие строки скопируйте и вставьте целиком:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/contrib-non-free.list &amp;lt;&amp;lt; EOL&lt;br /&gt;
deb http://deb.debian.org/debian/ $(lsb_release -sc) contrib non-free non-free-firmware&lt;br /&gt;
EOL&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt full-upgrade -y&lt;br /&gt;
sudo apt install -y gnupg ca-certificates lsb-release debian-archive-keyring debian-keyring libsnmp-dev snmp-mibs-downloader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
==== Альтернативный официальный репозиторий ====&lt;br /&gt;
Мы настоятельно рекомендуем использовать последнюю версию PostgreSQL, так как это всегда положительно сказывается на скорости работы. Добавьте в систему официальный репозиторий Postgres:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo install -d /usr/share/postgresql-common/pgdg&lt;br /&gt;
&lt;br /&gt;
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc&lt;br /&gt;
&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main&amp;quot; &amp;gt; /etc/apt/sources.list.d/pgdg.list&#039;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если у вас другая операционная система, вы можете найти необходимые команды для нее на [https://www.postgresql.org/download/ официальном сайте PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
&#039;&#039;&#039;Внимание!&#039;&#039;&#039; Перед установкой PostgreSQL в вашей операционной системе должна быть установлена ваша местная локаль и корректный часовой пояс! Это можно сделать и позже, но будет намного проще, если это будет сделано до установки PostgreSQL. Выполните следующую команду, чтобы убедиться, что нужная локаль присутствует:&lt;br /&gt;
 locale -a&lt;br /&gt;
&lt;br /&gt;
Если среди перечисленных нет вашей местной локали, то установите ее. Для этого достаточно отредактировать файл /etc/locale.gen убрав комментарии перед строкой (строками) с нужной локалью, а затем выполнить команду:&lt;br /&gt;
 sudo locale-gen&lt;br /&gt;
&lt;br /&gt;
Если вам нужно изменить локаль по умолчанию, то выполните:&lt;br /&gt;
 sudo dpkg-reconfigure locales&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить часовой пояс, выполните:&lt;br /&gt;
 sudo timedatectl set-timezone Europe/Kyiv&lt;br /&gt;
&lt;br /&gt;
Теперь можно перейти к установке PostgreSQL:&lt;br /&gt;
 sudo apt install -y postgresql-16 postgresql-16-postgis-3&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Создайте пользователя и базу данных для ERP USERSIDE. В примере ниже создается пользователь с именем userside и база данных с таким же именем. Если ваша локаль не uk_UA, не забудьте изменить команду. Затем к базе данных подключается расширение PostGis, необходимое для работы с географическими данными. После выполнения первой строки, вам необходимо будет дважды ввести пароль для нового пользователя - запишите этот пароль, он понадобится вам далее для установки ERP USERSIDE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres createuser userside -P&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ваш PostgreSQL установлен &#039;&#039;&#039;на другом сервере&#039;&#039;&#039;, то вам необходимо будет внести коррекции в файлы postgresql.conf и pg_hba.conf, расположенные в каталоге /etc/postgresql/16/main/. В файле postgresql.conf необходимо раскомментировать и изменить значение параметра &amp;lt;code&amp;gt;listen_addresses&amp;lt;/code&amp;gt;, указав там все IP-адреса интерфейсов сервера, на которых он может принимать подключения к PostgreSQL. В файле pg_hba.conf необходимо в самом конце добавить строку по аналогии с предыдущими, указывающую, с какого адреса может подключаться пользователь ERP USERSIDE. Но если ваш PostgreSQL расположен на том же сервере, что и USERSIDE - нет необходимости вносить какие либо корректировки в эти файлы.&lt;br /&gt;
&lt;br /&gt;
=== Redis ===&lt;br /&gt;
Стандартный репозиторий Debian 12 включает версию Redis 7.0.15. Эта версия подходит для работы ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
 sudo apt install -y redis-server&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
По умолчанию Redis принимает подключения без пароля, но мы настоятельно рекомендуем установить пароль. Так как пароль передается в открытом виде (Redis не предусматривает шифрования, т.к. делает упор на скорость обработки запросов и лишние этапы вроде шифрования не применяются), вам нужно создать действительно длинный и сложный пароль, например, используя утилиту &#039;&#039;&#039;openssl&#039;&#039;&#039; следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rand --hex 32&lt;br /&gt;
&lt;br /&gt;
На выходе вы получите случайный набор из 32 байт в 16-ричном виде, который и будете использовать в качестве пароля. Далее нужно будет вместо слова &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; подставить эту сгенерированную строку. Запишите его. Далее в настройках вы будете указывать эту строку как пароль Redis.&lt;br /&gt;
&lt;br /&gt;
Укажите полученный хэш парольной фразы в конфигурационном файле Redis:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^.*requirepass .*@requirepass MYPASSWORDHERE@g&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
где вместо &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; укажите хэш парольной фразы поулченый ранее.&lt;br /&gt;
&lt;br /&gt;
Также необходимо отключить таймаут (на некоторых версиях Redis он включен):&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^timeout .*@timeout 0@&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
Перезапустите Redis и убедитесь, что он работает (в ответ должны получить PONG):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart redis&lt;br /&gt;
redis-cli -h 127.0.0.1 -p 6379 -a MYPASSWORDHERE ping&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RabbitMQ ===&lt;br /&gt;
Стандартный репозиторий Debian 12 включает старую версию RabbitMQ 3.10. Вы можете использовать ее — она поддерживается. Однако, эта версия относительно старая и лучшим вариантом будет установить новую версию из альтернативных репозиториев. На [https://www.rabbitmq.com/install-debian.html официальном сайте RabbitMQ] находится достаточно подробная информация по установке RabbitMQ для каждой операционной системы.&lt;br /&gt;
&lt;br /&gt;
==== Добавление альтернативных репозиториев ====&lt;br /&gt;
Следующий блок скопируйте и вставьте целиком в командную строку&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-server-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/rabbitmq.list &amp;lt;&amp;lt;EOF&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
Убедитесь, что в /etc/hosts есть запись для имени вашего хоста. Отсутствие такрой записи (например, если вы изменили имя хоста после инсталляции) является основной ошибкой, возникающей при установке RabbitMQ. Так что лучше еще раз убедитесь, что запись соответствующая имени хосту имеется.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y erlang-base \&lt;br /&gt;
                    erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \&lt;br /&gt;
                    erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \&lt;br /&gt;
                    erlang-runtime-tools erlang-snmp erlang-ssl \&lt;br /&gt;
                    erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl&lt;br /&gt;
&lt;br /&gt;
sudo apt install rabbitmq-server -y --fix-missing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка необходимых дополнений ====&lt;br /&gt;
Следующие две строки выполняйте по одной за раз!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_management --offline&lt;br /&gt;
&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_web_stomp --offline&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Скопируйте и вставьте целиком следующий блок:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/rabbitmq/rabbitmq.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
listeners.tcp.default = 5672&lt;br /&gt;
&lt;br /&gt;
web_stomp.port = 15674&lt;br /&gt;
web_stomp.cowboy_opts.max_keepalive = 60&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать пользователей. Мы рекомендуем использовать &#039;&#039;&#039;три различных пользователя&#039;&#039;&#039;: для администрирования сервера (полные права), для userside и модулей (полные права но без административных) и пользователя web-stomp для websocket (минимальные права на чтение определенных объектов брокера). Но вы можете создать только два: администратора, который также будете использоваться для USERSIDE, и пользователя для websocket. Это обязательно должны быть минимум два разных пользователя, так как пароль для websocket пользователя передается в браузер и может быть легко прочитан пользователем. Далее будет показан пример для рекомендуемых трех пользователей. &lt;br /&gt;
&lt;br /&gt;
Создайте &#039;&#039;&#039;пользователя для администрирования&#039;&#039;&#039; RabbitMQ. В данном примере используется имя пользователя &#039;&#039;&#039;admin&#039;&#039;&#039; и пароль &#039;&#039;&#039;пароль_администратора&#039;&#039;&#039;. Пользователю сразу после создания присваивается тэг &amp;lt;code&amp;gt;administrator&amp;lt;/code&amp;gt;, наделяющий пользователя максимальными правами администратора и затем устанавливаются разрешения для vhost &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; позволяющие полный доступ к конфигурированию, записи и чтению всего в пределах этого vhost*.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;admin&amp;quot; &amp;quot;пароль_администратора&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;admin&amp;quot; &amp;quot;administrator&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;admin&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создайте &#039;&#039;&#039;пользователя, от имени которого будут работать ERP USERSIDE&#039;&#039;&#039; и модули. Пример для имени пользователя &#039;&#039;&#039;userside&#039;&#039;&#039; (наделять админскими правами этого пользователя не нужно):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;userside&amp;quot; &amp;quot;пароль_системы&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;userside&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;websocket&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Создайте &#039;&#039;&#039;пользователя WebSTOMP&#039;&#039;&#039;. Он понадобится для использования уведомлений через WebSocket. Вместо &#039;&#039;&#039;websock-user&#039;&#039;&#039; вы можете указать другое имя пользователя. Вместо &#039;&#039;&#039;пароль_websocket&#039;&#039;&#039; укажите свой пароль, но этот пароль будет передаваться в открытом виде в браузер, так что не делайте его похожим на остальные пароли:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;websock-user&amp;quot; &amp;quot;пароль_websocket&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внимание! Имя пользователя и пароль WebSTOMP вам нужно будет указать в настройках в интерфейсе USERSIDE (Меню: Настройки - Основные - Websocket).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;* vhost - это виртуальный хост внутри RabbitMQ, позволяющий разграничить различные варианты использования одного и того же сервера разными приложениями. Как, например, разные базы данных на одном сервере СУБД. vhost по умолчанию имеет имя / и почти всегда вам этого достаточно. Но если вы планируете, например, запустить несколько копий ERP USERSIDE на одном сервере, то для каждой копии вам нужно будет создать свой vhost и, соответственно, пользователей для него. Подробней обратитесь к [https://www.rabbitmq.com/vhosts.html официальному руководству].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Перезапустите службу rabbitmq:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rabbitmq-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Управление ====&lt;br /&gt;
Одна из команд, приведенных выше, устанавливает в RabbitMQ модуль управления, предоставляющий удобный WEB-интерфейс для мониторинга, диагностики и управления сервером RabbitMQ. При помощи этого модуля можно осуществлять мониторинг сервера, следить за количеством сообщений в очередях и другими состояниями. Всё это можно делать и используя консольную утилиту &amp;lt;code&amp;gt;rabbitmqctl&amp;lt;/code&amp;gt;, но использование WEB-интерфейса может быть значительно наглядней и удобней.&lt;br /&gt;
&lt;br /&gt;
По умолчанию WEB-интерфейс управления доступен по адресу http://userside.mycompany.com:15672. Рекомендуем использовать фаервол, чтобы ограничить доступ к этому интерфейсу управления.&lt;br /&gt;
&lt;br /&gt;
Подробнее о модуле управления можно [https://www.rabbitmq.com/management.html прочитать на официальном сайте RabbitMQ].&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
==== Альтернативный репозиторий ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
Выполните следующие команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы планируете использовать LDAP, необходимо установить расширение php-ldap:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-ldap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы планируете использовать отправку SMS используя TurboSMS, также понадобится расширение php-soap:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-soap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Далее приведены команды, вносящие изменения в файлы конфигурации.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;request_terminate_timeout =.*@request_terminate_timeout = 300@&amp;quot; /etc/php/8.3/fpm/pool.d/www.conf&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NGINX ===&lt;br /&gt;
==== Альтернативный официальный репозиторий ====&lt;br /&gt;
Версия NGINX, поставляемая в репозитории Debian, полностью подходит для использования и нет необходимости в добавлении альтернативного репозитория. Однако, если вам хочется всегда иметь последнюю версию, то выполните следующие строки, чтобы добавить в операционную систему официальный репозиторий nginx:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \&lt;br /&gt;
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
echo &amp;quot;deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \&lt;br /&gt;
http://nginx.org/packages/debian `lsb_release -cs` nginx&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/sources.list.d/nginx.list&lt;br /&gt;
echo -e &amp;quot;Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/preferences.d/99nginx&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если у вас другая операционная система, вы можете найти необходимые команды для нее на официальном сайте NGINX: https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^user.*;@user www-data www-data;@&amp;quot; &amp;quot;/etc/nginx/nginx.conf&amp;quot;&lt;br /&gt;
sudo systemctl restart nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующий пример настройки подразумевает, что ERP USERSIDE будет установлен в стандартный каталог системы &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Если вы желаете установить ERP USERSIDE в другой каталог, пожалуйста, не забывайте исправлять его во всех последующих примерах. Чтобы не ошибиться, мы рекомендуем использовать именно каталог &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь отредактируйте файл /etc/nginx/conf.d/default.conf. Либо удалите его и создайте файл с именем /etc/nginx/conf.d/userside.conf. В любом случае, не зависимо от вашего выбора, содержимое файла должно быть следующим (вместо userside.mycompany.com укажите свое доменное имя):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen       80 default_server;&lt;br /&gt;
    server_name  userside.mycompany.com;&lt;br /&gt;
    charset      utf-8;&lt;br /&gt;
    client_max_body_size 100M;&lt;br /&gt;
&lt;br /&gt;
    access_log  /var/log/nginx/userside-access.log;&lt;br /&gt;
    error_log   /var/log/nginx/userside-error.log;&lt;br /&gt;
&lt;br /&gt;
    root   /var/www/userside/public;&lt;br /&gt;
    index  index.php;&lt;br /&gt;
&lt;br /&gt;
    location = /favicon.ico { access_log off; log_not_found off; }&lt;br /&gt;
    location = /robots.txt  { access_log off; log_not_found off; }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~* ^.+\.(css|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {&lt;br /&gt;
        access_log    off;&lt;br /&gt;
        log_not_found off;&lt;br /&gt;
        expires       max;&lt;br /&gt;
        add_header    Pragma public;&lt;br /&gt;
        add_header    Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ \.php$ {&lt;br /&gt;
        try_files     $uri =404;&lt;br /&gt;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
        fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
        fastcgi_index index.php;&lt;br /&gt;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
        fastcgi_read_timeout 300;&lt;br /&gt;
        include       fastcgi_params;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location /ws {&lt;br /&gt;
        proxy_pass http://127.0.0.1:15674/ws;&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header Connection &amp;quot;Upgrade&amp;quot;;&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ /\.ht { deny  all; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также, возможно, вы захотите настроить SSL и что-либо еще. Эта тема выходит за рамки данной инстуркции.&lt;br /&gt;
&lt;br /&gt;
Если Вы установили RabbitMQ &#039;&#039;&#039;на другом сервере&#039;&#039;&#039;, либо изменили значение порта WebSTOMP с 15674 на какой-то другой, то укажите IP-адрес сервера с RabbitMQ и номер порта в строке &amp;lt;code&amp;gt;proxy_pass http://127.0.0.1:15674/ws;&amp;lt;/code&amp;gt;. Протокол должен оставаться http. Путь должен оставаться /ws.&lt;br /&gt;
&lt;br /&gt;
Проверьте конфигурацию и если она в порядке перезагрузите nginx:&lt;br /&gt;
 sudo nginx -t &amp;amp;&amp;amp; sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Если у вас на хосте неподдерживаемая версия (&amp;quot;end-of-life&amp;quot;), то нужно обязательно [[Python-update|установить дополнительно]] более свежую версию Python.&lt;br /&gt;
&lt;br /&gt;
==== Установка необходимых пакетов ====&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv libffi-dev pkg-config&lt;br /&gt;
&lt;br /&gt;
=== Supervisor ===&lt;br /&gt;
 sudo apt install -y supervisor&lt;br /&gt;
&lt;br /&gt;
== Загрузка и запуск инсталлятора ==&lt;br /&gt;
&lt;br /&gt;
См. также: [[Инсталлятор|Справку по инсталлятору]]&lt;br /&gt;
&lt;br /&gt;
1. перейти в каталог системы&lt;br /&gt;
 cd /var/www/userside&lt;br /&gt;
&lt;br /&gt;
2. загрузить скрипт-инсталлятор&lt;br /&gt;
 sudo -u www-data php -r &amp;quot;copy(&#039;https://my.userside.eu/install&#039;, &#039;userside_install.phar&#039;);&amp;quot; &lt;br /&gt;
&lt;br /&gt;
3. запустить инсталлятор&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
В процессе работы инсталлятор проверяет соответствие техническим требованиям, запрашивает параметры доступа и проверяет соединения со службами сервера.&lt;br /&gt;
&lt;br /&gt;
Вы можете ввести любой доступный вам номер версии ERP USERSIDE для установки. Для этого можете ввести порядковый номер версии из списка (он содержит только последние версии каждой ветки) либо ввести номер версии целиком, если ее нет в списке.&lt;br /&gt;
&lt;br /&gt;
По окончанию работы инсталлятора будет выведено сообщение об успешной установке.&lt;br /&gt;
&lt;br /&gt;
Если вы произвели установку не от имени пользователя веб-сервера, то обязательно после окончания установки сделайте его владельцем всех файлов userside рекурсивно!&lt;br /&gt;
&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside&lt;br /&gt;
 sudo chmod -R u=rwX,g=rwX,o=r /var/www/userside&lt;br /&gt;
&lt;br /&gt;
== Настройка после установки ==&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация системных служб ===&lt;br /&gt;
После установки необходимо скопировать примеры конфигурационных файлов системных служб и, при необходимости, настроить их (например, указать путь к каталогу userside, если он отличается от /var/www/userside). Выполните команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp etc/us-core-worker.conf-example /etc/supervisor/conf.d/us-core-worker.conf&lt;br /&gt;
sudo cp microservice/poller/etc/usm_poller.conf-example /etc/supervisor/conf.d/usm_poller.conf&lt;br /&gt;
sudo cp etc/logrotate-example /etc/logrotate.d/userside&lt;br /&gt;
sudo cp microservice/poller/etc/logrotate-example /etc/logrotate.d/usm_poller&lt;br /&gt;
sudo cp etc/crontab-example /etc/cron.d/userside&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка необходимых зависимостей для usm_poller ===&lt;br /&gt;
Создайте виртуальное окружение venv для python и установите зависимые модули, как показано далее:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H python3 -m venv venv&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Запуск супервизора ===&lt;br /&gt;
Супервизор контролирует работу служб, указанных в его конфигурации. Для запуска супервизора выполните:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart supervisor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После запуска супервизора, спустя несколько секунд можно понаблюдать за состоянием всех контролируемых им служб. Все службы должны быть в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сразу после установки ==&lt;br /&gt;
На этом установка ERP USERSIDE закончена. Теперь выполните следующие шаги:&lt;br /&gt;
* Откройте страницу системы &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://userside.mydomain.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; и выполните вход &#039;&#039;(по умолчанию имя пользователя: Admin, пароль: 1234)&#039;&#039;.&lt;br /&gt;
* Выполните настройку Websocket в разделе: Настройка - Основная - WebSocket. Включите и впишите имя пользователя и пароль WebStomp пользователя, которого вы создавали ранее в разделе RabbitMQ.&lt;br /&gt;
* Выполните основные настройки в разделе: [[Настройка - Основная|Настройка - Основная]].&lt;br /&gt;
* Настройте взаимодействие с [[Поддерживаемые биллинги|биллингом]] в соответствии с [[Настройка взаимодействия с биллингом|инструкциями]].&lt;br /&gt;
* Ознакомьтесь с инструкциями на странице: [[С чего начать?]].&lt;br /&gt;
* Настройте [[UserSide API Key|API-ключ]].&lt;br /&gt;
&lt;br /&gt;
== Обновление системы ==&lt;br /&gt;
Мы стараемся делать все возможное, чтобы вероятность сквоздного обновления с любой версии до последней версии было успешным. Однако, иногда бывает так, что из-за каки-то старинных проблем со структурой базы данных, которые никогда не мешали работать раньше, может возникнуть ситуация, при которой сквоздное обновление невозможно. В таком случае вам придется обновляться поэтапно на каждую следующую последнюю версию. Например, с 3.14.80 сначала на 3.15.60, затем на 3.16.39 и так далее.&lt;br /&gt;
&lt;br /&gt;
Перед обновлением обязательно прочитайте обо всех изменениях, которые необходимо выполнить для обновления для каждой версии, которая лежит между вашей и той, на которую вы собираетесь обновиться.&lt;br /&gt;
&lt;br /&gt;
Мы рекомендуем сделать копию системы для безопасного проведения обновления. Обратитесь к разделу [[HOWTO: Клонирование USERSIDE]]. Вы всегда можете удалить копию и начать сначала. Это просто и безопасно. Но если вы желаете обновить работающую систему, то выполняйте его в моменты наименьшей нагрузки с запасом по времени, необходимым для аварийного восстановления, если вдруг что-то пойдет не так. Всегда обязательно делайте резервную копию базы данных и файлов перед обновлениями. Если обновление будет прервано, особенно на этапе миграции данных, то есть риск того, что восстановить корректно данные будет очень непросто или даже невозможно. В общем, ответственность за наличие актуальной резервной копии лежит целиком на вас.&lt;br /&gt;
&lt;br /&gt;
==== Процесс обновления ====&lt;br /&gt;
Мы настоятельно рекомендуем выполнять тестовые обновления на [[HOWTO:_Клонирование_USERSIDE|копии системы]].&lt;br /&gt;
&lt;br /&gt;
Для проведения обновления запустите инсталлятор в режиме install и следуйте инструкциям:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После обновления USERSIDE нужно обязательно обновить зависимости usm_poller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно перезапустить все службы, которолируемые супервизором и проследить чтобы все они запустились и были в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание системы ==&lt;br /&gt;
Для поддержания системы в рабочем состоянии и обеспечения надежной ее работы в будущем рекомендуется выполнять несколько простых дейсвтий:&lt;br /&gt;
* периодически создавать резервную копию базы данных&lt;br /&gt;
* периодически создавать резервную копию загруженных файлов (это можно сделать просто архивируя каталог /var/www/userside/var/attachments и файл .env)&lt;br /&gt;
* периодически наблюдать за производительностью сервера (при помощи htop, atop) и брокера RabbitMQ и принимать решения о масштабировании пулов fpm, фоновых процессов ядра и микросервисов&lt;br /&gt;
&lt;br /&gt;
=== Резервное копирование ===&lt;br /&gt;
Установите периодическое резервное копирование базы данных и пользовательских файлов. Желательно минимум раз в сутки в моменты наименьшей нагрузки на сервер. В PostgreSQL существует два способа создать резервную копию базы данных: dump и sql-script. У каждого из них есть свои преимущества и недостатки. Первый создает безопасный дамп базы данных целиком, а второй создает SQL-скрипт, выполняя который можно восстановить как структуру так и данные. Рекомендуем обратиться к [https://www.postgresql.org/docs/current/app-pgdump.html документации по использованию команды pg_dump] для выбора более подходящего для вас способа или набора параметров.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены две команды для создания резервной копии базы данных — выбирайте одну из них и добавляйте в ваш crontab:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# SQL-script&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside &amp;gt; /backup/userside.sql.gz&lt;br /&gt;
&lt;br /&gt;
# DUMP&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside &amp;gt; /backup/userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для создания минимальной резервной копии &#039;&#039;&#039;файлов&#039;&#039;&#039; можно использовать следующую команду (для версии 3.15 и новее):&lt;br /&gt;
 sudo tar -czf /backup/userside.tgz .env common/config/settings.json var/attachments&lt;br /&gt;
Этих файлов вместе с базой данных будет достаточно для восстановления работы USERSIDE. Но вы можете выполнять резервное копирование всего каталога /var/www/userside для большей надежности.&lt;br /&gt;
&lt;br /&gt;
=== Восстановление из резервной копии ===&lt;br /&gt;
Для восстановления из дампа используется команда pg_restore. [https://postgrespro.ru/docs/postgresql/13/app-pgrestore Документация по использованию pg_restore]. Для восстановления из SQL-скрипта используется утилита psql. [https://www.postgresql.org/docs/current/app-psql.html Документация по использованию psql].&lt;br /&gt;
&lt;br /&gt;
Перед восстановлением базы данных из резервной копии нужно обязательно остановить работу USERSIDE.&lt;br /&gt;
&lt;br /&gt;
1. Остановить cron userside и всех модулей&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside-modules ~/cron&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Остановить работу фоновых служб&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Остановить работу php-fpm&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Только после этого можно приступать к восстановлению базы данных из резервной копии.&lt;br /&gt;
&lt;br /&gt;
==== SQL-script ====&lt;br /&gt;
Для восстановления БД из резервной копии в виде SQL-скрипта, сначала нужно пересоздать базу данных, а затем восстановить в пустую базу данных резервную копию:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
gunzip &amp;lt; userside.sql.gz | sudo -u postgres psql -d userside -v ON_ERROR_STOP=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DUMP ====&lt;br /&gt;
Дамп содержит целиком базу данных со всеми ее элементами. Поэтому перед восстановлением базы данных из дампа её не должно существовать на сервере — удалите базу данных перед восстановлением из дампа. Также важно, чтобы пользователь базы данных (владелец всех элементов) уже существовал — создайте его перед восстановлением, если вы восстанавливаете базу данных на новом сервере, где нужного пользователя еще нет.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание, что структура дампа может быть несовместима между разными версиями PostgreSQL. Это не обязательно так, но вполне вероятно.&lt;br /&gt;
&lt;br /&gt;
Для восстановления из дампа используйте команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres pg_restore --clean --if-exists --create --exit-on-error --dbname=postgres userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Обратите внимание, что имя базы данных в команде обязательно должно быть &#039;&#039;&#039;postgres&#039;&#039;&#039;, так как из дампа восстанавливается вся база данных целиком, а не ее содержимое.&lt;br /&gt;
&lt;br /&gt;
==== После восстановления базы данных ====&lt;br /&gt;
После восстановления базы данных любым способом, необходимо очистить кэш ERP USERSIDE, т.к. в кэше теперь находятся данные, отличные от данных в базе. Перейтите в каталог /var/www/userside и выполните команду очистки кэша (первую, если используется пароль или вторую, если не используется):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -a $US_REDIS_PASSWORD -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Восстановите работу служб, которые были остановлены перед выполнением резервной копии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mv ~/cron/* /etc/cron.d&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Выполните команду восстановления, чтобы файлы системы соответствовали версии базы данных и проверить систему на целостность файлов.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar repair&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=FAQ._Error_%22ICMP_Socket_permission_error:_allow_ICMP_without_root_privileges.%22&amp;diff=20371</id>
		<title>FAQ. Error &quot;ICMP Socket permission error: allow ICMP without root privileges.&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=FAQ._Error_%22ICMP_Socket_permission_error:_allow_ICMP_without_root_privileges.%22&amp;diff=20371"/>
		<updated>2025-05-19T11:24:23Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[FAQ._Error_&amp;quot;ICMP_Socket_permission_error:_allow_ICMP_without_root_privileges.&amp;quot;|en]] | [[FAQ._Ошибка_&amp;quot;ICMP_Socket_permission_error:_allow_ICMP_without_root_privileges.&amp;quot;|ru]]&lt;br /&gt;
&lt;br /&gt;
Error with the text &amp;lt;code&amp;gt;ICMP Socket permission error: allow ICMP without root privileges.&amp;lt;/code&amp;gt; can occur in usm_poller since version 3.19.18 and is related to the fact that the operating system does not allow using ICMP for an unprivileged user. Since version 3.19.17, changes have been made to usm_poller to allow this service to be run as an ordinary user, which has a positive effect on security. If you encounter such an error, you should do the following:&lt;br /&gt;
&lt;br /&gt;
1. Stop poller&#039;s service:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo supervisorctl stop usm_poller:*&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Change the value of the &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; parameter in the service configuration file /etc/supervisor/conf.d/usm_poller.conf to www-data (or whatever you prefer, but not root)&lt;br /&gt;
3. Delete the log file (or change its owner to the same as in step 2) /var/log/usm_poller/poller.log&lt;br /&gt;
4. Reread the supervisor configuration (this action will also restart the service), then verify that the service has started and all copies are in the RUNNING state:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo systemctl restart supervisor&lt;br /&gt;
sudo supervisorctl status&amp;lt;/pre&amp;gt;&lt;br /&gt;
(It is possible that a pause of 10...15 seconds will be required between commands).&lt;br /&gt;
&lt;br /&gt;
Now go back to the ERP USERSIDE interface and check if the error is still present. If the error is still present (this may be on relatively old operating systems), then you need to change the value of parameter &amp;lt;code&amp;gt;net.ipv4.ping_group_range&amp;lt;/code&amp;gt; in sysctl. &lt;br /&gt;
&lt;br /&gt;
To do this, execute the commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;net.ipv4.ping_group_range = 0 2147483647&#039; | sudo tee -a /etc/sysctl.conf&lt;br /&gt;
sudo sysctl -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you experience an invalid argument error, then edit the /etc/sysctl.conf file and change the value of 2147483647 to 65535 and execute again:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sysctl -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now go back to the ERP USERSIDE interface and check if the error is still present. If the error is still present, please contact technical support.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=FAQ._%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%22ICMP_Socket_permission_error:_allow_ICMP_without_root_privileges.%22&amp;diff=20370</id>
		<title>FAQ. Ошибка &quot;ICMP Socket permission error: allow ICMP without root privileges.&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=FAQ._%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%22ICMP_Socket_permission_error:_allow_ICMP_without_root_privileges.%22&amp;diff=20370"/>
		<updated>2025-05-19T11:24:13Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[FAQ._Error_&amp;quot;ICMP_Socket_permission_error:_allow_ICMP_without_root_privileges.&amp;quot;|en]] | [[FAQ._Ошибка_&amp;quot;ICMP_Socket_permission_error:_allow_ICMP_without_root_privileges.&amp;quot;|ru]]&lt;br /&gt;
&lt;br /&gt;
Ошибка с текстом &amp;lt;code&amp;gt;ICMP Socket permission error: allow ICMP without root privileges.&amp;lt;/code&amp;gt; может возникать в usm_poller начиная с версии 3.19.18 и связана она с тем, что операционная система не разрешает использовать ICMP для непривилегированного пользователя. Начиная с версии 3.19.17 были внесены изменения в usm_poller, позволяющие запускать эту службу от имени простого пользователя, что положительно сказывается на безопасности. Если вы столкнулись с такой ошибкой, то вам нужно проделать следующее:&lt;br /&gt;
&lt;br /&gt;
1. Остановите службу поллера:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo supervisorctl stop usm_poller:*&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Измените значение параметра &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; в файле конфигурации службы /etc/supervisor/conf.d/usm_poller.conf на www-data (или любой другой на ваше усмотрение, но не root)&lt;br /&gt;
3. Удалите лог-файл (или измените его владельца на такого же, как в п.2) /var/log/usm_poller/poller.log&lt;br /&gt;
4. Перечитайте конфигурацию супервизора (это действие также перезапустит и службу), затем проверьте, что служба запустилась и все ее копии находятся в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo systemctl restart supervisor&lt;br /&gt;
sudo supervisorctl status&amp;lt;/pre&amp;gt;&lt;br /&gt;
(возможно между командами придется выждать паузу в 10...15 секунд).&lt;br /&gt;
&lt;br /&gt;
Теперь вернитесь в интерфейс ERP USERSIDE и проверьте, не пропала ли ошибка. Если ошибка все еще присутствует (это может быть на относительно старых операционных системах), то нужно изменить значение параметра &amp;lt;code&amp;gt;net.ipv4.ping_group_range&amp;lt;/code&amp;gt; в sysctl. &lt;br /&gt;
&lt;br /&gt;
Для этого выполните команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;net.ipv4.ping_group_range = 0 2147483647&#039; | sudo tee -a /etc/sysctl.conf&lt;br /&gt;
sudo sysctl -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы столкнулись с ошибкой invalid argument, то отредактируйте файл /etc/sysctl.conf и измените значение 2147483647 на 65535 и снова выполните:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sysctl -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь вернитесь в интерфейс ERP USERSIDE и проверьте, не пропала ли ошибка. Если ошибка все еще присутствует, обратитесь в техподдержку.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Usm_poller_(as_satellite)_EN&amp;diff=20368</id>
		<title>Usm poller (as satellite) EN</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Usm_poller_(as_satellite)_EN&amp;diff=20368"/>
		<updated>2025-05-19T06:55:58Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Usm_poller_(as_satellite) EN|en]] | [[Usm_poller_(as_satellite)|ru]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
Since version 3.18 of USERSIDE, special &#039;&#039;&#039;usm_poller&#039;&#039;&#039; services are used to interact with telecommunications equipment, running in multiple copies on the operator&#039;s servers to increase availability, fault tolerance, and load balancing between servers. Special messages containing network jobs are passed between the USERSIDE kernel and these services, which are distributed to all usm_poller services via the RabbitMQ message broker, and in the same way report job results to the USERSIDE kernel via the service broker. The use of tools more suitable for network communication, as well as the asynchrony introduced into the system, allows the use of previously unavailable communication protocols, speeds up many communication scenarios over existing protocols, and does not make the user wait for the result in an open browser window.&lt;br /&gt;
&lt;br /&gt;
Taking into account peculiarities of usm_poller services launching, it is possible to use these pollers instead of usm_satellite proxy modules, which were used in USERSIDE versions 3.13-3.17 for proxying commands of interaction with equipment between USERSIDE kernel and unavailable equipment via HTTP-API protocol. To do this, a simple setting was added to the usm_poller modules to identify a particular instance of usm_poller as a &amp;quot;satellite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Since USERSIDE 3.18, the usm_poller module has been used as a &amp;quot;satellite&amp;quot; on remote nodes.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
To run usm_poller on a remote communication node requires Docker (and optionally Compose plugin v2) or Python3 of any currently supported version and supervisor to run without Docker.&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
As the system is developed, there may be a situation where a new version of USERSIDE is not compatible with an older version of usm_poller. For example, when changes are made to the API or data structure or whatever.&lt;br /&gt;
&lt;br /&gt;
All versions of USERSIDE from 3.18.0 up to and including 3.18.19 work with usm_poller versions 3.18.0 up to and including 3.18.7.&lt;br /&gt;
&lt;br /&gt;
USERSIDE versions 3.18.20 and newer require a minimum usm_poller version of 3.18.8.&lt;br /&gt;
&lt;br /&gt;
== Installing, configuring and running using Docker ==&lt;br /&gt;
Despite the fact that it is also possible to run without Docker, we strongly recommend using a Docker container to run Poller as a satellite. If for some reason you can&#039;t use Docker, below are instructions on how to run without Docker.&lt;br /&gt;
&lt;br /&gt;
=== Installing Docker and Compose plugin ===&lt;br /&gt;
On most supported operating systems, running the command:&lt;br /&gt;
 curl -fsSL get.docker.com | sh&lt;br /&gt;
This command will install the latest versions of Docker Engine and Compose Plugin on most supported operating systems. If this is not possible for your system, the command will provide recommendations for manual installation. You can also refer to the official [https://docs.docker.com/engine/install/ installation instructions] on the Docker project website. Note that the version of DockerIO that came with some Linux distributions is considered deprecated and is not suitable. At the same time, the Docker Desktop version designed for desktop operating systems is supported and you will be able to use it as well, but it is better to prefer Docker Engine (the server version of Docker).&lt;br /&gt;
&lt;br /&gt;
If you need to run commands to Docker without using sudo, then add your user to the docker group with the following commands:&lt;br /&gt;
 sudo gpasswd -a $USER docker&lt;br /&gt;
 newgrp docker&lt;br /&gt;
&lt;br /&gt;
Now verify that everything has installed correctly by running the commands:&lt;br /&gt;
 docker version&lt;br /&gt;
 docker compose version&lt;br /&gt;
&lt;br /&gt;
=== Organisation of Poller-Broker communication ===&lt;br /&gt;
When using usm_satellite, the server was the module itself, while the client was the Userside kernel, which made HTTP-API requests to usm_satellite.&lt;br /&gt;
&lt;br /&gt;
Now the server for all message consumers is the RabbitMQ broker, regardless of whether the application sends or receives a message. This means that the remote server on which usm_poller is installed as a satellite must have network access to the RabbitMQ broker installed on the Userside server (or on a separate server if that was necessary). At the same time, the remote server can now have no open ports at all, which increases its security.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Usm poller as satellite connection.png|900px|безрамки|центр]]&lt;br /&gt;
&lt;br /&gt;
TCP port 5672 (AMQP protocol) is used by default to connect to the RabbitMQ broker. We recommend that you only access this port from the external network from IP addresses you know, which is the IP address of the remote satellite server on which you are running usm_poller.&lt;br /&gt;
&lt;br /&gt;
If you are also using USERSIDE in the Docker bundle, then uncomment the line in the rabbitmq service ports responsible for broadcasting port 5672 (signed in the comments as AMQP) and restart the Docker bundle.&lt;br /&gt;
&lt;br /&gt;
Alternatively, port 5672 (AMQP) can be port 5671 (AMQPS), which is not used by default. You can configure AMQPS (TLS) yourself in addition to port 5672 (AMQP). Instructions on how to configure TLS are available [https://rabbitmq.com/ssl.html in the official RabbitMQ documentation].&lt;br /&gt;
&lt;br /&gt;
Since messages transmitted between the RabbitMQ broker and its consumers are transmitted in the plain form, the recommended option for organising communication is to use tunnelling with encryption between RabbitMQ nodes and a remote server with usm_poller.&lt;br /&gt;
&lt;br /&gt;
=== Launching Docker containers usm_poller ===&lt;br /&gt;
The recommended way to start is to use the compose plugin. In this case, the entire configuration of the container is written in a special compose file, which makes it easier to use later.&lt;br /&gt;
&lt;br /&gt;
You can create the compose file anywhere, but to avoid losing its location in the future, we recommend to put it, for example, in /opt/usm_poller. Create a directory:&lt;br /&gt;
 sudo mkdir -p /opt/usm_poller&lt;br /&gt;
&lt;br /&gt;
Then create a file named compose.yaml in this directory with the following contents (note the indents - they matter):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  poller:&lt;br /&gt;
    image: erpuserside/usm_poller:3.19&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    environment:&lt;br /&gt;
      US_AMQP_DSN: amqp://user_name:password@host_address_rabbitmq:5672/%2f&lt;br /&gt;
      USM_POLLER_SATELLITE_ID: your_satellite_id&lt;br /&gt;
    deploy:&lt;br /&gt;
      replicas: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To work with USERSIDE 3.19.x, the erpuserside/usm_poller:3.19 image is used. The usm_poller version must be compatible with the specific version of USERSIDE (see above).&lt;br /&gt;
&lt;br /&gt;
The value for &amp;lt;code&amp;gt;US_AMQP_DSN&amp;lt;/code&amp;gt; is the URL string, which you can copy from the &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; file located in the root directory with USERSIDE: /var/www/userside, but instead of the RabbitMQ IP address specified there, you need to specify the IP address where the RabbitMQ server is accessible (depends on which access method you use).&lt;br /&gt;
&lt;br /&gt;
The value for &amp;lt;code&amp;gt;USM_POLLER_SATELLITE_ID&amp;lt;/code&amp;gt; is the &amp;quot;satellite&amp;quot; identifier, which you can get from the page: Settings - Main - Equipment - Satellite Configuration.&lt;br /&gt;
&lt;br /&gt;
Save the composer.yaml file and run it for a test as follows:&lt;br /&gt;
 docker compose up&lt;br /&gt;
&lt;br /&gt;
You should see the image being loaded, then the usm_poller Docker container being launched and connecting to the RabbitMQ server via AMQP. If the connection to the RabbitMQ server is correct, stop the container with Ctrl+C, change the number of replicas (replicas value) to 5 and start the containers in the background:&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
If five copies of the container will not be enough, increase this value. To determine if there are enough containers, open the RabbitMQ WEB console using the http protocol, the domain address of your userside and port 15672. For example, like this: http://userside.mycompany.com:15672 and then go to the Queues page. Find a queue there named &amp;lt;code&amp;gt;usm_poller-sat-7&amp;lt;/code&amp;gt; (where 7 is the satellite ID), open it, and watch the queue fill up. The point is to ensure that pollers have time to pick up assignments within your normal time limit. Ideally, the queue should be almost empty at all times (tasks are immediately given to a free poller), or the number of messages should reach zero (the number of pollers is sufficient). You should not increase the number of replicas just for fun - this will lead to unnecessary overhead and may even end up negatively affecting performance if system resources are scarce.&lt;br /&gt;
&lt;br /&gt;
After changing the number of replicas, you need to restart with the command:&lt;br /&gt;
 docker compose restart&lt;br /&gt;
&lt;br /&gt;
You can check the status of the containers with the command:&lt;br /&gt;
 docker compose ps&lt;br /&gt;
&lt;br /&gt;
To stop all containers, use the command:&lt;br /&gt;
 docker compose stop&lt;br /&gt;
&lt;br /&gt;
To upgrade the version of a Docker image within its version (this should preferably be done after each USERSIDE upgrade), you must first stop the containers, then edit the file to specify the new usm_poller version number and then start them in the background again:&lt;br /&gt;
 docker compose down&lt;br /&gt;
 nano compose.yaml&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
To avoid clogging the system with unused images, you can delete them by specifying the entire image with the version:&lt;br /&gt;
 docker rmi erpuserside/usm_poller:3.19.2&lt;br /&gt;
&lt;br /&gt;
If you think something isn&#039;t working properly, look at the container logs with the command:&lt;br /&gt;
 docker compose logs poller&lt;br /&gt;
&lt;br /&gt;
Or you can add the &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt; option to follow the logs in real time.&lt;br /&gt;
&lt;br /&gt;
It is possible to start a single container without using compose, by executing just one command (consisting of several lines). However, although this method is simpler, it is not as convenient for later use:&lt;br /&gt;
 docker run --detach \&lt;br /&gt;
   --restart unless-stopped \&lt;br /&gt;
   --name usm_poller \&lt;br /&gt;
   --env US_AMQP_DSN=amqp://user_name:password@host_address_rabbitmq:5672/%2f \&lt;br /&gt;
   --env USM_POLLER_SATELLITE_ID=your_satellite_id \&lt;br /&gt;
   erpuserside/usm_poller:3.19&lt;br /&gt;
&lt;br /&gt;
== Installation, configuration and running without Docker ==&lt;br /&gt;
The recommended way is to use Poller as a Docker container. In this case, all the necessary dependencies are inside the container and you don&#039;t need to take care of anything extra. Also the updates are done with a single command. But, if for some reason you can&#039;t use Docker, the only way is to run the poller directly on the host.&lt;br /&gt;
&lt;br /&gt;
=== Creation of a copy of Poller for Satellite ===&lt;br /&gt;
First you need to copy the poller to the satellite server. To do this, you need to create an archive with the poller files on the USERSIDE server and then copy and unarchive them on the satellite server.&lt;br /&gt;
&lt;br /&gt;
On the USERSIDE server, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microserice&lt;br /&gt;
tar --exclude=&amp;quot;venv&amp;quot; -czf usm_poller.tgz poller/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy the usm_poller.tgz file to the satellite server. For example, to a directory &amp;lt;code&amp;gt;/opt&amp;lt;/code&amp;gt; and run the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar xzf usm_poller.tgz&lt;br /&gt;
cd poller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing dependencies ===&lt;br /&gt;
&#039;&#039;Requires Python3 of any currently supported version. The status of versions can be viewed here:&amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. It is recommended to use a version with &amp;quot;security&amp;quot; or &amp;quot;bugfix&amp;quot; status. Versions marked as &amp;quot;end-of-life&amp;quot; are not supported. Versions marked as &amp;quot;feature&amp;quot; are not recommended. If you have an unsupported version (&amp;quot;end-of-life&amp;quot;) installed on your host, you should be sure to [[Python-update_EN|install additionally]] a more recent version of Python.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Make sure the Python3 version is actual:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python3 --version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All following commands will be shown with the explicit version of Python. If you have a different version than the one shown in the commands - specify your version.&lt;br /&gt;
&lt;br /&gt;
Install all necessary dependencies:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y supervisor libsnmp-dev&lt;br /&gt;
sudo -H python3 -m venv venv&lt;br /&gt;
sudo -H venv/bin/pip install -U pip wheel&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration and running ===&lt;br /&gt;
Create a &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; file in which put the following variables:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
US_AMQP_DSN=amqp://username:password@address_host_rabbitmq:5672/%2f&lt;br /&gt;
USM_POLLER_SATELLITE_ID=id_your_satellite&lt;br /&gt;
USM_POLLER_LOGFILE=stdout&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perform a test run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u www-data venv/bin/python worker.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see that the Poller has connected to the broker. Make sure that there are no errors. The running Poller is constantly running and waiting for messages from the broker. On the USERSIDE, do some polling of the equipment that is in the service area of this satellite and make sure that everything worked well. For example, you can open some switch and make sure that the information from the switch was taken by the poller and in the USERSIDE user interface you can see the result of this work.&lt;br /&gt;
&lt;br /&gt;
Stop the poller running manually with the key combination Ctrl+C. You will have to wait about 5 seconds until the Poller completes all its tasks and closes the connection to the broker correctly.&lt;br /&gt;
&lt;br /&gt;
From the &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; file, delete the line with the &amp;lt;code&amp;gt;USM_POLLER_LOGFILE&amp;lt;/code&amp;gt; variable. By default, logs are written to the file /var/log/usm_poller/poller.log. If you are not satisfied with this path, instead of deleting the variable, change its value to the file you need.&lt;br /&gt;
&lt;br /&gt;
Copy the example supervisor settings and the example log rotation settings from the etc. subdirectory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp etc/usm_poller.conf-example /etc/supervisor/conf.d/usm_poller.conf&lt;br /&gt;
sudo cp etc/logrotate-example /etc/logrotate.d/usm_poller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit the /etc/supervisor/conf.d/usm_poller.conf file. In it, change the path to the poller: instead of /var/www/userside/microservice/poller, specify /opt/poller or wherever you copied the poller to. Also specify the number of copies to run in the numprocs parameter. Depending on the amount of hardware and the number of tasks served by the satellite. Start with 2 and change this value as needed in the future. It makes no sense to run 15 copies at once. Besides, if your satellite server is not powerful enough, it may cause performance degradation.&lt;br /&gt;
&lt;br /&gt;
Edit the /etc/logrotate.d/usm_poller file if you changed the path to the logs in the &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; file environment variable &amp;lt;code&amp;gt;USM_POLLER_LOGFILE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Restart the supervisor to have it reread the configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart supervisor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And after a few seconds, observe the processes it is controlling - all copies of the poller should be in the RUNNING state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The configuration is now complete.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade ===&lt;br /&gt;
To upgrade, you will have to make a Poller archive again from the USERSDIE server and move it to the satellite server, where you unarchive and install (upgrade) the dependencies again.&lt;br /&gt;
&lt;br /&gt;
To do this, create an archive on the USERSIDE server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microserice&lt;br /&gt;
tar --exclude=&amp;quot;venv&amp;quot; -czf usm_poller.tgz poller/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy it to the satellite server in the /opt directory and unarchive it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar xzf usm_poller.tgz&lt;br /&gt;
cd poller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upgrade dependencies:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H venv/bin/pip install -U pip wheel&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart the supervisor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart usm_poller:*&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Usm_poller_(as_satellite)&amp;diff=20367</id>
		<title>Usm poller (as satellite)</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Usm_poller_(as_satellite)&amp;diff=20367"/>
		<updated>2025-05-19T06:54:00Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Конфигурация и запуск */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Usm_poller_(as_satellite) EN|en]] | [[Usm_poller_(as_satellite)|ru]]&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
&lt;br /&gt;
Начиная с версии USERSIDE 3.18 для взаимодействия с телекоммуникационным оборудованием используются специальные службы &#039;&#039;&#039;usm_poller&#039;&#039;&#039;, запускаемые в нескольких копиях на серверах оператора для увеличения доступности, отказоустойчивости и распределения нагрузки между серверами. Между ядром USERSIDE и этими службами передаются специальные сообщения, содержащие сетевые задания, которые через брокер сообщений RabbitMQ распределяются между всеми службами usm_poller и таким же образом через брокер службы сообщают ядру USERSIDE о результатах работы. Использование более подходящих для сетевого взаимодействия инструментов, а также внесенная в систему асинхронность позволяет использовать ранее недоступные протоколы связи, ускорить многие сценарии взаимодействия по существующим протоколам и не заставлять пользователя ждать результата в открытом окне браузера.&lt;br /&gt;
&lt;br /&gt;
С учетом особенностей запуска служб usm_poller создается возможность использования этих поллеров вместо пркси-модулей usm_satellite, которые использовались в USERSIDE версиях 3.13-3.17 для проксирования команд взаимодействия с оборудованием между ядром USERSIDE и недоступным по сети оборудованием по протоколу HTTP-API. Для этого в модули usm_poller была добавлена простая настройка, идентифицирующая конкретный экземпляр usm_poller как &amp;quot;сателлит&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Начиная с версии USERSIDE 3.18 в качестве &amp;quot;сателлита&amp;quot; на удалённых узлах используется модуль usm_poller.&lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Для запуска usm_poller на удалённом узле связи требуется наличие Docker (и опционально Compose plugin v2) или Python3 любой поддерживаемой на данный момент версии и supervisor для запуска без Docker.&lt;br /&gt;
&lt;br /&gt;
=== Версии ===&lt;br /&gt;
По мере развития системы, может возникать ситуация, когда новая версия USERSIDE не совместима со старой версией usm_poller. Например, когда внесены изменения в API или структуру данных или что либо еще.&lt;br /&gt;
&lt;br /&gt;
Все версии USERSIDE начиная с 3.18.0 и по 3.18.19 включительно работают с usm_poller версий 3.18.0 и по 3.18.7 включительно.&lt;br /&gt;
&lt;br /&gt;
Версии USERSIDE 3.18.20 и более новые требуют минимальную версию usm_poller 3.18.8.&lt;br /&gt;
&lt;br /&gt;
== Установка, настройка и запуск с использованием Docker ==&lt;br /&gt;
Несмотря на то, что также возможен запуск без Docker, мы настоятельно рекомендуем использовать Docker контейнер для запуска поллера в качестве сателлита. Если по каким-то причинам вы не можете использовать Docker, ниже дана инструкция по запуску без Docker.&lt;br /&gt;
&lt;br /&gt;
=== Установка Docker и Compose plugin ===&lt;br /&gt;
В большинстве поддерживаемых операционных систем достаточно запуска команды:&lt;br /&gt;
 curl -fsSL get.docker.com | sh&lt;br /&gt;
Эта команда установит Docker Engine и Compose Plugin последних версий на большинстве поддерживаемых операционных систем. Если для вашей системы это невозможно, команда выдаст рекомендации по ручной установке. Вы также можете обратиться к официальной [https://docs.docker.com/engine/install/ инструкции по установке] на сайте проекта Docker. Обратите внимание на то, что версия DockerIO, которая поставлялась с некоторыми дистрибутивами Linux, считается устаревшей и не подходит. Одновременно с этим, версия Docker Desktop, предназначенная для десктопных операционных систем, поддерживается и вы сможете также использовать и ее, но предпочтение лучше отдать Docker Engine (серверной версии Docker).&lt;br /&gt;
&lt;br /&gt;
Если вам необходимо запускать команды к Docker без использования sudo, то добавьте своего пользователя в группу docker следующими командами:&lt;br /&gt;
 sudo gpasswd -a $USER docker&lt;br /&gt;
 newgrp docker&lt;br /&gt;
&lt;br /&gt;
Теперь проверьте, что все установилось корректно, выполнив команды:&lt;br /&gt;
 docker version&lt;br /&gt;
 docker compose version&lt;br /&gt;
&lt;br /&gt;
=== Организация связи поллера с брокером ===&lt;br /&gt;
При использовании usm_satellite сервером являлся сам модуль, в то время как клиентом являлось ядро Userside, которое выполняло HTTP-API запросы к usm_satellite.&lt;br /&gt;
&lt;br /&gt;
Теперь сервером для всех потребителей сообщений является брокер RabbitMQ, не зависимо от того, отправляет приложение сообщение либо его принимает. Это означает, что удалённый сервер, на котором устанавливается usm_poller в качестве сателлита, должен иметь доступ по сети к брокеру RabbitMQ, установленному на сервере с Userside (либо на каком-то отдельном сервере, если в этом была необходимость). В то же время удаленный сервер теперь вообще может не иметь открытых портов, что повышает его безопасность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Usm poller as satellite connection.png|900px|безрамки|центр]]&lt;br /&gt;
&lt;br /&gt;
Для подключения к брокеру RabbitMQ по умолчанию используется TCP-порт 5672 (протокол AMQP). Мы рекомендуем открыть доступ к этому порту из внешней сети только с известных вам IP-адресов, коим является IP-адрес удаленного сервера-сателлита, на котором вы запускаете usm_poller.&lt;br /&gt;
&lt;br /&gt;
Если вы используете и USERSIDE в Docker-бандле, то раскомментируйте строку в ports сервиса rabbitmq, отвечающую за трансляцию порта 5672 (подписан в комментариях как AMQP) и перезапустите Docker-бандл.&lt;br /&gt;
&lt;br /&gt;
Также альтернативой порту 5672 (AMQP) может быть порт 5671 (AMQPS), который по умолчанию не используется. Вы можете настроить AMQPS (TLS) самостоятельно в дополнение к порту 5672 (AMQP). Инструкции по настройке TLS можно получить [https://rabbitmq.com/ssl.html в официальной документации RabbitMQ].&lt;br /&gt;
&lt;br /&gt;
Т.к. сообщения, передаваемые между брокером RabbitMQ и его потребителями передаются в открытом виде, рекомендуемым вариантом организации связи является использование туннелирования с шифрованием между узлами RabbitMQ и удалённым сервером с usm_poller.&lt;br /&gt;
&lt;br /&gt;
=== Запуск Docker-контейнеров usm_poller ===&lt;br /&gt;
Рекомендуемым способом запуска является использование плагина compose. В этом случая вся конфигурация контейнера прописывается в специальном compose-файле, что облегчает последующую эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
Вы можете создать compose-файл где угодно, но чтобы не потерять его расположение в будущем, рекомендуем расположить его, например, в /opt/usm_poller. Создайте каталог:&lt;br /&gt;
 sudo mkdir -p /opt/usm_poller&lt;br /&gt;
&lt;br /&gt;
Затем создайте файл с именем compose.yaml в этом каталоге и следующим содержимым (обратите внимание на отступы - они имеют значение):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  poller:&lt;br /&gt;
    image: erpuserside/usm_poller:3.19&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    environment:&lt;br /&gt;
      US_AMQP_DSN: amqp://имя_пользователя:пароль@адрес_хоста_rabbitmq:5672/%2f&lt;br /&gt;
      USM_POLLER_SATELLITE_ID: id_вашего_satellite&lt;br /&gt;
    deploy:&lt;br /&gt;
      replicas: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для работы с USERSIDE 3.19.x используется образ erpuserside/usm_poller:3.19. Версия usm_poller должна быть совместима с конкретной версией USERSIDE (см. выше).&lt;br /&gt;
&lt;br /&gt;
Значением для &amp;lt;code&amp;gt;US_AMQP_DSN&amp;lt;/code&amp;gt; является URL-строка, которую вы можете скопировать из файла &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;, расположенного в корневом каталоге с USERSIDE: /var/www/userside, но вместо IP-адреса RabbitMQ, указанного там, вам нужно указать тот IP-адрес, по которому доступен сервер RabbitMQ (зависит от того, какой способ доступа вы используете).&lt;br /&gt;
&lt;br /&gt;
Значением для &amp;lt;code&amp;gt;USM_POLLER_SATELLITE_ID&amp;lt;/code&amp;gt; является идентификатор &amp;quot;сателлита&amp;quot;, который вы можете взять со страницы: Настройка - Основная - Оборудование - Настройка сателлитов.&lt;br /&gt;
&lt;br /&gt;
Сохраните файл composer.yaml и запустите для теста следующим образом:&lt;br /&gt;
 docker compose up&lt;br /&gt;
&lt;br /&gt;
Вы должны увидеть, как загружается образ, затем происходит запуск Docker-контейнера usm_poller и подключение к серверу RabbitMQ по протоколу AMQP. Если подключение к RabbitMQ серверу произошло корректно, то остановите работу контейнера сочетанием Ctrl+C, измените количество реплик (значение replicas) до 5 и запустите контейнеры в фоновом режиме:&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
Если пяти копий контейнера будет мало, увеличьте это значение. Чтобы определить, достаточно ли контейнеров, откройте WEB-консоль RabbitMQ используя протокол http, адрес домена вашего userside и порт 15672. Например, вот так: http://userside.mycompany.com:15672 и затем перейдите на страницу Queues. Найдите там очередь с именем &amp;lt;code&amp;gt;usm_poller-sat-7&amp;lt;/code&amp;gt; (где 7 — это идентификатор сателлита), откройте ее и понаблюдайте за заполнением очереди. Смысл заключается в том, чтобы поллеры успевали забирать задания в пределах нормального для вас времени. В идеале, очередь должна быть практически пустой всегда (задания сразу же отдаются свободному поллеру), либо количество сообщений должно доходить до нуля (количество поллеров достаточно). Не стоит увеличивать количество реплик просто так — это приведет к ненужному накладному расходу ресурсов и в итоге может даже отрицательно сказаться на производительности, если ресурсов системы будет не хватать.&lt;br /&gt;
&lt;br /&gt;
После изменения количества реплик, нужно выполнить перезапуск командой:&lt;br /&gt;
 docker compose restart&lt;br /&gt;
&lt;br /&gt;
Посмотреть состояние контейнеров можно командой:&lt;br /&gt;
 docker compose ps&lt;br /&gt;
&lt;br /&gt;
Чтобы остановить все контейнеры, используйте команду:&lt;br /&gt;
 docker compose stop&lt;br /&gt;
&lt;br /&gt;
Чтобы обновить версию Docker-образа в пределах его версии (это желательно делать после каждого обновления USERSIDE), нужно сначала остановить контейнеры, затем отредактировать файл, указав номер новой версии usm_poller и затем снова запустить их в фоне:&lt;br /&gt;
 docker compose down&lt;br /&gt;
 nano compose.yaml&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
Чтобы не засорять систему не используемыми образами, их можно удалять, указывая образ целиком с версией:&lt;br /&gt;
 docker rmi erpuserside/usm_poller:3.19.2&lt;br /&gt;
&lt;br /&gt;
Если вам кажется, что что-то работает не так как нужно, посмотрите логи контейнеров командой:&lt;br /&gt;
 docker compose logs poller&lt;br /&gt;
&lt;br /&gt;
Либо же можно добавить опцию &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt; чтобы наблюдать follow за логами в реальном времени.&lt;br /&gt;
&lt;br /&gt;
Запустить один контейнер можно и без использования compose, выполнив всего лишь одну команду (состоящую из нескольких строк). Однако такой способ хоть и является более простым, все же не так удобен для последующей эксплуатации:&lt;br /&gt;
 docker run --detach \&lt;br /&gt;
   --restart unless-stopped \&lt;br /&gt;
   --name usm_poller \&lt;br /&gt;
   --env US_AMQP_DSN=amqp://имя_пользователя:пароль@адрес_хоста_rabbitmq:5672/%2f \&lt;br /&gt;
   --env USM_POLLER_SATELLITE_ID=id_вашего_satellite \&lt;br /&gt;
   erpuserside/usm_poller:3.19&lt;br /&gt;
&lt;br /&gt;
== Установка, настройка и запуск без Docker ==&lt;br /&gt;
Рекомендуемым способом является использование поллера в качестве Docker контейнера. В этом случае все необходимые зависимости находятся внутри контейнера и вам не нужно дополнительно ни о чем заботиться. Также и обновления выполняются одной командой. Но, если по какой-то причине вы не можете использовать Docker, то единственным способом является запуск поллера прямо на хосте.&lt;br /&gt;
&lt;br /&gt;
=== Создание копии поллера для сателлита ===&lt;br /&gt;
Для начала вам нужно скопировать поллер на сателлит-сервер. Для этого вам нужно создать архив с файлами поллера на сервере с USERSIDE и затем скопировать и разархивировать их на сателлит-сервере.&lt;br /&gt;
&lt;br /&gt;
На сервере USERSIDE выполните:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microserice&lt;br /&gt;
tar --exclude=&amp;quot;venv&amp;quot; -czf usm_poller.tgz poller/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скопируйте файл usm_poller.tgz на сателлит-сервер. Например, в каталог &amp;lt;code&amp;gt;/opt&amp;lt;/code&amp;gt; и выполните следующие команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar xzf usm_poller.tgz&lt;br /&gt;
cd poller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка зависимостей ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать. Если у вас на хосте неподдерживаемая версия (&amp;quot;end-of-life&amp;quot;), то нужно обязательно [[Python-update|установить дополнительно]] более свежую версию Python.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Убедитесь, что версия Python3 актуальна:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python3 --version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все последующие команды будут показаны с указанием явной версии Python. Если у вас версия отличается от указанной в командах - указывайте вашу версию.&lt;br /&gt;
&lt;br /&gt;
Установите все необходимые зависимости:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y supervisor libsnmp-dev&lt;br /&gt;
sudo -H python3 -m venv venv&lt;br /&gt;
sudo -H venv/bin/pip install -U pip wheel&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация и запуск ===&lt;br /&gt;
Создайте файл &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; в который поместите следующие переменые:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
US_AMQP_DSN=amqp://имя_пользователя:пароль@адрес_хоста_rabbitmq:5672/%2f&lt;br /&gt;
USM_POLLER_SATELLITE_ID=id_вашего_satellite&lt;br /&gt;
USM_POLLER_LOGFILE=stdout&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выполните тестовый запуск:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u www-data venv/bin/python worker.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы должны увидеть, что поллер подключился к брокеру. Убедитесь в отсутствии каких либо ошибок. Запущенный поллер постоянно выполняется и ожидает сообщений от брокера. На USERSIDE выполните какой либо опрос оборудования, которое находится в зоне обслуживания этого сателлита, и убедитесь что все сработало успашно. Например, можно открыть какой-то коммутатор и убедиться, что информация с коммутатора была снята поллером и в пользовательском интерфейсе USERSIDE вы увидели результат этой работы.&lt;br /&gt;
&lt;br /&gt;
Остановите работу поллера, запущенного вручную, комбинацией клавиш Ctrl+C. Придется подождать около 5 сек, пока поллер завершит все свои задачи и корректно закроет подключение к брокеру.&lt;br /&gt;
&lt;br /&gt;
Из файла &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; удалите строку с переменной &amp;lt;code&amp;gt;USM_POLLER_LOGFILE&amp;lt;/code&amp;gt;. По умолчанию логи пишутся в файл /var/log/usm_poller/poller.log. Если вас не устраивает этот путь, то вместо удаления переменной, измените ее значение на нужный вам файл.&lt;br /&gt;
&lt;br /&gt;
Скопируйте пример настроек супервизора и пример настроек ротации логов из подкаталога etc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp etc/usm_poller.conf-example /etc/supervisor/conf.d/usm_poller.conf&lt;br /&gt;
sudo cp etc/logrotate-example /etc/logrotate.d/usm_poller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отредактируйте файл /etc/supervisor/conf.d/usm_poller.conf. В нем измените путь к поллеру: вместо /var/www/userside/microservice/poller укажите /opt/poller или тот, куда вы скопировали поллер. Также укажите количество запускаемых копий в параметре numprocs. В зависимости от количества оборудования и количества задач, обслуживаемых сателлитом. Начните с 2 и по мере необходимости в будущем изменяйте это значение. Запускать сразу 15 копий нет смысла. К тому же, если ваш сателлит-сервер недостаточно мощный, то это может привести к деградации производительности.&lt;br /&gt;
&lt;br /&gt;
Отредактируйте файл /etc/logrotate.d/usm_poller если вы изменили путь к логам в переменной окружения &amp;lt;code&amp;gt;USM_POLLER_LOGFILE&amp;lt;/code&amp;gt; файла &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Перезапустите супервизор, чтобы он перечитал конфигурацию:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart supervisor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И спустя несколько секунд понаблюдайте за процессами, которые он контролирует - все копии поллера должны быть в состоянии RUNNING.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На этом настройка закончена.&lt;br /&gt;
&lt;br /&gt;
=== Обновление ===&lt;br /&gt;
Для обновления вам придется снова делать архив поллера с сервера USERSDIE и переносить его на сателлит-сервер, где разархивировать и снова устанавливать (обновлять) зависимости.&lt;br /&gt;
&lt;br /&gt;
Для этого на сервере USERSIDE создайте архив:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microserice&lt;br /&gt;
tar --exclude=&amp;quot;venv&amp;quot; -czf usm_poller.tgz poller/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скопируйте его на сателлит сервер в каталог /opt и разархивируйте:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar xzf usm_poller.tgz&lt;br /&gt;
cd poller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновите зависимости:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H venv/bin/pip install -U pip wheel&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перезапустите супервизор:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart usm_poller:*&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Usm_poller_(as_satellite)&amp;diff=20366</id>
		<title>Usm poller (as satellite)</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Usm_poller_(as_satellite)&amp;diff=20366"/>
		<updated>2025-05-19T06:52:52Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Запуск Docker-контейнеров usm_poller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Usm_poller_(as_satellite) EN|en]] | [[Usm_poller_(as_satellite)|ru]]&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
&lt;br /&gt;
Начиная с версии USERSIDE 3.18 для взаимодействия с телекоммуникационным оборудованием используются специальные службы &#039;&#039;&#039;usm_poller&#039;&#039;&#039;, запускаемые в нескольких копиях на серверах оператора для увеличения доступности, отказоустойчивости и распределения нагрузки между серверами. Между ядром USERSIDE и этими службами передаются специальные сообщения, содержащие сетевые задания, которые через брокер сообщений RabbitMQ распределяются между всеми службами usm_poller и таким же образом через брокер службы сообщают ядру USERSIDE о результатах работы. Использование более подходящих для сетевого взаимодействия инструментов, а также внесенная в систему асинхронность позволяет использовать ранее недоступные протоколы связи, ускорить многие сценарии взаимодействия по существующим протоколам и не заставлять пользователя ждать результата в открытом окне браузера.&lt;br /&gt;
&lt;br /&gt;
С учетом особенностей запуска служб usm_poller создается возможность использования этих поллеров вместо пркси-модулей usm_satellite, которые использовались в USERSIDE версиях 3.13-3.17 для проксирования команд взаимодействия с оборудованием между ядром USERSIDE и недоступным по сети оборудованием по протоколу HTTP-API. Для этого в модули usm_poller была добавлена простая настройка, идентифицирующая конкретный экземпляр usm_poller как &amp;quot;сателлит&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Начиная с версии USERSIDE 3.18 в качестве &amp;quot;сателлита&amp;quot; на удалённых узлах используется модуль usm_poller.&lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Для запуска usm_poller на удалённом узле связи требуется наличие Docker (и опционально Compose plugin v2) или Python3 любой поддерживаемой на данный момент версии и supervisor для запуска без Docker.&lt;br /&gt;
&lt;br /&gt;
=== Версии ===&lt;br /&gt;
По мере развития системы, может возникать ситуация, когда новая версия USERSIDE не совместима со старой версией usm_poller. Например, когда внесены изменения в API или структуру данных или что либо еще.&lt;br /&gt;
&lt;br /&gt;
Все версии USERSIDE начиная с 3.18.0 и по 3.18.19 включительно работают с usm_poller версий 3.18.0 и по 3.18.7 включительно.&lt;br /&gt;
&lt;br /&gt;
Версии USERSIDE 3.18.20 и более новые требуют минимальную версию usm_poller 3.18.8.&lt;br /&gt;
&lt;br /&gt;
== Установка, настройка и запуск с использованием Docker ==&lt;br /&gt;
Несмотря на то, что также возможен запуск без Docker, мы настоятельно рекомендуем использовать Docker контейнер для запуска поллера в качестве сателлита. Если по каким-то причинам вы не можете использовать Docker, ниже дана инструкция по запуску без Docker.&lt;br /&gt;
&lt;br /&gt;
=== Установка Docker и Compose plugin ===&lt;br /&gt;
В большинстве поддерживаемых операционных систем достаточно запуска команды:&lt;br /&gt;
 curl -fsSL get.docker.com | sh&lt;br /&gt;
Эта команда установит Docker Engine и Compose Plugin последних версий на большинстве поддерживаемых операционных систем. Если для вашей системы это невозможно, команда выдаст рекомендации по ручной установке. Вы также можете обратиться к официальной [https://docs.docker.com/engine/install/ инструкции по установке] на сайте проекта Docker. Обратите внимание на то, что версия DockerIO, которая поставлялась с некоторыми дистрибутивами Linux, считается устаревшей и не подходит. Одновременно с этим, версия Docker Desktop, предназначенная для десктопных операционных систем, поддерживается и вы сможете также использовать и ее, но предпочтение лучше отдать Docker Engine (серверной версии Docker).&lt;br /&gt;
&lt;br /&gt;
Если вам необходимо запускать команды к Docker без использования sudo, то добавьте своего пользователя в группу docker следующими командами:&lt;br /&gt;
 sudo gpasswd -a $USER docker&lt;br /&gt;
 newgrp docker&lt;br /&gt;
&lt;br /&gt;
Теперь проверьте, что все установилось корректно, выполнив команды:&lt;br /&gt;
 docker version&lt;br /&gt;
 docker compose version&lt;br /&gt;
&lt;br /&gt;
=== Организация связи поллера с брокером ===&lt;br /&gt;
При использовании usm_satellite сервером являлся сам модуль, в то время как клиентом являлось ядро Userside, которое выполняло HTTP-API запросы к usm_satellite.&lt;br /&gt;
&lt;br /&gt;
Теперь сервером для всех потребителей сообщений является брокер RabbitMQ, не зависимо от того, отправляет приложение сообщение либо его принимает. Это означает, что удалённый сервер, на котором устанавливается usm_poller в качестве сателлита, должен иметь доступ по сети к брокеру RabbitMQ, установленному на сервере с Userside (либо на каком-то отдельном сервере, если в этом была необходимость). В то же время удаленный сервер теперь вообще может не иметь открытых портов, что повышает его безопасность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Usm poller as satellite connection.png|900px|безрамки|центр]]&lt;br /&gt;
&lt;br /&gt;
Для подключения к брокеру RabbitMQ по умолчанию используется TCP-порт 5672 (протокол AMQP). Мы рекомендуем открыть доступ к этому порту из внешней сети только с известных вам IP-адресов, коим является IP-адрес удаленного сервера-сателлита, на котором вы запускаете usm_poller.&lt;br /&gt;
&lt;br /&gt;
Если вы используете и USERSIDE в Docker-бандле, то раскомментируйте строку в ports сервиса rabbitmq, отвечающую за трансляцию порта 5672 (подписан в комментариях как AMQP) и перезапустите Docker-бандл.&lt;br /&gt;
&lt;br /&gt;
Также альтернативой порту 5672 (AMQP) может быть порт 5671 (AMQPS), который по умолчанию не используется. Вы можете настроить AMQPS (TLS) самостоятельно в дополнение к порту 5672 (AMQP). Инструкции по настройке TLS можно получить [https://rabbitmq.com/ssl.html в официальной документации RabbitMQ].&lt;br /&gt;
&lt;br /&gt;
Т.к. сообщения, передаваемые между брокером RabbitMQ и его потребителями передаются в открытом виде, рекомендуемым вариантом организации связи является использование туннелирования с шифрованием между узлами RabbitMQ и удалённым сервером с usm_poller.&lt;br /&gt;
&lt;br /&gt;
=== Запуск Docker-контейнеров usm_poller ===&lt;br /&gt;
Рекомендуемым способом запуска является использование плагина compose. В этом случая вся конфигурация контейнера прописывается в специальном compose-файле, что облегчает последующую эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
Вы можете создать compose-файл где угодно, но чтобы не потерять его расположение в будущем, рекомендуем расположить его, например, в /opt/usm_poller. Создайте каталог:&lt;br /&gt;
 sudo mkdir -p /opt/usm_poller&lt;br /&gt;
&lt;br /&gt;
Затем создайте файл с именем compose.yaml в этом каталоге и следующим содержимым (обратите внимание на отступы - они имеют значение):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  poller:&lt;br /&gt;
    image: erpuserside/usm_poller:3.19&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    environment:&lt;br /&gt;
      US_AMQP_DSN: amqp://имя_пользователя:пароль@адрес_хоста_rabbitmq:5672/%2f&lt;br /&gt;
      USM_POLLER_SATELLITE_ID: id_вашего_satellite&lt;br /&gt;
    deploy:&lt;br /&gt;
      replicas: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для работы с USERSIDE 3.19.x используется образ erpuserside/usm_poller:3.19. Версия usm_poller должна быть совместима с конкретной версией USERSIDE (см. выше).&lt;br /&gt;
&lt;br /&gt;
Значением для &amp;lt;code&amp;gt;US_AMQP_DSN&amp;lt;/code&amp;gt; является URL-строка, которую вы можете скопировать из файла &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;, расположенного в корневом каталоге с USERSIDE: /var/www/userside, но вместо IP-адреса RabbitMQ, указанного там, вам нужно указать тот IP-адрес, по которому доступен сервер RabbitMQ (зависит от того, какой способ доступа вы используете).&lt;br /&gt;
&lt;br /&gt;
Значением для &amp;lt;code&amp;gt;USM_POLLER_SATELLITE_ID&amp;lt;/code&amp;gt; является идентификатор &amp;quot;сателлита&amp;quot;, который вы можете взять со страницы: Настройка - Основная - Оборудование - Настройка сателлитов.&lt;br /&gt;
&lt;br /&gt;
Сохраните файл composer.yaml и запустите для теста следующим образом:&lt;br /&gt;
 docker compose up&lt;br /&gt;
&lt;br /&gt;
Вы должны увидеть, как загружается образ, затем происходит запуск Docker-контейнера usm_poller и подключение к серверу RabbitMQ по протоколу AMQP. Если подключение к RabbitMQ серверу произошло корректно, то остановите работу контейнера сочетанием Ctrl+C, измените количество реплик (значение replicas) до 5 и запустите контейнеры в фоновом режиме:&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
Если пяти копий контейнера будет мало, увеличьте это значение. Чтобы определить, достаточно ли контейнеров, откройте WEB-консоль RabbitMQ используя протокол http, адрес домена вашего userside и порт 15672. Например, вот так: http://userside.mycompany.com:15672 и затем перейдите на страницу Queues. Найдите там очередь с именем &amp;lt;code&amp;gt;usm_poller-sat-7&amp;lt;/code&amp;gt; (где 7 — это идентификатор сателлита), откройте ее и понаблюдайте за заполнением очереди. Смысл заключается в том, чтобы поллеры успевали забирать задания в пределах нормального для вас времени. В идеале, очередь должна быть практически пустой всегда (задания сразу же отдаются свободному поллеру), либо количество сообщений должно доходить до нуля (количество поллеров достаточно). Не стоит увеличивать количество реплик просто так — это приведет к ненужному накладному расходу ресурсов и в итоге может даже отрицательно сказаться на производительности, если ресурсов системы будет не хватать.&lt;br /&gt;
&lt;br /&gt;
После изменения количества реплик, нужно выполнить перезапуск командой:&lt;br /&gt;
 docker compose restart&lt;br /&gt;
&lt;br /&gt;
Посмотреть состояние контейнеров можно командой:&lt;br /&gt;
 docker compose ps&lt;br /&gt;
&lt;br /&gt;
Чтобы остановить все контейнеры, используйте команду:&lt;br /&gt;
 docker compose stop&lt;br /&gt;
&lt;br /&gt;
Чтобы обновить версию Docker-образа в пределах его версии (это желательно делать после каждого обновления USERSIDE), нужно сначала остановить контейнеры, затем отредактировать файл, указав номер новой версии usm_poller и затем снова запустить их в фоне:&lt;br /&gt;
 docker compose down&lt;br /&gt;
 nano compose.yaml&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
Чтобы не засорять систему не используемыми образами, их можно удалять, указывая образ целиком с версией:&lt;br /&gt;
 docker rmi erpuserside/usm_poller:3.19.2&lt;br /&gt;
&lt;br /&gt;
Если вам кажется, что что-то работает не так как нужно, посмотрите логи контейнеров командой:&lt;br /&gt;
 docker compose logs poller&lt;br /&gt;
&lt;br /&gt;
Либо же можно добавить опцию &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt; чтобы наблюдать follow за логами в реальном времени.&lt;br /&gt;
&lt;br /&gt;
Запустить один контейнер можно и без использования compose, выполнив всего лишь одну команду (состоящую из нескольких строк). Однако такой способ хоть и является более простым, все же не так удобен для последующей эксплуатации:&lt;br /&gt;
 docker run --detach \&lt;br /&gt;
   --restart unless-stopped \&lt;br /&gt;
   --name usm_poller \&lt;br /&gt;
   --env US_AMQP_DSN=amqp://имя_пользователя:пароль@адрес_хоста_rabbitmq:5672/%2f \&lt;br /&gt;
   --env USM_POLLER_SATELLITE_ID=id_вашего_satellite \&lt;br /&gt;
   erpuserside/usm_poller:3.19&lt;br /&gt;
&lt;br /&gt;
== Установка, настройка и запуск без Docker ==&lt;br /&gt;
Рекомендуемым способом является использование поллера в качестве Docker контейнера. В этом случае все необходимые зависимости находятся внутри контейнера и вам не нужно дополнительно ни о чем заботиться. Также и обновления выполняются одной командой. Но, если по какой-то причине вы не можете использовать Docker, то единственным способом является запуск поллера прямо на хосте.&lt;br /&gt;
&lt;br /&gt;
=== Создание копии поллера для сателлита ===&lt;br /&gt;
Для начала вам нужно скопировать поллер на сателлит-сервер. Для этого вам нужно создать архив с файлами поллера на сервере с USERSIDE и затем скопировать и разархивировать их на сателлит-сервере.&lt;br /&gt;
&lt;br /&gt;
На сервере USERSIDE выполните:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microserice&lt;br /&gt;
tar --exclude=&amp;quot;venv&amp;quot; -czf usm_poller.tgz poller/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скопируйте файл usm_poller.tgz на сателлит-сервер. Например, в каталог &amp;lt;code&amp;gt;/opt&amp;lt;/code&amp;gt; и выполните следующие команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar xzf usm_poller.tgz&lt;br /&gt;
cd poller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка зависимостей ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать. Если у вас на хосте неподдерживаемая версия (&amp;quot;end-of-life&amp;quot;), то нужно обязательно [[Python-update|установить дополнительно]] более свежую версию Python.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Убедитесь, что версия Python3 актуальна:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python3 --version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все последующие команды будут показаны с указанием явной версии Python. Если у вас версия отличается от указанной в командах - указывайте вашу версию.&lt;br /&gt;
&lt;br /&gt;
Установите все необходимые зависимости:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y supervisor libsnmp-dev&lt;br /&gt;
sudo -H python3 -m venv venv&lt;br /&gt;
sudo -H venv/bin/pip install -U pip wheel&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация и запуск ===&lt;br /&gt;
Создайте файл &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; в который поместите следующие переменые:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
US_AMQP_DSN=amqp://имя_пользователя:пароль@адрес_хоста_rabbitmq:5672/%2f&lt;br /&gt;
USM_POLLER_SATELLITE_ID=id_вашего_satellite&lt;br /&gt;
USM_POLLER_LOGFILE=stdout&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выполните тестовый запуск:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H venv/bin/python worker.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы должны увидеть, что поллер подключился к брокеру. Убедитесь в отсутствии каких либо ошибок. Запущенный поллер постоянно выполняется и ожидает сообщений от брокера. На USERSIDE выполните какой либо опрос оборудования, которое находится в зоне обслуживания этого сателлита, и убедитесь что все сработало успашно. Например, можно открыть какой-то коммутатор и убедиться, что информация с коммутатора была снята поллером и в пользовательском интерфейсе USERSIDE вы увидели результат этой работы.&lt;br /&gt;
&lt;br /&gt;
Остановите работу поллера, запущенного вручную, комбинацией клавиш Ctrl+C. Придется подождать около 5 сек, пока поллер завершит все свои задачи и корректно закроет подключение к брокеру.&lt;br /&gt;
&lt;br /&gt;
Из файла &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; удалите строку с переменной &amp;lt;code&amp;gt;USM_POLLER_LOGFILE&amp;lt;/code&amp;gt;. По умолчанию логи пишутся в файл /var/log/usm_poller/poller.log. Если вас не устраивает этот путь, то вместо удаления переменной, измените ее значение на нужный вам файл.&lt;br /&gt;
&lt;br /&gt;
Скопируйте пример настроек супервизора и пример настроек ротации логов из подкаталога etc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp etc/usm_poller.conf-example /etc/supervisor/conf.d/usm_poller.conf&lt;br /&gt;
sudo cp etc/logrotate-example /etc/logrotate.d/usm_poller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отредактируйте файл /etc/supervisor/conf.d/usm_poller.conf. В нем измените путь к поллеру: вместо /var/www/userside/microservice/poller укажите /opt/poller или тот, куда вы скопировали поллер. Также укажите количество запускаемых копий в параметре numprocs. В зависимости от количества оборудования и количества задач, обслуживаемых сателлитом. Начните с 2 и по мере необходимости в будущем изменяйте это значение. Запускать сразу 15 копий нет смысла. К тому же, если ваш сателлит-сервер недостаточно мощный, то это может привести к деградации производительности.&lt;br /&gt;
&lt;br /&gt;
Отредактируйте файл /etc/logrotate.d/usm_poller если вы изменили путь к логам в переменной окружения &amp;lt;code&amp;gt;USM_POLLER_LOGFILE&amp;lt;/code&amp;gt; файла &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Перезапустите супервизор, чтобы он перечитал конфигурацию:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart supervisor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И спустя несколько секунд понаблюдайте за процессами, которые он контролирует - все копии поллера должны быть в состоянии RUNNING.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На этом настройка закончена.&lt;br /&gt;
&lt;br /&gt;
=== Обновление ===&lt;br /&gt;
Для обновления вам придется снова делать архив поллера с сервера USERSDIE и переносить его на сателлит-сервер, где разархивировать и снова устанавливать (обновлять) зависимости.&lt;br /&gt;
&lt;br /&gt;
Для этого на сервере USERSIDE создайте архив:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microserice&lt;br /&gt;
tar --exclude=&amp;quot;venv&amp;quot; -czf usm_poller.tgz poller/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скопируйте его на сателлит сервер в каталог /opt и разархивируйте:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar xzf usm_poller.tgz&lt;br /&gt;
cd poller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновите зависимости:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H venv/bin/pip install -U pip wheel&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перезапустите супервизор:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart usm_poller:*&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=FAQ._%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%22ICMP_Socket_permission_error:_allow_ICMP_without_root_privileges.%22&amp;diff=20348</id>
		<title>FAQ. Ошибка &quot;ICMP Socket permission error: allow ICMP without root privileges.&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=FAQ._%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%22ICMP_Socket_permission_error:_allow_ICMP_without_root_privileges.%22&amp;diff=20348"/>
		<updated>2025-05-12T07:12:00Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: Новая страница: «Ошибка с текстом &amp;lt;code&amp;gt;ICMP Socket permission error: allow ICMP without root privileges.&amp;lt;/code&amp;gt; может возникать в usm_poller начиная с версии 3.19.18 и связана она с тем, что операционная система не разрешает использовать ICMP для непривилегированного пользователя. Начиная с версии 3.19.17 были внесе...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ошибка с текстом &amp;lt;code&amp;gt;ICMP Socket permission error: allow ICMP without root privileges.&amp;lt;/code&amp;gt; может возникать в usm_poller начиная с версии 3.19.18 и связана она с тем, что операционная система не разрешает использовать ICMP для непривилегированного пользователя. Начиная с версии 3.19.17 были внесены изменения в usm_poller, позволяющие запускать эту службу от имени простого пользователя, что положительно сказывается на безопасности. Если вы столкнулись с такой ошибкой, то вам нужно проделать следующее:&lt;br /&gt;
&lt;br /&gt;
1. Остановите службу поллера:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo supervisorctl stop usm_poller:*&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Измените значение параметра &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; в файле конфигурации службы /etc/supervisor/conf.d/usm_poller.conf на www-data (или любой другой на ваше усмотрение, но не root)&lt;br /&gt;
3. Удалите лог-файл (или измените его владельца на такого же, как в п.2) /var/log/usm_poller/poller.log&lt;br /&gt;
4. Перечитайте конфигурацию супервизора (это действие также перезапустит и службу), затем проверьте, что служба запустилась и все ее копии находятся в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo systemctl restart supervisor&lt;br /&gt;
sudo supervisorctl status&amp;lt;/pre&amp;gt;&lt;br /&gt;
(возможно между командами придется выждать паузу в 10...15 секунд).&lt;br /&gt;
&lt;br /&gt;
Теперь вернитесь в интерфейс ERP USERSIDE и проверьте, не пропала ли ошибка. Если ошибка все еще присутствует (это может быть на относительно старых операционных системах), то нужно изменить значение параметра &amp;lt;core&amp;gt;net.ipv4.ping_group_range&amp;lt;/code&amp;gt; в sysctl. &lt;br /&gt;
&lt;br /&gt;
Для этого выполните команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;net.ipv4.ping_group_range = 0 2147483647&#039; | sudo tee -a /etc/sysctl.conf&lt;br /&gt;
sudo sysctl -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы столкнулись с ошибкой invalid argument, то отредактируйте файл /etc/sysctl.conf и измените значение 2147483647 на 65535 и снова выполните:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sysctl -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь вернитесь в интерфейс ERP USERSIDE и проверьте, не пропала ли ошибка. Если ошибка все еще присутствует, обратитесь в техподдержку.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=%D0%A7%D0%B0%D1%81%D1%82%D1%8B%D0%B5_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B&amp;diff=20347</id>
		<title>Частые вопросы</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=%D0%A7%D0%B0%D1%81%D1%82%D1%8B%D0%B5_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B&amp;diff=20347"/>
		<updated>2025-05-12T07:01:41Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Оборудование */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Frequently_Asked_Questions|en]] | [[Частые_вопросы|ru]]&lt;br /&gt;
&lt;br /&gt;
== Карты и адреса ==&lt;br /&gt;
* [[FAQ. Использовать в работе одну карту или несколько карт|Использовать в работе одну карту или несколько карт]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Проблемы с домами на карте|При добавлении дома на карту - карта перескакивает на совершенно другой город/область]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Проблемы с переносом объектов на картах|Как перенести объекты с одной карты на другую?]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Проблемы с картами|Карты периодически не отображаются]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Проблемы при добавлении дома на карту покрытия|Проблемы при добавлении дома на карту покрытия. Ошибочная локация]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Проблемы при добавлении дома на карту покрытия#Не выводится полигон для добавления дома|Проблемы при добавлении дома на карту покрытия. Не выводится полигон для добавления дома]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Проблемы при поиске на карте покрытия|Проблема при поиске на карте покрытия. Ошибочная локация]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Объекты на карте сместились|Объекты на карте сместились]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Настройка размера иконок для собственных объектов на карте|Настройка размера иконок для собственных объектов на карте]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Улица/город были переименованы. Как это изменить в USERSIDE?|Улица/город были переименованы. Как это изменить в USERSIDE?]]&lt;br /&gt;
&lt;br /&gt;
== Файлы ==&lt;br /&gt;
* [[FAQ. Разрешенные расширения файлов|Как изменить разрешённые для загрузки расширения файлов]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Проблемы с файлами|При прикреплении файлов - эти файлы не открываются]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Ограничение на загружаемый файл|Как изменить ограничение на размер загружаемых файлов?]]&lt;br /&gt;
&lt;br /&gt;
== Модули ==&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Проблемы с модулем usm_asterisk|Проблемы с модулем usm_asterisk &#039;&#039;(нет всплывающих сообщений, звонков и т.п.)&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Запуск модулей под Windows|Как запускать perl-модули на компьютерах с OS Windows?]]&lt;br /&gt;
&lt;br /&gt;
== Оборудование ==&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Проблемы с активностью объектов|В списке оборудования - часть оборудования отображается красным цветов как неактивное. Открывает карточку оборудования - всё работает. Оборудование становится зелёным. Через время опять красное.]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Активность ONU/ONT|ONU/ONT постоянно меняют статус с активного на неактивное и наоборот.]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Влияние аппаратных или программных версий на опрос оборудования|Точно такая же модель оборудования, но с другой программной или аппаратной версией работает некорректно]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Зависание OLT BDCOM при опросе списка ONU/ONT|Зависание OLT BDCOM при опросе списка ONU/ONT]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Опрос оборудования ZTE OLT|Опрос оборудования ZTE OLT]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Опрос оборудования CDATA OLT|Опрос оборудования CDATA OLT]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Опрос оборудования BDCOM OLT|Опрос оборудования BDCOM OLT]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Ошибка &amp;quot;ICMP Socket permission error: allow ICMP without root privileges.&amp;quot;|Ошибка &amp;quot;ICMP Socket permission error: allow ICMP without root privileges.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== Прочее ==&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Сообщение при установке &amp;quot;The entered URL ... could not be verified&amp;quot;|Сообщение при установке &amp;quot;The entered URL ... could not be verified&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Перенос USERSIDE на другой сервер|Перенос USERSIDE на другой сервер]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Не работает планировщик|Сообщение на главной странице о том, что не работает планировщик]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Бывший абонент становится обычным|При переводе абонента в категорию &amp;quot;Бывших абонентов&amp;quot; он через время вновь возвращается к обычным абонентам]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Неверное время|Сообщения о неверном времени / Отображение неверного времени]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Необходимые PHP-модули|Какие PHP-модули необходимо устанавливать?]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Проблемы с отправкой электронной почты|Не работает отправка сообщений электронной почты из-под UserSide]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Проблемы с кодировкой|Как сконвертировать базу данных в UTF-8?]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Ошибка sql_mode=only_full_group|Ошибка &amp;quot;this is incompatible with sql_mode=only_full_group&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Ошибка ST_AsText|Ошибка &amp;quot;SQL-error N:1305: FUNCTION userside.ST_AsText does not exist&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. База оборудования. Error during connect to UserSide Equipment Database (0)|Error during connect to UserSide Equipment Database (0)]]&lt;br /&gt;
&lt;br /&gt;
* [[Tuning|Тонкая настройка PostgreSQL]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Не запускается модуль &amp;quot;Module disabled in system - exit&amp;quot;|Не запускается модуль &amp;quot;Module disabled in system - exit&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Переход с network на полную редакцию|Переход с network на полную редакцию]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Увеличение лимитов|Увеличение лимитов]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Массовое удаление абонентов|Массовое удаление абонентов]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Использование сканера штрихкодов|Использование сканера штрихкодов]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Сброс пароля и разблокировка администратора|Сброс пароля и разблокировка администратора]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Почему мои тикеты на доработку не выполняются|Почему мои тикеты на доработку не выполняются]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Ошибка &amp;quot;Check installer version API Error 0 cURL error 60: SSL certificate problem: certificate has expired&amp;quot;|Ошибка &amp;quot;Check installer version API Error 0 cURL error 60: SSL certificate problem: certificate has expired&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Ошибки &amp;quot;502 Bad Gateway и 504 Gateway Time-out&amp;quot;|Ошибки &amp;quot;502 Bad Gateway и 504 Gateway Time-out&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. The REDIS database used by another copy of the USERSIDE|Изменился URL USERSIDE, получаю ошибку The REDIS database used by another copy of the USERSIDE]]&lt;br /&gt;
&lt;br /&gt;
* [[python-update|Обновление Python]]&lt;br /&gt;
&lt;br /&gt;
* [[FAQ. Реверсивный прокси|Реверсивный прокси]]&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Installation&amp;diff=20343</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Installation&amp;diff=20343"/>
		<updated>2025-05-01T14:55:18Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Setting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
[[Installation|en]] | [[Установка|ru]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ATTENTION: These instructions are valid for ERP USERSIDE versions 3.19&#039;&#039;&#039;&lt;br /&gt;
* [[Installation for version 3.18|Instruction for version 3.18]]&lt;br /&gt;
* [[Installation for version 3.17|Instruction for version 3.11-3.17]]&lt;br /&gt;
* [[Installation for version 3.10 and earlier|Instruction for version 3.10 and earlier]].&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
For the sake of simplicity, the commands for the &#039;&#039;&#039;Linux Debian 12 (bookworm)&#039;&#039;&#039; operating system will be considered. For experienced system administrators, it should not be difficult to use similar commands for another operating system. If you do not feel confident in administering operating systems, we recommend you to use &#039;&#039;&#039;Debian&#039;&#039;&#039; or &#039;&#039;&#039;Ubuntu Server LTS&#039;&#039;&#039;. Because of their simplicity and because our technical support is much more familiar with Debian-like distributions. The likelihood of being able to tell you something not related to ERP USERSIDE, but related to operating system administration, will be much higher if you have Debian or a similar distribution based on it.&lt;br /&gt;
&lt;br /&gt;
On the other hand, if you are an experienced system administrator and have skills and experience with Docker, it may be more convenient for you to use a ready-made environment based on Docker images that we have prepared specially, including everything you need to run ERP USERSIDE. In this case, you will not have to configure anything, except to perform simple Docker-bundle settings https://github.com/userside/userside-docker.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
ERP USERSIDE requires various system applications and services such as PHP interpreter with a set of extensions, WEB server, database management system and others. This section will list such requirements depending on the version of ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
Also note that your operating system must be configured with the correct time zone and locale. The correct display of information and correct sorting depends on this.&lt;br /&gt;
&lt;br /&gt;
The list of required PHP extensions contains all extensions that are not part of the PHP core. Some of these extensions may come with the core PHP package or as part of the php-common package, while others must be installed additionally. &lt;br /&gt;
&lt;br /&gt;
=== 3.19 (current stable) ===&lt;br /&gt;
* PHP: 8.3&lt;br /&gt;
* PHP extensions: ctype, gd, json, libxml, mbstring, openssl, pdo, pdo_pgsql, posix, simplexml, snmp, sockets, zlib, pcntl&lt;br /&gt;
* Additional PHP extensions: ldap, soap&lt;br /&gt;
* Python: &#039;&#039;Requires Python3 of any currently supported version. The status of versions can be viewed here:&amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. It is recommended to use a version with &amp;quot;security&amp;quot; or &amp;quot;bugfix&amp;quot; status. Versions marked as &amp;quot;end-of-life&amp;quot; are not supported. Versions marked as &amp;quot;feature&amp;quot; are not recommended.&#039;&#039;&lt;br /&gt;
* Python modules: pip, venv&lt;br /&gt;
* PostgreSQL: 12+ (preferably 16)&lt;br /&gt;
* Redis: 5+ (preferably 7)&lt;br /&gt;
* RabbitMQ: 3.10+ (preferably 3.13)&lt;br /&gt;
* Supervisor&lt;br /&gt;
&lt;br /&gt;
== Main agreements ==&lt;br /&gt;
The directory where ERP USERSIDE is installed is &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Inside this directory there should be a subdirectory public, which is the root directory for the WEB server. If you want to use a different directory for ERP USERSIDE, remember to make the appropriate corrections to all the examples in these instructions.&lt;br /&gt;
&lt;br /&gt;
Create the directory:&lt;br /&gt;
 sudo mkdir -p /var/www/userside/public&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside&lt;br /&gt;
&lt;br /&gt;
You will need to allocate a domain name for ERP USERSIDE. The examples below use userside.mycompany.com, but you will need to change it to your own. Write this domain name in /etc/hosts if it is different from the hostname of the installation.&lt;br /&gt;
&lt;br /&gt;
== Installation of the required components ==&lt;br /&gt;
First install the utilities that will be required later in the installation process. They are required for any ERP USERSIDE program. You can copy the lines one at a time and paste them into the command line of your operating system.&lt;br /&gt;
&lt;br /&gt;
Copy and paste the following lines in their entirety:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/contrib-non-free.list &amp;lt;&amp;lt; EOL&lt;br /&gt;
deb http://deb.debian.org/debian/ $(lsb_release -sc) contrib non-free non-free-firmware&lt;br /&gt;
EOL&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt full-upgrade -y&lt;br /&gt;
sudo apt install -y gnupg ca-certificates lsb-release debian-archive-keyring debian-keyring libsnmp-dev snmp-mibs-downloader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
==== Alternative official repository ====&lt;br /&gt;
We strongly recommend using the latest version of PostgreSQL, as this always has a positive impact on speed. Add the official Postgres repository to the system:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo install -d /usr/share/postgresql-common/pgdg&lt;br /&gt;
&lt;br /&gt;
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc&lt;br /&gt;
&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main&amp;quot; &amp;gt; /etc/apt/sources.list.d/pgdg.list&#039;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you have a different operating system, you can find the necessary commands for it at [https://www.postgresql.org/download/ official PostgreSQL website].&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&#039;&#039;&#039;Attention!&#039;&#039;&#039; Before installing PostgreSQL, your operating system must have your local locale and correct time zone set! This can be done later, but it will be much easier if it is done before installing PostgreSQL. Run the following command to make sure the correct locale is present:&lt;br /&gt;
 locale -a&lt;br /&gt;
&lt;br /&gt;
If your local locale is not among those listed, then install it. To do this, simply edit the /etc/locale.gen file by removing the comments before the line(s) with the desired locale, and then run the command:&lt;br /&gt;
 sudo locale-gen&lt;br /&gt;
&lt;br /&gt;
If you need to change the default locale, run:&lt;br /&gt;
 sudo dpkg-reconfigure locales&lt;br /&gt;
&lt;br /&gt;
To change the time zone, execute:&lt;br /&gt;
 sudo timedatectl set-timezone Europe/Kyiv&lt;br /&gt;
&lt;br /&gt;
Now you can move on to the PostgreSQL installation:&lt;br /&gt;
 sudo apt install -y postgresql-16 postgresql-16-postgis-3&lt;br /&gt;
&lt;br /&gt;
==== Setting ====&lt;br /&gt;
Create a user and database for ERP USERSIDE. The example below creates a user named userside and a database with the same name. If your locale is not uk_UA, remember to change the command. The PostGis extension needed to work with geographic data is then connected to the database. After doing the first line, you will need to enter the password for the new user twice - make a note of this password, you will need it later to set up ERP USERSIDE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres createuser userside -P&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your PostgreSQL is installed &#039;&#039;&#039;on another server&#039;&#039;&#039;, you will need to make corrections to the postgresql.conf and pg_hba.conf files located in the /etc/postgresql/16/main/ directory. In the postgresql.conf file, you must uncomment and change the value of the parameter &amp;lt;code&amp;gt;listen_addresses&amp;lt;/code&amp;gt;, specifying there all IP addresses of the server interfaces on which it can accept connections to PostgreSQL. In the pg_hba.conf file you need to add a line at the very end, similar to the previous ones, indicating from which address the ERP USERSIDE user can connect. But if your PostgreSQL is located on the same server as USERSIDE - there is no need to make any adjustments to these files.&lt;br /&gt;
&lt;br /&gt;
=== Redis ===&lt;br /&gt;
The Debian 12 standard repository includes Redis version 7.0.15. This version is suitable for running ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
 sudo apt install -y redis-server&lt;br /&gt;
&lt;br /&gt;
==== Setting ====&lt;br /&gt;
By default Redis accepts connections without a password, but we strongly recommend setting a password. Since the password is transmitted in the clear (Redis does not provide encryption because it focuses on speed of request processing and extra steps like encryption are not applied), you need to create a really long and complex password, for example, using the &#039;&#039;&#039;openssl&#039;&#039;&#039; utility as follows:&lt;br /&gt;
&lt;br /&gt;
 openssl rand --hex 32&lt;br /&gt;
&lt;br /&gt;
The output will be a random set of 32 bytes in 16-character form, which you will use as a password. Next, you will need to substitute this generated string in place of the word &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039;. Write it down. Then you will specify this string as the Redis password in the settings.&lt;br /&gt;
&lt;br /&gt;
Specify the generated passphrase hash in the Redis configuration file:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^.*requirepass .*@requirepass MYPASSWORDHERE@g&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
where instead of &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; specify the hash of the passphrase received earlier.&lt;br /&gt;
&lt;br /&gt;
You should also disable timeout (on some versions of Redis it is enabled):&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^timeout .*@timeout 0@&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
Restart Redis and make sure it works (should get PONG in response):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart redis&lt;br /&gt;
redis-cli -h 127.0.0.1 -p 6379 -a MYPASSWORDHERE ping&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RabbitMQ ===&lt;br /&gt;
The Debian 12 standard repository includes an older version of RabbitMQ 3.10. You can use it - it is supported. However, this version is relatively old and your best bet is to install a newer version from alternative repositories. The [https://www.rabbitmq.com/install-debian.html official RabbitMQ website] has fairly detailed information on installing RabbitMQ for each operating system.&lt;br /&gt;
&lt;br /&gt;
==== Adding alternative repositories ====&lt;br /&gt;
Copy and paste the following block in its entirety into the command line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-server-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/rabbitmq.list &amp;lt;&amp;lt;EOF&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
Make sure that /etc/hosts has an entry for your hostname. The lack of such an entry (for example, if you changed the hostname after installation) is a major error that occurs when installing RabbitMQ. So it is better to make sure again that there is an entry for the hostname.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y erlang-base \&lt;br /&gt;
                    erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \&lt;br /&gt;
                    erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \&lt;br /&gt;
                    erlang-runtime-tools erlang-snmp erlang-ssl \&lt;br /&gt;
                    erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl&lt;br /&gt;
&lt;br /&gt;
sudo apt install rabbitmq-server -y --fix-missing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation of necessary add-ons ====&lt;br /&gt;
Do the next two lines one at a time!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_management --offline&lt;br /&gt;
&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_web_stomp --offline&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Setting ====&lt;br /&gt;
Copy and paste the following block in its entirety:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/rabbitmq/rabbitmq.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
listeners.tcp.default = 5672&lt;br /&gt;
&lt;br /&gt;
web_stomp.port = 15674&lt;br /&gt;
web_stomp.cowboy_opts.max_keepalive = 60&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to create users. We recommend using &#039;&#039;&#039;three different users&#039;&#039;&#039;: for server administration (full rights), for userside and modules (full rights but no administrative rights) and the web-stomp user for websocket (minimal rights to read certain broker objects). But you can only create two: an admin user, which will also be used for userside, and a user for websocket. These must necessarily be at least two different users, since the password for the websocket user is passed to the browser and can be easily read by the user. The following will show an example for the recommended three users. &lt;br /&gt;
&lt;br /&gt;
Create a &#039;&#039;&#039;user for administration&#039;&#039;&#039; RabbitMQ. This example uses the username &#039;&#039;&#039;admin&#039;&#039;&#039; and password &#039;&#039;&#039;admin_password&#039;&#039;&#039;. &lt;br /&gt;
A tag &amp;lt;code&amp;gt;administrator&amp;lt;/code&amp;gt; is assigned to the user immediately after creation, giving the user maximum administrator rights and then set permissions for vhost &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; allowing full access to configure, write and read everything within that vhost*.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;admin&amp;quot; &amp;quot;admin_password&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;admin&amp;quot; &amp;quot;administrator&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;admin&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a &#039;&#039;&#039;user on behalf of which ERP USERSIDE&#039;&#039;&#039; and modules will run. Example for the user name &#039;&#039;&#039;userside&#039;&#039;&#039; (you do not need to give admin rights to this user):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;userside&amp;quot; &amp;quot;system_password&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;userside&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;websocket&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Create a &#039;&#039;&#039;WebSTOMP user&#039;&#039;&#039; . You will need it to use notifications via WebSocket. Instead of &#039;&#039;&#039;websock-user&#039;&#039;&#039; you can specify a different user name. Instead of &#039;&#039;&#039;password_websocket&#039;&#039;&#039; specify your password, but this password will be passed in the clear to the browser, so don&#039;t make it similar to other passwords:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;websock-user&amp;quot; &amp;quot;password_websocket&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention!: You will need to specify the WebSTOMP username and password in the settings in the USERSIDE interface (Menu: Settings - Main - Websocket).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;* vhost - is a virtual host within RabbitMQ that allows different applications to differentiate between different uses of the same server. Like, for example, different databases on the same DBMS server. The default vhost is named / and almost always this is enough for you. But if you plan, for example, to run multiple copies of ERP USERSIDE on the same server, then for each copy you will need to create a different vhost and, accordingly, users for it. Please refer to [https://www.rabbitmq.com/vhosts.html official manual] for more details.‘’&lt;br /&gt;
&lt;br /&gt;
Restart the rabbitmq service:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rabbitmq-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Management ====&lt;br /&gt;
One of the commands above installs a management module in RabbitMQ that provides a convenient WEB interface to monitor, diagnose, and manage the RabbitMQ server. With this module you can monitor the server, keep track of the number of messages in queues and other statuses. All this can be done using the console utility as well &amp;lt;code&amp;gt;rabbitmqctl&amp;lt;/code&amp;gt;, but using the WEB-interface can be much clearer and more convenient.&lt;br /&gt;
&lt;br /&gt;
By default, the WEB management interface is available at http://userside.mycompany.com:15672. We recommend using a firewall to restrict access to this control interface.&lt;br /&gt;
&lt;br /&gt;
More details about the control module can be [https://www.rabbitmq.com/management.html read on the official RabbitMQ website].&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
==== Alternative repository ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
Execute the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you plan to use LDAP, you need to install the php-ldap extension:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-ldap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you plan to use TurboSMS to send SMS, you will also need the php-soap extension:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-soap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Setting ====&lt;br /&gt;
The following are commands that make changes to the configuration files.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;request_terminate_timeout =.*@request_terminate_timeout = 300@&amp;quot; /etc/php/8.3/fpm/pool.d/www.conf&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NGINX ===&lt;br /&gt;
==== Alternative official repository ====&lt;br /&gt;
The version of NGINX supplied in the Debian repository is fully usable and there is no need to add an alternative repository. However, if you want to always have the latest version, run the following lines to add the official nginx repository to your operating system:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \&lt;br /&gt;
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
echo &amp;quot;deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \&lt;br /&gt;
http://nginx.org/packages/debian `lsb_release -cs` nginx&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/sources.list.d/nginx.list&lt;br /&gt;
echo -e &amp;quot;Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/preferences.d/99nginx&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you have a different operating system, you can find the necessary commands for it on the official NGINX website: https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Setting ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^user.*;@user www-data www-data;@&amp;quot; &amp;quot;/etc/nginx/nginx.conf&amp;quot;&lt;br /&gt;
sudo systemctl restart nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following configuration example assumes that the ERP USERSIDE will be set to the system&#039;s default directory &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. If you wish to install ERP USERSIDE in a different directory, please remember to fix it in all subsequent examples. In order not to make a mistake, we recommend to use exactly the directory &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Now edit the file /etc/nginx/conf.d/default.conf. Or delete it and create a file named /etc/nginx/conf.d/userside.conf. In either case, regardless of your choice, the contents of the file should be as follows (instead of userside.mycompany.com, specify your domain name):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen       80 default_server;&lt;br /&gt;
    server_name  userside.mycompany.com;&lt;br /&gt;
    charset      utf-8;&lt;br /&gt;
    client_max_body_size 100M;&lt;br /&gt;
&lt;br /&gt;
    access_log  /var/log/nginx/userside-access.log;&lt;br /&gt;
    error_log   /var/log/nginx/userside-error.log;&lt;br /&gt;
&lt;br /&gt;
    root   /var/www/userside/public;&lt;br /&gt;
    index  index.php;&lt;br /&gt;
&lt;br /&gt;
    location = /favicon.ico { access_log off; log_not_found off; }&lt;br /&gt;
    location = /robots.txt  { access_log off; log_not_found off; }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~* ^.+\.(css|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {&lt;br /&gt;
        access_log    off;&lt;br /&gt;
        log_not_found off;&lt;br /&gt;
        expires       max;&lt;br /&gt;
        add_header    Pragma public;&lt;br /&gt;
        add_header    Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ \.php$ {&lt;br /&gt;
        try_files     $uri =404;&lt;br /&gt;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
        fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
        fastcgi_index index.php;&lt;br /&gt;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
        fastcgi_read_timeout 300;&lt;br /&gt;
        include       fastcgi_params;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location /ws {&lt;br /&gt;
        proxy_pass http://127.0.0.1:15674/ws;&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header Connection &amp;quot;Upgrade&amp;quot;;&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ /\.ht { deny  all; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want to configure SSL and something else. This topic is beyond the scope of this manual.&lt;br /&gt;
&lt;br /&gt;
If you have installed RabbitMQ &#039;&#039;&#039;on another server&#039;&#039;&#039;, or changed the value of the WebSTOMP port from 15674 to some other, then specify the IP address of the server with RabbitMQ and the port number in the line &amp;lt;code&amp;gt;proxy_pass http://127.0.0.1:15674/ws;&amp;lt;/code&amp;gt;. The protocol must remain http. The path must remain /ws.&lt;br /&gt;
&lt;br /&gt;
Check the configuration and if it is ok restart nginx:&lt;br /&gt;
 sudo nginx -t &amp;amp;&amp;amp; sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&#039;&#039;Requires Python3 of any currently supported version. The status of versions can be viewed here:&amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. It is recommended to use a version with &amp;quot;security&amp;quot; or &amp;quot;bugfix&amp;quot; status. Versions marked as &amp;quot;end-of-life&amp;quot; are not supported. Versions marked as &amp;quot;feature&amp;quot; are not recommended.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have an unsupported version (&amp;quot;end-of-life&amp;quot;) installed on your host, you should be sure to [[Python-update_EN|install additionally]] a more recent version of Python.&lt;br /&gt;
&lt;br /&gt;
==== Installing the required packages ====&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv libffi-dev pkg-config&lt;br /&gt;
&lt;br /&gt;
=== Supervisor ===&lt;br /&gt;
 sudo apt install -y supervisor&lt;br /&gt;
&lt;br /&gt;
== Downloading and launching the installer ==&lt;br /&gt;
&lt;br /&gt;
See also: [[Installer|Installer Help]]&lt;br /&gt;
&lt;br /&gt;
1. navigate to the system catalogue&lt;br /&gt;
 cd /var/www/userside&lt;br /&gt;
&lt;br /&gt;
2. download the installer script&lt;br /&gt;
 sudo -u www-data php -r &amp;quot;copy(&#039;https://my.userside.eu/install&#039;, &#039;userside_install.phar&#039;);&amp;quot; &lt;br /&gt;
&lt;br /&gt;
3. run installer&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
During operation, the installer verifies compliance with technical requirements, requests access parameters, and checks connections to server services.&lt;br /&gt;
&lt;br /&gt;
You can enter any ERP USERSIDE version number available to you for installation. To do this, you can enter the version number from the list (it contains only the latest version of each branch) or enter the entire version number if it is not on the list.&lt;br /&gt;
&lt;br /&gt;
When the installer finishes, a message will be displayed indicating that the installation was successful.&lt;br /&gt;
&lt;br /&gt;
If you did not install as a web server user, be sure to make that user the owner of all userside files recursively after the installation is complete!&lt;br /&gt;
&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside&lt;br /&gt;
 sudo chmod -R u=rwX,g=rwX,o=r /var/www/userside&lt;br /&gt;
&lt;br /&gt;
== Setting up after installation ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration of system services ===&lt;br /&gt;
After installation, copy the sample configuration files of the system services and, if necessary, customise them (for example, specify the path to the userside directory if it is different from /var/www/userside). Run the commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp etc/us-core-worker.conf-example /etc/supervisor/conf.d/us-core-worker.conf&lt;br /&gt;
sudo cp microservice/poller/etc/usm_poller.conf-example /etc/supervisor/conf.d/usm_poller.conf&lt;br /&gt;
sudo cp etc/logrotate-example /etc/logrotate.d/userside&lt;br /&gt;
sudo cp microservice/poller/etc/logrotate-example /etc/logrotate.d/usm_poller&lt;br /&gt;
sudo cp etc/crontab-example /etc/cron.d/userside&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation of necessary dependencies for usm_poller ===&lt;br /&gt;
Create a venv virtual environment for python and install the dependent modules as shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H python3 -m venv venv&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Running the supervisor ===&lt;br /&gt;
The Supervisor controls the operation of the services specified in its configuration. To launch the supervisor, run the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart supervisor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After the supervisor is launched, after a few seconds you can observe the state of all the services it controls. All services must be in the RUNNING state:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Immediately after the installation ==&lt;br /&gt;
This completes the installation of ERP USERSIDE. Now perform the following steps:&lt;br /&gt;
* Open the system page &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://userside.mydomain.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; and login &#039;&#039;(default username: Admin, password: 1234)&#039;&#039;.&lt;br /&gt;
* Configure Websocket under: Settings - Main - WebSocket. Enable and enter the username and password of the WebStomp user you created earlier under RabbitMQ.&lt;br /&gt;
* Make main settings in the section: [[Settings_-_Main|Settings - Main]].&lt;br /&gt;
* Configure interaction with [[Supported_billings|billing]] according to the [[Setting_up_interactions_with_a_billing|instructions]].&lt;br /&gt;
* Read the instructions on the page: [[Start_EN|Where to start?]].&lt;br /&gt;
* Configure the [[UserSide_API_Key|API Key]].&lt;br /&gt;
&lt;br /&gt;
== System upgrade ==&lt;br /&gt;
We try to do our best to ensure that the likelihood of an end-to-end upgrade from any version to the latest version is successful. However, it sometimes happens that due to some ancient problems with the database structure that never prevented you from working before, a situation may arise in which an end-to-end upgrade is not possible. In this case you will have to upgrade step by step to each next latest version. For example, from 3.14.80 first to 3.15.60, then to 3.16.39, and so on.&lt;br /&gt;
&lt;br /&gt;
Before upgrading, be sure to read about all the changes you need to make to upgrade for each version that lies between yours and the one you are going to upgrade to.&lt;br /&gt;
&lt;br /&gt;
We recommend making a copy of your system to safely perform the upgrade. Refer to [[HOWTO: USERSIDE cloning]]. You can always delete the copy and start over. This is easy and safe. But if you wish to upgrade a running system, perform it at times of least stress, with time to spare for disaster recovery if something goes wrong. Always be sure to back up your database and files before upgrading. If an update is interrupted, especially during the data migration phase, there is a risk that it will be very difficult or even impossible to restore the data correctly. In general, the responsibility for having an up-to-date backup lies entirely with you.&lt;br /&gt;
&lt;br /&gt;
==== Upgrade process ====&lt;br /&gt;
We strongly recommend performing test upgrades on a [[HOWTO: USERSIDE cloning|copy of the system]].&lt;br /&gt;
&lt;br /&gt;
To perform an upgrade, run the installer in install mode and follow the instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After upgrading the USERSIDE, you should be sure to upgrade the usm_poller dependencies:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we need to restart all the services that are supervised by the supervisor and make sure that all of them start and are in the RUNNING state:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== System maintenance ==&lt;br /&gt;
To keep the system up to date and to ensure reliable operation in the future, it is recommended that you follow a few simple steps:&lt;br /&gt;
* periodically back up the database&lt;br /&gt;
* periodically create a backup copy of uploaded files (this can be done simply by archiving the /var/www/userside/var/attachments directory and the .env file)&lt;br /&gt;
* periodically monitor server performance (using htop, atop) and the RabbitMQ broker and make decisions about scaling fpm pools, kernel background processes and microservices&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
Set up periodic backups of the database and user files. Preferably at least once a day when the server is least loaded. In PostgreSQL, there are two ways to back up the database: dump and sql-script. Each of them has its own advantages and disadvantages. The first one creates a secure dump of the entire database, while the second one creates a SQL script that can restore both structure and data. We recommend referring to [https://www.postgresql.org/docs/current/app-pgdump.html documentation on how to use the pg_dump command] for a more suitable method or set of parameters for you.&lt;br /&gt;
&lt;br /&gt;
Below are two commands for creating a database backup - choose one of them and add it to your crontab:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# SQL-script&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside &amp;gt; /backup/userside.sql.gz&lt;br /&gt;
&lt;br /&gt;
# DUMP&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside &amp;gt; /backup/userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To create a minimal backup of &#039;&#039;&#039;files&#039;&#039;&#039; you can use the following command (for version 3.15 and later):&lt;br /&gt;
 sudo tar -czf /backup/userside.tgz .env common/config/settings.json var/attachments&lt;br /&gt;
These files together with the database will be enough to restore USERSIDE. But you can back up the entire /var/www/userside directory for more reliability.&lt;br /&gt;
&lt;br /&gt;
=== Restoring from a backup ===&lt;br /&gt;
The pg_restore command is used to restore from a dump. [https://postgrespro.ru/docs/postgresql/13/app-pgrestore Documentation on using pg_restore]. The psql utility is used to restore from a SQL script. [https://www.postgresql.org/docs/current/app-psql.html Documentation on using psql].&lt;br /&gt;
&lt;br /&gt;
Before restoring the database from a backup, you must be sure to stop USERSIDE.&lt;br /&gt;
&lt;br /&gt;
1. Stop cron userside and all modules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside-modules ~/cron&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Stop running background services&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Stop php-fpm from running&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only then can you proceed to restore the database from a backup copy.&lt;br /&gt;
&lt;br /&gt;
==== SQL-script ====&lt;br /&gt;
To restore a database from a backup as a SQL script, you must first recreate the database and then restore to an empty backup database:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
gunzip &amp;lt; userside.sql.gz | sudo -u postgres psql -d userside -v ON_ERROR_STOP=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DUMP ====&lt;br /&gt;
The dump contains the entire database with all its elements. Therefore, before restoring a database from a dump, it must not exist on the server - delete the database before restoring from a dump. It is also important that the database user (the owner of all items) already exists - create it before restoring if you are restoring the database on a new server where the required user does not exist yet.&lt;br /&gt;
&lt;br /&gt;
Also note that the dump structure may not be compatible between different versions of PostgreSQL. This is not necessarily the case, but it is likely.&lt;br /&gt;
&lt;br /&gt;
To restore from the dump, use the commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres pg_restore --clean --if-exists --create --exit-on-error --dbname=postgres userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the database name in the command must be &#039;&#039;&#039;postgres&#039;&#039;&#039;, because the entire database is restored from the dump, not its contents.&lt;br /&gt;
&lt;br /&gt;
==== After restoring the database ====&lt;br /&gt;
After restoring the database in any way, you must clear the ERP USERSIDE cache, as the cache now contains different data from the database. Go to the /var/www/userside directory and run the clear cache command (first, if a password is used, or second, if it is not used):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -a $US_REDIS_PASSWORD -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Restore services that were stopped before performing the backup:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mv ~/cron/* /etc/cron.d&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Run the restore command to make the system files match the database version and check the system for file integrity.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar repair&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=20342</id>
		<title>Установка</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=20342"/>
		<updated>2025-05-01T14:55:02Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Настройка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
[[Installation|en]] | [[Установка|ru]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ВНИМАНИЕ: Данная инструкция актуальна для версий ERP USERSIDE 3.19&#039;&#039;&#039;&lt;br /&gt;
* [[Установка для версии 3.18|Инструкция для версии 3.18]]&lt;br /&gt;
* [[Установка для версии 3.17|Инструкция для версии 3.11-3.17]]&lt;br /&gt;
* [[Установка для версии 3.10 и более ранних|Инструкция для версии 3.10 и ранее]].&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
В целях упрощения будут рассмотрены команды для операционной системы &#039;&#039;&#039;Linux Debian 12 (bookworm)&#039;&#039;&#039;. Для опытных системных администраторов не составит труда использовать аналогичные команды для другой операционной системы. Если же вы не чувствуете себя уверено в администрировании операционных систем, то мы рекомендуем вам использовать операционную систему &#039;&#039;&#039;Debian&#039;&#039;&#039; либо &#039;&#039;&#039;Ubuntu Server LTS&#039;&#039;&#039;. Из-за их простоты, а также по причине того, что наша техническая поддержка значительно лучше разбирается в Debian-подобных дистрибутивах. Вероятность подсказать что-либо не касающееся ERP USERSIDE, но касающееся администрирования операционной системы, будет значительно выше, если у вас будет Debian или подобный дистрибутив на его основе.&lt;br /&gt;
&lt;br /&gt;
С другой стороны, если вы опытный системный администратор и имеете навыки и опыт работы с Docker, возможно для вас будет более удобным вариант использования готового окружения на базе Docker-образов, которые мы подготовили специально, включив в них всё необходимое для работы ERP USERSIDE. В этом случае вам не придется ничего настраивать, кроме как выполнить простые настройки Docker-бандла https://github.com/userside/userside-docker.&lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Для работы ERP USERSIDE необходимы различные системные приложения и службы, такие как интерпретатор языка PHP с набором расширений, WEB-сервер, система управления базами данных и прочие. В этом разделе будут перечислены такие требования в зависимости от версии ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание, что ваша операционная система должна быть сконфигурирована с корректным часовым поясом и локалью. От этого зависит правильность отображения информации и корректность сортировки.&lt;br /&gt;
&lt;br /&gt;
Список требуемых расширений PHP содержит все расширения, не входящие в состав ядра PHP. Часть из этих расширений может поставляться вместе с основным пакетом PHP либо в составе пакета php-common, другая же часть должна быть установлена дополнительно. &lt;br /&gt;
&lt;br /&gt;
=== 3.19 (текущая стабильная) ===&lt;br /&gt;
* PHP: 8.3&lt;br /&gt;
* Расширения PHP: ctype, gd, json, libxml, mbstring, openssl, pdo, pdo_pgsql, posix, simplexml, snmp, sockets, zlib, pcntl&lt;br /&gt;
* Дополнительные расширения PHP: ldap, soap&lt;br /&gt;
* Python: &#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать.&#039;&#039;&lt;br /&gt;
* Модули Python: pip, venv&lt;br /&gt;
* PostgreSQL: 12+ (желательно 16)&lt;br /&gt;
* Redis: 5+ (желательно 7)&lt;br /&gt;
* RabbitMQ: 3.10+ (желательно 3.13)&lt;br /&gt;
* Supervisor&lt;br /&gt;
&lt;br /&gt;
== Основные договорённости ==&lt;br /&gt;
Каталог, в который устанавливается ERP USERSIDE - &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Внутри этого каталога должен быть подкаталог public, который является корневым каталогом для WEB-сервера. Если вы хотите использовать другой каталог для ERP USERSIDE, не забывайте вносить соответствующие исправления во все примеры из данной инструкции.&lt;br /&gt;
&lt;br /&gt;
Создайте каталог:&lt;br /&gt;
 sudo mkdir -p /var/www/userside/public&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside&lt;br /&gt;
&lt;br /&gt;
Вам необходимо выделить доменное имя для ERP USERSIDE. В примерах ниже используется userside.mycompany.com, но вам необходимо будет заменить его на свое. Пропишите это доменное имя в /etc/hosts, если оно отличается от имени хоста, на котором производистя установка.&lt;br /&gt;
&lt;br /&gt;
== Установка необходимых компонентов ==&lt;br /&gt;
Сперва установите утилиты, которые будут необходимы далее в процессе установки. Они необходимы для любой верии ERP USERSIDE. Вы можете копировать строки по одной и вставлять их в командную строку вашей операционной системы.&lt;br /&gt;
&lt;br /&gt;
Следующие строки скопируйте и вставьте целиком:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/contrib-non-free.list &amp;lt;&amp;lt; EOL&lt;br /&gt;
deb http://deb.debian.org/debian/ $(lsb_release -sc) contrib non-free non-free-firmware&lt;br /&gt;
EOL&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt full-upgrade -y&lt;br /&gt;
sudo apt install -y gnupg ca-certificates lsb-release debian-archive-keyring debian-keyring libsnmp-dev snmp-mibs-downloader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
==== Альтернативный официальный репозиторий ====&lt;br /&gt;
Мы настоятельно рекомендуем использовать последнюю версию PostgreSQL, так как это всегда положительно сказывается на скорости работы. Добавьте в систему официальный репозиторий Postgres:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo install -d /usr/share/postgresql-common/pgdg&lt;br /&gt;
&lt;br /&gt;
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc&lt;br /&gt;
&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main&amp;quot; &amp;gt; /etc/apt/sources.list.d/pgdg.list&#039;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если у вас другая операционная система, вы можете найти необходимые команды для нее на [https://www.postgresql.org/download/ официальном сайте PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
&#039;&#039;&#039;Внимание!&#039;&#039;&#039; Перед установкой PostgreSQL в вашей операционной системе должна быть установлена ваша местная локаль и корректный часовой пояс! Это можно сделать и позже, но будет намного проще, если это будет сделано до установки PostgreSQL. Выполните следующую команду, чтобы убедиться, что нужная локаль присутствует:&lt;br /&gt;
 locale -a&lt;br /&gt;
&lt;br /&gt;
Если среди перечисленных нет вашей местной локали, то установите ее. Для этого достаточно отредактировать файл /etc/locale.gen убрав комментарии перед строкой (строками) с нужной локалью, а затем выполнить команду:&lt;br /&gt;
 sudo locale-gen&lt;br /&gt;
&lt;br /&gt;
Если вам нужно изменить локаль по умолчанию, то выполните:&lt;br /&gt;
 sudo dpkg-reconfigure locales&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить часовой пояс, выполните:&lt;br /&gt;
 sudo timedatectl set-timezone Europe/Kyiv&lt;br /&gt;
&lt;br /&gt;
Теперь можно перейти к установке PostgreSQL:&lt;br /&gt;
 sudo apt install -y postgresql-16 postgresql-16-postgis-3&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Создайте пользователя и базу данных для ERP USERSIDE. В примере ниже создается пользователь с именем userside и база данных с таким же именем. Если ваша локаль не uk_UA, не забудьте изменить команду. Затем к базе данных подключается расширение PostGis, необходимое для работы с географическими данными. После выполнения первой строки, вам необходимо будет дважды ввести пароль для нового пользователя - запишите этот пароль, он понадобится вам далее для установки ERP USERSIDE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres createuser userside -P&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ваш PostgreSQL установлен &#039;&#039;&#039;на другом сервере&#039;&#039;&#039;, то вам необходимо будет внести коррекции в файлы postgresql.conf и pg_hba.conf, расположенные в каталоге /etc/postgresql/16/main/. В файле postgresql.conf необходимо раскомментировать и изменить значение параметра &amp;lt;code&amp;gt;listen_addresses&amp;lt;/code&amp;gt;, указав там все IP-адреса интерфейсов сервера, на которых он может принимать подключения к PostgreSQL. В файле pg_hba.conf необходимо в самом конце добавить строку по аналогии с предыдущими, указывающую, с какого адреса может подключаться пользователь ERP USERSIDE. Но если ваш PostgreSQL расположен на том же сервере, что и USERSIDE - нет необходимости вносить какие либо корректировки в эти файлы.&lt;br /&gt;
&lt;br /&gt;
=== Redis ===&lt;br /&gt;
Стандартный репозиторий Debian 12 включает версию Redis 7.0.15. Эта версия подходит для работы ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
 sudo apt install -y redis-server&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
По умолчанию Redis принимает подключения без пароля, но мы настоятельно рекомендуем установить пароль. Так как пароль передается в открытом виде (Redis не предусматривает шифрования, т.к. делает упор на скорость обработки запросов и лишние этапы вроде шифрования не применяются), вам нужно создать действительно длинный и сложный пароль, например, используя утилиту &#039;&#039;&#039;openssl&#039;&#039;&#039; следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rand --hex 32&lt;br /&gt;
&lt;br /&gt;
На выходе вы получите случайный набор из 32 байт в 16-ричном виде, который и будете использовать в качестве пароля. Далее нужно будет вместо слова &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; подставить эту сгенерированную строку. Запишите его. Далее в настройках вы будете указывать эту строку как пароль Redis.&lt;br /&gt;
&lt;br /&gt;
Укажите полученный хэш парольной фразы в конфигурационном файле Redis:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^.*requirepass .*@requirepass MYPASSWORDHERE@g&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
где вместо &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; укажите хэш парольной фразы поулченый ранее.&lt;br /&gt;
&lt;br /&gt;
Также необходимо отключить таймаут (на некоторых версиях Redis он включен):&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^timeout .*@timeout 0@&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
Перезапустите Redis и убедитесь, что он работает (в ответ должны получить PONG):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart redis&lt;br /&gt;
redis-cli -h 127.0.0.1 -p 6379 -a MYPASSWORDHERE ping&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RabbitMQ ===&lt;br /&gt;
Стандартный репозиторий Debian 12 включает старую версию RabbitMQ 3.10. Вы можете использовать ее — она поддерживается. Однако, эта версия относительно старая и лучшим вариантом будет установить новую версию из альтернативных репозиториев. На [https://www.rabbitmq.com/install-debian.html официальном сайте RabbitMQ] находится достаточно подробная информация по установке RabbitMQ для каждой операционной системы.&lt;br /&gt;
&lt;br /&gt;
==== Добавление альтернативных репозиториев ====&lt;br /&gt;
Следующий блок скопируйте и вставьте целиком в командную строку&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-server-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/rabbitmq.list &amp;lt;&amp;lt;EOF&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
Убедитесь, что в /etc/hosts есть запись для имени вашего хоста. Отсутствие такрой записи (например, если вы изменили имя хоста после инсталляции) является основной ошибкой, возникающей при установке RabbitMQ. Так что лучше еще раз убедитесь, что запись соответствующая имени хосту имеется.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y erlang-base \&lt;br /&gt;
                    erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \&lt;br /&gt;
                    erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \&lt;br /&gt;
                    erlang-runtime-tools erlang-snmp erlang-ssl \&lt;br /&gt;
                    erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl&lt;br /&gt;
&lt;br /&gt;
sudo apt install rabbitmq-server -y --fix-missing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка необходимых дополнений ====&lt;br /&gt;
Следующие две строки выполняйте по одной за раз!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_management --offline&lt;br /&gt;
&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_web_stomp --offline&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Скопируйте и вставьте целиком следующий блок:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/rabbitmq/rabbitmq.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
listeners.tcp.default = 5672&lt;br /&gt;
&lt;br /&gt;
web_stomp.port = 15674&lt;br /&gt;
web_stomp.cowboy_opts.max_keepalive = 60&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать пользователей. Мы рекомендуем использовать &#039;&#039;&#039;три различных пользователя&#039;&#039;&#039;: для администрирования сервера (полные права), для userside и модулей (полные права но без административных) и пользователя web-stomp для websocket (минимальные права на чтение определенных объектов брокера). Но вы можете создать только два: администратора, который также будете использоваться для USERSIDE, и пользователя для websocket. Это обязательно должны быть минимум два разных пользователя, так как пароль для websocket пользователя передается в браузер и может быть легко прочитан пользователем. Далее будет показан пример для рекомендуемых трех пользователей. &lt;br /&gt;
&lt;br /&gt;
Создайте &#039;&#039;&#039;пользователя для администрирования&#039;&#039;&#039; RabbitMQ. В данном примере используется имя пользователя &#039;&#039;&#039;admin&#039;&#039;&#039; и пароль &#039;&#039;&#039;пароль_администратора&#039;&#039;&#039;. Пользователю сразу после создания присваивается тэг &amp;lt;code&amp;gt;administrator&amp;lt;/code&amp;gt;, наделяющий пользователя максимальными правами администратора и затем устанавливаются разрешения для vhost &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; позволяющие полный доступ к конфигурированию, записи и чтению всего в пределах этого vhost*.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;admin&amp;quot; &amp;quot;пароль_администратора&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;admin&amp;quot; &amp;quot;administrator&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;admin&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создайте &#039;&#039;&#039;пользователя, от имени которого будут работать ERP USERSIDE&#039;&#039;&#039; и модули. Пример для имени пользователя &#039;&#039;&#039;userside&#039;&#039;&#039; (наделять админскими правами этого пользователя не нужно):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;userside&amp;quot; &amp;quot;пароль_системы&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;userside&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;websocket&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Создайте &#039;&#039;&#039;пользователя WebSTOMP&#039;&#039;&#039;. Он понадобится для использования уведомлений через WebSocket. Вместо &#039;&#039;&#039;websock-user&#039;&#039;&#039; вы можете указать другое имя пользователя. Вместо &#039;&#039;&#039;пароль_websocket&#039;&#039;&#039; укажите свой пароль, но этот пароль будет передаваться в открытом виде в браузер, так что не делайте его похожим на остальные пароли:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;websock-user&amp;quot; &amp;quot;пароль_websocket&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внимание! Имя пользователя и пароль WebSTOMP вам нужно будет указать в настройках в интерфейсе USERSIDE (Меню: Настройки - Основные - Websocket).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;* vhost - это виртуальный хост внутри RabbitMQ, позволяющий разграничить различные варианты использования одного и того же сервера разными приложениями. Как, например, разные базы данных на одном сервере СУБД. vhost по умолчанию имеет имя / и почти всегда вам этого достаточно. Но если вы планируете, например, запустить несколько копий ERP USERSIDE на одном сервере, то для каждой копии вам нужно будет создать свой vhost и, соответственно, пользователей для него. Подробней обратитесь к [https://www.rabbitmq.com/vhosts.html официальному руководству].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Перезапустите службу rabbitmq:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rabbitmq-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Управление ====&lt;br /&gt;
Одна из команд, приведенных выше, устанавливает в RabbitMQ модуль управления, предоставляющий удобный WEB-интерфейс для мониторинга, диагностики и управления сервером RabbitMQ. При помощи этого модуля можно осуществлять мониторинг сервера, следить за количеством сообщений в очередях и другими состояниями. Всё это можно делать и используя консольную утилиту &amp;lt;code&amp;gt;rabbitmqctl&amp;lt;/code&amp;gt;, но использование WEB-интерфейса может быть значительно наглядней и удобней.&lt;br /&gt;
&lt;br /&gt;
По умолчанию WEB-интерфейс управления доступен по адресу http://userside.mycompany.com:15672. Рекомендуем использовать фаервол, чтобы ограничить доступ к этому интерфейсу управления.&lt;br /&gt;
&lt;br /&gt;
Подробнее о модуле управления можно [https://www.rabbitmq.com/management.html прочитать на официальном сайте RabbitMQ].&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
==== Альтернативный репозиторий ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
Выполните следующие команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы планируете использовать LDAP, необходимо установить расширение php-ldap:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-ldap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы планируете использовать отправку SMS используя TurboSMS, также понадобится расширение php-soap:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-soap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Далее приведены команды, вносящие изменения в файлы конфигурации.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;request_terminate_timeout =.*@request_terminate_timeout = 300@&amp;quot; /etc/php/8.3/fpm/pool.d/www.conf&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NGINX ===&lt;br /&gt;
==== Альтернативный официальный репозиторий ====&lt;br /&gt;
Версия NGINX, поставляемая в репозитории Debian, полностью подходит для использования и нет необходимости в добавлении альтернативного репозитория. Однако, если вам хочется всегда иметь последнюю версию, то выполните следующие строки, чтобы добавить в операционную систему официальный репозиторий nginx:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \&lt;br /&gt;
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
echo &amp;quot;deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \&lt;br /&gt;
http://nginx.org/packages/debian `lsb_release -cs` nginx&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/sources.list.d/nginx.list&lt;br /&gt;
echo -e &amp;quot;Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/preferences.d/99nginx&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если у вас другая операционная система, вы можете найти необходимые команды для нее на официальном сайте NGINX: https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^user.*;@user www-data www-data;@&amp;quot; &amp;quot;/etc/nginx/nginx.conf&amp;quot;&lt;br /&gt;
sudo systemctl restart nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующий пример настройки подразумевает, что ERP USERSIDE будет установлен в стандартный каталог системы &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Если вы желаете установить ERP USERSIDE в другой каталог, пожалуйста, не забывайте исправлять его во всех последующих примерах. Чтобы не ошибиться, мы рекомендуем использовать именно каталог &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь отредактируйте файл /etc/nginx/conf.d/default.conf. Либо удалите его и создайте файл с именем /etc/nginx/conf.d/userside.conf. В любом случае, не зависимо от вашего выбора, содержимое файла должно быть следующим (вместо userside.mycompany.com укажите свое доменное имя):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen       80 default_server;&lt;br /&gt;
    server_name  userside.mycompany.com;&lt;br /&gt;
    charset      utf-8;&lt;br /&gt;
    client_max_body_size 100M;&lt;br /&gt;
&lt;br /&gt;
    access_log  /var/log/nginx/userside-access.log;&lt;br /&gt;
    error_log   /var/log/nginx/userside-error.log;&lt;br /&gt;
&lt;br /&gt;
    root   /var/www/userside/public;&lt;br /&gt;
    index  index.php;&lt;br /&gt;
&lt;br /&gt;
    location = /favicon.ico { access_log off; log_not_found off; }&lt;br /&gt;
    location = /robots.txt  { access_log off; log_not_found off; }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~* ^.+\.(css|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {&lt;br /&gt;
        access_log    off;&lt;br /&gt;
        log_not_found off;&lt;br /&gt;
        expires       max;&lt;br /&gt;
        add_header    Pragma public;&lt;br /&gt;
        add_header    Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ \.php$ {&lt;br /&gt;
        try_files     $uri =404;&lt;br /&gt;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
        fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
        fastcgi_index index.php;&lt;br /&gt;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
        fastcgi_read_timeout 300;&lt;br /&gt;
        include       fastcgi_params;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location /ws {&lt;br /&gt;
        proxy_pass http://127.0.0.1:15674/ws;&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header Connection &amp;quot;Upgrade&amp;quot;;&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ /\.ht { deny  all; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также, возможно, вы захотите настроить SSL и что-либо еще. Эта тема выходит за рамки данной инстуркции.&lt;br /&gt;
&lt;br /&gt;
Если Вы установили RabbitMQ &#039;&#039;&#039;на другом сервере&#039;&#039;&#039;, либо изменили значение порта WebSTOMP с 15674 на какой-то другой, то укажите IP-адрес сервера с RabbitMQ и номер порта в строке &amp;lt;code&amp;gt;proxy_pass http://127.0.0.1:15674/ws;&amp;lt;/code&amp;gt;. Протокол должен оставаться http. Путь должен оставаться /ws.&lt;br /&gt;
&lt;br /&gt;
Проверьте конфигурацию и если она в порядке перезагрузите nginx:&lt;br /&gt;
 sudo nginx -t &amp;amp;&amp;amp; sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Если у вас на хосте неподдерживаемая версия (&amp;quot;end-of-life&amp;quot;), то нужно обязательно [[Python-update|установить дополнительно]] более свежую версию Python.&lt;br /&gt;
&lt;br /&gt;
==== Установка необходимых пакетов ====&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv libffi-dev pkg-config&lt;br /&gt;
&lt;br /&gt;
=== Supervisor ===&lt;br /&gt;
 sudo apt install -y supervisor&lt;br /&gt;
&lt;br /&gt;
== Загрузка и запуск инсталлятора ==&lt;br /&gt;
&lt;br /&gt;
См. также: [[Инсталлятор|Справку по инсталлятору]]&lt;br /&gt;
&lt;br /&gt;
1. перейти в каталог системы&lt;br /&gt;
 cd /var/www/userside&lt;br /&gt;
&lt;br /&gt;
2. загрузить скрипт-инсталлятор&lt;br /&gt;
 sudo -u www-data php -r &amp;quot;copy(&#039;https://my.userside.eu/install&#039;, &#039;userside_install.phar&#039;);&amp;quot; &lt;br /&gt;
&lt;br /&gt;
3. запустить инсталлятор&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
В процессе работы инсталлятор проверяет соответствие техническим требованиям, запрашивает параметры доступа и проверяет соединения со службами сервера.&lt;br /&gt;
&lt;br /&gt;
Вы можете ввести любой доступный вам номер версии ERP USERSIDE для установки. Для этого можете ввести порядковый номер версии из списка (он содержит только последние версии каждой ветки) либо ввести номер версии целиком, если ее нет в списке.&lt;br /&gt;
&lt;br /&gt;
По окончанию работы инсталлятора будет выведено сообщение об успешной установке.&lt;br /&gt;
&lt;br /&gt;
Если вы произвели установку не от имени пользователя веб-сервера, то обязательно после окончания установки сделайте его владельцем всех файлов userside рекурсивно!&lt;br /&gt;
&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside&lt;br /&gt;
 sudo chmod -R u=rwX,g=rwX,o=r /var/www/userside&lt;br /&gt;
&lt;br /&gt;
== Настройка после установки ==&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация системных служб ===&lt;br /&gt;
После установки необходимо скопировать примеры конфигурационных файлов системных служб и, при необходимости, настроить их (например, указать путь к каталогу userside, если он отличается от /var/www/userside). Выполните команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp etc/us-core-worker.conf-example /etc/supervisor/conf.d/us-core-worker.conf&lt;br /&gt;
sudo cp microservice/poller/etc/usm_poller.conf-example /etc/supervisor/conf.d/usm_poller.conf&lt;br /&gt;
sudo cp etc/logrotate-example /etc/logrotate.d/userside&lt;br /&gt;
sudo cp microservice/poller/etc/logrotate-example /etc/logrotate.d/usm_poller&lt;br /&gt;
sudo cp etc/crontab-example /etc/cron.d/userside&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка необходимых зависимостей для usm_poller ===&lt;br /&gt;
Создайте виртуальное окружение venv для python и установите зависимые модули, как показано далее:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H python3 -m venv venv&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Запуск супервизора ===&lt;br /&gt;
Супервизор контролирует работу служб, указанных в его конфигурации. Для запуска супервизора выполните:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart supervisor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После запуска супервизора, спустя несколько секунд можно понаблюдать за состоянием всех контролируемых им служб. Все службы должны быть в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сразу после установки ==&lt;br /&gt;
На этом установка ERP USERSIDE закончена. Теперь выполните следующие шаги:&lt;br /&gt;
* Откройте страницу системы &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://userside.mydomain.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; и выполните вход &#039;&#039;(по умолчанию имя пользователя: Admin, пароль: 1234)&#039;&#039;.&lt;br /&gt;
* Выполните настройку Websocket в разделе: Настройка - Основная - WebSocket. Включите и впишите имя пользователя и пароль WebStomp пользователя, которого вы создавали ранее в разделе RabbitMQ.&lt;br /&gt;
* Выполните основные настройки в разделе: [[Настройка - Основная|Настройка - Основная]].&lt;br /&gt;
* Настройте взаимодействие с [[Поддерживаемые биллинги|биллингом]] в соответствии с [[Настройка взаимодействия с биллингом|инструкциями]].&lt;br /&gt;
* Ознакомьтесь с инструкциями на странице: [[С чего начать?]].&lt;br /&gt;
* Настройте [[UserSide API Key|API-ключ]].&lt;br /&gt;
&lt;br /&gt;
== Обновление системы ==&lt;br /&gt;
Мы стараемся делать все возможное, чтобы вероятность сквоздного обновления с любой версии до последней версии было успешным. Однако, иногда бывает так, что из-за каки-то старинных проблем со структурой базы данных, которые никогда не мешали работать раньше, может возникнуть ситуация, при которой сквоздное обновление невозможно. В таком случае вам придется обновляться поэтапно на каждую следующую последнюю версию. Например, с 3.14.80 сначала на 3.15.60, затем на 3.16.39 и так далее.&lt;br /&gt;
&lt;br /&gt;
Перед обновлением обязательно прочитайте обо всех изменениях, которые необходимо выполнить для обновления для каждой версии, которая лежит между вашей и той, на которую вы собираетесь обновиться.&lt;br /&gt;
&lt;br /&gt;
Мы рекомендуем сделать копию системы для безопасного проведения обновления. Обратитесь к разделу [[HOWTO: Клонирование USERSIDE]]. Вы всегда можете удалить копию и начать сначала. Это просто и безопасно. Но если вы желаете обновить работающую систему, то выполняйте его в моменты наименьшей нагрузки с запасом по времени, необходимым для аварийного восстановления, если вдруг что-то пойдет не так. Всегда обязательно делайте резервную копию базы данных и файлов перед обновлениями. Если обновление будет прервано, особенно на этапе миграции данных, то есть риск того, что восстановить корректно данные будет очень непросто или даже невозможно. В общем, ответственность за наличие актуальной резервной копии лежит целиком на вас.&lt;br /&gt;
&lt;br /&gt;
==== Процесс обновления ====&lt;br /&gt;
Мы настоятельно рекомендуем выполнять тестовые обновления на [[HOWTO:_Клонирование_USERSIDE|копии системы]].&lt;br /&gt;
&lt;br /&gt;
Для проведения обновления запустите инсталлятор в режиме install и следуйте инструкциям:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После обновления USERSIDE нужно обязательно обновить зависимости usm_poller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно перезапустить все службы, которолируемые супервизором и проследить чтобы все они запустились и были в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание системы ==&lt;br /&gt;
Для поддержания системы в рабочем состоянии и обеспечения надежной ее работы в будущем рекомендуется выполнять несколько простых дейсвтий:&lt;br /&gt;
* периодически создавать резервную копию базы данных&lt;br /&gt;
* периодически создавать резервную копию загруженных файлов (это можно сделать просто архивируя каталог /var/www/userside/var/attachments и файл .env)&lt;br /&gt;
* периодически наблюдать за производительностью сервера (при помощи htop, atop) и брокера RabbitMQ и принимать решения о масштабировании пулов fpm, фоновых процессов ядра и микросервисов&lt;br /&gt;
&lt;br /&gt;
=== Резервное копирование ===&lt;br /&gt;
Установите периодическое резервное копирование базы данных и пользовательских файлов. Желательно минимум раз в сутки в моменты наименьшей нагрузки на сервер. В PostgreSQL существует два способа создать резервную копию базы данных: dump и sql-script. У каждого из них есть свои преимущества и недостатки. Первый создает безопасный дамп базы данных целиком, а второй создает SQL-скрипт, выполняя который можно восстановить как структуру так и данные. Рекомендуем обратиться к [https://www.postgresql.org/docs/current/app-pgdump.html документации по использованию команды pg_dump] для выбора более подходящего для вас способа или набора параметров.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены две команды для создания резервной копии базы данных — выбирайте одну из них и добавляйте в ваш crontab:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# SQL-script&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside &amp;gt; /backup/userside.sql.gz&lt;br /&gt;
&lt;br /&gt;
# DUMP&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside &amp;gt; /backup/userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для создания минимальной резервной копии &#039;&#039;&#039;файлов&#039;&#039;&#039; можно использовать следующую команду (для версии 3.15 и новее):&lt;br /&gt;
 sudo tar -czf /backup/userside.tgz .env common/config/settings.json var/attachments&lt;br /&gt;
Этих файлов вместе с базой данных будет достаточно для восстановления работы USERSIDE. Но вы можете выполнять резервное копирование всего каталога /var/www/userside для большей надежности.&lt;br /&gt;
&lt;br /&gt;
=== Восстановление из резервной копии ===&lt;br /&gt;
Для восстановления из дампа используется команда pg_restore. [https://postgrespro.ru/docs/postgresql/13/app-pgrestore Документация по использованию pg_restore]. Для восстановления из SQL-скрипта используется утилита psql. [https://www.postgresql.org/docs/current/app-psql.html Документация по использованию psql].&lt;br /&gt;
&lt;br /&gt;
Перед восстановлением базы данных из резервной копии нужно обязательно остановить работу USERSIDE.&lt;br /&gt;
&lt;br /&gt;
1. Остановить cron userside и всех модулей&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside-modules ~/cron&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Остановить работу фоновых служб&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Остановить работу php-fpm&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Только после этого можно приступать к восстановлению базы данных из резервной копии.&lt;br /&gt;
&lt;br /&gt;
==== SQL-script ====&lt;br /&gt;
Для восстановления БД из резервной копии в виде SQL-скрипта, сначала нужно пересоздать базу данных, а затем восстановить в пустую базу данных резервную копию:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
gunzip &amp;lt; userside.sql.gz | sudo -u postgres psql -d userside -v ON_ERROR_STOP=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DUMP ====&lt;br /&gt;
Дамп содержит целиком базу данных со всеми ее элементами. Поэтому перед восстановлением базы данных из дампа её не должно существовать на сервере — удалите базу данных перед восстановлением из дампа. Также важно, чтобы пользователь базы данных (владелец всех элементов) уже существовал — создайте его перед восстановлением, если вы восстанавливаете базу данных на новом сервере, где нужного пользователя еще нет.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание, что структура дампа может быть несовместима между разными версиями PostgreSQL. Это не обязательно так, но вполне вероятно.&lt;br /&gt;
&lt;br /&gt;
Для восстановления из дампа используйте команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres pg_restore --clean --if-exists --create --exit-on-error --dbname=postgres userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Обратите внимание, что имя базы данных в команде обязательно должно быть &#039;&#039;&#039;postgres&#039;&#039;&#039;, так как из дампа восстанавливается вся база данных целиком, а не ее содержимое.&lt;br /&gt;
&lt;br /&gt;
==== После восстановления базы данных ====&lt;br /&gt;
После восстановления базы данных любым способом, необходимо очистить кэш ERP USERSIDE, т.к. в кэше теперь находятся данные, отличные от данных в базе. Перейтите в каталог /var/www/userside и выполните команду очистки кэша (первую, если используется пароль или вторую, если не используется):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -a $US_REDIS_PASSWORD -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Восстановите работу служб, которые были остановлены перед выполнением резервной копии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mv ~/cron/* /etc/cron.d&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Выполните команду восстановления, чтобы файлы системы соответствовали версии базы данных и проверить систему на целостность файлов.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar repair&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20327</id>
		<title>HOWTO: Обновление версии PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20327"/>
		<updated>2025-04-13T17:47:10Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Проверить работу USERSIDE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
В данном разделе описана процедура обновления PostgreSQL &#039;&#039;между основными версиями&#039;&#039; (например, с версии 11 на версию 16).&lt;br /&gt;
&lt;br /&gt;
Обновление внутри версии (например, с версии 16.1 на версию 16.2) &#039;&#039;происходит автоматически и не требует дополнительных действий&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рекомендуем ознакомиться с официальными инструкциями по обновлению&#039;&#039;&#039; на сайте [https://www.postgresql.org/docs/current/upgrading.html postgresql.org].&lt;br /&gt;
&lt;br /&gt;
В дистрибутиве Debian и основанных на нем существует пакет [https://packages.debian.org/sid/postgresql-common postgresql-common], устанавливаемый автоматически при установке пакета PostgreSQL. В состав postgresql-common входят инструменты, упрощающие работу с кластерами баз данных PostgreSQL. В том числе и обновление кластеров БД.&lt;br /&gt;
&lt;br /&gt;
Кластером баз данных ([https://www.postgresql.org/docs/current/glossary.html Database cluster]) в PostgreSQL называется экземпляр сервера вместе со всеми обслуживаемыми БД, а не распределенную систему, как может показаться.&lt;br /&gt;
&lt;br /&gt;
В следующем примере будет показано обновление кластера БД с версии 11 на версию 16 используя инструменты из пакета &#039;&#039;&#039;postgresql-common&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Порядок обновления ==&lt;br /&gt;
# Остановить USERSIDE.&lt;br /&gt;
# Обновить текущую версии postgresql в пределах основной версии (например, с 11.5 до 11.22).&lt;br /&gt;
# Обновить расширение postgis до самой последней версии (например, с 2.5 до 3.3.4). Также обязательно обновить расширение и в самой базе данных.&lt;br /&gt;
# Установить новую версию postgresql не удаляя старой (например 16.1)&lt;br /&gt;
# Сделать запасную резервную копию базы данных и настроек&lt;br /&gt;
# Удалить кластер БД, созданный автоматически сценарием при установке новой версии&lt;br /&gt;
# Выполнить обновление кластера БД старой версии до кластера новой версии&lt;br /&gt;
# Проверить работу USERSIDE&lt;br /&gt;
# Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии&lt;br /&gt;
&lt;br /&gt;
Выделите время на эту операцию. Она может занять довольно продролжительное время в зависимости от размера базы данных и производительности сервера. Также обязательно убедитесь в наличии свободного места, которое понадобится для обновления кластера (как минимум столько же, сколько занимает текущий кластер, но лучше больше).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR Посмотреть видеоинструкцию на asciinema].&lt;br /&gt;
&lt;br /&gt;
== Пошаговая инструкция ==&lt;br /&gt;
SQL-запросы с оператором &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, приведенные далее, необходимы для определения текущих установленных версий в качестве справочной информации.&lt;br /&gt;
&lt;br /&gt;
=== Остановить USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Версия php указана для примера. Используйте ту, что испльзуется у вас.&lt;br /&gt;
&lt;br /&gt;
Закомментируйте запуск всех модулей и userside в crontab.&lt;br /&gt;
&lt;br /&gt;
=== Обновить текущую версии postgresql в пределах основной версии ===&lt;br /&gt;
Проверить текущие версии. Обновить текущие пакеты PostgreSQL и PostGIS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вместо 11 и 2.5 укажите те версии, которе фактически установлены у вас.&lt;br /&gt;
&lt;br /&gt;
=== Обновить расширение postgis до самой последней версии ===&lt;br /&gt;
Обязательно также обновить расширение в базе данных!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установить новую версию postgresql не удаляя старой ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-16 postgresql-16-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сделать запасную резервную копию базы данных и настроек ===&lt;br /&gt;
Число 11 в имени файлов — это номер версии PostgreSQL, к которой относится эта резервная копия.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency_11.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency_11.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency_11.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Каталог /backup должен существовать и должен быть доступен для записи всем пользователям.&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД, созданный автоматически сценарием при установке новой версии ===&lt;br /&gt;
При помощи утилиты &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; из postgresql-common посмотрите, как выглядят ваши кластеры БД:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вывод команды будет примерно следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
16  main    5433 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Кластер 16/main был создан автоматически сценарием установки postgresql. Его нужно остановить и удалить.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 16 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Повторное выполнение команды &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; должно показать, что у вас остался один кластер &#039;&#039;&#039;11/main&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Выполнить обновление кластера БД старой версии до кластера новой версии ===&lt;br /&gt;
Остановите службу postgresql&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите процесс обновления кластера БД &#039;&#039;&#039;11/main&#039;&#039;&#039; используя утилиту &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; из пакета postgresql-common. Это действие может занять много времени и дискового пространства.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После завершения операции обновления вы увидите новое состояние кластеров (старая версия должна находиться в режиме &#039;&#039;&#039;down&#039;&#039;&#039;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
16  main    5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите службу postgres&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверить работу USERSIDE ===&lt;br /&gt;
Сначала выполните команды, отображающие версии, чтобы убедиться что база данных теперь работает на кластере БД новой версии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вы должны увидеть 16ю версию postgresql и 3.3.4 версию postgis. Может быть к тому времени, как вы будете читать эти строки, версия postgis будет более новой.&lt;br /&gt;
&lt;br /&gt;
Теперь запустите службу FPM и зайдите в USERSIDE через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так как другие службы остановлены, вы, вероятно, увидите ошибки связанные с ними, но при этом интерфейс USERSIDE должен открыться без ошибок подключения к базе данных.&lt;br /&gt;
Если все успешно, то раскомментируйте закомментированные ранее строки в crontab и запустите внешние службы, находящиеся под управлением supervisor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии ===&lt;br /&gt;
Если USERSIDE работает корректно, ошибок взаимодействия с БД нет, то можно удалить старый кластер и пакеты. Вы также, по желанию, можете удалить аварийные резервные копии или подождать несколько дней, чтобы точно убедиться, что они не пригодятся.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-2.5 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency_11* /backup/postgres_config_emergency_11.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20326</id>
		<title>HOWTO: Обновление версии PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20326"/>
		<updated>2025-04-13T17:46:52Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Остановить USERSIDE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
В данном разделе описана процедура обновления PostgreSQL &#039;&#039;между основными версиями&#039;&#039; (например, с версии 11 на версию 16).&lt;br /&gt;
&lt;br /&gt;
Обновление внутри версии (например, с версии 16.1 на версию 16.2) &#039;&#039;происходит автоматически и не требует дополнительных действий&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рекомендуем ознакомиться с официальными инструкциями по обновлению&#039;&#039;&#039; на сайте [https://www.postgresql.org/docs/current/upgrading.html postgresql.org].&lt;br /&gt;
&lt;br /&gt;
В дистрибутиве Debian и основанных на нем существует пакет [https://packages.debian.org/sid/postgresql-common postgresql-common], устанавливаемый автоматически при установке пакета PostgreSQL. В состав postgresql-common входят инструменты, упрощающие работу с кластерами баз данных PostgreSQL. В том числе и обновление кластеров БД.&lt;br /&gt;
&lt;br /&gt;
Кластером баз данных ([https://www.postgresql.org/docs/current/glossary.html Database cluster]) в PostgreSQL называется экземпляр сервера вместе со всеми обслуживаемыми БД, а не распределенную систему, как может показаться.&lt;br /&gt;
&lt;br /&gt;
В следующем примере будет показано обновление кластера БД с версии 11 на версию 16 используя инструменты из пакета &#039;&#039;&#039;postgresql-common&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Порядок обновления ==&lt;br /&gt;
# Остановить USERSIDE.&lt;br /&gt;
# Обновить текущую версии postgresql в пределах основной версии (например, с 11.5 до 11.22).&lt;br /&gt;
# Обновить расширение postgis до самой последней версии (например, с 2.5 до 3.3.4). Также обязательно обновить расширение и в самой базе данных.&lt;br /&gt;
# Установить новую версию postgresql не удаляя старой (например 16.1)&lt;br /&gt;
# Сделать запасную резервную копию базы данных и настроек&lt;br /&gt;
# Удалить кластер БД, созданный автоматически сценарием при установке новой версии&lt;br /&gt;
# Выполнить обновление кластера БД старой версии до кластера новой версии&lt;br /&gt;
# Проверить работу USERSIDE&lt;br /&gt;
# Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии&lt;br /&gt;
&lt;br /&gt;
Выделите время на эту операцию. Она может занять довольно продролжительное время в зависимости от размера базы данных и производительности сервера. Также обязательно убедитесь в наличии свободного места, которое понадобится для обновления кластера (как минимум столько же, сколько занимает текущий кластер, но лучше больше).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR Посмотреть видеоинструкцию на asciinema].&lt;br /&gt;
&lt;br /&gt;
== Пошаговая инструкция ==&lt;br /&gt;
SQL-запросы с оператором &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, приведенные далее, необходимы для определения текущих установленных версий в качестве справочной информации.&lt;br /&gt;
&lt;br /&gt;
=== Остановить USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Версия php указана для примера. Используйте ту, что испльзуется у вас.&lt;br /&gt;
&lt;br /&gt;
Закомментируйте запуск всех модулей и userside в crontab.&lt;br /&gt;
&lt;br /&gt;
=== Обновить текущую версии postgresql в пределах основной версии ===&lt;br /&gt;
Проверить текущие версии. Обновить текущие пакеты PostgreSQL и PostGIS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вместо 11 и 2.5 укажите те версии, которе фактически установлены у вас.&lt;br /&gt;
&lt;br /&gt;
=== Обновить расширение postgis до самой последней версии ===&lt;br /&gt;
Обязательно также обновить расширение в базе данных!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установить новую версию postgresql не удаляя старой ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-16 postgresql-16-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сделать запасную резервную копию базы данных и настроек ===&lt;br /&gt;
Число 11 в имени файлов — это номер версии PostgreSQL, к которой относится эта резервная копия.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency_11.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency_11.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency_11.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Каталог /backup должен существовать и должен быть доступен для записи всем пользователям.&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД, созданный автоматически сценарием при установке новой версии ===&lt;br /&gt;
При помощи утилиты &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; из postgresql-common посмотрите, как выглядят ваши кластеры БД:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вывод команды будет примерно следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
16  main    5433 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Кластер 16/main был создан автоматически сценарием установки postgresql. Его нужно остановить и удалить.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 16 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Повторное выполнение команды &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; должно показать, что у вас остался один кластер &#039;&#039;&#039;11/main&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Выполнить обновление кластера БД старой версии до кластера новой версии ===&lt;br /&gt;
Остановите службу postgresql&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите процесс обновления кластера БД &#039;&#039;&#039;11/main&#039;&#039;&#039; используя утилиту &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; из пакета postgresql-common. Это действие может занять много времени и дискового пространства.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После завершения операции обновления вы увидите новое состояние кластеров (старая версия должна находиться в режиме &#039;&#039;&#039;down&#039;&#039;&#039;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
16  main    5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите службу postgres&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверить работу USERSIDE ===&lt;br /&gt;
Сначала выполните команды, отображающие версии, чтобы убедиться что база данных теперь работает на кластере БД новой версии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вы должны увидеть 16ю версию postgresql и 3.3.4 версию postgis. Может быть к тому времени, как вы будете читать эти строки, версия postgis будет более новой.&lt;br /&gt;
&lt;br /&gt;
Теперь запустите службу FPM и зайдите в USERSIDE через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.1-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так как другие службы остановлены, вы, вероятно, увидите ошибки связанные с ними, но при этом интерфейс USERSIDE должен открыться без ошибок подключения к базе данных.&lt;br /&gt;
Если все успешно, то раскомментируйте закомментированные ранее строки в crontab и запустите внешние службы, находящиеся под управлением supervisor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии ===&lt;br /&gt;
Если USERSIDE работает корректно, ошибок взаимодействия с БД нет, то можно удалить старый кластер и пакеты. Вы также, по желанию, можете удалить аварийные резервные копии или подождать несколько дней, чтобы точно убедиться, что они не пригодятся.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-2.5 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency_11* /backup/postgres_config_emergency_11.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=ERP_%22USERSIDE%22&amp;diff=20310</id>
		<title>ERP &quot;USERSIDE&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=ERP_%22USERSIDE%22&amp;diff=20310"/>
		<updated>2025-04-03T12:45:29Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[ERP_&amp;quot;USERSIDE&amp;quot; EN|en]] | [[ERP_&amp;quot;USERSIDE&amp;quot;|ru]]&lt;br /&gt;
&lt;br /&gt;
== Инструкция пользователя ==&lt;br /&gt;
&lt;br /&gt;
актуальна для версии &#039;&#039;&#039;[[Версии ERP &amp;quot;USERSIDE&amp;quot;|3.19]]&#039;&#039;&#039;&lt;br /&gt;
* инструкции для предыдущих версий: [[ERP &amp;quot;USERSIDE&amp;quot; 3.18|3.18]], [[ERP &amp;quot;USERSIDE&amp;quot; 3.17|3.17]], [[ERP &amp;quot;USERSIDE&amp;quot; 3.16|3.16]], [[ERP &amp;quot;USERSIDE&amp;quot; 3.15|3.15]], [[ERP &amp;quot;USERSIDE&amp;quot; 3.14|3.14]], [[ERP &amp;quot;USERSIDE&amp;quot; 3.13|3.13]]&lt;br /&gt;
&lt;br /&gt;
Официальный сайт: [https://userside.eu https://userside.eu]&lt;br /&gt;
* зеркало: [http://userside.ua https://userside.ua]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/channel/UCwocKxniJDc8cx0aWglpaFA YouTube-канал]&lt;br /&gt;
&lt;br /&gt;
[https://t.me/usersideeu Telegram-группа]&lt;br /&gt;
&lt;br /&gt;
== Основные данные ==&lt;br /&gt;
&lt;br /&gt;
* [[О программе|Что такое UserSide? О программе]]&lt;br /&gt;
* [[Контактная информация]]&lt;br /&gt;
** [[Регламент технической поддержки]]&lt;br /&gt;
** [[Услуга по установке или обновлению ERP]]&lt;br /&gt;
** [[Приоритетное обслуживание]]&lt;br /&gt;
* [[Лицензионное соглашение]]&lt;br /&gt;
** [[Лимиты объектов]]&lt;br /&gt;
* [[Технические требования]]&lt;br /&gt;
* [[Установка|Установка USERSIDE на Linux-хост]]&lt;br /&gt;
* [[Docker окружение|Установка USERSIDE с использованием Docker окружения]]&lt;br /&gt;
* [[Настройка взаимодействия с биллингом]]&lt;br /&gt;
* [[Обновление|Обновление]]&lt;br /&gt;
* [[Установка#Резервное копирование|Резервное копирование, восстановление базы данных]]&lt;br /&gt;
* [[Демо-версия]]&lt;br /&gt;
* [[Версии ERP &amp;quot;USERSIDE&amp;quot;]]&lt;br /&gt;
* HOWTO&lt;br /&gt;
** [[Tuning|HOWTO: Тонкая настройка]]&lt;br /&gt;
** [[HOWTO: Обновление версии PostgreSQL]]&lt;br /&gt;
** [[HOWTO: Клонирование USERSIDE]]&lt;br /&gt;
* [[Частые вопросы]]&lt;br /&gt;
&lt;br /&gt;
== Механика ==&lt;br /&gt;
&lt;br /&gt;
* [[Start|С чего начать?]]&lt;br /&gt;
* [[Активность]]&lt;br /&gt;
* [[Адресная система]]&lt;br /&gt;
* [[Кабельные линии]]&lt;br /&gt;
* [[Коммутация объектов]]&lt;br /&gt;
** [[Общая схема коммутации]]&lt;br /&gt;
* [[Планирование]]&lt;br /&gt;
* [[Структурная схема]]&lt;br /&gt;
* [[PON]]&lt;br /&gt;
* [[Радио]]&lt;br /&gt;
* [[Видеонаблюдение|Видеонаблюдение/IP-камеры]]&lt;br /&gt;
* [[Внешний вид и индивидуальная настройка]]&lt;br /&gt;
* [[Языковая локализация]]&lt;br /&gt;
* [[Разграничение доступа|Разграничение доступа пользователей (операторов)]]&lt;br /&gt;
** [[Двухфакторная аутентификация (2FA)]]&lt;br /&gt;
** [[LDAP]]&lt;br /&gt;
* [[Поддерживаемые биллинги]]&lt;br /&gt;
** [[Универсальное API|Универсальное API для биллингов]]&lt;br /&gt;
** [[ABillS]]&lt;br /&gt;
** [[BGBilling]]&lt;br /&gt;
** [[Carbon Billing|Carbon Billing 5]]&lt;br /&gt;
** [[Hydra]]&lt;br /&gt;
** [[LANBilling]]&lt;br /&gt;
** [[MikBill]]&lt;br /&gt;
** [[NoDeny]]&lt;br /&gt;
** [[NoDenyPlus]]&lt;br /&gt;
** [[Platex]]&lt;br /&gt;
** [[uBilling]]&lt;br /&gt;
** [[UTM5]]&lt;br /&gt;
** [[Работа без биллинга]]&lt;br /&gt;
** [[Свой биллинг]]&lt;br /&gt;
** [[Одновременная работа с несколькими биллингами]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[QR-коды]]&lt;br /&gt;
* [[&amp;quot;Горячие клавиши&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== Разделы системы ==&lt;br /&gt;
&lt;br /&gt;
* Пользовательская часть &lt;br /&gt;
** [[Вход]]&lt;br /&gt;
** [[Главная страница]]&lt;br /&gt;
** [[Произвольные страницы и ссылки в меню]]&lt;br /&gt;
** Абоненты&lt;br /&gt;
*** [[Карточка абонента]]&lt;br /&gt;
**** [[Карточка юридического лица]]&lt;br /&gt;
**** [[Генерация документов]]&lt;br /&gt;
**** [[Функция PING]]&lt;br /&gt;
**** [[Дочерние записи]]&lt;br /&gt;
*** [[Добавление абонента]]&lt;br /&gt;
*** [[Список абонентов]]&lt;br /&gt;
*** [[Поиск]]&lt;br /&gt;
*** [[IP-сетка]]&lt;br /&gt;
**** [[Абоненты без IP-адресов]]&lt;br /&gt;
**** [[Абоненты без MAC-адресов]]&lt;br /&gt;
**** [[Зарезервированные IP-адреса]]&lt;br /&gt;
*** [[Должники]]&lt;br /&gt;
*** [[Активность в сети/интернете]]&lt;br /&gt;
*** [[Статус абонентов]]&lt;br /&gt;
*** [[График активности]]&lt;br /&gt;
*** [[График роста]]&lt;br /&gt;
*** [[TOP100 по трафику|TOP по трафику]]&lt;br /&gt;
*** [[&amp;quot;Потерянные&amp;quot; абоненты]]&lt;br /&gt;
*** [[Абоненты на отключение]]&lt;br /&gt;
*** [[Отметки на абонентах]]&lt;br /&gt;
*** [[Бывшие абоненты]]&lt;br /&gt;
**** [[Карточка бывшего абонента]]&lt;br /&gt;
*** [[Неизвестные MAC-адреса]]&lt;br /&gt;
*** [[SMS-рассылка]]&lt;br /&gt;
*** [[Потенциальные абоненты]]&lt;br /&gt;
** Тарифы&lt;br /&gt;
*** [[Список тарифов]]&lt;br /&gt;
*** [[Группы тарифов]]&lt;br /&gt;
*** [[Трафик]]&lt;br /&gt;
*** [[Дополнительные услуги]]&lt;br /&gt;
** Сообщения&lt;br /&gt;
*** [[Переписка с абонентом]]&lt;br /&gt;
*** [[Входящие]]&lt;br /&gt;
*** [[Исходящие]]&lt;br /&gt;
*** [[Архив]]&lt;br /&gt;
*** [[Общесетевые]]&lt;br /&gt;
*** [[Список звонков]]&lt;br /&gt;
** Бухгалтерия&lt;br /&gt;
*** [[Остатки]]&lt;br /&gt;
*** [[Доход от абонплаты]]&lt;br /&gt;
*** [[Добросовестные]]&lt;br /&gt;
*** [[Сомнительные]]&lt;br /&gt;
*** [[Безнадежные]]&lt;br /&gt;
*** [[Заявки на смену тарифа]]&lt;br /&gt;
** Интерфейсы&lt;br /&gt;
** [[Сооружения связи]]&lt;br /&gt;
*** [[Карточка узла связи]]&lt;br /&gt;
**** [[Схема коммутации]]&lt;br /&gt;
**** [[Перепланировка коммутации]]&lt;br /&gt;
**** [[Стойки/шкафы]]&lt;br /&gt;
** Кабельная инфраструктура&lt;br /&gt;
*** [[Кабельные линии]]&lt;br /&gt;
**** [[Карточка линии]]&lt;br /&gt;
**** [[Маршруты линии на карте]]&lt;br /&gt;
**** [[Расчет маршрута соединений]]&lt;br /&gt;
**** [[Добавление линии с карты покрытия]]&lt;br /&gt;
**** [[Экспорт линии в KML]] &#039;&#039;(Google Earth)&#039;&#039;&lt;br /&gt;
*** [[Кабельные каналы]]&lt;br /&gt;
*** [[Кроссы/ODF]]&lt;br /&gt;
*** [[Патч-панели]]&lt;br /&gt;
*** [[Розетки RJ-45]]&lt;br /&gt;
*** [[Делители/Уплотнители]]&lt;br /&gt;
*** [[Схемы коммутации]]&lt;br /&gt;
** [[Оборудование]]&lt;br /&gt;
*** Сателлиты: &#039;&#039;([[usm_satellite]])&#039;&#039;&lt;br /&gt;
*** [[Уведомление персонала о неактивности оборудования]]&lt;br /&gt;
*** [[Системные устройства]]&lt;br /&gt;
**** [[Карточка системных устройств]]&lt;br /&gt;
*** [[Произвольные устройства]]&lt;br /&gt;
*** [[Коммутаторы]]&lt;br /&gt;
**** [[Карточка коммутатора]]&lt;br /&gt;
**** [[Автопривязка абонентов к портам]]&lt;br /&gt;
**** [[Коммутаторы - Отчеты|Отчеты]]&lt;br /&gt;
**** [[Горячая замена коммутатора]]&lt;br /&gt;
**** [[Интеграция ТМЦ в устройство]]&lt;br /&gt;
*** [[OLT]]&lt;br /&gt;
**** [[ONU]]&lt;br /&gt;
*** [[Радиооборудование]]&lt;br /&gt;
*** [[Медиаконвертеры]]&lt;br /&gt;
*** [[CWDM]]&lt;br /&gt;
*** [[VLAN]]&lt;br /&gt;
*** [[Структурная схема]]&lt;br /&gt;
** [[Журнал заданий]]&lt;br /&gt;
*** [[Группы и типы заданий на работу]]&lt;br /&gt;
*** [[План работ]]&lt;br /&gt;
*** [[Карточка задания]]&lt;br /&gt;
**** [[Чек-листы]]&lt;br /&gt;
**** [[Наряд на работу]]&lt;br /&gt;
***** [[Удаленное подтверждение нарядов]]&lt;br /&gt;
**** [[Уведомление персонала о заданиях]]&lt;br /&gt;
**** [[Настройка - Задания#Автоматическое назначение персонала|Автоматическое назначение персонала]]&lt;br /&gt;
**** [[Настройка - Задания#Цепочка заданий|Цепочка заданий]]&lt;br /&gt;
*** [[Мои задания]]&lt;br /&gt;
**** [[Наблюдение за заданиями]]&lt;br /&gt;
*** [[Новости]]&lt;br /&gt;
*** [[Периодические задания]]&lt;br /&gt;
*** [[Календарь]]&lt;br /&gt;
*** [[Почтовый робот|Почтовый робот - Создание задач по почте]]&lt;br /&gt;
** Склад&lt;br /&gt;
*** [[ТМЦ]]&lt;br /&gt;
**** [[Карточка ТМЦ]]&lt;br /&gt;
**** [[Интеграция ТМЦ в устройство]]&lt;br /&gt;
*** [[Операции]]&lt;br /&gt;
*** [[Склад - Отчеты|Отчеты]]&lt;br /&gt;
*** [[Поставщики]]&lt;br /&gt;
*** [[Каталог товаров]]&lt;br /&gt;
** Покрытие&lt;br /&gt;
*** [[Карты покрытия|Карты]]&lt;br /&gt;
*** [[Адреса]]&lt;br /&gt;
**** [[Карточка дома]]&lt;br /&gt;
**** [[Поэтажные планы зданий и сооружений]]&lt;br /&gt;
**** [[Логическая схема здания]]&lt;br /&gt;
**** [[Настройка структуры здания]]&lt;br /&gt;
*** [[Собственники]]&lt;br /&gt;
*** [[Ключи]]&lt;br /&gt;
*** [[Объекты на карте]]&lt;br /&gt;
** Персонал&lt;br /&gt;
*** [[Подразделения]]&lt;br /&gt;
*** [[Сотрудники]]&lt;br /&gt;
*** [[Табель работ]]&lt;br /&gt;
*** [[Ведомости работ]]&lt;br /&gt;
*** [[Учёт рабочего времени]]&lt;br /&gt;
*** [[Штрафы и премии]]&lt;br /&gt;
** [[Автотранспорт]]&lt;br /&gt;
** [[Рекламные кампании]]&lt;br /&gt;
** [[Блокнот]]&lt;br /&gt;
** [[Статистика]]&lt;br /&gt;
** Пользователи&lt;br /&gt;
*** [[Пользователи - Переписка|Переписка]]&lt;br /&gt;
*** [[Личная настройка]]&lt;br /&gt;
*** [[Учетные записи]]&lt;br /&gt;
*** [[Настройка профилей|Профили]]&lt;br /&gt;
*** [[История по пользователям|История]]&lt;br /&gt;
** Настройка&lt;br /&gt;
*** [[Настройка - Основная|Основная]]&lt;br /&gt;
**** [[ERP-профили]]&lt;br /&gt;
**** [[Проверка целостности файлов]]&lt;br /&gt;
**** [[Дополнительные метки для оборудования/линий]]&lt;br /&gt;
**** [[Импорт справочников]]&lt;br /&gt;
**** [[Настройка - Отметки на абонентах|Отметки на абонентах]]&lt;br /&gt;
**** [[Погода]]&lt;br /&gt;
**** [[Прикрепленные файлы]]&lt;br /&gt;
**** [[Уведомления|Уведомления (почта, sms)]]&lt;br /&gt;
**** [[Настройка - Праздничные интерфейсы|Праздничные интерфейсы]]&lt;br /&gt;
*** [[Адресная система|Адреса]]&lt;br /&gt;
*** [[Настройка - База оборудования|База оборудования]]&lt;br /&gt;
*** [[Настройка - Биллинги|Биллинги]]&lt;br /&gt;
*** [[Настройка - Документы|Документы]]&lt;br /&gt;
*** [[Настройка - Дополнительные услуги|Дополнительные услуги]]&lt;br /&gt;
*** [[Настройка - Кабельные линии|Кабельные линии]]&lt;br /&gt;
*** [[Настройка - Карты покрытия|Карты покрытия]]&lt;br /&gt;
*** [[Настройка - Задания|Задания]]&lt;br /&gt;
**** [[Настройка - Задания#Автоматическое назначение персонала|Автоматическое назначение персонала]]&lt;br /&gt;
**** [[Настройка - Задания#Цепочка заданий и автоматизации|Цепочка заданий и автоматизации]]&lt;br /&gt;
**** [[Настройка - Задания#Эскалация заданий|Эскалация заданий]]&lt;br /&gt;
*** [[Настройка - Модули|Модули]]&lt;br /&gt;
*** [[Настройка_-_Модуль_us_asterisk|Модуль usm_asterisk]]&lt;br /&gt;
*** [[Usm_observer|Модуль usm_observer]]&amp;lt;span id=&amp;quot;planer&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
*** [[Настройка - Планировщик|Планировщик]]&lt;br /&gt;
**** 1. [[Выполнение SQL команды]]&lt;br /&gt;
**** 2. [[Планировщик - Автопривязка абонентов к портам|Автопривязка абонентов к портам]]&lt;br /&gt;
**** 3. [[Создание заданий для безнадежных абонентов]]&lt;br /&gt;
**** 4. [[Создание заданий для сомнительных абонентов]]&lt;br /&gt;
**** 5. [[Создание заданий для должников]]&lt;br /&gt;
**** 6. [[Создание заданий для группы абонентов]]&lt;br /&gt;
**** 22. [[Привязка абонентов к выполненным задачам]]&lt;br /&gt;
**** 23. [[Рассылка о заданиях на текущий день]]&lt;br /&gt;
**** 25. [[Получение версии прошивки коммутатора]]&lt;br /&gt;
**** 28. [[Планировщик - SMS-рассылка|SMS-рассылка]]&lt;br /&gt;
**** 30. [[Рассылка информации о снижении резервов на складе]]&lt;br /&gt;
**** 35. [[Создание заданий для неактивных абонентов]]&lt;br /&gt;
**** 38. [[Перенос неактивных абонентов в бывшие]]&lt;br /&gt;
**** 39. [[Получение информации по VLAN на устройствах]]&lt;br /&gt;
**** 40. [[Перенос информации о подключенных потенциальных клиентах в текущие]]&lt;br /&gt;
**** 41. [[Перенос неактивных абонентов в отключённые]]&lt;br /&gt;
**** 42. [[Добавление MAC-адресов для абонентов, что закреплены к портам коммутаторов из FDB-таблицы]]&lt;br /&gt;
**** 43. [[Перенос абонентов, которых нет в биллинге в бывшие абоненты]]&lt;br /&gt;
**** 44. [[E-mail уведомления авторам заданий о просроченных заданиях]]&lt;br /&gt;
**** 45. [[Перенос абонентов, которых нет в биллинге в отключенные абоненты]]&lt;br /&gt;
*** [[Настройка - Разделы/страницы/ссылки|Разделы/страницы/ссылки]]&lt;br /&gt;
*** [[Настройка - Список складов|Склады]]&lt;br /&gt;
*** [[Настройка - Сооружения связи|Сооружения связи]]&lt;br /&gt;
&amp;lt;span id=&amp;quot;lk&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* [[Личный кабинет]]&lt;br /&gt;
** [[Регистрация]]&lt;br /&gt;
** [[Вход в личный кабинет|Вход]]&lt;br /&gt;
** [[Личный кабинет - Главная страница|Главная страница]]&lt;br /&gt;
** [[Тех.поддержка]]&lt;br /&gt;
** [[Личные данные]]&lt;br /&gt;
** [[История оплат и начислений]]&lt;br /&gt;
** [[Информация]]&lt;br /&gt;
** [[Произвольные ссылки и страницы в личном кабинете]]&lt;br /&gt;
&lt;br /&gt;
* Скрипты&lt;br /&gt;
** [[Скрипт - Планировщик|Планировщик]] &lt;br /&gt;
** [[Заявка на подключение]]&lt;br /&gt;
** [[404 - обработка ненайденых страниц]]&lt;br /&gt;
&lt;br /&gt;
== [[Модули]] ==&lt;br /&gt;
&lt;br /&gt;
* [[usm_abills]] &lt;br /&gt;
* [[usm_asterisk]] &lt;br /&gt;
* [[usm_bgbilling]] &lt;br /&gt;
* &#039;&#039;&#039;[[usm_billing]]&#039;&#039;&#039; &lt;br /&gt;
* [[usm_cabletest]] &lt;br /&gt;
* [[usm_checker]]&lt;br /&gt;
* [[usm_gps_2|usm_gps]]&lt;br /&gt;
* [[usm_hydra]] &lt;br /&gt;
* [[usm_iferr]] &lt;br /&gt;
* [[usm_lanbilling]] &lt;br /&gt;
* [[usm_nodeny]] &lt;br /&gt;
* [[usm_nodeny_plus]] &lt;br /&gt;
* [[usm_observer]] &lt;br /&gt;
* [[usm_peleng]]&lt;br /&gt;
* [[usm_pon]] &lt;br /&gt;
* [[usm_radio]]&lt;br /&gt;
* [[usm_satellite]] &lt;br /&gt;
* [[usm_stat]] &lt;br /&gt;
* [[usm_utm5]] &lt;br /&gt;
* [[База оборудования]] &lt;br /&gt;
* [[Отключение копирайтов]]&lt;br /&gt;
* [[Написание своего модуля (API)]]&lt;br /&gt;
* [[python_venv|Виртуальная среда Python для модулей]]&lt;br /&gt;
&lt;br /&gt;
== Взаимодействие с прочим ПО и сервисами ==&lt;br /&gt;
&lt;br /&gt;
* [[SMS-операторы]]&lt;br /&gt;
** [[Написание собственного модуля для отправки SMS]]&lt;br /&gt;
* [[Jabber]]&lt;br /&gt;
* [[Binotel]]&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=20282</id>
		<title>Установка</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=20282"/>
		<updated>2025-03-06T13:40:17Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Восстановление из резервной копии */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
[[Installation|en]] | [[Установка|ru]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ВНИМАНИЕ: Данная инструкция актуальна для версий ERP USERSIDE 3.19&#039;&#039;&#039;&lt;br /&gt;
* [[Установка для версии 3.18|Инструкция для версии 3.18]]&lt;br /&gt;
* [[Установка для версии 3.17|Инструкция для версии 3.11-3.17]]&lt;br /&gt;
* [[Установка для версии 3.10 и более ранних|Инструкция для версии 3.10 и ранее]].&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
В целях упрощения будут рассмотрены команды для операционной системы &#039;&#039;&#039;Linux Debian 12 (bookworm)&#039;&#039;&#039;. Для опытных системных администраторов не составит труда использовать аналогичные команды для другой операционной системы. Если же вы не чувствуете себя уверено в администрировании операционных систем, то мы рекомендуем вам использовать операционную систему &#039;&#039;&#039;Debian&#039;&#039;&#039; либо &#039;&#039;&#039;Ubuntu Server LTS&#039;&#039;&#039;. Из-за их простоты, а также по причине того, что наша техническая поддержка значительно лучше разбирается в Debian-подобных дистрибутивах. Вероятность подсказать что-либо не касающееся ERP USERSIDE, но касающееся администрирования операционной системы, будет значительно выше, если у вас будет Debian или подобный дистрибутив на его основе.&lt;br /&gt;
&lt;br /&gt;
С другой стороны, если вы опытный системный администратор и имеете навыки и опыт работы с Docker, возможно для вас будет более удобным вариант использования готового окружения на базе Docker-образов, которые мы подготовили специально, включив в них всё необходимое для работы ERP USERSIDE. В этом случае вам не придется ничего настраивать, кроме как выполнить простые настройки Docker-бандла https://github.com/userside/userside-docker.&lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Для работы ERP USERSIDE необходимы различные системные приложения и службы, такие как интерпретатор языка PHP с набором расширений, WEB-сервер, система управления базами данных и прочие. В этом разделе будут перечислены такие требования в зависимости от версии ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание, что ваша операционная система должна быть сконфигурирована с корректным часовым поясом и локалью. От этого зависит правильность отображения информации и корректность сортировки.&lt;br /&gt;
&lt;br /&gt;
Список требуемых расширений PHP содержит все расширения, не входящие в состав ядра PHP. Часть из этих расширений может поставляться вместе с основным пакетом PHP либо в составе пакета php-common, другая же часть должна быть установлена дополнительно. &lt;br /&gt;
&lt;br /&gt;
=== 3.19 (текущая стабильная) ===&lt;br /&gt;
* PHP: 8.3&lt;br /&gt;
* Расширения PHP: ctype, gd, json, libxml, mbstring, openssl, pdo, pdo_pgsql, posix, simplexml, snmp, sockets, zlib, pcntl&lt;br /&gt;
* Дополнительные расширения PHP: ldap, soap&lt;br /&gt;
* Python: &#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать.&#039;&#039;&lt;br /&gt;
* Модули Python: pip, venv&lt;br /&gt;
* PostgreSQL: 12+ (желательно 16)&lt;br /&gt;
* Redis: 5+ (желательно 7)&lt;br /&gt;
* RabbitMQ: 3.10+ (желательно 3.13)&lt;br /&gt;
* Supervisor&lt;br /&gt;
&lt;br /&gt;
== Основные договорённости ==&lt;br /&gt;
Каталог, в который устанавливается ERP USERSIDE - &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Внутри этого каталога должен быть подкаталог public, который является корневым каталогом для WEB-сервера. Если вы хотите использовать другой каталог для ERP USERSIDE, не забывайте вносить соответствующие исправления во все примеры из данной инструкции.&lt;br /&gt;
&lt;br /&gt;
Создайте каталог:&lt;br /&gt;
 sudo mkdir -p /var/www/userside/public&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside&lt;br /&gt;
&lt;br /&gt;
Вам необходимо выделить доменное имя для ERP USERSIDE. В примерах ниже используется userside.mycompany.com, но вам необходимо будет заменить его на свое. Пропишите это доменное имя в /etc/hosts, если оно отличается от имени хоста, на котором производистя установка.&lt;br /&gt;
&lt;br /&gt;
== Установка необходимых компонентов ==&lt;br /&gt;
Сперва установите утилиты, которые будут необходимы далее в процессе установки. Они необходимы для любой верии ERP USERSIDE. Вы можете копировать строки по одной и вставлять их в командную строку вашей операционной системы.&lt;br /&gt;
&lt;br /&gt;
Следующие строки скопируйте и вставьте целиком:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/contrib-non-free.list &amp;lt;&amp;lt; EOL&lt;br /&gt;
deb http://deb.debian.org/debian/ $(lsb_release -sc) contrib non-free non-free-firmware&lt;br /&gt;
EOL&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt full-upgrade -y&lt;br /&gt;
sudo apt install -y gnupg ca-certificates lsb-release debian-archive-keyring debian-keyring libsnmp-dev snmp-mibs-downloader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
==== Альтернативный официальный репозиторий ====&lt;br /&gt;
Мы настоятельно рекомендуем использовать последнюю версию PostgreSQL, так как это всегда положительно сказывается на скорости работы. Добавьте в систему официальный репозиторий Postgres:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo install -d /usr/share/postgresql-common/pgdg&lt;br /&gt;
&lt;br /&gt;
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc&lt;br /&gt;
&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main&amp;quot; &amp;gt; /etc/apt/sources.list.d/pgdg.list&#039;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если у вас другая операционная система, вы можете найти необходимые команды для нее на [https://www.postgresql.org/download/ официальном сайте PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
&#039;&#039;&#039;Внимание!&#039;&#039;&#039; Перед установкой PostgreSQL в вашей операционной системе должна быть установлена ваша местная локаль и корректный часовой пояс! Это можно сделать и позже, но будет намного проще, если это будет сделано до установки PostgreSQL. Выполните следующую команду, чтобы убедиться, что нужная локаль присутствует:&lt;br /&gt;
 locale -a&lt;br /&gt;
&lt;br /&gt;
Если среди перечисленных нет вашей местной локали, то установите ее. Для этого достаточно отредактировать файл /etc/locale.gen убрав комментарии перед строкой (строками) с нужной локалью, а затем выполнить команду:&lt;br /&gt;
 sudo locale-gen&lt;br /&gt;
&lt;br /&gt;
Если вам нужно изменить локаль по умолчанию, то выполните:&lt;br /&gt;
 sudo dpkg-reconfigure locales&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить часовой пояс, выполните:&lt;br /&gt;
 sudo timedatectl set-timezone Europe/Kyiv&lt;br /&gt;
&lt;br /&gt;
Теперь можно перейти к установке PostgreSQL:&lt;br /&gt;
 sudo apt install -y postgresql-16 postgresql-16-postgis-3&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Создайте пользователя и базу данных для ERP USERSIDE. В примере ниже создается пользователь с именем userside и база данных с таким же именем. Если ваша локаль не uk_UA, не забудьте изменить команду. Затем к базе данных подключается расширение PostGis, необходимое для работы с географическими данными. После выполнения первой строки, вам необходимо будет дважды ввести пароль для нового пользователя - запишите этот пароль, он понадобится вам далее для установки ERP USERSIDE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres createuser userside -P&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ваш PostgreSQL установлен &#039;&#039;&#039;на другом сервере&#039;&#039;&#039;, то вам необходимо будет внести коррекции в файлы postgresql.conf и pg_hba.conf, расположенные в каталоге /etc/postgresql/16/main/. В файле postgresql.conf необходимо раскомментировать и изменить значение параметра &amp;lt;code&amp;gt;listen_addresses&amp;lt;/code&amp;gt;, указав там все IP-адреса интерфейсов сервера, на которых он может принимать подключения к PostgreSQL. В файле pg_hba.conf необходимо в самом конце добавить строку по аналогии с предыдущими, указывающую, с какого адреса может подключаться пользователь ERP USERSIDE. Но если ваш PostgreSQL расположен на том же сервере, что и USERSIDE - нет необходимости вносить какие либо корректировки в эти файлы.&lt;br /&gt;
&lt;br /&gt;
=== Redis ===&lt;br /&gt;
Стандартный репозиторий Debian 12 включает версию Redis 7.0.15. Эта версия подходит для работы ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
 sudo apt install -y redis-server&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
По умолчанию Redis принимает подключения без пароля, но мы настоятельно рекомендуем установить пароль. Так как пароль передается в открытом виде (Redis не предусматривает шифрования, т.к. делает упор на скорость обработки запросов и лишние этапы вроде шифрования не применяются), вам нужно создать действительно длинный и сложный пароль, например, используя утилиту &#039;&#039;&#039;openssl&#039;&#039;&#039; следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rand --hex 32&lt;br /&gt;
&lt;br /&gt;
На выходе вы получите случайный набор из 32 байт в 16-ричном виде, который и будете использовать в качестве пароля. Далее нужно будет вместо слова &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; подставить эту сгенерированную строку. Запишите его. Далее в настройках вы будете указывать эту строку как пароль Redis.&lt;br /&gt;
&lt;br /&gt;
Укажите полученный хэш парольной фразы в конфигурационном файле Redis:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^.*requirepass .*@requirepass MYPASSWORDHERE@g&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
где вместо &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; укажите хэш парольной фразы поулченый ранее.&lt;br /&gt;
&lt;br /&gt;
Также необходимо отключить таймаут (на некоторых версиях Redis он включен):&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^timeout .*@timeout 0@&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
Перезапустите Redis и убедитесь, что он работает (в ответ должны получить PONG):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart redis&lt;br /&gt;
redis-cli -h 127.0.0.1 -p 6379 -a MYPASSWORDHERE ping&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RabbitMQ ===&lt;br /&gt;
Стандартный репозиторий Debian 12 включает старую версию RabbitMQ 3.10. Вы можете использовать ее — она поддерживается. Однако, эта версия относительно старая и лучшим вариантом будет установить новую версию из альтернативных репозиториев. На [https://www.rabbitmq.com/install-debian.html официальном сайте RabbitMQ] находится достаточно подробная информация по установке RabbitMQ для каждой операционной системы.&lt;br /&gt;
&lt;br /&gt;
==== Добавление альтернативных репозиториев ====&lt;br /&gt;
Следующий блок скопируйте и вставьте целиком в командную строку&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-server-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/rabbitmq.list &amp;lt;&amp;lt;EOF&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
Убедитесь, что в /etc/hosts есть запись для имени вашего хоста. Отсутствие такрой записи (например, если вы изменили имя хоста после инсталляции) является основной ошибкой, возникающей при установке RabbitMQ. Так что лучше еще раз убедитесь, что запись соответствующая имени хосту имеется.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y erlang-base \&lt;br /&gt;
                    erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \&lt;br /&gt;
                    erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \&lt;br /&gt;
                    erlang-runtime-tools erlang-snmp erlang-ssl \&lt;br /&gt;
                    erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl&lt;br /&gt;
&lt;br /&gt;
sudo apt install rabbitmq-server -y --fix-missing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка необходимых дополнений ====&lt;br /&gt;
Следующие две строки выполняйте по одной за раз!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_management --offline&lt;br /&gt;
&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_web_stomp --offline&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Скопируйте и вставьте целиком следующий блок:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/rabbitmq/rabbitmq.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
listeners.tcp.default = 5672&lt;br /&gt;
&lt;br /&gt;
web_stomp.port = 15674&lt;br /&gt;
web_stomp.cowboy_opts.max_keepalive = 60&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать пользователей. Мы рекомендуем использовать &#039;&#039;&#039;три различных пользователя&#039;&#039;&#039;: для администрирования сервера (полные права), для userside и модулей (полные права но без административных) и пользователя web-stomp для websocket (минимальные права на чтение определенных объектов брокера). Но вы можете создать только два: администратора, который также будете использоваться для USERSIDE, и пользователя для websocket. Это обязательно должны быть минимум два разных пользователя, так как пароль для websocket пользователя передается в браузер и может быть легко прочитан пользователем. Далее будет показан пример для рекомендуемых трех пользователей. &lt;br /&gt;
&lt;br /&gt;
Создайте &#039;&#039;&#039;пользователя для администрирования&#039;&#039;&#039; RabbitMQ. В данном примере используется имя пользователя &#039;&#039;&#039;admin&#039;&#039;&#039; и пароль &#039;&#039;&#039;пароль_администратора&#039;&#039;&#039;. Пользователю сразу после создания присваивается тэг &amp;lt;code&amp;gt;administrator&amp;lt;/code&amp;gt;, наделяющий пользователя максимальными правами администратора и затем устанавливаются разрешения для vhost &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; позволяющие полный доступ к конфигурированию, записи и чтению всего в пределах этого vhost*.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;admin&amp;quot; &amp;quot;пароль_администратора&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;admin&amp;quot; &amp;quot;administrator&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;admin&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создайте &#039;&#039;&#039;пользователя, от имени которого будут работать ERP USERSIDE&#039;&#039;&#039; и модули. Пример для имени пользователя &#039;&#039;&#039;userside&#039;&#039;&#039; (наделять админскими правами этого пользователя не нужно):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;userside&amp;quot; &amp;quot;пароль_системы&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;userside&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;websocket&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Создайте &#039;&#039;&#039;пользователя WebSTOMP&#039;&#039;&#039;. Он понадобится для использования уведомлений через WebSocket. Вместо &#039;&#039;&#039;websock-user&#039;&#039;&#039; вы можете указать другое имя пользователя. Вместо &#039;&#039;&#039;пароль_websocket&#039;&#039;&#039; укажите свой пароль, но этот пароль будет передаваться в открытом виде в браузер, так что не делайте его похожим на остальные пароли:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;websock-user&amp;quot; &amp;quot;пароль_websocket&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внимание! Имя пользователя и пароль WebSTOMP вам нужно будет указать в настройках в интерфейсе USERSIDE (Меню: Настройки - Основные - Websocket).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;* vhost - это виртуальный хост внутри RabbitMQ, позволяющий разграничить различные варианты использования одного и того же сервера разными приложениями. Как, например, разные базы данных на одном сервере СУБД. vhost по умолчанию имеет имя / и почти всегда вам этого достаточно. Но если вы планируете, например, запустить несколько копий ERP USERSIDE на одном сервере, то для каждой копии вам нужно будет создать свой vhost и, соответственно, пользователей для него. Подробней обратитесь к [https://www.rabbitmq.com/vhosts.html официальному руководству].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Перезапустите службу rabbitmq:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rabbitmq-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Управление ====&lt;br /&gt;
Одна из команд, приведенных выше, устанавливает в RabbitMQ модуль управления, предоставляющий удобный WEB-интерфейс для мониторинга, диагностики и управления сервером RabbitMQ. При помощи этого модуля можно осуществлять мониторинг сервера, следить за количеством сообщений в очередях и другими состояниями. Всё это можно делать и используя консольную утилиту &amp;lt;code&amp;gt;rabbitmqctl&amp;lt;/code&amp;gt;, но использование WEB-интерфейса может быть значительно наглядней и удобней.&lt;br /&gt;
&lt;br /&gt;
По умолчанию WEB-интерфейс управления доступен по адресу http://userside.mycompany.com:15672. Рекомендуем использовать фаервол, чтобы ограничить доступ к этому интерфейсу управления.&lt;br /&gt;
&lt;br /&gt;
Подробнее о модуле управления можно [https://www.rabbitmq.com/management.html прочитать на официальном сайте RabbitMQ].&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
==== Альтернативный репозиторий ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
Выполните следующие команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы планируете использовать LDAP, необходимо установить расширение php-ldap:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-ldap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы планируете использовать отправку SMS используя TurboSMS, также понадобится расширение php-soap:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-soap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Далее приведены команды, вносящие изменения в файлы конфигурации.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;request_terminate_timeout =.*@request_terminate_timeout = 300@&amp;quot; /etc/php/8.3/fpm/pool.d/www.conf&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NGINX ===&lt;br /&gt;
==== Альтернативный официальный репозиторий ====&lt;br /&gt;
Версия NGINX, поставляемая в репозитории Debian, полностью подходит для использования и нет необходимости в добавлении альтернативного репозитория. Однако, если вам хочется всегда иметь последнюю версию, то выполните следующие строки, чтобы добавить в операционную систему официальный репозиторий nginx:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \&lt;br /&gt;
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
echo &amp;quot;deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \&lt;br /&gt;
http://nginx.org/packages/debian `lsb_release -cs` nginx&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/sources.list.d/nginx.list&lt;br /&gt;
echo -e &amp;quot;Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/preferences.d/99nginx&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если у вас другая операционная система, вы можете найти необходимые команды для нее на официальном сайте NGINX: https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^user.*;@user www-data www-data;@&amp;quot; &amp;quot;/etc/nginx/nginx.conf&amp;quot;&lt;br /&gt;
sudo systemctl restart nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующий пример настройки подразумевает, что ERP USERSIDE будет установлен в стандартный каталог системы &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Если вы желаете установить ERP USERSIDE в другой каталог, пожалуйста, не забывайте исправлять его во всех последующих примерах. Чтобы не ошибиться, мы рекомендуем использовать именно каталог &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь отредактируйте файл /etc/nginx/conf.d/default.conf. Либо удалите его и создайте файл с именем /etc/nginx/conf.d/userside.conf. В любом случае, не зависимо от вашего выбора, содержимое файла должно быть следующим (вместо userside.mycompany.com укажите свое доменное имя):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen       80 default_server;&lt;br /&gt;
    server_name  userside.mycompany.com;&lt;br /&gt;
    charset      utf-8;&lt;br /&gt;
    client_max_body_size 100M;&lt;br /&gt;
&lt;br /&gt;
    access_log  /var/log/nginx/userside-access.log;&lt;br /&gt;
    error_log   /var/log/nginx/userside-error.log;&lt;br /&gt;
&lt;br /&gt;
    root   /var/www/userside/public;&lt;br /&gt;
    index  index.php;&lt;br /&gt;
&lt;br /&gt;
    location = /favicon.ico { access_log off; log_not_found off; }&lt;br /&gt;
    location = /robots.txt  { access_log off; log_not_found off; }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~* ^.+\.(css|js|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {&lt;br /&gt;
        access_log    off;&lt;br /&gt;
        log_not_found off;&lt;br /&gt;
        expires       max;&lt;br /&gt;
        add_header    Pragma public;&lt;br /&gt;
        add_header    Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ \.php$ {&lt;br /&gt;
        try_files     $uri =404;&lt;br /&gt;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
        fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
        fastcgi_index index.php;&lt;br /&gt;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
        fastcgi_read_timeout 300;&lt;br /&gt;
        include       fastcgi_params;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location /ws {&lt;br /&gt;
        proxy_pass http://127.0.0.1:15674/ws;&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header Connection &amp;quot;Upgrade&amp;quot;;&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ /\.ht { deny  all; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также, возможно, вы захотите настроить SSL и что-либо еще. Эта тема выходит за рамки данной инстуркции.&lt;br /&gt;
&lt;br /&gt;
Если Вы установили RabbitMQ &#039;&#039;&#039;на другом сервере&#039;&#039;&#039;, либо изменили значение порта WebSTOMP с 15674 на какой-то другой, то укажите IP-адрес сервера с RabbitMQ и номер порта в строке &amp;lt;code&amp;gt;proxy_pass http://127.0.0.1:15674/ws;&amp;lt;/code&amp;gt;. Протокол должен оставаться http. Путь должен оставаться /ws.&lt;br /&gt;
&lt;br /&gt;
Проверьте конфигурацию и если она в порядке перезагрузите nginx:&lt;br /&gt;
 sudo nginx -t &amp;amp;&amp;amp; sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Если у вас на хосте неподдерживаемая версия (&amp;quot;end-of-life&amp;quot;), то нужно обязательно [[Python-update|установить дополнительно]] более свежую версию Python.&lt;br /&gt;
&lt;br /&gt;
==== Установка необходимых пакетов ====&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv libffi-dev pkg-config&lt;br /&gt;
&lt;br /&gt;
=== Supervisor ===&lt;br /&gt;
 sudo apt install -y supervisor&lt;br /&gt;
&lt;br /&gt;
== Загрузка и запуск инсталлятора ==&lt;br /&gt;
&lt;br /&gt;
См. также: [[Инсталлятор|Справку по инсталлятору]]&lt;br /&gt;
&lt;br /&gt;
1. перейти в каталог системы&lt;br /&gt;
 cd /var/www/userside&lt;br /&gt;
&lt;br /&gt;
2. загрузить скрипт-инсталлятор&lt;br /&gt;
 sudo -u www-data php -r &amp;quot;copy(&#039;https://my.userside.eu/install&#039;, &#039;userside_install.phar&#039;);&amp;quot; &lt;br /&gt;
&lt;br /&gt;
3. запустить инсталлятор&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
В процессе работы инсталлятор проверяет соответствие техническим требованиям, запрашивает параметры доступа и проверяет соединения со службами сервера.&lt;br /&gt;
&lt;br /&gt;
Вы можете ввести любой доступный вам номер версии ERP USERSIDE для установки. Для этого можете ввести порядковый номер версии из списка (он содержит только последние версии каждой ветки) либо ввести номер версии целиком, если ее нет в списке.&lt;br /&gt;
&lt;br /&gt;
По окончанию работы инсталлятора будет выведено сообщение об успешной установке.&lt;br /&gt;
&lt;br /&gt;
Если вы произвели установку не от имени пользователя веб-сервера, то обязательно после окончания установки сделайте его владельцем всех файлов userside рекурсивно!&lt;br /&gt;
&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside&lt;br /&gt;
 sudo chmod -R u=rwX,g=rwX,o=r /var/www/userside&lt;br /&gt;
&lt;br /&gt;
== Настройка после установки ==&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация системных служб ===&lt;br /&gt;
После установки необходимо скопировать примеры конфигурационных файлов системных служб и, при необходимости, настроить их (например, указать путь к каталогу userside, если он отличается от /var/www/userside). Выполните команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp etc/us-core-worker.conf-example /etc/supervisor/conf.d/us-core-worker.conf&lt;br /&gt;
sudo cp microservice/poller/etc/usm_poller.conf-example /etc/supervisor/conf.d/usm_poller.conf&lt;br /&gt;
sudo cp etc/logrotate-example /etc/logrotate.d/userside&lt;br /&gt;
sudo cp microservice/poller/etc/logrotate-example /etc/logrotate.d/usm_poller&lt;br /&gt;
sudo cp etc/crontab-example /etc/cron.d/userside&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка необходимых зависимостей для usm_poller ===&lt;br /&gt;
Создайте виртуальное окружение venv для python и установите зависимые модули, как показано далее:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H python3 -m venv venv&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Запуск супервизора ===&lt;br /&gt;
Супервизор контролирует работу служб, указанных в его конфигурации. Для запуска супервизора выполните:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart supervisor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После запуска супервизора, спустя несколько секунд можно понаблюдать за состоянием всех контролируемых им служб. Все службы должны быть в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сразу после установки ==&lt;br /&gt;
На этом установка ERP USERSIDE закончена. Теперь выполните следующие шаги:&lt;br /&gt;
* Откройте страницу системы &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://userside.mydomain.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; и выполните вход &#039;&#039;(по умолчанию имя пользователя: Admin, пароль: 1234)&#039;&#039;.&lt;br /&gt;
* Выполните настройку Websocket в разделе: Настройка - Основная - WebSocket. Включите и впишите имя пользователя и пароль WebStomp пользователя, которого вы создавали ранее в разделе RabbitMQ.&lt;br /&gt;
* Выполните основные настройки в разделе: [[Настройка - Основная|Настройка - Основная]].&lt;br /&gt;
* Настройте взаимодействие с [[Поддерживаемые биллинги|биллингом]] в соответствии с [[Настройка взаимодействия с биллингом|инструкциями]].&lt;br /&gt;
* Ознакомьтесь с инструкциями на странице: [[С чего начать?]].&lt;br /&gt;
* Настройте [[UserSide API Key|API-ключ]].&lt;br /&gt;
&lt;br /&gt;
== Обновление системы ==&lt;br /&gt;
Мы стараемся делать все возможное, чтобы вероятность сквоздного обновления с любой версии до последней версии было успешным. Однако, иногда бывает так, что из-за каки-то старинных проблем со структурой базы данных, которые никогда не мешали работать раньше, может возникнуть ситуация, при которой сквоздное обновление невозможно. В таком случае вам придется обновляться поэтапно на каждую следующую последнюю версию. Например, с 3.14.80 сначала на 3.15.60, затем на 3.16.39 и так далее.&lt;br /&gt;
&lt;br /&gt;
Перед обновлением обязательно прочитайте обо всех изменениях, которые необходимо выполнить для обновления для каждой версии, которая лежит между вашей и той, на которую вы собираетесь обновиться.&lt;br /&gt;
&lt;br /&gt;
Мы рекомендуем сделать копию системы для безопасного проведения обновления. Обратитесь к разделу [[HOWTO: Клонирование USERSIDE]]. Вы всегда можете удалить копию и начать сначала. Это просто и безопасно. Но если вы желаете обновить работающую систему, то выполняйте его в моменты наименьшей нагрузки с запасом по времени, необходимым для аварийного восстановления, если вдруг что-то пойдет не так. Всегда обязательно делайте резервную копию базы данных и файлов перед обновлениями. Если обновление будет прервано, особенно на этапе миграции данных, то есть риск того, что восстановить корректно данные будет очень непросто или даже невозможно. В общем, ответственность за наличие актуальной резервной копии лежит целиком на вас.&lt;br /&gt;
&lt;br /&gt;
==== Процесс обновления ====&lt;br /&gt;
Мы настоятельно рекомендуем выполнять тестовые обновления на [[HOWTO:_Клонирование_USERSIDE|копии системы]].&lt;br /&gt;
&lt;br /&gt;
Для проведения обновления запустите инсталлятор в режиме install и следуйте инструкциям:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После обновления USERSIDE нужно обязательно обновить зависимости usm_poller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно перезапустить все службы, которолируемые супервизором и проследить чтобы все они запустились и были в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание системы ==&lt;br /&gt;
Для поддержания системы в рабочем состоянии и обеспечения надежной ее работы в будущем рекомендуется выполнять несколько простых дейсвтий:&lt;br /&gt;
* периодически создавать резервную копию базы данных&lt;br /&gt;
* периодически создавать резервную копию загруженных файлов (это можно сделать просто архивируя каталог /var/www/userside/var/attachments и файл .env)&lt;br /&gt;
* периодически наблюдать за производительностью сервера (при помощи htop, atop) и брокера RabbitMQ и принимать решения о масштабировании пулов fpm, фоновых процессов ядра и микросервисов&lt;br /&gt;
&lt;br /&gt;
=== Резервное копирование ===&lt;br /&gt;
Установите периодическое резервное копирование базы данных и пользовательских файлов. Желательно минимум раз в сутки в моменты наименьшей нагрузки на сервер. В PostgreSQL существует два способа создать резервную копию базы данных: dump и sql-script. У каждого из них есть свои преимущества и недостатки. Первый создает безопасный дамп базы данных целиком, а второй создает SQL-скрипт, выполняя который можно восстановить как структуру так и данные. Рекомендуем обратиться к [https://www.postgresql.org/docs/current/app-pgdump.html документации по использованию команды pg_dump] для выбора более подходящего для вас способа или набора параметров.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены две команды для создания резервной копии базы данных — выбирайте одну из них и добавляйте в ваш crontab:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# SQL-script&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside &amp;gt; /backup/userside.sql.gz&lt;br /&gt;
&lt;br /&gt;
# DUMP&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside &amp;gt; /backup/userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для создания минимальной резервной копии &#039;&#039;&#039;файлов&#039;&#039;&#039; можно использовать следующую команду (для версии 3.15 и новее):&lt;br /&gt;
 sudo tar -czf /backup/userside.tgz .env common/config/settings.json var/attachments&lt;br /&gt;
Этих файлов вместе с базой данных будет достаточно для восстановления работы USERSIDE. Но вы можете выполнять резервное копирование всего каталога /var/www/userside для большей надежности.&lt;br /&gt;
&lt;br /&gt;
=== Восстановление из резервной копии ===&lt;br /&gt;
Для восстановления из дампа используется команда pg_restore. [https://postgrespro.ru/docs/postgresql/13/app-pgrestore Документация по использованию pg_restore]. Для восстановления из SQL-скрипта используется утилита psql. [https://www.postgresql.org/docs/current/app-psql.html Документация по использованию psql].&lt;br /&gt;
&lt;br /&gt;
Перед восстановлением базы данных из резервной копии нужно обязательно остановить работу USERSIDE.&lt;br /&gt;
&lt;br /&gt;
1. Остановить cron userside и всех модулей&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside-modules ~/cron&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Остановить работу фоновых служб&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Остановить работу php-fpm&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Только после этого можно приступать к восстановлению базы данных из резервной копии.&lt;br /&gt;
&lt;br /&gt;
==== SQL-script ====&lt;br /&gt;
Для восстановления БД из резервной копии в виде SQL-скрипта, сначала нужно пересоздать базу данных, а затем восстановить в пустую базу данных резервную копию:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
gunzip &amp;lt; userside.sql.gz | sudo -u postgres psql -d userside -v ON_ERROR_STOP=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DUMP ====&lt;br /&gt;
Дамп содержит целиком базу данных со всеми ее элементами. Поэтому перед восстановлением базы данных из дампа её не должно существовать на сервере — удалите базу данных перед восстановлением из дампа. Также важно, чтобы пользователь базы данных (владелец всех элементов) уже существовал — создайте его перед восстановлением, если вы восстанавливаете базу данных на новом сервере, где нужного пользователя еще нет.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание, что структура дампа может быть несовместима между разными версиями PostgreSQL. Это не обязательно так, но вполне вероятно.&lt;br /&gt;
&lt;br /&gt;
Для восстановления из дампа используйте команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres pg_restore --clean --if-exists --create --exit-on-error --dbname=postgres userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Обратите внимание, что имя базы данных в команде обязательно должно быть &#039;&#039;&#039;postgres&#039;&#039;&#039;, так как из дампа восстанавливается вся база данных целиком, а не ее содержимое.&lt;br /&gt;
&lt;br /&gt;
==== После восстановления базы данных ====&lt;br /&gt;
После восстановления базы данных любым способом, необходимо очистить кэш ERP USERSIDE, т.к. в кэше теперь находятся данные, отличные от данных в базе. Перейтите в каталог /var/www/userside и выполните команду очистки кэша (первую, если используется пароль или вторую, если не используется):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -a $US_REDIS_PASSWORD -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Восстановите работу служб, которые были остановлены перед выполнением резервной копии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mv ~/cron/* /etc/cron.d&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Выполните команду восстановления, чтобы файлы системы соответствовали версии базы данных и проверить систему на целостность файлов.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar repair&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=20281</id>
		<title>Установка</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=20281"/>
		<updated>2025-03-06T13:39:12Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Восстановление из резервной копии */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
[[Installation|en]] | [[Установка|ru]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ВНИМАНИЕ: Данная инструкция актуальна для версий ERP USERSIDE 3.19&#039;&#039;&#039;&lt;br /&gt;
* [[Установка для версии 3.18|Инструкция для версии 3.18]]&lt;br /&gt;
* [[Установка для версии 3.17|Инструкция для версии 3.11-3.17]]&lt;br /&gt;
* [[Установка для версии 3.10 и более ранних|Инструкция для версии 3.10 и ранее]].&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
В целях упрощения будут рассмотрены команды для операционной системы &#039;&#039;&#039;Linux Debian 12 (bookworm)&#039;&#039;&#039;. Для опытных системных администраторов не составит труда использовать аналогичные команды для другой операционной системы. Если же вы не чувствуете себя уверено в администрировании операционных систем, то мы рекомендуем вам использовать операционную систему &#039;&#039;&#039;Debian&#039;&#039;&#039; либо &#039;&#039;&#039;Ubuntu Server LTS&#039;&#039;&#039;. Из-за их простоты, а также по причине того, что наша техническая поддержка значительно лучше разбирается в Debian-подобных дистрибутивах. Вероятность подсказать что-либо не касающееся ERP USERSIDE, но касающееся администрирования операционной системы, будет значительно выше, если у вас будет Debian или подобный дистрибутив на его основе.&lt;br /&gt;
&lt;br /&gt;
С другой стороны, если вы опытный системный администратор и имеете навыки и опыт работы с Docker, возможно для вас будет более удобным вариант использования готового окружения на базе Docker-образов, которые мы подготовили специально, включив в них всё необходимое для работы ERP USERSIDE. В этом случае вам не придется ничего настраивать, кроме как выполнить простые настройки Docker-бандла https://github.com/userside/userside-docker.&lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Для работы ERP USERSIDE необходимы различные системные приложения и службы, такие как интерпретатор языка PHP с набором расширений, WEB-сервер, система управления базами данных и прочие. В этом разделе будут перечислены такие требования в зависимости от версии ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание, что ваша операционная система должна быть сконфигурирована с корректным часовым поясом и локалью. От этого зависит правильность отображения информации и корректность сортировки.&lt;br /&gt;
&lt;br /&gt;
Список требуемых расширений PHP содержит все расширения, не входящие в состав ядра PHP. Часть из этих расширений может поставляться вместе с основным пакетом PHP либо в составе пакета php-common, другая же часть должна быть установлена дополнительно. &lt;br /&gt;
&lt;br /&gt;
=== 3.19 (текущая стабильная) ===&lt;br /&gt;
* PHP: 8.3&lt;br /&gt;
* Расширения PHP: ctype, gd, json, libxml, mbstring, openssl, pdo, pdo_pgsql, posix, simplexml, snmp, sockets, zlib, pcntl&lt;br /&gt;
* Дополнительные расширения PHP: ldap, soap&lt;br /&gt;
* Python: &#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать.&#039;&#039;&lt;br /&gt;
* Модули Python: pip, venv&lt;br /&gt;
* PostgreSQL: 12+ (желательно 16)&lt;br /&gt;
* Redis: 5+ (желательно 7)&lt;br /&gt;
* RabbitMQ: 3.10+ (желательно 3.13)&lt;br /&gt;
* Supervisor&lt;br /&gt;
&lt;br /&gt;
== Основные договорённости ==&lt;br /&gt;
Каталог, в который устанавливается ERP USERSIDE - &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Внутри этого каталога должен быть подкаталог public, который является корневым каталогом для WEB-сервера. Если вы хотите использовать другой каталог для ERP USERSIDE, не забывайте вносить соответствующие исправления во все примеры из данной инструкции.&lt;br /&gt;
&lt;br /&gt;
Создайте каталог:&lt;br /&gt;
 sudo mkdir -p /var/www/userside/public&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside&lt;br /&gt;
&lt;br /&gt;
Вам необходимо выделить доменное имя для ERP USERSIDE. В примерах ниже используется userside.mycompany.com, но вам необходимо будет заменить его на свое. Пропишите это доменное имя в /etc/hosts, если оно отличается от имени хоста, на котором производистя установка.&lt;br /&gt;
&lt;br /&gt;
== Установка необходимых компонентов ==&lt;br /&gt;
Сперва установите утилиты, которые будут необходимы далее в процессе установки. Они необходимы для любой верии ERP USERSIDE. Вы можете копировать строки по одной и вставлять их в командную строку вашей операционной системы.&lt;br /&gt;
&lt;br /&gt;
Следующие строки скопируйте и вставьте целиком:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/contrib-non-free.list &amp;lt;&amp;lt; EOL&lt;br /&gt;
deb http://deb.debian.org/debian/ $(lsb_release -sc) contrib non-free non-free-firmware&lt;br /&gt;
EOL&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt full-upgrade -y&lt;br /&gt;
sudo apt install -y gnupg ca-certificates lsb-release debian-archive-keyring debian-keyring libsnmp-dev snmp-mibs-downloader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
==== Альтернативный официальный репозиторий ====&lt;br /&gt;
Мы настоятельно рекомендуем использовать последнюю версию PostgreSQL, так как это всегда положительно сказывается на скорости работы. Добавьте в систему официальный репозиторий Postgres:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo install -d /usr/share/postgresql-common/pgdg&lt;br /&gt;
&lt;br /&gt;
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc&lt;br /&gt;
&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main&amp;quot; &amp;gt; /etc/apt/sources.list.d/pgdg.list&#039;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если у вас другая операционная система, вы можете найти необходимые команды для нее на [https://www.postgresql.org/download/ официальном сайте PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
&#039;&#039;&#039;Внимание!&#039;&#039;&#039; Перед установкой PostgreSQL в вашей операционной системе должна быть установлена ваша местная локаль и корректный часовой пояс! Это можно сделать и позже, но будет намного проще, если это будет сделано до установки PostgreSQL. Выполните следующую команду, чтобы убедиться, что нужная локаль присутствует:&lt;br /&gt;
 locale -a&lt;br /&gt;
&lt;br /&gt;
Если среди перечисленных нет вашей местной локали, то установите ее. Для этого достаточно отредактировать файл /etc/locale.gen убрав комментарии перед строкой (строками) с нужной локалью, а затем выполнить команду:&lt;br /&gt;
 sudo locale-gen&lt;br /&gt;
&lt;br /&gt;
Если вам нужно изменить локаль по умолчанию, то выполните:&lt;br /&gt;
 sudo dpkg-reconfigure locales&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить часовой пояс, выполните:&lt;br /&gt;
 sudo timedatectl set-timezone Europe/Kyiv&lt;br /&gt;
&lt;br /&gt;
Теперь можно перейти к установке PostgreSQL:&lt;br /&gt;
 sudo apt install -y postgresql-16 postgresql-16-postgis-3&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Создайте пользователя и базу данных для ERP USERSIDE. В примере ниже создается пользователь с именем userside и база данных с таким же именем. Если ваша локаль не uk_UA, не забудьте изменить команду. Затем к базе данных подключается расширение PostGis, необходимое для работы с географическими данными. После выполнения первой строки, вам необходимо будет дважды ввести пароль для нового пользователя - запишите этот пароль, он понадобится вам далее для установки ERP USERSIDE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres createuser userside -P&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ваш PostgreSQL установлен &#039;&#039;&#039;на другом сервере&#039;&#039;&#039;, то вам необходимо будет внести коррекции в файлы postgresql.conf и pg_hba.conf, расположенные в каталоге /etc/postgresql/16/main/. В файле postgresql.conf необходимо раскомментировать и изменить значение параметра &amp;lt;code&amp;gt;listen_addresses&amp;lt;/code&amp;gt;, указав там все IP-адреса интерфейсов сервера, на которых он может принимать подключения к PostgreSQL. В файле pg_hba.conf необходимо в самом конце добавить строку по аналогии с предыдущими, указывающую, с какого адреса может подключаться пользователь ERP USERSIDE. Но если ваш PostgreSQL расположен на том же сервере, что и USERSIDE - нет необходимости вносить какие либо корректировки в эти файлы.&lt;br /&gt;
&lt;br /&gt;
=== Redis ===&lt;br /&gt;
Стандартный репозиторий Debian 12 включает версию Redis 7.0.15. Эта версия подходит для работы ERP USERSIDE.&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
 sudo apt install -y redis-server&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
По умолчанию Redis принимает подключения без пароля, но мы настоятельно рекомендуем установить пароль. Так как пароль передается в открытом виде (Redis не предусматривает шифрования, т.к. делает упор на скорость обработки запросов и лишние этапы вроде шифрования не применяются), вам нужно создать действительно длинный и сложный пароль, например, используя утилиту &#039;&#039;&#039;openssl&#039;&#039;&#039; следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rand --hex 32&lt;br /&gt;
&lt;br /&gt;
На выходе вы получите случайный набор из 32 байт в 16-ричном виде, который и будете использовать в качестве пароля. Далее нужно будет вместо слова &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; подставить эту сгенерированную строку. Запишите его. Далее в настройках вы будете указывать эту строку как пароль Redis.&lt;br /&gt;
&lt;br /&gt;
Укажите полученный хэш парольной фразы в конфигурационном файле Redis:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^.*requirepass .*@requirepass MYPASSWORDHERE@g&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
где вместо &#039;&#039;&#039;MYPASSWORDHERE&#039;&#039;&#039; укажите хэш парольной фразы поулченый ранее.&lt;br /&gt;
&lt;br /&gt;
Также необходимо отключить таймаут (на некоторых версиях Redis он включен):&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &#039;s@^timeout .*@timeout 0@&#039; /etc/redis/redis.conf&lt;br /&gt;
&lt;br /&gt;
Перезапустите Redis и убедитесь, что он работает (в ответ должны получить PONG):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart redis&lt;br /&gt;
redis-cli -h 127.0.0.1 -p 6379 -a MYPASSWORDHERE ping&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RabbitMQ ===&lt;br /&gt;
Стандартный репозиторий Debian 12 включает старую версию RabbitMQ 3.10. Вы можете использовать ее — она поддерживается. Однако, эта версия относительно старая и лучшим вариантом будет установить новую версию из альтернативных репозиториев. На [https://www.rabbitmq.com/install-debian.html официальном сайте RabbitMQ] находится достаточно подробная информация по установке RabbitMQ для каждой операционной системы.&lt;br /&gt;
&lt;br /&gt;
==== Добавление альтернативных репозиториев ====&lt;br /&gt;
Следующий блок скопируйте и вставьте целиком в командную строку&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-server-archive-keyring.gpg &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/rabbitmq.list &amp;lt;&amp;lt;EOF&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-erlang-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
deb-src [signed-by=/usr/share/keyrings/rabbitmq-server-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
Убедитесь, что в /etc/hosts есть запись для имени вашего хоста. Отсутствие такрой записи (например, если вы изменили имя хоста после инсталляции) является основной ошибкой, возникающей при установке RabbitMQ. Так что лучше еще раз убедитесь, что запись соответствующая имени хосту имеется.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y erlang-base \&lt;br /&gt;
                    erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \&lt;br /&gt;
                    erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \&lt;br /&gt;
                    erlang-runtime-tools erlang-snmp erlang-ssl \&lt;br /&gt;
                    erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl&lt;br /&gt;
&lt;br /&gt;
sudo apt install rabbitmq-server -y --fix-missing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка необходимых дополнений ====&lt;br /&gt;
Следующие две строки выполняйте по одной за раз!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_management --offline&lt;br /&gt;
&lt;br /&gt;
sudo rabbitmq-plugins enable rabbitmq_web_stomp --offline&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Скопируйте и вставьте целиком следующий блок:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tee /etc/rabbitmq/rabbitmq.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;
listeners.tcp.default = 5672&lt;br /&gt;
&lt;br /&gt;
web_stomp.port = 15674&lt;br /&gt;
web_stomp.cowboy_opts.max_keepalive = 60&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать пользователей. Мы рекомендуем использовать &#039;&#039;&#039;три различных пользователя&#039;&#039;&#039;: для администрирования сервера (полные права), для userside и модулей (полные права но без административных) и пользователя web-stomp для websocket (минимальные права на чтение определенных объектов брокера). Но вы можете создать только два: администратора, который также будете использоваться для USERSIDE, и пользователя для websocket. Это обязательно должны быть минимум два разных пользователя, так как пароль для websocket пользователя передается в браузер и может быть легко прочитан пользователем. Далее будет показан пример для рекомендуемых трех пользователей. &lt;br /&gt;
&lt;br /&gt;
Создайте &#039;&#039;&#039;пользователя для администрирования&#039;&#039;&#039; RabbitMQ. В данном примере используется имя пользователя &#039;&#039;&#039;admin&#039;&#039;&#039; и пароль &#039;&#039;&#039;пароль_администратора&#039;&#039;&#039;. Пользователю сразу после создания присваивается тэг &amp;lt;code&amp;gt;administrator&amp;lt;/code&amp;gt;, наделяющий пользователя максимальными правами администратора и затем устанавливаются разрешения для vhost &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; позволяющие полный доступ к конфигурированию, записи и чтению всего в пределах этого vhost*.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;admin&amp;quot; &amp;quot;пароль_администратора&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;admin&amp;quot; &amp;quot;administrator&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;admin&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создайте &#039;&#039;&#039;пользователя, от имени которого будут работать ERP USERSIDE&#039;&#039;&#039; и модули. Пример для имени пользователя &#039;&#039;&#039;userside&#039;&#039;&#039; (наделять админскими правами этого пользователя не нужно):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;userside&amp;quot; &amp;quot;пароль_системы&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_user_tags &amp;quot;userside&amp;quot; &amp;quot;monitoring&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;userside&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot; &amp;quot;.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;websocket&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Создайте &#039;&#039;&#039;пользователя WebSTOMP&#039;&#039;&#039;. Он понадобится для использования уведомлений через WebSocket. Вместо &#039;&#039;&#039;websock-user&#039;&#039;&#039; вы можете указать другое имя пользователя. Вместо &#039;&#039;&#039;пароль_websocket&#039;&#039;&#039; укажите свой пароль, но этот пароль будет передаваться в открытом виде в браузер, так что не делайте его похожим на остальные пароли:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rabbitmqctl add_user &amp;quot;websock-user&amp;quot; &amp;quot;пароль_websocket&amp;quot;&lt;br /&gt;
sudo rabbitmqctl set_permissions -p &amp;quot;/&amp;quot; &amp;quot;websock-user&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot; &amp;quot;&amp;quot; &amp;quot;^erp-stomp:id-.*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внимание! Имя пользователя и пароль WebSTOMP вам нужно будет указать в настройках в интерфейсе USERSIDE (Меню: Настройки - Основные - Websocket).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;* vhost - это виртуальный хост внутри RabbitMQ, позволяющий разграничить различные варианты использования одного и того же сервера разными приложениями. Как, например, разные базы данных на одном сервере СУБД. vhost по умолчанию имеет имя / и почти всегда вам этого достаточно. Но если вы планируете, например, запустить несколько копий ERP USERSIDE на одном сервере, то для каждой копии вам нужно будет создать свой vhost и, соответственно, пользователей для него. Подробней обратитесь к [https://www.rabbitmq.com/vhosts.html официальному руководству].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Перезапустите службу rabbitmq:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rabbitmq-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Управление ====&lt;br /&gt;
Одна из команд, приведенных выше, устанавливает в RabbitMQ модуль управления, предоставляющий удобный WEB-интерфейс для мониторинга, диагностики и управления сервером RabbitMQ. При помощи этого модуля можно осуществлять мониторинг сервера, следить за количеством сообщений в очередях и другими состояниями. Всё это можно делать и используя консольную утилиту &amp;lt;code&amp;gt;rabbitmqctl&amp;lt;/code&amp;gt;, но использование WEB-интерфейса может быть значительно наглядней и удобней.&lt;br /&gt;
&lt;br /&gt;
По умолчанию WEB-интерфейс управления доступен по адресу http://userside.mycompany.com:15672. Рекомендуем использовать фаервол, чтобы ограничить доступ к этому интерфейсу управления.&lt;br /&gt;
&lt;br /&gt;
Подробнее о модуле управления можно [https://www.rabbitmq.com/management.html прочитать на официальном сайте RabbitMQ].&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
==== Альтернативный репозиторий ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg&lt;br /&gt;
sudo sh -c &#039;echo &amp;quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;quot; &amp;gt; /etc/apt/sources.list.d/php.list&#039;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
Выполните следующие команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы планируете использовать LDAP, необходимо установить расширение php-ldap:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-ldap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы планируете использовать отправку SMS используя TurboSMS, также понадобится расширение php-soap:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y php8.3-soap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Далее приведены команды, вносящие изменения в файлы конфигурации.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@&amp;quot; /etc/php/8.3/cli/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@post_max_size = 8M@post_max_size = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@upload_max_filesize = 2M@upload_max_filesize = 100M@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@max_execution_time.*@max_execution_time = 300@&amp;quot; /etc/php/8.3/fpm/php.ini&lt;br /&gt;
sudo sed -i &amp;quot;s@^;request_terminate_timeout =.*@request_terminate_timeout = 300@&amp;quot; /etc/php/8.3/fpm/pool.d/www.conf&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NGINX ===&lt;br /&gt;
==== Альтернативный официальный репозиторий ====&lt;br /&gt;
Версия NGINX, поставляемая в репозитории Debian, полностью подходит для использования и нет необходимости в добавлении альтернативного репозитория. Однако, если вам хочется всегда иметь последнюю версию, то выполните следующие строки, чтобы добавить в операционную систему официальный репозиторий nginx:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \&lt;br /&gt;
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
echo &amp;quot;deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \&lt;br /&gt;
http://nginx.org/packages/debian `lsb_release -cs` nginx&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/sources.list.d/nginx.list&lt;br /&gt;
echo -e &amp;quot;Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n&amp;quot; \&lt;br /&gt;
    | sudo tee /etc/apt/preferences.d/99nginx&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если у вас другая операционная система, вы можете найти необходимые команды для нее на официальном сайте NGINX: https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i &amp;quot;s@^user.*;@user www-data www-data;@&amp;quot; &amp;quot;/etc/nginx/nginx.conf&amp;quot;&lt;br /&gt;
sudo systemctl restart nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующий пример настройки подразумевает, что ERP USERSIDE будет установлен в стандартный каталог системы &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;. Если вы желаете установить ERP USERSIDE в другой каталог, пожалуйста, не забывайте исправлять его во всех последующих примерах. Чтобы не ошибиться, мы рекомендуем использовать именно каталог &amp;lt;code&amp;gt;/var/www/userside&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь отредактируйте файл /etc/nginx/conf.d/default.conf. Либо удалите его и создайте файл с именем /etc/nginx/conf.d/userside.conf. В любом случае, не зависимо от вашего выбора, содержимое файла должно быть следующим (вместо userside.mycompany.com укажите свое доменное имя):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen       80 default_server;&lt;br /&gt;
    server_name  userside.mycompany.com;&lt;br /&gt;
    charset      utf-8;&lt;br /&gt;
    client_max_body_size 100M;&lt;br /&gt;
&lt;br /&gt;
    access_log  /var/log/nginx/userside-access.log;&lt;br /&gt;
    error_log   /var/log/nginx/userside-error.log;&lt;br /&gt;
&lt;br /&gt;
    root   /var/www/userside/public;&lt;br /&gt;
    index  index.php;&lt;br /&gt;
&lt;br /&gt;
    location = /favicon.ico { access_log off; log_not_found off; }&lt;br /&gt;
    location = /robots.txt  { access_log off; log_not_found off; }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        try_files $uri $uri/ /index.php$is_args$args;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~* ^.+\.(css|js|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {&lt;br /&gt;
        access_log    off;&lt;br /&gt;
        log_not_found off;&lt;br /&gt;
        expires       max;&lt;br /&gt;
        add_header    Pragma public;&lt;br /&gt;
        add_header    Cache-Control &amp;quot;public&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ \.php$ {&lt;br /&gt;
        try_files     $uri =404;&lt;br /&gt;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
        fastcgi_pass  unix:/run/php/php8.3-fpm.sock;&lt;br /&gt;
        fastcgi_index index.php;&lt;br /&gt;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
        fastcgi_read_timeout 300;&lt;br /&gt;
        include       fastcgi_params;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location /ws {&lt;br /&gt;
        proxy_pass http://127.0.0.1:15674/ws;&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header Connection &amp;quot;Upgrade&amp;quot;;&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ /\.ht { deny  all; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также, возможно, вы захотите настроить SSL и что-либо еще. Эта тема выходит за рамки данной инстуркции.&lt;br /&gt;
&lt;br /&gt;
Если Вы установили RabbitMQ &#039;&#039;&#039;на другом сервере&#039;&#039;&#039;, либо изменили значение порта WebSTOMP с 15674 на какой-то другой, то укажите IP-адрес сервера с RabbitMQ и номер порта в строке &amp;lt;code&amp;gt;proxy_pass http://127.0.0.1:15674/ws;&amp;lt;/code&amp;gt;. Протокол должен оставаться http. Путь должен оставаться /ws.&lt;br /&gt;
&lt;br /&gt;
Проверьте конфигурацию и если она в порядке перезагрузите nginx:&lt;br /&gt;
 sudo nginx -t &amp;amp;&amp;amp; sudo nginx -s reload&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&#039;&#039;Необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Если у вас на хосте неподдерживаемая версия (&amp;quot;end-of-life&amp;quot;), то нужно обязательно [[Python-update|установить дополнительно]] более свежую версию Python.&lt;br /&gt;
&lt;br /&gt;
==== Установка необходимых пакетов ====&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv libffi-dev pkg-config&lt;br /&gt;
&lt;br /&gt;
=== Supervisor ===&lt;br /&gt;
 sudo apt install -y supervisor&lt;br /&gt;
&lt;br /&gt;
== Загрузка и запуск инсталлятора ==&lt;br /&gt;
&lt;br /&gt;
См. также: [[Инсталлятор|Справку по инсталлятору]]&lt;br /&gt;
&lt;br /&gt;
1. перейти в каталог системы&lt;br /&gt;
 cd /var/www/userside&lt;br /&gt;
&lt;br /&gt;
2. загрузить скрипт-инсталлятор&lt;br /&gt;
 sudo -u www-data php -r &amp;quot;copy(&#039;https://my.userside.eu/install&#039;, &#039;userside_install.phar&#039;);&amp;quot; &lt;br /&gt;
&lt;br /&gt;
3. запустить инсталлятор&lt;br /&gt;
 sudo -u www-data php userside_install.phar install&lt;br /&gt;
&lt;br /&gt;
В процессе работы инсталлятор проверяет соответствие техническим требованиям, запрашивает параметры доступа и проверяет соединения со службами сервера.&lt;br /&gt;
&lt;br /&gt;
Вы можете ввести любой доступный вам номер версии ERP USERSIDE для установки. Для этого можете ввести порядковый номер версии из списка (он содержит только последние версии каждой ветки) либо ввести номер версии целиком, если ее нет в списке.&lt;br /&gt;
&lt;br /&gt;
По окончанию работы инсталлятора будет выведено сообщение об успешной установке.&lt;br /&gt;
&lt;br /&gt;
Если вы произвели установку не от имени пользователя веб-сервера, то обязательно после окончания установки сделайте его владельцем всех файлов userside рекурсивно!&lt;br /&gt;
&lt;br /&gt;
 sudo chown -R www-data:www-data /var/www/userside&lt;br /&gt;
 sudo chmod -R u=rwX,g=rwX,o=r /var/www/userside&lt;br /&gt;
&lt;br /&gt;
== Настройка после установки ==&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация системных служб ===&lt;br /&gt;
После установки необходимо скопировать примеры конфигурационных файлов системных служб и, при необходимости, настроить их (например, указать путь к каталогу userside, если он отличается от /var/www/userside). Выполните команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp etc/us-core-worker.conf-example /etc/supervisor/conf.d/us-core-worker.conf&lt;br /&gt;
sudo cp microservice/poller/etc/usm_poller.conf-example /etc/supervisor/conf.d/usm_poller.conf&lt;br /&gt;
sudo cp etc/logrotate-example /etc/logrotate.d/userside&lt;br /&gt;
sudo cp microservice/poller/etc/logrotate-example /etc/logrotate.d/usm_poller&lt;br /&gt;
sudo cp etc/crontab-example /etc/cron.d/userside&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка необходимых зависимостей для usm_poller ===&lt;br /&gt;
Создайте виртуальное окружение venv для python и установите зависимые модули, как показано далее:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H python3 -m venv venv&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Запуск супервизора ===&lt;br /&gt;
Супервизор контролирует работу служб, указанных в его конфигурации. Для запуска супервизора выполните:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart supervisor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После запуска супервизора, спустя несколько секунд можно понаблюдать за состоянием всех контролируемых им служб. Все службы должны быть в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сразу после установки ==&lt;br /&gt;
На этом установка ERP USERSIDE закончена. Теперь выполните следующие шаги:&lt;br /&gt;
* Откройте страницу системы &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://userside.mydomain.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; и выполните вход &#039;&#039;(по умолчанию имя пользователя: Admin, пароль: 1234)&#039;&#039;.&lt;br /&gt;
* Выполните настройку Websocket в разделе: Настройка - Основная - WebSocket. Включите и впишите имя пользователя и пароль WebStomp пользователя, которого вы создавали ранее в разделе RabbitMQ.&lt;br /&gt;
* Выполните основные настройки в разделе: [[Настройка - Основная|Настройка - Основная]].&lt;br /&gt;
* Настройте взаимодействие с [[Поддерживаемые биллинги|биллингом]] в соответствии с [[Настройка взаимодействия с биллингом|инструкциями]].&lt;br /&gt;
* Ознакомьтесь с инструкциями на странице: [[С чего начать?]].&lt;br /&gt;
* Настройте [[UserSide API Key|API-ключ]].&lt;br /&gt;
&lt;br /&gt;
== Обновление системы ==&lt;br /&gt;
Мы стараемся делать все возможное, чтобы вероятность сквоздного обновления с любой версии до последней версии было успешным. Однако, иногда бывает так, что из-за каки-то старинных проблем со структурой базы данных, которые никогда не мешали работать раньше, может возникнуть ситуация, при которой сквоздное обновление невозможно. В таком случае вам придется обновляться поэтапно на каждую следующую последнюю версию. Например, с 3.14.80 сначала на 3.15.60, затем на 3.16.39 и так далее.&lt;br /&gt;
&lt;br /&gt;
Перед обновлением обязательно прочитайте обо всех изменениях, которые необходимо выполнить для обновления для каждой версии, которая лежит между вашей и той, на которую вы собираетесь обновиться.&lt;br /&gt;
&lt;br /&gt;
Мы рекомендуем сделать копию системы для безопасного проведения обновления. Обратитесь к разделу [[HOWTO: Клонирование USERSIDE]]. Вы всегда можете удалить копию и начать сначала. Это просто и безопасно. Но если вы желаете обновить работающую систему, то выполняйте его в моменты наименьшей нагрузки с запасом по времени, необходимым для аварийного восстановления, если вдруг что-то пойдет не так. Всегда обязательно делайте резервную копию базы данных и файлов перед обновлениями. Если обновление будет прервано, особенно на этапе миграции данных, то есть риск того, что восстановить корректно данные будет очень непросто или даже невозможно. В общем, ответственность за наличие актуальной резервной копии лежит целиком на вас.&lt;br /&gt;
&lt;br /&gt;
==== Процесс обновления ====&lt;br /&gt;
Мы настоятельно рекомендуем выполнять тестовые обновления на [[HOWTO:_Клонирование_USERSIDE|копии системы]].&lt;br /&gt;
&lt;br /&gt;
Для проведения обновления запустите инсталлятор в режиме install и следуйте инструкциям:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После обновления USERSIDE нужно обязательно обновить зависимости usm_poller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside/microservice/poller&lt;br /&gt;
sudo -H venv/bin/pip install -U pip&lt;br /&gt;
sudo -H venv/bin/pip install -U -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно перезапустить все службы, которолируемые супервизором и проследить чтобы все они запустились и были в состоянии RUNNING:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl restart all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание системы ==&lt;br /&gt;
Для поддержания системы в рабочем состоянии и обеспечения надежной ее работы в будущем рекомендуется выполнять несколько простых дейсвтий:&lt;br /&gt;
* периодически создавать резервную копию базы данных&lt;br /&gt;
* периодически создавать резервную копию загруженных файлов (это можно сделать просто архивируя каталог /var/www/userside/var/attachments и файл .env)&lt;br /&gt;
* периодически наблюдать за производительностью сервера (при помощи htop, atop) и брокера RabbitMQ и принимать решения о масштабировании пулов fpm, фоновых процессов ядра и микросервисов&lt;br /&gt;
&lt;br /&gt;
=== Резервное копирование ===&lt;br /&gt;
Установите периодическое резервное копирование базы данных и пользовательских файлов. Желательно минимум раз в сутки в моменты наименьшей нагрузки на сервер. В PostgreSQL существует два способа создать резервную копию базы данных: dump и sql-script. У каждого из них есть свои преимущества и недостатки. Первый создает безопасный дамп базы данных целиком, а второй создает SQL-скрипт, выполняя который можно восстановить как структуру так и данные. Рекомендуем обратиться к [https://www.postgresql.org/docs/current/app-pgdump.html документации по использованию команды pg_dump] для выбора более подходящего для вас способа или набора параметров.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены две команды для создания резервной копии базы данных — выбирайте одну из них и добавляйте в ваш crontab:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# SQL-script&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside &amp;gt; /backup/userside.sql.gz&lt;br /&gt;
&lt;br /&gt;
# DUMP&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside &amp;gt; /backup/userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для создания минимальной резервной копии &#039;&#039;&#039;файлов&#039;&#039;&#039; можно использовать следующую команду (для версии 3.15 и новее):&lt;br /&gt;
 sudo tar -czf /backup/userside.tgz .env common/config/settings.json var/attachments&lt;br /&gt;
Этих файлов вместе с базой данных будет достаточно для восстановления работы USERSIDE. Но вы можете выполнять резервное копирование всего каталога /var/www/userside для большей надежности.&lt;br /&gt;
&lt;br /&gt;
=== Восстановление из резервной копии ===&lt;br /&gt;
Для восстановления из дампа используется команда pg_restore. [https://postgrespro.ru/docs/postgresql/13/app-pgrestore Документация по использованию pg_restore]. Для восстановления из SQL-скрипта используется утилита psql. [https://www.postgresql.org/docs/current/app-psql.html Документация по использованию psql].&lt;br /&gt;
&lt;br /&gt;
Перед восстановлением базы данных из резервной копии нужно обязательно остановить работу USERSIDE.&lt;br /&gt;
1. Остановить cron userside и всех модулей&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside ~/cron&lt;br /&gt;
sudo mv /etc/cron.d/userside-modules ~/cron&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Остановить работу фоновых служб&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Остановить работу php-fpm&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Только после этого можно приступать к восстановлению базы данных из резервной копии.&lt;br /&gt;
&lt;br /&gt;
==== SQL-script ====&lt;br /&gt;
Для восстановления БД из резервной копии в виде SQL-скрипта, сначала нужно пересоздать базу данных, а затем восстановить в пустую базу данных резервную копию:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres createdb -e -E &amp;quot;UTF-8&amp;quot; -l &amp;quot;uk_UA.UTF-8&amp;quot; -O userside -T template0 userside&lt;br /&gt;
sudo -u postgres psql -d userside -c &amp;quot;CREATE EXTENSION postgis&amp;quot;&lt;br /&gt;
gunzip &amp;lt; userside.sql.gz | sudo -u postgres psql -d userside -v ON_ERROR_STOP=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DUMP ====&lt;br /&gt;
Дамп содержит целиком базу данных со всеми ее элементами. Поэтому перед восстановлением базы данных из дампа её не должно существовать на сервере — удалите базу данных перед восстановлением из дампа. Также важно, чтобы пользователь базы данных (владелец всех элементов) уже существовал — создайте его перед восстановлением, если вы восстанавливаете базу данных на новом сервере, где нужного пользователя еще нет.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание, что структура дампа может быть несовместима между разными версиями PostgreSQL. Это не обязательно так, но вполне вероятно.&lt;br /&gt;
&lt;br /&gt;
Для восстановления из дампа используйте команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres dropdb userside&lt;br /&gt;
sudo -u postgres pg_restore --clean --if-exists --create --exit-on-error --dbname=postgres userside.dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Обратите внимание, что имя базы данных в команде обязательно должно быть &#039;&#039;&#039;postgres&#039;&#039;&#039;, так как из дампа восстанавливается вся база данных целиком, а не ее содержимое.&lt;br /&gt;
&lt;br /&gt;
==== После восстановления базы данных ====&lt;br /&gt;
После восстановления базы данных любым способом, необходимо очистить кэш ERP USERSIDE, т.к. в кэше теперь находятся данные, отличные от данных в базе. Перейтите в каталог /var/www/userside и выполните команду очистки кэша (первую, если используется пароль или вторую, если не используется):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -a $US_REDIS_PASSWORD -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
source /var/www/userside/.env &amp;amp;&amp;amp; redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -n $US_REDIS_DB FLUSHDB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Восстановите работу служб, которые были остановлены перед выполнением резервной копии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mv ~/cron/* /etc/cron.d&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo systemctl start php8.3-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Выполните команду восстановления, чтобы файлы системы соответствовали версии базы данных и проверить систему на целостность файлов.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/userside&lt;br /&gt;
sudo -u www-data php userside_install.phar repair&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Python-update&amp;diff=20206</id>
		<title>Python-update</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Python-update&amp;diff=20206"/>
		<updated>2025-02-07T13:09:12Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Python-update_EN|en]] | [[Python-update|ru]]&lt;br /&gt;
&lt;br /&gt;
Если версия Python, установленная на вашей ОС, не поддерживается модулями или поллером, то необходимо установить дополнительно новую версию Python, удовлетворяющую всем требованиям.&lt;br /&gt;
&lt;br /&gt;
Важно: Изменять системную версию Python на новую - не рекомендуется! Единственный правильный способ - это установить новую версию параллельно системной. Иначе могут перестать работать различные системные службы и утилиты, использующие Python.&lt;br /&gt;
&lt;br /&gt;
Сначала убедитесь, что у вас установлены все необходимые глобальные пакеты в Python, которые необходимы глобально для запуска виртуального окружения, для сборки других зависимостей.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv libffi-dev libssl-dev pkg-config&lt;br /&gt;
&lt;br /&gt;
После того, как все установлено, зайдите на сайт https://www.python.org/downloads/source/ и скопируйте номер последней версии текущей ветки или предыдущей, если текущая ветка слишком свежая. Например, если последняя версия 3.13.1, то надежней все таки установить версию 3.12.9, т.к. сразу после выхода новой версии (3.13) есть вероятность того, что не все зависимые пакеты ее поддерживают.&lt;br /&gt;
&lt;br /&gt;
Далее вам нужно создать временную переменную окружения, значение которой будет содержать номер версии Python, которую вы собираетесь установить.&lt;br /&gt;
&lt;br /&gt;
 PY_VER=3.12.9&lt;br /&gt;
&lt;br /&gt;
Далее приведены команды, которые вы просто выполняете по одной, одну за другой, чтобы контролировать процесс и в случае ошибки не выполнять остальные команды. Копируйте по одной строке и выполняйте:&lt;br /&gt;
 curl -o python.tgz &amp;quot;https://www.python.org/ftp/python/${PY_VER}/Python-${PY_VER}.tgz&amp;quot;&lt;br /&gt;
 tar xzf python.tgz&lt;br /&gt;
 cd Python-${PY_VER}&lt;br /&gt;
 ./configure --enable-optimizations&lt;br /&gt;
 make -j $(nproc)&lt;br /&gt;
 sudo -H make altinstall&lt;br /&gt;
 curl -sS https://bootstrap.pypa.io/get-pip.py | sudo -H python3.12&lt;br /&gt;
 cd ..&lt;br /&gt;
 sudo rm -rf Python-${PY_VER} python.tgz&lt;br /&gt;
&lt;br /&gt;
После выполнения всех этих действий у вас в системе будет установлена дополнительно еще одна версия Python. В данном случае это Python 3.12 а также инструмент pip тоже с версией 3.12. Системная версия Python изменена не будет и мы не рекомендуем ее изменять, так как некоторые системные компоненты могут быть зависимы от нее.&lt;br /&gt;
&lt;br /&gt;
Чтобы использовать именно эту версию python и pip, вам нужно указывать целиком имена файлов, которые вы запускаете. Например:&lt;br /&gt;
 python3.12 --version&lt;br /&gt;
 pip3.12 --version&lt;br /&gt;
&lt;br /&gt;
Теперь, чтобы создать виртуальное окружение для какого-либо модуля либо поллера, вам нужно использовать следующий синтаксис:&lt;br /&gt;
 sudo python3.12 -m venv venv&lt;br /&gt;
 sudo venv/bin/pip install -U pip wheel&lt;br /&gt;
 и т.д.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Usm_observer&amp;diff=20200</id>
		<title>Usm observer</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Usm_observer&amp;diff=20200"/>
		<updated>2025-02-01T08:37:48Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Usm_observer_EN|en]] | [[Usm_observer|ru]]&lt;br /&gt;
&lt;br /&gt;
{{activ}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;usm_observer&#039;&#039;&#039; - это модуль для постоянного контроля средствами SNMP настраиваемых показателей у [[Оборудование|устройств]] и оповещения [[Сотрудники|сотрудников]] и [[Подразделения|подразделений]] о фактах выхода значений этих показателей за пределы установленных значений.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Данный модуль является заменой устаревшему модулю [[us_control]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Общие данные ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Язык модуля:&#039;&#039;&#039; Python&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Текущая версия:&#039;&#039;&#039; см. на странице: [[Модули]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Статус модуля:&#039;&#039;&#039; [http://userside.ua/price.php Платный]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Для работы модуля необходим Python3 любой поддерживаемой на данный момент версии. Статус версий можно посмотреть здесь: &amp;quot;[https://devguide.python.org/versions/ Status of Python versions]&amp;quot;. Рекомендуется использовать версию с состоянием &amp;quot;security&amp;quot; или &amp;quot;bugfix&amp;quot;. Версии отмеченные как &amp;quot;end-of-life&amp;quot; не поддерживаются. Отмеченные как &amp;quot;feature&amp;quot; не рекомендуется использовать.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Установка ===&lt;br /&gt;
&lt;br /&gt;
Скопируйте архив в каталог с модулями, например, /opt/userside и разархивируйте его.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/userside&lt;br /&gt;
sudo unzip usm_observer_2.0.0.zip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перейдите в каталог usm_observer, создайте виртуальное окружение&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd usm_observer&lt;br /&gt;
sudo python3 -m venv venv&lt;br /&gt;
sudo venv/bin/pip install --upgrade pip&lt;br /&gt;
sudo venv/bin/pip install --upgrade -r requirements.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка ===&lt;br /&gt;
&lt;br /&gt;
Если это первая настройка версии 2.х, то скопируйте пример конфигурационного файла&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp settings.yaml-example settings.yaml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отредактируйте файл settings.yaml. В разделе &#039;&#039;&#039;api&#039;&#039;&#039; укажите &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; вашего USERSIDE и [[UserSide API Key|API-ключ]] в поле &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;. В разделе &#039;&#039;&#039;log&#039;&#039;&#039; вы можете изменимть путь к логам в поле &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; и уровень логирования (DEBUG, INFO, WARNING, ERROR) в поле &amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt;. Если нужно чтобы лог выводился на стандартный вывод вместо файла, то для &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; укажите значение &amp;lt;code&amp;gt;STDOUT&amp;lt;/code&amp;gt; — это может быть удобно при первоначальной настройке модуля.&lt;br /&gt;
&lt;br /&gt;
== Тестовый запуск ==&lt;br /&gt;
&lt;br /&gt;
Чтобы удобней контролировать первый тестовый запуск, установите в settings.yaml путь к логу в значение &amp;lt;code&amp;gt;STDOUT&amp;lt;/code&amp;gt; и запустите модуль:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
venv/bin/python main.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если модуль отработал корректно и корректно завершил работу, то установите корреткный путь к логу, чтиобы запись велась в файл.&lt;br /&gt;
&lt;br /&gt;
Если в процессе тестового ручного запуска были обнаружены ошибки, устраните их или обратитесь за помощью в нашу службу поддержки, используя тикет-систему в вашем личном кабинете клиента.&lt;br /&gt;
&lt;br /&gt;
== Автоматический запуск ==&lt;br /&gt;
&lt;br /&gt;
Добавьте в crontab строку, предварительно изменив путь к модулю:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2/* * * * *   root    /opt/userside/usm_observer/venv/bin/python /opt/userside/usm_observer/main.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Убедитесь, что модуль запускается. Для этого спустя несколько минут понаблюдайте за файлом журнала:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tail -f /var/log/usm_observer/usm_observer.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ротация файлов журнала ==&lt;br /&gt;
&lt;br /&gt;
Файлы журнала, создаваемые модулем, нуждаются в ротации. Для этого следует использовать стандартные инструменты ротации логов в операционной системе.&lt;br /&gt;
&lt;br /&gt;
Следующая настройка будет выполнять ротацию всех файлов *.log ежесуточно и хранить 7 архивных копий (за 7 дней)&lt;br /&gt;
&lt;br /&gt;
Создайте файл /etc/logrotate.d/usm_observer следующего содержания:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/usm_observer/usm_observer.log {&lt;br /&gt;
    rotate 7&lt;br /&gt;
    daily&lt;br /&gt;
    compress&lt;br /&gt;
    delaycompress&lt;br /&gt;
    missingok&lt;br /&gt;
    notifempty&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логика работы ==&lt;br /&gt;
&lt;br /&gt;
* Каждый запуск модуль проверяет состояние SNMP-параметров у контролируемых устройств. Если значение параметра выходит за пределы допустимого, то считается, что произошла тревога. Тревожных параметров на устройстве может быть несколько. По каждому устройству, где был найден тревожный параметр или наоборот - параметр пришёл в норму - формируется электронное письмо и/или SMS для выбранного &#039;&#039;(на уровне каждого устройства)&#039;&#039; круга получателей&lt;br /&gt;
&lt;br /&gt;
* По каждому устройству формируется отдельное письмо/сообщение, в котором будут все параметры, состояние &#039;&#039;(тревога/норма)&#039;&#039; которых изменилось. В письме информация будет представлена развёрнуто, в SMS - компактно&lt;br /&gt;
&lt;br /&gt;
* Следующее сообщение будет прислано только в случае, если изменился вновь какой-то параметр&lt;br /&gt;
&lt;br /&gt;
* Если в процессе опроса будет выяснено, что опрашиваемое устройство неактивно &#039;&#039;(в процессе подключения к устройству произошла ошибка, либо возникла ошибка при съёме параметра)&#039;&#039;, то это будет отмечено модулем и в следующие несколько циклов запуска &#039;&#039;(по-умолчанию: 5)&#039;&#039; это устройство опрашиваться не будет, чтобы не создавать задержек в опросе прочих параметров.&lt;br /&gt;
&lt;br /&gt;
* Для устройств, с которых удалось получить параметры - будет обновлена дата последней активности.&lt;br /&gt;
&lt;br /&gt;
* Если указан ошибочный параметр &#039;&#039;(OID)&#039;&#039;, то при опросе устройства - на этом параметре опрос данного устройства будет прекращен.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В случае, если модуль перестал запускаться - на главной странице для операторов, имеющих доступ в настройку системы, будет выводиться соответствующее сообщение&lt;br /&gt;
&lt;br /&gt;
[[Файл:12-1.PNG|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
== Общая настройка ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:12-2.PNG|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
Для начала требуется указать список контролируемых параметров и события, при которых считать, что значения этих параметров вышли из нормы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:12-3.PNG|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
Параметры можно компоновать в профили опроса&lt;br /&gt;
&lt;br /&gt;
Для всех параметров, которые опрашиваются на данный момент, можно посмотреть текущее состояние и наличие тревог&lt;br /&gt;
&lt;br /&gt;
Ведётся лог опроса параметров &#039;&#039;(не все значения, а только их изменения)&#039;&#039;, который хранится в базе системы&lt;br /&gt;
&lt;br /&gt;
Имеется также и текущий список опрашиваемых устройств&lt;br /&gt;
&lt;br /&gt;
== Настройка в карточке устройства ==&lt;br /&gt;
&lt;br /&gt;
При редактировании карточки [[Оборудование|оборудования]] доступен блок, в котором можно выбрать профиль опроса для данного устройства, указать какие-то отдельные параметры для опроса, что не входят в выбранный профиль и указать получателей сообщений о тревоге&lt;br /&gt;
&lt;br /&gt;
[[Файл:28.PNG|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
В режиме просмотра блок модуля также выводится и из него есть возможность просмотреть текущее состояние параметров и лог изменения их состояния&lt;br /&gt;
&lt;br /&gt;
[[Файл:25.PNG|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:26.PNG|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:27.PNG|thumb|800px|center]]&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_PostgreSQL_version_upgrade&amp;diff=20153</id>
		<title>HOWTO: PostgreSQL version upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_PostgreSQL_version_upgrade&amp;diff=20153"/>
		<updated>2024-12-25T19:01:17Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Step-by-step instructions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
This section describes how to upgrade PostgreSQL &#039;&#039;between major versions&#039;&#039; (e.g., from version 11 to version 16).&lt;br /&gt;
&lt;br /&gt;
Upgrading within a version (e.g., from version 16.1 to version 16.2) &#039;&#039;is automatic and requires no additional steps.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;We recommend reading the official upgrade instructions&#039;&#039;&#039; at [https://www.postgresql.org/docs/current/upgrading.html postgresql.org].&lt;br /&gt;
&lt;br /&gt;
In the Debian distribution and those based on it, there is a package [https://packages.debian.org/sid/postgresql-common postgresql-common] that is installed automatically when the PostgreSQL package is installed. Postgresql-common includes tools to simplify working with PostgreSQL database clusters. This includes updating database clusters.&lt;br /&gt;
&lt;br /&gt;
A [https://www.postgresql.org/docs/current/glossary.html database cluster] in PostgreSQL is a server instance together with all the maintained databases, not a distributed system as it may seem.&lt;br /&gt;
&lt;br /&gt;
The following example will show how to upgrade a database cluster from version 11 to version 16 using the tools in the &#039;&#039;&#039;postgresql-common&#039;&#039;&#039; package.&lt;br /&gt;
&lt;br /&gt;
== Upgrade order ==&lt;br /&gt;
# Stop USERSIDE.&lt;br /&gt;
# Upgrade the current version of postgresql within the major version (e.g., from 11.5 to 11.22).&lt;br /&gt;
# Upgrade the postgis extension to the latest version (e.g. from 2.5 to 3.3.4). Also be sure to update the extension in the database itself.&lt;br /&gt;
# Install a new version of postgresql without uninstalling the old one (e.g. 16.1).&lt;br /&gt;
# Make a backup copy of the database and settings&lt;br /&gt;
# Delete the database cluster created automatically by the script when installing the new version&lt;br /&gt;
# Upgrade the database cluster of the old version to the cluster of the new version&lt;br /&gt;
# Check USERSIDE operation&lt;br /&gt;
# Remove the old version database cluster, obsolete packages and spare backups&lt;br /&gt;
&lt;br /&gt;
Allocate time for this operation. It can take quite a long time depending on the size of the database and the performance of the server. Also, make sure you have the free space you will need to upgrade the cluster (at least as much as the current cluster, but more is better).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR View video tutorial on asciinema].&lt;br /&gt;
&lt;br /&gt;
== Step-by-step instructions ==&lt;br /&gt;
&lt;br /&gt;
=== Stop USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.1-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The php version is for example. Use the one you are using.&lt;br /&gt;
&lt;br /&gt;
Comment out the startup of all modules and userside in crontab.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade the current version of postgresql within the major version ===&lt;br /&gt;
Check the current versions. Upgrade the current PostgreSQL and PostGIS packages:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Instead of 11 and 2.5, specify the versions you actually have installed.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade the postgis extension to the latest version ===&lt;br /&gt;
Be sure to upgrade the extension in the database as well!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install a new version of postgresql without uninstalling the old one ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-16 postgresql-16-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Make a backup of the database and settings ===&lt;br /&gt;
The number 11 in the filename is the PostgreSQL version number to which this backup belongs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency_11.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency_11.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency_11.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The /backup directory must exist and must be writable by all users.&lt;br /&gt;
&lt;br /&gt;
=== Remove the database cluster created automatically by the script when installing a new version ===&lt;br /&gt;
Using the &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; utility from postgresql-common, see what your database clusters look like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The output of the command will be approximately as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
16  main    5433 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The 16/main cluster was created automatically by the postgresql installation script. It needs to be stopped and deleted.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 16 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Running the &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; command again should show that you have one &#039;&#039;&#039;11/main&#039;&#039;&#039; cluster left.&lt;br /&gt;
&lt;br /&gt;
=== Perform an upgrade of the old version database cluster to the new version database cluster ===&lt;br /&gt;
Stop the postgresql service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start the &#039;&#039;&#039;11/main&#039;&#039;&#039; database cluster upgrade process using the &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; utility from the postgresql-common package. This may take a lot of time and disc space.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After the upgrade operation is complete, you will see the new state of the clusters (the old version should be in &#039;&#039;&#039;down&#039;&#039;&#039; mode):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
16  main    5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start the postgres service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verify the operation of USERSIDE ===&lt;br /&gt;
First run the commands displaying the versions to verify that the database is now running on the new version database cluster:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should see version 16 of postgresql and version 3.3.4 of postgis. Maybe by the time you read these lines, the postgis version will be newer.&lt;br /&gt;
&lt;br /&gt;
Now start the FPM service and go to USERSIDE through your browser.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.1-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Since the other services are stopped, you will probably see errors related to them, but the USERSIDE interface should open without database connection errors.&lt;br /&gt;
If everything is successful, then uncomment the previously commented lines in crontab and start the external services under supervisor control:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Remove the old version database cluster, obsolete packages, and spare backups ===&lt;br /&gt;
If USERSIDE is running correctly, and there are no database communication errors, you can remove the old cluster and packages. You can also optionally delete the emergency backups or wait a few days to make sure they are not needed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-2.5 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency_11* /backup/postgres_config_emergency_11.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20152</id>
		<title>HOWTO: Обновление версии PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=HOWTO:_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_PostgreSQL&amp;diff=20152"/>
		<updated>2024-12-25T19:01:02Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Пошаговая инструкция */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HOWTO:_PostgreSQL_version_upgrade|en]] | [[HOWTO:_Обновление_версии_PostgreSQL|ru]]&lt;br /&gt;
&lt;br /&gt;
В данном разделе описана процедура обновления PostgreSQL &#039;&#039;между основными версиями&#039;&#039; (например, с версии 11 на версию 16).&lt;br /&gt;
&lt;br /&gt;
Обновление внутри версии (например, с версии 16.1 на версию 16.2) &#039;&#039;происходит автоматически и не требует дополнительных действий&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рекомендуем ознакомиться с официальными инструкциями по обновлению&#039;&#039;&#039; на сайте [https://www.postgresql.org/docs/current/upgrading.html postgresql.org].&lt;br /&gt;
&lt;br /&gt;
В дистрибутиве Debian и основанных на нем существует пакет [https://packages.debian.org/sid/postgresql-common postgresql-common], устанавливаемый автоматически при установке пакета PostgreSQL. В состав postgresql-common входят инструменты, упрощающие работу с кластерами баз данных PostgreSQL. В том числе и обновление кластеров БД.&lt;br /&gt;
&lt;br /&gt;
Кластером баз данных ([https://www.postgresql.org/docs/current/glossary.html Database cluster]) в PostgreSQL называется экземпляр сервера вместе со всеми обслуживаемыми БД, а не распределенную систему, как может показаться.&lt;br /&gt;
&lt;br /&gt;
В следующем примере будет показано обновление кластера БД с версии 11 на версию 16 используя инструменты из пакета &#039;&#039;&#039;postgresql-common&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Порядок обновления ==&lt;br /&gt;
# Остановить USERSIDE.&lt;br /&gt;
# Обновить текущую версии postgresql в пределах основной версии (например, с 11.5 до 11.22).&lt;br /&gt;
# Обновить расширение postgis до самой последней версии (например, с 2.5 до 3.3.4). Также обязательно обновить расширение и в самой базе данных.&lt;br /&gt;
# Установить новую версию postgresql не удаляя старой (например 16.1)&lt;br /&gt;
# Сделать запасную резервную копию базы данных и настроек&lt;br /&gt;
# Удалить кластер БД, созданный автоматически сценарием при установке новой версии&lt;br /&gt;
# Выполнить обновление кластера БД старой версии до кластера новой версии&lt;br /&gt;
# Проверить работу USERSIDE&lt;br /&gt;
# Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии&lt;br /&gt;
&lt;br /&gt;
Выделите время на эту операцию. Она может занять довольно продролжительное время в зависимости от размера базы данных и производительности сервера. Также обязательно убедитесь в наличии свободного места, которое понадобится для обновления кластера (как минимум столько же, сколько занимает текущий кластер, но лучше больше).&lt;br /&gt;
&lt;br /&gt;
[https://asciinema.org/a/do2AE0z30mg5JLIuI9zhGTPoR Посмотреть видеоинструкцию на asciinema].&lt;br /&gt;
&lt;br /&gt;
== Пошаговая инструкция ==&lt;br /&gt;
SQL-запросы с оператором &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, приведенные далее, необходимы для определения текущих установленных версий в качестве справочной информации.&lt;br /&gt;
&lt;br /&gt;
=== Остановить USERSIDE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl stop all&lt;br /&gt;
sudo systemctl stop php8.1-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Версия php указана для примера. Используйте ту, что испльзуется у вас.&lt;br /&gt;
&lt;br /&gt;
Закомментируйте запуск всех модулей и userside в crontab.&lt;br /&gt;
&lt;br /&gt;
=== Обновить текущую версии postgresql в пределах основной версии ===&lt;br /&gt;
Проверить текущие версии. Обновить текущие пакеты PostgreSQL и PostGIS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install --only-upgrade -y postgresql-11 postgresql-11-postgis-2.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вместо 11 и 2.5 укажите те версии, которе фактически установлены у вас.&lt;br /&gt;
&lt;br /&gt;
=== Обновить расширение postgis до самой последней версии ===&lt;br /&gt;
Обязательно также обновить расширение в базе данных!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-11-postgis-3&lt;br /&gt;
&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;ALTER EXTENSION postgis UPDATE&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установить новую версию postgresql не удаляя старой ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y postgresql-16 postgresql-16-postgis-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сделать запасную резервную копию базы данных и настроек ===&lt;br /&gt;
Число 11 в имени файлов — это номер версии PostgreSQL, к которой относится эта резервная копия.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside --file=/backup/userside_emergency_11.sql.gz&lt;br /&gt;
sudo -u postgres pg_dump --no-acl -Fc userside --file=/backup/userside_emergency_11.dump&lt;br /&gt;
sudo tar czf /backup/postgres_config_emergency_11.tgz -C /etc/postgresql/11/main .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Каталог /backup должен существовать и должен быть доступен для записи всем пользователям.&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД, созданный автоматически сценарием при установке новой версии ===&lt;br /&gt;
При помощи утилиты &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; из postgresql-common посмотрите, как выглядят ваши кластеры БД:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_lsclusters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вывод команды будет примерно следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
16  main    5433 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Кластер 16/main был создан автоматически сценарием установки postgresql. Его нужно остановить и удалить.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 16 main --stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Повторное выполнение команды &amp;lt;code&amp;gt;pg_lsclusters&amp;lt;/code&amp;gt; должно показать, что у вас остался один кластер &#039;&#039;&#039;11/main&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Выполнить обновление кластера БД старой версии до кластера новой версии ===&lt;br /&gt;
Остановите службу postgresql&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите процесс обновления кластера БД &#039;&#039;&#039;11/main&#039;&#039;&#039; используя утилиту &amp;lt;code&amp;gt;pg_upgradecluster&amp;lt;/code&amp;gt; из пакета postgresql-common. Это действие может занять много времени и дискового пространства.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_upgradecluster 11 main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После завершения операции обновления вы увидите новое состояние кластеров (старая версия должна находиться в режиме &#039;&#039;&#039;down&#039;&#039;&#039;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ver Cluster Port Status Owner    Data directory              Log file&lt;br /&gt;
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11.log&lt;br /&gt;
16  main    5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Запустите службу postgres&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверить работу USERSIDE ===&lt;br /&gt;
Сначала выполните команды, отображающие версии, чтобы убедиться что база данных теперь работает на кластере БД новой версии:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT VERSION()&amp;quot;&lt;br /&gt;
sudo -u postgres psql -d userside -A -t -c &amp;quot;SELECT PostGIS_full_version()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вы должны увидеть 16ю версию postgresql и 3.3.4 версию postgis. Может быть к тому времени, как вы будете читать эти строки, версия postgis будет более новой.&lt;br /&gt;
&lt;br /&gt;
Теперь запустите службу FPM и зайдите в USERSIDE через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start php8.1-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так как другие службы остановлены, вы, вероятно, увидите ошибки связанные с ними, но при этом интерфейс USERSIDE должен открыться без ошибок подключения к базе данных.&lt;br /&gt;
Если все успешно, то раскомментируйте закомментированные ранее строки в crontab и запустите внешние службы, находящиеся под управлением supervisor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo supervisorctl start all&lt;br /&gt;
sudo supervisorctl status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Удалить кластер БД старой версии, устаревшие пакеты и запасные резервные копии ===&lt;br /&gt;
Если USERSIDE работает корректно, ошибок взаимодействия с БД нет, то можно удалить старый кластер и пакеты. Вы также, по желанию, можете удалить аварийные резервные копии или подождать несколько дней, чтобы точно убедиться, что они не пригодятся.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pg_dropcluster 11 main --stop&lt;br /&gt;
sudo apt purge -y postgresql-11 postgresql-11-postgis-2.5 postgresql-11-postgis-3&lt;br /&gt;
sudo apt autoremove -y&lt;br /&gt;
sudo rm /backup/userside_emergency_11* /backup/postgres_config_emergency_11.tgz&lt;br /&gt;
sudo rm -rf /var/lib/postgresql/11/main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Python-update_EN&amp;diff=20137</id>
		<title>Python-update EN</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Python-update_EN&amp;diff=20137"/>
		<updated>2024-12-13T09:00:59Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Python-update_EN|en]] | [[Python-update|ru]]&lt;br /&gt;
&lt;br /&gt;
If the version of Python installed on your OS is not supported by modules or poller, you must install an additional new version of Python that meets all requirements.&lt;br /&gt;
&lt;br /&gt;
Important: Changing the system version of Python to the new version is not recommended! The only correct way is to install the new version in parallel with the system version. Otherwise, various system services and utilities that use Python may stop working.&lt;br /&gt;
&lt;br /&gt;
First make sure you have all the necessary global packages installed in Python, which are needed globally to run the virtual environment, to build other dependencies.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv libffi-dev libssl-dev pkg-config&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, go to https://www.python.org/downloads/source/ and copy the latest version number of the current branch, or the previous version if the current branch is too recent. For example, if the latest version is 3.13.1, it is more reliable to install version 3.12.8, because as soon as a new version (3.13) is released, there is a chance that not all dependent packages support it.&lt;br /&gt;
&lt;br /&gt;
Next, you need to create a temporary environment variable whose value will contain the version number of the Python version you are going to install.&lt;br /&gt;
&lt;br /&gt;
 PY_VER=3.12.8&lt;br /&gt;
&lt;br /&gt;
The following are commands that you simply execute one at a time, one after the other, to control the process and in case of error not to execute the rest of the commands. Copy one line at a time and execute:&lt;br /&gt;
 curl -o python.tgz &amp;quot;https://www.python.org/ftp/python/${PY_VER}/Python-${PY_VER}.tgz&amp;quot;&lt;br /&gt;
 tar xzf python.tgz&lt;br /&gt;
 cd Python-${PY_VER}&lt;br /&gt;
 ./configure --enable-optimizations&lt;br /&gt;
 make -j $(nproc)&lt;br /&gt;
 sudo -H make altinstall&lt;br /&gt;
 curl -sS https://bootstrap.pypa.io/get-pip.py | sudo -H python3.12&lt;br /&gt;
 cd ..&lt;br /&gt;
 sudo rm -rf Python-${PY_VER} python.tgz&lt;br /&gt;
&lt;br /&gt;
After performing all these steps, you will have another version of Python installed on your system. In this case it is Python 3.12 and the pip tool is also version 3.12. The system version of Python will not be changed and we do not recommend changing it, as some system components may be dependent on it.&lt;br /&gt;
&lt;br /&gt;
To use this particular version of python and pip, you need to specify the entire names of the files you run. For example:&lt;br /&gt;
 python3.12 --version&lt;br /&gt;
 pip3.12 --version&lt;br /&gt;
&lt;br /&gt;
Now, to create a virtual environment for any module or poller, you need to use the following syntax:&lt;br /&gt;
 sudo python3.12 -m venv venv&lt;br /&gt;
 sudo venv/bin/pip install -U pip wheel&lt;br /&gt;
 and so on.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Python-update&amp;diff=20136</id>
		<title>Python-update</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Python-update&amp;diff=20136"/>
		<updated>2024-12-13T09:00:17Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Python-update_EN|en]] | [[Python-update|ru]]&lt;br /&gt;
&lt;br /&gt;
Если версия Python, установленная на вашей ОС, не поддерживается модулями или поллером, то необходимо установить дополнительно новую версию Python, удовлетворяющую всем требованиям.&lt;br /&gt;
&lt;br /&gt;
Важно: Изменять системную версию Python на новую - не рекомендуется! Единственный правильный способ - это установить новую версию параллельно системной. Иначе могут перестать работать различные системные службы и утилиты, использующие Python.&lt;br /&gt;
&lt;br /&gt;
Сначала убедитесь, что у вас установлены все необходимые глобальные пакеты в Python, которые необходимы глобально для запуска виртуального окружения, для сборки других зависимостей.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y python3-dev python3-pip python3-venv libffi-dev libssl-dev pkg-config&lt;br /&gt;
&lt;br /&gt;
После того, как все установлено, зайдите на сайт https://www.python.org/downloads/source/ и скопируйте номер последней версии текущей ветки или предыдущей, если текущая ветка слишком свежая. Например, если последняя версия 3.13.1, то надежней все таки установить версию 3.12.8, т.к. сразу после выхода новой версии (3.13) есть вероятность того, что не все зависимые пакеты ее поддерживают.&lt;br /&gt;
&lt;br /&gt;
Далее вам нужно создать временную переменную окружения, значение которой будет содержать номер версии Python, которую вы собираетесь установить.&lt;br /&gt;
&lt;br /&gt;
 PY_VER=3.12.8&lt;br /&gt;
&lt;br /&gt;
Далее приведены команды, которые вы просто выполняете по одной, одну за другой, чтобы контролировать процесс и в случае ошибки не выполнять остальные команды. Копируйте по одной строке и выполняйте:&lt;br /&gt;
 curl -o python.tgz &amp;quot;https://www.python.org/ftp/python/${PY_VER}/Python-${PY_VER}.tgz&amp;quot;&lt;br /&gt;
 tar xzf python.tgz&lt;br /&gt;
 cd Python-${PY_VER}&lt;br /&gt;
 ./configure --enable-optimizations&lt;br /&gt;
 make -j $(nproc)&lt;br /&gt;
 sudo -H make altinstall&lt;br /&gt;
 curl -sS https://bootstrap.pypa.io/get-pip.py | sudo -H python3.12&lt;br /&gt;
 cd ..&lt;br /&gt;
 sudo rm -rf Python-${PY_VER} python.tgz&lt;br /&gt;
&lt;br /&gt;
После выполнения всех этих действий у вас в системе будет установлена дополнительно еще одна версия Python. В данном случае это Python 3.12 а также инструмент pip тоже с версией 3.12. Системная версия Python изменена не будет и мы не рекомендуем ее изменять, так как некоторые системные компоненты могут быть зависимы от нее.&lt;br /&gt;
&lt;br /&gt;
Чтобы использовать именно эту версию python и pip, вам нужно указывать целиком имена файлов, которые вы запускаете. Например:&lt;br /&gt;
 python3.12 --version&lt;br /&gt;
 pip3.12 --version&lt;br /&gt;
&lt;br /&gt;
Теперь, чтобы создать виртуальное окружение для какого-либо модуля либо поллера, вам нужно использовать следующий синтаксис:&lt;br /&gt;
 sudo python3.12 -m venv venv&lt;br /&gt;
 sudo venv/bin/pip install -U pip wheel&lt;br /&gt;
 и т.д.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Usm_cabletest_EN&amp;diff=19961</id>
		<title>Usm cabletest EN</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Usm_cabletest_EN&amp;diff=19961"/>
		<updated>2024-10-28T11:24:41Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Installing and configuring the module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Usm_cabletest_EN|en]] | [[Usm_cabletest|ru]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;USM_CABLETEST&#039;&#039;&#039; &#039;&#039;- it is a module for periodic polling by cable tester of cable lengths for known switch models, fixing the results and outputting notifications about the change of values&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Module Language:&#039;&#039;&#039; Perl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Current version:&#039;&#039;&#039; see page: [[Modules_EN|Modules]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Module Status:&#039;&#039;&#039; [https://www.userside.eu/en/pricing Paid]&lt;br /&gt;
&lt;br /&gt;
Required Perl modules:&lt;br /&gt;
 Time::Local&lt;br /&gt;
 Socket&lt;br /&gt;
 FindBin&lt;br /&gt;
 URI&lt;br /&gt;
 URI::Escape&lt;br /&gt;
 LWP::UserAgent&lt;br /&gt;
 JSON&lt;br /&gt;
 Data::Dumper&lt;br /&gt;
 Net::Telnet&lt;br /&gt;
 Net::SNMP&lt;br /&gt;
&lt;br /&gt;
For general information for all modules, see the page: [[Modules_EN|Modules]]&lt;br /&gt;
&lt;br /&gt;
== Supported device models ==&lt;br /&gt;
 D-Link DES-3010G &lt;br /&gt;
 D-Link DES-3026 &lt;br /&gt;
 D-Link DES-3028&lt;br /&gt;
 D-Link DES-3028G&lt;br /&gt;
 D-Link DES-3052&lt;br /&gt;
 D-Link DES-3200-10&lt;br /&gt;
 D-Link DES-3200-10/C1&lt;br /&gt;
 D-Link DES-3200-18&lt;br /&gt;
 D-Link DES-3200-18/C1&lt;br /&gt;
 D-Link DES-3200-26&lt;br /&gt;
 D-Link DES-3200-26/C1&lt;br /&gt;
 D-Link DES-3200-28 &lt;br /&gt;
 D-Link DES-3200-28/C1 &lt;br /&gt;
 D-Link DES-3200-28F &lt;br /&gt;
 D-Link DES-3200-28F/C1&lt;br /&gt;
 D-Link DES-3200-52 &lt;br /&gt;
 D-Link DES-3200-52/C1 &lt;br /&gt;
 D-Link DES-3526&lt;br /&gt;
 D-Link DES-3528&lt;br /&gt;
 D-Link DGS-3000-24TC&lt;br /&gt;
 D-Link DGS-3120-24SC&lt;br /&gt;
 D-Link DGS-3120-24TC&lt;br /&gt;
 D-Link DGS-3200-10&lt;br /&gt;
 D-Link DGS-3200-16&lt;br /&gt;
&lt;br /&gt;
To add support for other switch models &#039;&#039;(that have cable tester)&#039;&#039; - contact us.&lt;br /&gt;
&lt;br /&gt;
== Main features ==&lt;br /&gt;
&lt;br /&gt;
* periodically obtaining information about the length of cables included in the copper ports of switches or about the absence of cables at all&lt;br /&gt;
* recording of the obtained results&lt;br /&gt;
* control of the facts of cable length changes and output of corresponding notifications&lt;br /&gt;
&lt;br /&gt;
The method of data acquisition - &#039;&#039;&#039;telnet&#039;&#039;&#039; or &#039;&#039;&#039;SNMP&#039;&#039;&#039; (depending on the switch model).&lt;br /&gt;
&lt;br /&gt;
In one run, the module connects to one device and attempts to poll it.&lt;br /&gt;
&lt;br /&gt;
== Installing and configuring the module ==&lt;br /&gt;
&lt;br /&gt;
# Allocate a separate catalogue. A completely arbitrary one. It is better not to place it in a catalogue accessible via web. Interaction with ERP &amp;quot;UserSide&amp;quot; is carried out through API means via http/s-protocol. In this way the module is fully autonomous and can work on any separate computer in any subnet. Also create a separate directory for the module logs. Do not forget to grant write permissions to it.&lt;br /&gt;
# Transfer there the files from the module archive. Rename the sample configuration file &amp;quot;usm_cabletest.conf-example&amp;quot; to &amp;quot;usm_cabletest.conf&amp;quot;. In it, configure the parameters. The list of possible parameters is listed below.&lt;br /&gt;
# Check for additional perl-packages that are required to run the module. Their list is given above. If you do not have them installed, the module will generate an error at startup and the perl-package will need to be installed &#039;&#039;(using CPAN or PPM)&#039;&#039;.&lt;br /&gt;
# Enable usm_cabletest module in the &amp;quot;[[Settings - Modules]]&amp;quot; section.&lt;br /&gt;
# Run the module manually&lt;br /&gt;
&lt;br /&gt;
 perl usm_cabletest.pl&lt;br /&gt;
&lt;br /&gt;
It should start and run without errors.&lt;br /&gt;
&lt;br /&gt;
7. Write the module startup into the system cron, according to the recommendations below&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Clarifications:&#039;&#039;&#039;&lt;br /&gt;
* The module processes only one device at startup. Therefore, the system cron should be set to call the required number of copies of the module &#039;&#039;(based on the number of switches of suitable models in the system and the desired polling frequency)&#039;&#039;.&lt;br /&gt;
* The module processes one device at startup. Therefore, the module can process 15 devices in 15 minutes. Any number of copies of the module can be started. To ensure that the simultaneous launch of a large number of copies of the module does not lead to increased load on the switches and the server &#039;&#039;(because the same tasks will be performed during the launch)&#039;&#039; the parameter &amp;quot;$delay&amp;quot; is used. By specifying in it a number of arbitrary delay, for example in &amp;quot;20&amp;quot; - you can achieve that the modules will be started from 1 to 20 seconds in random order and the load will be distributed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Note that the cable tester polling is an internal diagnostic operation of the switch. It is possible that the switch will switch the port on/off to obtain correct data. It is also possible that frequent polling may cause the equipment to freeze.&lt;br /&gt;
&lt;br /&gt;
It is also necessary to take into account that the cable tester data may be inaccurate. The error can reach several metres.&lt;br /&gt;
&lt;br /&gt;
Example from the cron of launching five copies of the module:&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
In the card of the device polled by the usm_cabletest module you can view the history of polling of this device by the module and the general table of device polling by clicking the corresponding link. Also in the table of ports in the card of this device you can see the last known cable lengths on the polled ports.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
&lt;br /&gt;
The module is configured in the &#039;&#039;&#039;usm_cabletest.conf&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
 $usUrl - URL to ERP &amp;quot;UserSide&amp;quot;&lt;br /&gt;
 $usApiKey - [[API]]-key to ERP &amp;quot;UserSide&amp;quot;&lt;br /&gt;
 $logsPath - Path to the catalogue for module logs&lt;br /&gt;
 &lt;br /&gt;
 $isSilence - Flag - hide notifications to the console when the module is running&lt;br /&gt;
 $delay - Custom time delay from 0 to n-seconds after module start. Allows you to reduce the load on the server when using a large number of modules at the same time&lt;br /&gt;
&lt;br /&gt;
The usm_cabletest module can be run with the &#039;&#039;(specify a specific device to poll)&#039;&#039; parameter&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 perl usm_cabletest 998&lt;br /&gt;
&lt;br /&gt;
will poll the switch with ID 998&lt;br /&gt;
&lt;br /&gt;
== Operation information ==&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Settings - Modules - usm_cabletest&amp;quot; page you can view the report of polling by the equipment module by clicking on the link&lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
Separately, you can view the data for this device in the equipment card&lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
The latest data is displayed in the ports table&lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
In the home page setting - the user can enable the output of cable length change information to the home page&lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
== If the information is not captured/module does not work ==&lt;br /&gt;
&lt;br /&gt;
1. It is necessary to distinguish and understand whether the module is not working or information is not captured. On the &amp;quot;Settings - Modules - usm_cabletest - Module Run Information&amp;quot; page, you should check the usm_cabletest module run logs and results.&lt;br /&gt;
&lt;br /&gt;
2. You should make sure that the community access, passwords are correct and the device itself is physically connected and working.&lt;br /&gt;
&lt;br /&gt;
3. In the ERP &amp;quot;UserSide&amp;quot; itself, open the switch card and click on the &amp;quot;Cable tester&amp;quot; link&lt;br /&gt;
&lt;br /&gt;
4. For the test - you should run the module specifically for a particular switch. For example:&lt;br /&gt;
&lt;br /&gt;
 perl usm_cabletest.pl 998&lt;br /&gt;
&lt;br /&gt;
will start the module for switch ID: 998&lt;br /&gt;
&lt;br /&gt;
Check if there are no errors in the information output.&lt;br /&gt;
&lt;br /&gt;
In the log files, analyse the information received.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Usm_cabletest&amp;diff=19960</id>
		<title>Usm cabletest</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Usm_cabletest&amp;diff=19960"/>
		<updated>2024-10-28T11:24:16Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Установка и настройка модуля */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Usm_cabletest_EN|en]] | [[Usm_cabletest|ru]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;USM_CABLETEST&#039;&#039;&#039; &#039;&#039;- это модуль для периодического опроса кабельным тестером длин кабелей для известных моделей коммутаторов, фиксация результатов и вывод уведомлений об изменении значений&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Язык модуля:&#039;&#039;&#039; Perl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Текущая версия:&#039;&#039;&#039; см. на странице: [[Модули]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Статус модуля:&#039;&#039;&#039; [http://userside.eu/price.php Платный]&lt;br /&gt;
&lt;br /&gt;
Необходимые модули Perl:&lt;br /&gt;
 Time::Local&lt;br /&gt;
 Socket&lt;br /&gt;
 FindBin&lt;br /&gt;
 URI&lt;br /&gt;
 URI::Escape&lt;br /&gt;
 LWP::UserAgent&lt;br /&gt;
 JSON&lt;br /&gt;
 Data::Dumper&lt;br /&gt;
 Net::Telnet&lt;br /&gt;
 Net::SNMP&lt;br /&gt;
&lt;br /&gt;
Общую информацию для всех модулей см. на странице: [[Модули]]&lt;br /&gt;
&lt;br /&gt;
== Поддерживаемые модели устройств ==&lt;br /&gt;
&lt;br /&gt;
 D-Link DES-3010G &lt;br /&gt;
 D-Link DES-3026 &lt;br /&gt;
 D-Link DES-3028&lt;br /&gt;
 D-Link DES-3028G&lt;br /&gt;
 D-Link DES-3052&lt;br /&gt;
 D-Link DES-3200-10&lt;br /&gt;
 D-Link DES-3200-10/C1&lt;br /&gt;
 D-Link DES-3200-18&lt;br /&gt;
 D-Link DES-3200-18/C1&lt;br /&gt;
 D-Link DES-3200-26&lt;br /&gt;
 D-Link DES-3200-26/C1&lt;br /&gt;
 D-Link DES-3200-28 &lt;br /&gt;
 D-Link DES-3200-28/C1 &lt;br /&gt;
 D-Link DES-3200-28F &lt;br /&gt;
 D-Link DES-3200-28F/C1&lt;br /&gt;
 D-Link DES-3200-52 &lt;br /&gt;
 D-Link DES-3200-52/C1 &lt;br /&gt;
 D-Link DES-3526&lt;br /&gt;
 D-Link DES-3528&lt;br /&gt;
 D-Link DGS-3000-24TC&lt;br /&gt;
 D-Link DGS-3120-24SC&lt;br /&gt;
 D-Link DGS-3120-24TC&lt;br /&gt;
 D-Link DGS-3200-10&lt;br /&gt;
 D-Link DGS-3200-16&lt;br /&gt;
&lt;br /&gt;
Для добавления поддержки иных моделей коммутаторов &#039;&#039;(в которых есть кабельный тестер)&#039;&#039; - свяжитесь с нами.&lt;br /&gt;
&lt;br /&gt;
== Основные функции ==&lt;br /&gt;
&lt;br /&gt;
* периодическое получение информации о длине кабелей, включённых в медные порты коммутаторов либо об отсутствии там кабеля вовсе&lt;br /&gt;
* фиксация полученных результатов&lt;br /&gt;
* контроль фактов изменения длин кабелей и вывод соответствующих уведомлений&lt;br /&gt;
&lt;br /&gt;
Метод получения данных - &#039;&#039;&#039;telnet&#039;&#039;&#039; или &#039;&#039;&#039;SNMP&#039;&#039;&#039; (в зависимости от модели коммутатора).&lt;br /&gt;
&lt;br /&gt;
За один запуск модуль подключается к одному устройству и пытается выполнить для него опрос.&lt;br /&gt;
&lt;br /&gt;
== Установка и настройка модуля ==&lt;br /&gt;
&lt;br /&gt;
# Выделите отдельный каталог. Абсолютно произвольный. Лучше его не размещать в каталоге, доступном через web. Взаимодействие с ERP &amp;quot;UserSide&amp;quot; осуществляется средствами API по http/s-протоколу. Таким образом модуль полностью автономен и может работать на любом отдельном компьютере в любой подсети. Также создайте отдельный каталог для логов модуля. Не забудьте указать для него права на запись.&lt;br /&gt;
# Перенесите туда файлы из архива модуля. Пример файла конфигурации &amp;quot;usm_cabletest.conf-example&amp;quot; переименуйте в &amp;quot;usm_cabletest.conf&amp;quot;. В нём выполните настройку параметров. Перечень возможных параметров указан ниже.&lt;br /&gt;
# Проверьте наличие дополнительных perl-пакетов, которые требуются для запуска модуля. Их список приведён выше. Если у вас они не установлены - модуль выдаст ошибку при запуске и perl-пакет необходимо будет установить &#039;&#039;(с помощью CPAN или PPM)&#039;&#039;.&lt;br /&gt;
# В разделе &amp;quot;[[Настройка - Модули]]&amp;quot; включите работу с модулем usm_cabletest&lt;br /&gt;
# Запустите модуль вручную&lt;br /&gt;
&lt;br /&gt;
 perl usm_cabletest.pl&lt;br /&gt;
&lt;br /&gt;
Он должен запуститься и отработать без ошибок.&lt;br /&gt;
&lt;br /&gt;
7. Впишите запуск модуля в системный cron, согласно рекомендациям ниже&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Уточнения:&#039;&#039;&#039;&lt;br /&gt;
* При запуске модуль обрабатывает только одно устройство. Следовательно в системный cron следует записать вызов необходимого количества копий модуля &#039;&#039;(из расчёта количества коммутаторов подходящих моделей в системе и желаемой частоты опроса)&#039;&#039;.&lt;br /&gt;
* Модуль при запуске обрабатывает одно устройство. Следовательно за 15 минут модуль успеет обработать 15 устройств. Копий модуля можно запускать любое количество. Для того чтобы одновременный запуск большого количества копий модуля не приводил к увеличенной нагрузке на сами коммутаторы и сервер &#039;&#039;(ведь при запуске будут выполняться одни и те же однотипные задачи)&#039;&#039; предназначен параметр &amp;quot;$delay&amp;quot;. Указав в нём цифру произвольное задержки например в &amp;quot;20&amp;quot; - можно добиться что модули будут запускаться с 1 по 20 секунду в произвольном порядке и нагрузка распределится.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ВАЖНО:&#039;&#039;&#039; Следует иметь в виду, что опрос кабельным тестером - это внутренняя диагностическая операция коммутатора. Не исключено, что коммутатор будет включать/выключать порт для получения корректных данных. Также не исключено, что частые опросы могут приводить к зависанию оборудования.&lt;br /&gt;
&lt;br /&gt;
Еще требуется взять во внимание, что данные кабельного тестера могут быть неточны. Погрешность может достигать нескольких метров.&lt;br /&gt;
&lt;br /&gt;
Пример из cron запуска пяти копий модуля:&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
В карточке устройства, которое опросил модуль usm_cabletest можно по соответствующей ссылке посмотреть историю опроса этого устройства модулем и общую таблицу опроса устройств. Также в таблице портов в карточке этого устройства выводятся последние известные длины кабелей на опрошенных портах.&lt;br /&gt;
&lt;br /&gt;
== Параметры ==&lt;br /&gt;
&lt;br /&gt;
Настройка модуля осуществляется в файле &#039;&#039;&#039;usm_cabletest.conf&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 $usUrl - URL к ERP &amp;quot;UserSide&amp;quot;&lt;br /&gt;
 $usApiKey - [[API]]-ключ к ERP &amp;quot;UserSide&amp;quot;&lt;br /&gt;
 $logsPath - Путь к каталогу для логов модуля&lt;br /&gt;
 &lt;br /&gt;
 $isSilence - Флаг - скрывать уведомления в консоль при работе модуля&lt;br /&gt;
 $delay - Произвольная временная задержка от 0 до n-секунд после запуска модуля. Позволяет уменьшить нагрузку на сервер при одновременном использовании большого количества модулей&lt;br /&gt;
&lt;br /&gt;
Модуль usm_cabletest можно запускать с параметром &#039;&#039;(указать конкретное устройство, которое необходимо опросить)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
 perl usm_cabletest 998&lt;br /&gt;
&lt;br /&gt;
опросит коммутатор с ID 998&lt;br /&gt;
&lt;br /&gt;
== Информация о работе ==&lt;br /&gt;
&lt;br /&gt;
На странице &amp;quot;Настройка - Модули - usm_cabletest&amp;quot; можно по ссылке просмотреть отчёт об опросах модулем оборудования&lt;br /&gt;
[[Файл:Ct03.png|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
Отдельно в карточке оборудования можно посмотреть данные по этому устройству&lt;br /&gt;
[[Файл:Ct02.png|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
Последние данные выводятся в таблице портов&lt;br /&gt;
[[Файл:Ct04.png|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
В настройке главной страницы - пользователь может включить вывод информации об изменении длины кабеля на главную страницу&lt;br /&gt;
[[Файл:Ct01.png|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Ct05.png|thumb|800px|center]]&lt;br /&gt;
&lt;br /&gt;
== Если информация не снимается/модуль не работает ==&lt;br /&gt;
&lt;br /&gt;
1. Необходимо разграничить и понять - не работает модуль или не снимается информация. На странице &amp;quot;Настройка - Модули - usm_cabletest - Информация о работе модуля&amp;quot; следует проверить логи запусков модуля usm_cabletest и результаты.&lt;br /&gt;
&lt;br /&gt;
2. Следует убедиться, что верны community доступа, пароли и само устройство физически подключено и работает.&lt;br /&gt;
&lt;br /&gt;
3. В самой ERP &amp;quot;UserSide&amp;quot; откройте карточку коммутатора и перейдите по ссылке &amp;quot;Кабельный тестер&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4. Для теста - следует запустить модуль конкретно для определенного коммутатора. Например:&lt;br /&gt;
&lt;br /&gt;
 perl usm_cabletest.pl 998&lt;br /&gt;
&lt;br /&gt;
запустит модуль для коммутатора ID: 998&lt;br /&gt;
&lt;br /&gt;
Проверяем нет ли ошибок в выводе информации.&lt;br /&gt;
&lt;br /&gt;
В файлах логов анализируем полученную информацию.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
	<entry>
		<id>https://wiki.userside.eu/index.php?title=Usm_cabletest_EN&amp;diff=19959</id>
		<title>Usm cabletest EN</title>
		<link rel="alternate" type="text/html" href="https://wiki.userside.eu/index.php?title=Usm_cabletest_EN&amp;diff=19959"/>
		<updated>2024-10-28T11:23:32Z</updated>

		<summary type="html">&lt;p&gt;Uscld2: /* Installing and configuring the module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Usm_cabletest_EN|en]] | [[Usm_cabletest|ru]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;USM_CABLETEST&#039;&#039;&#039; &#039;&#039;- it is a module for periodic polling by cable tester of cable lengths for known switch models, fixing the results and outputting notifications about the change of values&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Module Language:&#039;&#039;&#039; Perl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Current version:&#039;&#039;&#039; see page: [[Modules_EN|Modules]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Module Status:&#039;&#039;&#039; [https://www.userside.eu/en/pricing Paid]&lt;br /&gt;
&lt;br /&gt;
Required Perl modules:&lt;br /&gt;
 Time::Local&lt;br /&gt;
 Socket&lt;br /&gt;
 FindBin&lt;br /&gt;
 URI&lt;br /&gt;
 URI::Escape&lt;br /&gt;
 LWP::UserAgent&lt;br /&gt;
 JSON&lt;br /&gt;
 Data::Dumper&lt;br /&gt;
 Net::Telnet&lt;br /&gt;
 Net::SNMP&lt;br /&gt;
&lt;br /&gt;
For general information for all modules, see the page: [[Modules_EN|Modules]]&lt;br /&gt;
&lt;br /&gt;
== Supported device models ==&lt;br /&gt;
 D-Link DES-3010G &lt;br /&gt;
 D-Link DES-3026 &lt;br /&gt;
 D-Link DES-3028&lt;br /&gt;
 D-Link DES-3028G&lt;br /&gt;
 D-Link DES-3052&lt;br /&gt;
 D-Link DES-3200-10&lt;br /&gt;
 D-Link DES-3200-10/C1&lt;br /&gt;
 D-Link DES-3200-18&lt;br /&gt;
 D-Link DES-3200-18/C1&lt;br /&gt;
 D-Link DES-3200-26&lt;br /&gt;
 D-Link DES-3200-26/C1&lt;br /&gt;
 D-Link DES-3200-28 &lt;br /&gt;
 D-Link DES-3200-28/C1 &lt;br /&gt;
 D-Link DES-3200-28F &lt;br /&gt;
 D-Link DES-3200-28F/C1&lt;br /&gt;
 D-Link DES-3200-52 &lt;br /&gt;
 D-Link DES-3200-52/C1 &lt;br /&gt;
 D-Link DES-3526&lt;br /&gt;
 D-Link DES-3528&lt;br /&gt;
 D-Link DGS-3000-24TC&lt;br /&gt;
 D-Link DGS-3120-24SC&lt;br /&gt;
 D-Link DGS-3120-24TC&lt;br /&gt;
 D-Link DGS-3200-10&lt;br /&gt;
 D-Link DGS-3200-16&lt;br /&gt;
&lt;br /&gt;
To add support for other switch models &#039;&#039;(that have cable tester)&#039;&#039; - contact us.&lt;br /&gt;
&lt;br /&gt;
== Main features ==&lt;br /&gt;
&lt;br /&gt;
* periodically obtaining information about the length of cables included in the copper ports of switches or about the absence of cables at all&lt;br /&gt;
* recording of the obtained results&lt;br /&gt;
* control of the facts of cable length changes and output of corresponding notifications&lt;br /&gt;
&lt;br /&gt;
The method of data acquisition - &#039;&#039;&#039;telnet&#039;&#039;&#039; or &#039;&#039;&#039;SNMP&#039;&#039;&#039; (depending on the switch model).&lt;br /&gt;
&lt;br /&gt;
In one run, the module connects to one device and attempts to poll it.&lt;br /&gt;
&lt;br /&gt;
== Installing and configuring the module ==&lt;br /&gt;
&lt;br /&gt;
# Allocate a separate catalogue. A completely arbitrary one. It is better not to place it in a catalogue accessible via web. Interaction with ERP &amp;quot;UserSide&amp;quot; is carried out through API means via http/s-protocol. In this way the module is fully autonomous and can work on any separate computer in any subnet. Also create a separate directory for the module logs. Do not forget to grant write permissions to it.&lt;br /&gt;
# Transfer there the files from the module archive. Rename the sample configuration file &amp;quot;usm_cabletest.conf-example&amp;quot; to &amp;quot;usm_cabletest.conf&amp;quot;. In it, configure the parameters. The list of possible parameters is listed below.&lt;br /&gt;
# Check for additional perl-packages that are required to run the module. Their list is given above. If you do not have them installed, the module will generate an error at startup and the perl-package will need to be installed &#039;&#039;(using CPAN or PPM)&#039;&#039;.&lt;br /&gt;
# Enable usm_cabletest module in the &amp;quot;[[Settings - Modules]]&amp;quot; section.&lt;br /&gt;
# Run the module manually&lt;br /&gt;
&lt;br /&gt;
 perl usm_cabletest.pl&lt;br /&gt;
&lt;br /&gt;
It should start and run without errors.&lt;br /&gt;
&lt;br /&gt;
7. Write the module startup into the system cron, according to the recommendations below&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Clarifications:&#039;&#039;&#039;&lt;br /&gt;
* The module processes only one device at startup. Therefore, the system cron should be set to call the required number of copies of the module &#039;&#039;(based on the number of switches of suitable models in the system and the desired polling frequency)&#039;&#039;.&lt;br /&gt;
* The module processes one device at startup. Therefore, the module can process 15 devices in 15 minutes. Any number of copies of the module can be started. To ensure that the simultaneous launch of a large number of copies of the module does not lead to increased load on the switches and the server &#039;&#039;(because the same tasks will be performed during the launch)&#039;&#039; the parameter &amp;quot;$delay&amp;quot; is used. By specifying in it a number of arbitrary delay, for example in &amp;quot;20&amp;quot; - you can achieve that the modules will be started from 1 to 20 seconds in random order and the load will be distributed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Note that the cable tester polling is an internal diagnostic operation of the switch. It is possible that the switch will switch the port on/off to obtain correct data. It is also possible that frequent polling may cause the equipment to freeze.&lt;br /&gt;
&lt;br /&gt;
It is also necessary to take into account that the cable tester data may be inaccurate. The error can reach several metres.&lt;br /&gt;
&lt;br /&gt;
Example from the cron of launching five copies of the module:&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
 * * * * *    root   perl /home/usm_cabletest/usm_cabletest.pl &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
In the card of the device polled by the usm_cabletest module you can view the history of polling of this device by the module and the general table of device polling by clicking the corresponding link. Also in the table of ports in the card of this device you can see the last known cable lengths on the polled ports.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
&lt;br /&gt;
The module is configured in the &#039;&#039;&#039;usm_cabletest.conf&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
 $usUrl - URL to ERP &amp;quot;UserSide&amp;quot;&lt;br /&gt;
 $usApiKey - [[API]]-key to ERP &amp;quot;UserSide&amp;quot;&lt;br /&gt;
 $logsPath - Path to the catalogue for module logs&lt;br /&gt;
 &lt;br /&gt;
 $isSilence - Flag - hide notifications to the console when the module is running&lt;br /&gt;
 $delay - Custom time delay from 0 to n-seconds after module start. Allows you to reduce the load on the server when using a large number of modules at the same time&lt;br /&gt;
&lt;br /&gt;
The usm_cabletest module can be run with the &#039;&#039;(specify a specific device to poll)&#039;&#039; parameter&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 perl usm_cabletest 998&lt;br /&gt;
&lt;br /&gt;
will poll the switch with ID 998&lt;br /&gt;
&lt;br /&gt;
== Operation information ==&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Settings - Modules - usm_cabletest&amp;quot; page you can view the report of polling by the equipment module by clicking on the link&lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
Separately, you can view the data for this device in the equipment card&lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
The latest data is displayed in the ports table&lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
In the home page setting - the user can enable the output of cable length change information to the home page&lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
== If the information is not captured/module does not work ==&lt;br /&gt;
&lt;br /&gt;
1. It is necessary to distinguish and understand whether the module is not working or information is not captured. On the &amp;quot;Settings - Modules - usm_cabletest - Module Run Information&amp;quot; page, you should check the usm_cabletest module run logs and results.&lt;br /&gt;
&lt;br /&gt;
2. You should make sure that the community access, passwords are correct and the device itself is physically connected and working.&lt;br /&gt;
&lt;br /&gt;
3. In the ERP &amp;quot;UserSide&amp;quot; itself, open the switch card and click on the &amp;quot;Cable tester&amp;quot; link&lt;br /&gt;
&lt;br /&gt;
4. For the test - you should run the module specifically for a particular switch. For example:&lt;br /&gt;
&lt;br /&gt;
 perl usm_cabletest.pl 998&lt;br /&gt;
&lt;br /&gt;
will start the module for switch ID: 998&lt;br /&gt;
&lt;br /&gt;
Check if there are no errors in the information output.&lt;br /&gt;
&lt;br /&gt;
In the log files, analyse the information received.&lt;/div&gt;</summary>
		<author><name>Uscld2</name></author>
	</entry>
</feed>