{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Воронин: заметки с тегом PostgreSQL",
    "_rss_description": "воронин, voronin, it",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/voronin.one\/tags\/postgresql\/",
    "feed_url": "https:\/\/voronin.one\/tags\/postgresql\/json\/",
    "icon": "https:\/\/voronin.one\/pictures\/userpic\/userpic@2x.jpg?1658757233",
    "authors": [
        {
            "name": "Алексей Воронин",
            "url": "https:\/\/voronin.one\/",
            "avatar": "https:\/\/voronin.one\/pictures\/userpic\/userpic@2x.jpg?1658757233"
        }
    ],
    "items": [
        {
            "id": "60",
            "url": "https:\/\/voronin.one\/all\/matrixrtc-server-na-baze-synology\/",
            "title": "MatrixRTC сервер на базе Synology",
            "content_html": "<p>развернём свой matrix сервер используя средства synology<\/p>\n<p>для начала подготовим папки, где будят хранится настройки сервера и база PostgreSQL<br \/>\nв каталоге <b>docker<\/b> создал папку <b>matrix<\/b> а в ней уже <b>data<\/b> и <b>db<\/b> соответственно<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-97.png\" width=\"800\" height=\"298.67947178872\" alt=\"\" \/>\n<\/div>\n<p>так же нам нужно получить id пользователя и группы, <a href=\"https:\/\/voronin.one\/all\/kak-poluchit-id-polzovatelya-i-gruppy-v-synology\/\">uid и gid<\/a><\/p>\n<p>затем идём в «Панель управления» -> «Планировщик задач» -> «Создать» -> «Запланированная задача» -> «Скрипт, созданный пользователем»<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-98.png\" width=\"800\" height=\"472.72727272727\" alt=\"\" \/>\n<\/div>\n<p>создаём задачу «MATRIX», указываем пользователя «root» и обязательно отключаем<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-99.png\" width=\"532\" height=\"581\" alt=\"\" \/>\n<\/div>\n<p>в расписание обязательно «не повторять»<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-100.png\" width=\"532\" height=\"581\" alt=\"\" \/>\n<\/div>\n<p>и пишем скрипт для запуска, нам нужно запустить его один раз для создания структуры<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-101.png\" width=\"531\" height=\"582\" alt=\"\" \/>\n<\/div>\n<p>сам скрипт:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\ndocker run --rm \\\n--user 1026:100 \\\n-v \/volume1\/docker\/matrix\/data:\/data \\\n-e SYNAPSE_CONFIG_PATH=\/data\/homeserver.yaml \\\n-e SYNAPSE_SERVER_NAME=matrixchat \\\n-e SYNAPSE_REPORT_STATS=yes \\<\/code><\/pre><p>в скрипт подставляем «user 1026:100» uid и gid <a href=\"https:\/\/voronin.one\/all\/kak-poluchit-id-polzovatelya-i-gruppy-v-synology\/\">полученные выше<\/a><\/p>\n<p>после того как создали задачу, выбираем её в списке и жмём «выполнить», вам потребуется указать пароль текущего пользователя и он должен быть с правами администратора<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-111.png\" width=\"590\" height=\"152\" alt=\"\" \/>\n<\/div>\n<p>теперь готовим файл <b>compose.yaml<\/b> следующего содержимого<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">services:\n  synapse-db:\n    image: postgres:16\n    container_name: Synapse-DB\n    hostname: synapse-db\n    security_opt:\n      - no-new-privileges:true\n    healthcheck:\n      test: [&quot;CMD&quot;, &quot;pg_isready&quot;, &quot;-q&quot;, &quot;-d&quot;, &quot;synapsedb&quot;, &quot;-U&quot;, &quot;synapseuser&quot;]\n      timeout: 45s\n      interval: 10s\n      retries: 10\n    volumes:\n      - \/volume1\/docker\/matrix\/db:\/var\/lib\/postgresql\/data:rw\n    environment:\n      - POSTGRES_DB=synapsedb\n      - POSTGRES_USER=synapseuser\n      - POSTGRES_PASSWORD=synapsepass\n      - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C\n    restart: on-failure:5\n\n  synapse:\n    image: matrixdotorg\/synapse:latest\n    container_name: Synapse\n    hostname: synapse\n    security_opt:\n      - no-new-privileges:true\n    user: 1026:100\n    environment:\n      - TZ=Europe\/Moscow\n      - SYNAPSE_CONFIG_PATH=\/data\/homeserver.yaml\n    volumes:\n      - \/volume1\/docker\/matrix\/data:\/data:rw\n    ports:\n      - 8450:8008\/tcp\n    restart: on-failure:5\n    depends_on:\n      synapse-db:\n        condition: service_started<\/code><\/pre><p>обратите внимание, что пусти <b>\/volume1\/docker\/matrix\/db<\/b> и <b>\/volume1\/docker\/matrix\/data<\/b> должны вести на папки, созданные выше<\/p>\n<p>идём в <b>Container manager<\/b>, <b>Проект<\/b> и жмём «создать»<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-113.png\" width=\"800\" height=\"333.26063249727\" alt=\"\" \/>\n<\/div>\n<p>даём название проекту, указываем путь к нашей папке <b>matrix<\/b> и выбираем с компьютера файл <b>compose.yaml<\/b><\/p>\n<p>настройки web портала не трогаем, мы будем настраивать обратный прокси<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-114.png\" width=\"740\" height=\"578\" alt=\"\" \/>\n<\/div>\n<p>запускаем<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-115.png\" width=\"741\" height=\"578\" alt=\"\" \/>\n<\/div>\n<p>ждём старта проекта<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-116.png\" width=\"800\" height=\"503\" alt=\"\" \/>\n<\/div>\n<p>теперь надо остановить проект и отредактировать файл конфигурации нашего сервера<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-112.png\" width=\"800\" height=\"333.22314049587\" alt=\"\" \/>\n<\/div>\n<p>добавляем следующие параметры после названия сервера<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">enable_registration: true\nenable_registration_without_verification: true\nenable_group_creation: true<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-119.png\" width=\"797\" height=\"454\" alt=\"\" \/>\n<\/div>\n<p>теперь меняем параметры базы данных, заменим следующие строчки<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">database:\n  name: sqlite3\n  args:\n    database: \/data\/homeserver.db<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-120.png\" width=\"417\" height=\"88\" alt=\"\" \/>\n<\/div>\n<p>на<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">database:\n  name: psycopg2\n  args:\n    user: synapseuser\n    password: synapsepass\n    database: synapsedb\n    host: synapse-db\n    cp_min: 5\n    cp_max: 10<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-121.png\" width=\"521\" height=\"165\" alt=\"\" \/>\n<\/div>\n<p>при редактировании файла конфигурации важно не ошибиться в отступах<\/p>\n<p>настраиваем обратный прокси<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-122.png\" width=\"689\" height=\"442\" alt=\"\" \/>\n<\/div>\n<p>создаём новую запись, указываем имя нашего сервера, например «im.server.ru», порт 443, обязательно включаем HSTS и порт нашего контейнера 8450<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-123.png\" width=\"604\" height=\"563\" alt=\"\" \/>\n<\/div>\n<p>создаём заголовки под websocket<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-124.png\" width=\"603\" height=\"561\" alt=\"\" \/>\n<\/div>\n<p>выпускаем сертификат для нашего сервера<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-125.png\" width=\"800\" height=\"312.59418729817\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"652\" data-ratio=\"1.1790235081374\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-126.png\" width=\"652\" height=\"553\" alt=\"\" \/>\n<img src=\"https:\/\/voronin.one\/pictures\/image-127.png\" width=\"650\" height=\"552\" alt=\"\" \/>\n<img src=\"https:\/\/voronin.one\/pictures\/image-128.png\" width=\"653\" height=\"550\" alt=\"\" \/>\n<img src=\"https:\/\/voronin.one\/pictures\/image-129.png\" width=\"650\" height=\"550\" alt=\"\" \/>\n<\/div>\n<\/div>\n<p>идём в настройки и назначаем сертификат домену<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-130.png\" width=\"795\" height=\"342\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-131.png\" width=\"600\" height=\"419\" alt=\"\" \/>\n<\/div>\n<p>осталось скачать клиент и подключиться к серверу<br \/>\n<a href=\"https:\/\/element.io\/download\">https:\/\/element.io\/download<\/a><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-132.png\" width=\"800\" height=\"619.53125\" alt=\"\" \/>\n<\/div>\n<p>жмём «редактировать» чтобы сменить сервер на наш<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-133.png\" width=\"800\" height=\"625.54027504912\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-134.png\" width=\"800\" height=\"621.7008797654\" alt=\"\" \/>\n<\/div>\n<p>создаём новую учётную запись<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-137.png\" width=\"800\" height=\"617.25490196078\" alt=\"\" \/>\n<\/div>\n<p>мы вошли<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/voronin.one\/pictures\/image-136.png\" width=\"800\" height=\"622.48289345064\" alt=\"\" \/>\n<\/div>\n<p>поздравляю<\/p>\n",
            "date_published": "2026-03-30T16:33:28+03:00",
            "date_modified": "2026-03-31T13:56:07+03:00",
            "tags": [
                "docker",
                "MATRIX",
                "MatrixRTC",
                "PostgreSQL",
                "synology"
            ],
            "image": "https:\/\/voronin.one\/pictures\/image-117.png",
            "_date_published_rfc2822": "Mon, 30 Mar 2026 16:33:28 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "60",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css",
                    "jquery\/jquery.js",
                    "fotorama\/fotorama.css",
                    "fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/voronin.one\/pictures\/image-117.png",
                    "https:\/\/voronin.one\/pictures\/image-118.png",
                    "https:\/\/voronin.one\/pictures\/image-135.png",
                    "https:\/\/voronin.one\/pictures\/image-97.png",
                    "https:\/\/voronin.one\/pictures\/image-98.png",
                    "https:\/\/voronin.one\/pictures\/image-99.png",
                    "https:\/\/voronin.one\/pictures\/image-100.png",
                    "https:\/\/voronin.one\/pictures\/image-101.png",
                    "https:\/\/voronin.one\/pictures\/image-111.png",
                    "https:\/\/voronin.one\/pictures\/image-113.png",
                    "https:\/\/voronin.one\/pictures\/image-114.png",
                    "https:\/\/voronin.one\/pictures\/image-115.png",
                    "https:\/\/voronin.one\/pictures\/image-116.png",
                    "https:\/\/voronin.one\/pictures\/image-112.png",
                    "https:\/\/voronin.one\/pictures\/image-119.png",
                    "https:\/\/voronin.one\/pictures\/image-120.png",
                    "https:\/\/voronin.one\/pictures\/image-121.png",
                    "https:\/\/voronin.one\/pictures\/image-122.png",
                    "https:\/\/voronin.one\/pictures\/image-123.png",
                    "https:\/\/voronin.one\/pictures\/image-124.png",
                    "https:\/\/voronin.one\/pictures\/image-125.png",
                    "https:\/\/voronin.one\/pictures\/image-126.png",
                    "https:\/\/voronin.one\/pictures\/image-127.png",
                    "https:\/\/voronin.one\/pictures\/image-128.png",
                    "https:\/\/voronin.one\/pictures\/image-129.png",
                    "https:\/\/voronin.one\/pictures\/image-130.png",
                    "https:\/\/voronin.one\/pictures\/image-131.png",
                    "https:\/\/voronin.one\/pictures\/image-132.png",
                    "https:\/\/voronin.one\/pictures\/image-133.png",
                    "https:\/\/voronin.one\/pictures\/image-134.png",
                    "https:\/\/voronin.one\/pictures\/image-137.png",
                    "https:\/\/voronin.one\/pictures\/image-136.png"
                ]
            }
        }
    ],
    "_e2_version": 4171,
    "_e2_ua_string": "Aegea 11.4 (v4171)"
}