Для начала добавляем EPEL репозиторий.
1 2 3 |
# yum install epel-release -y |
Далее ставим prosody:
1 2 3 |
# yum install prosody -y |
На официальном сайте есть подробная документация и другая информация по prosody
Делаем бэкап оригинального конфига:
1 2 3 |
# cp /etc/prosody/prosody.cfg.lua /etc/prosody/prosody.cfg.lua.good |
Приводим рабочий конфиг к такому виду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
admins = { "admin@im.yourdomain.ru" }; plugin_paths = { "/etc/prosody/prosody-modules" }; modules_enabled = { -- Generally required "roster"; -- Allow users to have a roster. Recommended ;) "saslauth"; -- Authentication for clients and servers. Recommended if you want to log in. "tls"; -- Add support for secure TLS on c2s/s2s connections "dialback"; -- s2s dialback support "disco"; -- Service discovery -- Not essential, but recommended "carbons"; -- Keep multiple clients in sync "pep"; -- Enables users to publish their avatar, mood, activity, playing music and more "private"; -- Private XML storage (for room bookmarks, etc.) "blocklist"; -- Allow users to block communications with other users "vcard4"; -- User profiles (stored in PEP) "vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard -- Nice to have "version"; -- Replies to server version requests "uptime"; -- Report how long server has been running "time"; -- Let others know the time here on this server "ping"; -- Replies to XMPP pings with pongs "register"; -- Allow users to register on this server using a client and change passwords "mam"; -- Store messages in an archive and allow users to access it "smacks"; "smacks_offline"; "cloud_notify"; "filter_chatstates"; "pinger"; "throttle_presence"; -- Admin interfaces "admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands --"admin_telnet"; -- Opens telnet console interface on localhost port 5582 -- HTTP modules --"http_upload"; "http_upload_external"; } modules_disabled = { -- "offline"; -- Store offline messages -- "c2s"; -- Handle client connections -- "s2s"; -- Handle server-to-server connections -- "posix"; -- POSIX functionality, sends server to background, enables syslog, etc. } allow_registration = false; c2s_require_encryption = true; s2s_require_encryption = true; s2s_secure_auth = false; authentication = "internal_hashed"; archive_expires_after = "1w"; log = { info = "/var/log/prosody/prosody.log"; -- Change 'info' to 'debug' for verbose logging error = "/var/log/prosody/prosody.err"; -- Log errors also to file } -- Подключаем сертификаты для шифрования соединения. certificates = "certs"; ssl = { key = "/etc/prosody/certs/im.yourdomain.ru.key"; certificate = "/etc/prosody/certs/im.yourdomain.ru.crt"; } daemonize = true; pidfile = "/run/prosody/prosody.pid"; --Ваш домен VirtualHost "im.yourdomain.ru"; -- HTTP_UPLOAD (отключил, потому что у него ограничение в 10 мб, поэтому использую http_upload_external) --http_upload_path = "/home/prosody/mod_http_upload"; --http_upload_expire_after = 60 * 60 * 24 * 7; -- a week in seconds --http_upload_quota = 1073741824; -- 1024 Mb --http_upload_file_size_limit = 104857600; --100 Mb --http_max_content_size = 104857600; --100 Mb --MAM default_archive_policy = true; archive_expires_after = "4w"; --SMACKS smacks_enabled_s2s = true smacks_hibernation_time = 86400 smacks_max_unacked_stanzas = 0 smacks_max_ack_delay = 5 smacks_max_hibernated_sessions = 20 smacks_max_old_sessions = 20 -- Настройка пушей push_notification_important_body = "You have new message" push_notification_with_body = false push_notification_with_sender = false -- PINGER c2s_idle_timeout = 30 c2s_ping_timeout = 30 ---EXTERNAL HTTP UPLOAD --Путь до файла share_v2 URL должен быть обязательно с / на конце! http_upload_external_base_url = "https://im.yourdomain.ru/share_v2.php/" -- Секрет из секции "конфигурация" файла share_v2.php http_upload_external_secret = "набор символов большой как пароль для просоди он нужен будет в конфиге просоди" http_upload_external_file_size_limit = 2147483648 http_upload_external_protocol = "v2"; --Include "conf.d/*.cfg.lua"; |
Я отключил (закомментировал – “–“) в конфиге инклюд фалов конфигурации доменов, так как у меня доменов всего один и все директивы его настройки в основном файле конфигурации.
Я использую для шифрования соединения сертификаты от Let’s Encrypt. Как настроить Let’s Encrypt тут. Подключаем сертификаты от Let’s Encrypt:
1 2 3 |
# prosodyctl --root cert import /etc/letsencrypt/live |
..и меняем настройки обновления эти сертификатов в crontab на:
1 2 3 |
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --deploy-hook "prosodyctl --root cert import /etc/letsencrypt/live" |
Prosody сам может сгенерировать самоподписанные сертификаты. Для этого ему понадобится пакет:
1 2 3 4 5 6 |
# yum install lua-sec # prosodyctl cert generate im.youdomain.ru # mv /var/lib/prosody/im.youdomain.ru.* /etc/prosody/certs/ # chown prosody:prosody /etc/prosody/certs/im.youdomain.ru* |
Далее переходим в директорию /etc/prosody и скачиваем хранилище модулей:
1 2 3 4 5 6 |
# apt-get install mercurial # hg clone https://hg.prosody.im/prosody-modules/ prosody-modules # cd prosody-modules # hg pull --update |
Эти команды установят утилиту управления версиями, скачают хранилище модулей и в конце попробуют это хранилище обновить. Расположение папок с плагинами описывается директивой plugin_paths. Вы можете сохранить их в любом удобном для вас месте.
Для работы плагина http_upload нужно создать папку для временных файлов (если будете создавать ее в другом месте, то поправьте в основном конфиге http_upload_path):
1 2 3 4 5 |
# mkdir -p /home/prosody/mod_http_upload # chown -R prosody:prosody /home/prosody/ # chmod 0700 /home/prosody/ |
Плагин http_upload имеет ограничение на загружаемые файлы в 10 Мб. Поэтому, чтобы обмениваться файлами большего размера я испульзую плагин http_upload_external. Для этого плагина нужен настроенный веб сервер. Как настроить веб сервер я описывать не буду (мануалов на эту тему полно). Итак, настраиваем http_upload_external:
- Из папки prosody-modules/mod_http_upload_external копируем файл share_v2.php в папку /data/www/im.yourdomain.ru/html/
- Создаем папку в любом месте удобном на сервере, но не в папке html папку /home/prosody_ext_upload и даем на нее все права пользователю apache.
- Делаем юзера apache владельцем файла share_v2.php.
- Редактируем файл share_v2.php:
1234567* Change this to a directory that is writable by your web server, but is outside your web root */$CONFIG_STORE_DIR = '/home/prosody_ext_upload';/* This must be the same as 'http_upload_external_secret' that you set in Prosody's config file */$CONFIG_SECRET = 'набор символов большой как пароль для просоди он нужен будет в конфиге просоди';
В конфиге включены все необходимые плагины и настройки к ним.
И последнее – создаем юзеров и запускаем сервер:
1 2 3 4 |
# prosodyctl adduser user1@im.yourdomain.ru # prosodyctl start |
Посмотреть все команды:
1 2 3 |
# prosodyctl |
Посмотреть список текущих пользователей в бд:
1 2 3 |
# prosodyctl mod_listusers |
Порты, которые нужно открыть в фаерволле (tcp): 5269, 5222, 5280, 5281.
Клиенты: Android (Conversations, Pix-Art Messeger), iOS (ChatSecure), MacOS (Monal, Siskin), Windows (Gajim, PSI+).