meowzone

meowzone

Пикабушник
Дата рождения: 29 декабря
41К рейтинг 22 подписчика 18 подписок 26 постов 13 в горячем
Награды:
Удача в кармане За лучший сплит Высокий разум За неравнодушие к судьбе Пикабу5 лет на Пикабу
15

Ответ на пост «"Подтвердите, что вы пикабушник, добавив фото кота"»572

Британец Бося, в следующем году 13 лет уже исполнится.

Ответ на пост «"Подтвердите, что вы пикабушник, добавив фото кота"»
Показать полностью 1
1546

Как я поднял свой личный Matrix-мессенджер

Я давно хотел иметь свой собственный семейный мессенджер, без зависимостей от Telegram/WhatsApp на случай, если один из них станет не доступен.
Мне нужен был простой вариант: сообщения, фото, файлы. Звонки и видео для меня были избыточными, поэтому всю усложняющую историю с coturn я сразу отбросил.

В итоге я развернул Matrix Synapse в Docker. Всё работает стабильно, шифрование есть, и самое главное - всё хранится у меня на домашнем сервере, в роли которого выступает старенький неттоп на Intel Core i3 7100T, на нем же крутится система умного дома Home Assistant, а так же медиасерверы Jellyfin и Navidrome.

Так как получил предложение написать об этом пост, рассказываю как это реализовывал.

1. Для начала давайте сперва поговорим, что такое Matrix и зачем он нужен

Matrix - это защищённый протокол обмена сообщениями.
Он похож на Telegram, но:

  • полностью открытый

  • работает на вашем железе, либо на вашем облачном сервере

  • переписка шифруется на устройстве

Мы будем поднимать сервер Synapse (основная реализация Matrix) на Docker

2. Docker Сompose

Matrix может работать на SQLite, но лучше взять PostgreSQL - он надёжнее.
Вот минимальный рабочий docker-compose.yml:

services:

synapse:

image: matrixdotorg/synapse:latest

container_name: matrix-synapse

restart: unless-stopped

environment:

SYNAPSE_SERVER_NAME: chat.example.net

SYNAPSE_REPORT_STATS: "no"

volumes:

- ./synapse:/data

depends_on:

- postgres

logging:

driver: "json-file"

options:

max-size: "50m"

max-file: "3"

networks:

- internal

postgres:

image: postgres:14

container_name: matrix-postgres

restart: unless-stopped

environment:

POSTGRES_DB: synapse_db_r72m

POSTGRES_USER: synuser_k84t

POSTGRES_PASSWORD: dN8vQ3pL7wS1zFgB9rT2

POSTGRES_INITDB_ARGS: "--encoding=UTF8 --lc-collate=C --lc-ctype=C"

volumes:

- ./postgres:/var/lib/postgresql/data

logging:

driver: "json-file"

options:

max-size: "50m"

max-file: "3"

networks:

- internal

networks:

internal:

driver: bridge

Всё, что вам нужно - создать папку с проектом и положить этот файл туда. Там же в дальнейшем появятся папки с конфигурациями самого сервера и сервера баз данных. Логин, пароль и имя базы созданы рандомно, вы их можете поменять на свои. Так же замените chat.example.net на ваш домен.

3. Генерация начального конфига

Synapse в самом начале нужно инициализировать:

docker compose run --rm synapse generate

Появится папка synapse/ с файлом homeserver.yaml.

Там находим блок базы данных и меняем его на PostgreSQL, блок с SQLite можно закомментировать:

database:

name: psycopg2

args:

user: synuser_k84t

password: dN8vQ3pL7wS1zFgB9rT2

database: synapse_db_r72m

host: matrix-postgres

port: 5432

Это всё.

4. Запуск сервера

docker compose up -d

5. HTTPS + домен (основной вариант)

Самый нормальный способ пробросить сервер наружу - через домен и HTTPS.
Я использую Nginx Proxy Manager (NPM), но подойдёт любой прокси.

Важно: Nginx Proxy Manager должен быть в одной Docker-сети с Matrix-сервером.
Synapse по умолчанию создаёт свою сеть - она называется так же, как папка с проектом, с суффиксом _internal (если не меняли compose файл). Если NPM не подключён к этой сети, он просто не увидит контейнер matrix-synapse и проксирование работать не будет.

Чтобы подключить NPM к нужной сети:

docker network connect <имя_сети_internal> <контейнер_NPM>

  1. Создаём Proxy Host на matrix-synapse:8008

  2. Получаем SSL-сертификат

  3. Добавляем два обязательных пути .well-known:

location /.well-known/matrix/server {

add_header Content-Type application/json;

return 200 '{"m.server": "chat.example.net:443"}';

}

location /.well-known/matrix/client {

add_header Content-Type application/json;

return 200 '{"m.homeserver": {"base_url": "https://chat.example.net"}}';

}

Не забудьте заменить chat.example.net на ваш домен.

Проверяем прямо на сервере, или в консоли вашего компа:

curl -L https://chat.example.net/.well-known/matrix/client

Ответ должен быть таким:

{"m.homeserver":{"base_url":"https://chat.example.net"}}

6. Если домен не нужен, то можно работать по HTTP и IP

Просто пробрасываете порт наружу и подключаетесь к серверу вот так:

http://server-ip:8008/

Matrix всё равно шифрует переписку, поэтому содержимое сообщений никто не увидит.

Минусы:

  • Element может ругнуться

  • федерации (общения с другими серверами) не будет

Для семейного чата идеальный упрощённый вариант.

После можно зайти через браузер. Если сервер успешно поднялся, вы увидите такую страницу:

Как я поднял свой личный Matrix-мессенджер

7. Создание администратора

Первого пользователя я создавал так:

docker exec -it matrix-synapse \

register_new_matrix_user \

-c /data/homeserver.yaml \

-a \

http://matrix-synapse:8008

(matrix-synapse:8008 — адрес внутри Docker-сети)

8. Создание обычного пользователя

docker exec -it matrix-synapse \

register_new_matrix_user \

-c /data/homeserver.yaml \

--no-admin \

http://matrix-synapse:8008

9. Важное замечание о паролях при создании пользователей

При создании пользователей через CLI нельзя использовать в пароле символы UTF-16, иначе Synapse выдает ошибку:

UnicodeEncodeError: 'utf-8' codec can't encode character '\udce3'

10. Как узнать свой токен для админских команд

Для работы с API нужен токен доступа.
Получить его проще всего через CLI-авторизацию.

Шаг 1. Выполнить вход через API:

docker exec -it matrix-synapse curl -s -X POST \

-H "Content-Type: application/json" \

-d '{"type":"m.login.password","user":"ВАШ_ЛОГИН","password":"ВАШ_ПАРОЛЬ"}' \

http://localhost:8008/_matrix/client/r0/login

Шаг 2. В ответе найдите поле:

"access_token": "syt_xxxxxxx..."

11. Полезные команды с токеном

Проверить, кто вы:

docker exec -it matrix-synapse curl -H "Authorization: Bearer ВАШ_ТОКЕН" \

http://localhost:8008/_matrix/client/r0/account/whoami

Список пользователей:

docker exec -it matrix-synapse curl -H "Authorization: Bearer ВАШ_ТОКЕН" \

http://localhost:8008/_synapse/admin/v2/users

Список комнат:

docker exec -it matrix-synapse curl -H "Authorization: Bearer ВАШ_ТОКЕН" \

http://localhost:8008/_synapse/admin/v1/rooms

Удалить комнату:

docker exec -it matrix-synapse curl -X DELETE \

-H "Authorization: Bearer ВАШ_ТОКЕН" \

http://localhost:8008/_synapse/admin/v1/rooms/ROOM_ID

Деактивация пользователя:

docker exec -it matrix-synapse curl -s -X PUT \

-H "Authorization: Bearer ВАШ_ТОКЕН" \

-H "Content-Type: application/json" \

-d '{"deactivated": true}' \

"http://localhost:8008/_synapse/admin/v2/users/@user:chat.example.net"

Получить список устройств пользователя:

docker exec -it matrix-synapse curl -s \

-H "Authorization: Bearer ВАШ_ТОКЕН" \

"http://localhost:8008/_synapse/admin/v2/users/@user:chat.example.net/devices"

Удалить конкретное устройство:

docker exec -it matrix-synapse curl -s -X DELETE \

-H "Authorization: Bearer ВАШ_ТОКЕН" \

"http://localhost:8008/_synapse/admin/v2/users/@user:chat.example.net/devices/ИДЕНТИФИКАТОР_УСТРОЙСТВА"

12. Подключение с телефона

На телефон ставим приложение Element (iOS/Android) и настраиваем подключение к другому серверу.

Если у вас HTTPS и домен:

https://chat.example.net

Если вы работаете по IP:

http://server-ip:8008/

Далее вводите имя пользователя и пароль, затем через поиск находите второго пользователя:

@имя

И отправляете ему приглашение. Второй пользователь принимает приглашение и создается комната, в которой вы можете общаться.

Важно: Сохраните в настройках клиента ключи восстановления, чтобы в следующий раз восстановить зашифрованные сообщения, иначе не получится их прочитать.

13. Немного про звонки

Звонки и видео требуют настроенный TURN-сервер (coturn).
Он поднимается отдельно, настраивается не сложно, но это уже другая тема.
Для обычной текстовой переписки не нужен вообще.

14. Итог

Matrix - это несложно.
Он даёт вам:

  • свой личный мессенджер

  • без рекламы

  • без чужих серверов

  • с нормальным шифрованием

  • с хранением данных у вас

Для семьи или небольшой группы - идеальный вариант.

Показать полностью 1
11

Вот и до меня добрался маразм Авито)

Выставил на продажу старое файловое хранилище, ничего не предвещало беды, как объявление заблокировали по причине "Контакты на фото". Кажется я уже с таким сталкивался 10 лет назад, тогда просто бот цифровые значения в описании принимал за контакты и банил, но тут все оказалось куда забавнее.

Написал я в техподдержку, что у меня нет контактов на фотографиях и тут явно какая то ошибка, на что у меня состоялся вот такой диалог:

В общем, если вы сейчас что то выставляете на продажу и там где то мелькает адрес какого либо сайта - это нарушение, имейте ввиду))

Показать полностью 3
95

Ответ на пост «Взлетел»1

Когда я играл в ГТА 4, у меня был свой кайф: просто медленно ехал по улицам Либерти Сити, смотрел на пейзажи, людей, фасады, этот серый мокрый асфальт. И вот однажды, чисто случайно, я был свидетелем такой сцены, что я пожалел, что у меня не был запущен какой нибудь Fraps.

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

Вот за такие моменты ты понимаешь, что мир игры живет своей жизнью. Это не было похоже на заскриптованную сцену, все выглядело как чистая случайность, из за которой сработали побочные скрипты - Из машины вылез оглушенный и недовольный водитель, а копы проявили агрессию сразу, как только им что то не понравилось. В эту секунду Либерти Сити казался не просто декорацией, а городом где в любой момент может случиться полное безумие.

По настоящему прорывная была игра в свое время, ГТА 5 уже не вызывала таких эмоций.

2029

Ответ Appelsin88 в «Полицейские, какую самую тупую вещь вы когда-либо видели или слышали от преступника?»78

Как-то обслуживал я инфраструктуру (сеть, видеонаблюдение) в одном учебном заведении. У них был заключен договор на услуги ЧОП и охранники были приходящие. И вот звонит мне зам по АХЧ и говорит, что охранник в общаге сбил настройки камер. Я сначала не понял: как сбил, у него же никогда паролей от регистраторов не было? Но решил вечером заехать, глянуть, что случилось.

Приезжаю. Навстречу выходит сотрудница, которая сама жила в этой же общаге. Смотрим комп охраны, а там в программе для просмотра потоков с камер - пусто, ни одного регистратора в списке. Ну я запускаю "Автопоиск", нахожу все регистраторы, добавляю и камеры снова оживают.

Спрашиваю: "А где охранник-то?"

А мне отвечают: "Да он вчера вечером ушел и больше не приходил".

И тут у меня пазл складывается: регистраторы из программы специально удалили (а это можно сделать даже без админских прав), а сам охранник испарился. Записи, к счастью, хранились не на компе, а на самих регистраторах, которые стояли в разных корпусах общаги, в железных шкафах под замком.

Начали разбираться по хронологии. Оказалось, что прошлым вечером, когда общага почти пустовала (каникулы, студентов почти не было), охранник сперва отвернул камеру, которая смотрела прямо на его пост, потом снёс регистраторы из программы и пошел гулять по этажам, где никого не было. Попутно заходил в комнаты и воровал вещи, прям видно было, как заходил с пустыми руками, а выходил уже вынося что то. У одной девушки исчез старенький ноутбук, у других пропали какие-то мелочи.

Вызвали полицию, оформили заявление, передали записи с камер. Ноутбук, кстати, нашли в соседнем ломбарде. Даже удивляет, что такую старую рухлядь у него приняли (там ноут чисто под печатную машинку, очень старый).

Чем в итоге закончилась история уже и не вспомню, вроде бы задержали его и даже срок какой-то дали. Но то, что охранник оказался тупой ворюгой - факт))

Показать полностью
4214

Ответ Аноним в «Стыдно за свидание»36

Я когда-то познакомился с девушкой по аське - это был 2003-й. Я тогда жил в Екатеринбурге, она в Москве. И у нас закрутился настоящий бурный интернет-роман: каждый день переписывались в аське, часами зависали онлайн.

Фотки друг другу слали - ей легко, у неё был классный цифровик, а я сначала отсканированные фотки ей кидал, потому что фотика не было. Потом плюнул, пошёл и купил себе вебку только ради того, чтобы щёлкать кадры и отсылать ей.

Это длилось почти год. Мы не теряли связь, мечтали когда-нибудь увидеться, но, честно, в 17 лет при таком расстоянии - всё это больше похоже было на красивую сказку. В итоге мы начали отдаляться, она нашла парня в Москве, а наше общение сошло на нет. Помню, жила она в Выхино, звали Наташа, ник GeLLa. Увлекалась рисованием мультфильмов в Adobe Flash, прям талантливая была.

Теперь я сам живу в Москве. Бывает, проезжаю Выхино и невольно думаю: а что было бы, окажись я тут тогда, 22 года назад? Остались только тёплые, приятные воспоминания))

17

Ответ на пост «Гигантура...»2

Когда наконец-то получил прибавку к зарплате, а потом увидел новые цены в магазинах.

Ответ на пост «Гигантура...»
Отличная работа, все прочитано!