<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Воронин: заметки с тегом PostgreSQL</title>
<link>https://voronin.one/tags/postgresql/</link>
<description>воронин, voronin, it</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.4 (v4171)</generator>

<itunes:subtitle>воронин, voronin, it</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>MatrixRTC сервер на базе Synology</title>
<guid isPermaLink="false">60</guid>
<link>https://voronin.one/all/matrixrtc-server-na-baze-synology/</link>
<pubDate>Mon, 30 Mar 2026 16:33:28 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/matrixrtc-server-na-baze-synology/</comments>
<description>
&lt;p&gt;развернём свой matrix сервер используя средства synology&lt;/p&gt;
&lt;p&gt;для начала подготовим папки, где будят хранится настройки сервера и база PostgreSQL&lt;br /&gt;
в каталоге &lt;b&gt;docker&lt;/b&gt; создал папку &lt;b&gt;matrix&lt;/b&gt; а в ней уже &lt;b&gt;data&lt;/b&gt; и &lt;b&gt;db&lt;/b&gt; соответственно&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-97.png" width="800" height="298.67947178872" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;так же нам нужно получить id пользователя и группы, &lt;a href="https://voronin.one/all/kak-poluchit-id-polzovatelya-i-gruppy-v-synology/"&gt;uid и gid&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;затем идём в «Панель управления» -&gt; «Планировщик задач» -&gt; «Создать» -&gt; «Запланированная задача» -&gt; «Скрипт, созданный пользователем»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-98.png" width="800" height="472.72727272727" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём задачу «MATRIX», указываем пользователя «root» и обязательно отключаем&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-99.png" width="532" height="581" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;в расписание обязательно «не повторять»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-100.png" width="532" height="581" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;и пишем скрипт для запуска, нам нужно запустить его один раз для создания структуры&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-101.png" width="531" height="582" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;сам скрипт:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;#!/bin/bash
docker run --rm \
--user 1026:100 \
-v /volume1/docker/matrix/data:/data \
-e SYNAPSE_CONFIG_PATH=/data/homeserver.yaml \
-e SYNAPSE_SERVER_NAME=matrixchat \
-e SYNAPSE_REPORT_STATS=yes \&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;в скрипт подставляем «user 1026:100» uid и gid &lt;a href="https://voronin.one/all/kak-poluchit-id-polzovatelya-i-gruppy-v-synology/"&gt;полученные выше&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;после того как создали задачу, выбираем её в списке и жмём «выполнить», вам потребуется указать пароль текущего пользователя и он должен быть с правами администратора&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-111.png" width="590" height="152" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;теперь готовим файл &lt;b&gt;compose.yaml&lt;/b&gt; следующего содержимого&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;services:
  synapse-db:
    image: postgres:16
    container_name: Synapse-DB
    hostname: synapse-db
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: [&amp;quot;CMD&amp;quot;, &amp;quot;pg_isready&amp;quot;, &amp;quot;-q&amp;quot;, &amp;quot;-d&amp;quot;, &amp;quot;synapsedb&amp;quot;, &amp;quot;-U&amp;quot;, &amp;quot;synapseuser&amp;quot;]
      timeout: 45s
      interval: 10s
      retries: 10
    volumes:
      - /volume1/docker/matrix/db:/var/lib/postgresql/data:rw
    environment:
      - POSTGRES_DB=synapsedb
      - POSTGRES_USER=synapseuser
      - POSTGRES_PASSWORD=synapsepass
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
    restart: on-failure:5

  synapse:
    image: matrixdotorg/synapse:latest
    container_name: Synapse
    hostname: synapse
    security_opt:
      - no-new-privileges:true
    user: 1026:100
    environment:
      - TZ=Europe/Moscow
      - SYNAPSE_CONFIG_PATH=/data/homeserver.yaml
    volumes:
      - /volume1/docker/matrix/data:/data:rw
    ports:
      - 8450:8008/tcp
    restart: on-failure:5
    depends_on:
      synapse-db:
        condition: service_started&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;обратите внимание, что пусти &lt;b&gt;/volume1/docker/matrix/db&lt;/b&gt; и &lt;b&gt;/volume1/docker/matrix/data&lt;/b&gt; должны вести на папки, созданные выше&lt;/p&gt;
&lt;p&gt;идём в &lt;b&gt;Container manager&lt;/b&gt;, &lt;b&gt;Проект&lt;/b&gt; и жмём «создать»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-113.png" width="800" height="333.26063249727" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;даём название проекту, указываем путь к нашей папке &lt;b&gt;matrix&lt;/b&gt; и выбираем с компьютера файл &lt;b&gt;compose.yaml&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;настройки web портала не трогаем, мы будем настраивать обратный прокси&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-114.png" width="740" height="578" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;запускаем&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-115.png" width="741" height="578" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;ждём старта проекта&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-116.png" width="800" height="503" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;теперь надо остановить проект и отредактировать файл конфигурации нашего сервера&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-112.png" width="800" height="333.22314049587" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;добавляем следующие параметры после названия сервера&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;enable_registration: true
enable_registration_without_verification: true
enable_group_creation: true&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-119.png" width="797" height="454" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;теперь меняем параметры базы данных, заменим следующие строчки&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;database:
  name: sqlite3
  args:
    database: /data/homeserver.db&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-120.png" width="417" height="88" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;на&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;database:
  name: psycopg2
  args:
    user: synapseuser
    password: synapsepass
    database: synapsedb
    host: synapse-db
    cp_min: 5
    cp_max: 10&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-121.png" width="521" height="165" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;при редактировании файла конфигурации важно не ошибиться в отступах&lt;/p&gt;
&lt;p&gt;настраиваем обратный прокси&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-122.png" width="689" height="442" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём новую запись, указываем имя нашего сервера, например «im.server.ru», порт 443, обязательно включаем HSTS и порт нашего контейнера 8450&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-123.png" width="604" height="563" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём заголовки под websocket&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-124.png" width="603" height="561" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;выпускаем сертификат для нашего сервера&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-125.png" width="800" height="312.59418729817" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="652" data-ratio="1.1790235081374"&gt;
&lt;img src="https://voronin.one/pictures/image-126.png" width="652" height="553" alt="" /&gt;
&lt;img src="https://voronin.one/pictures/image-127.png" width="650" height="552" alt="" /&gt;
&lt;img src="https://voronin.one/pictures/image-128.png" width="653" height="550" alt="" /&gt;
&lt;img src="https://voronin.one/pictures/image-129.png" width="650" height="550" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;идём в настройки и назначаем сертификат домену&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-130.png" width="795" height="342" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-131.png" width="600" height="419" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;осталось скачать клиент и подключиться к серверу&lt;br /&gt;
&lt;a href="https://element.io/download"&gt;https://element.io/download&lt;/a&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-132.png" width="800" height="619.53125" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;жмём «редактировать» чтобы сменить сервер на наш&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-133.png" width="800" height="625.54027504912" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-134.png" width="800" height="621.7008797654" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём новую учётную запись&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-137.png" width="800" height="617.25490196078" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;мы вошли&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-136.png" width="800" height="622.48289345064" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;поздравляю&lt;/p&gt;
</description>
</item>


</channel>
</rss>