Centrifugo - это сервер обмена сообщениями в реальном времени, предназначенный для масштабируемого. Это кросс-платформное приложение - означает, что оно работает на Windows, Linux и MacOS.

Запускается в качестве отдельной службы и сохраняет постоянные подключения Websocket или SockJS от клиентов приложений (из веб-браузеров или других сред, таких как приложения iOS/Android). Когда событие должно быть передано вашим клиентам в режиме реального времени, вы публикуете его в Centrifugo API и Centrifugo, затем транслирует событие всем подключенным клиентам, затрагиваемым в этом событии (то есть клиенты, подписные на канал событий).

В этой статье мы узнаем, как установить Centrifugo на сервер Ubuntu 25.04. Итак, приступим.

Предпосылки

  • Сервер с Ubuntu 25.04 в качестве ОС.
  • Права пользователя: пользователь root или обычный пользователь с привилегиями sudo.

Конвенции

1
2
# - данные команды должны выполняться с правами root либо непосредственно от имени пользователя root, либо с помощью команды sudo.
$ - данные команды должны выполняться от имени обычного пользователя

Шаг 1. Обновите систему

Свежая установка Ubuntu 25.04 требует обновления пакетов до последних доступных версий.

1
$ sudo apt update -y && sudo apt upgrade -y

Шаг 2. Установите Centrifugo

Загрузите последний бинарный файл со страницы релизов на GitHub.

1
$ curl -s  https://api.github.com/repos/centrifugal/centrifugo/releases/latest | grep browser_download_url |  cut -d '"' -f 4 | grep '\linux_amd64.tar.gz' | wget -i -

Извлеките загруженный файл:

1
$ tar xvf centrifugo_*_linux_amd64.tar.gz

И переместите бинарный файл в /usr/local/bin/ каталог:

1
$ sudo mv centrifugo /usr/local/bin/

Сделайте файл Centrifugo исполняемый:

1
$ sudo chmod +x /usr/local/bin/centrifugo

Обратите внимание, что вам придется сделать эту операцию каждый раз, когда вы обновляете Centrifugo.

Подтвердите успешную установку, проверив версию программного обеспечения:

1
2
$ centrifugo version
Centrifugo v6.2.2 (Go version: go1.24.4)

Шаг 3. Настройте Centrifugo

Далее вам нужно будет сгенерировать файл конфигурации Centrifugo. Вы можете запустить команду genconfig, которая генерирует минимальный необходимый файл конфигурации:

1
$ centrifugo genconfig

Эта команда будет автоматически генерировать секретные ключи и создавать файл конфигурации config.json в вашем текущем каталоге.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ cat config.json
{
  "client": {
    "token": {
      "hmac_secret_key": "bbe7d157-a253-4094-9759-06a8236543f9"
    },
    "allowed_origins": []
  },
  "http_api": {
    "key": "d7627bb6-2292-4911-82e1-615c0ed3eebb"
  },
  "admin": {
    "enabled": true,
    "password": "d0683813-0916-4c49-979f-0e08a686b727",
    "secret": "4e9eafcf-0120-4ddd-b668-8dc40072c78e"
  }
}

Примечание. Запишите пароль admin_password из приведенного выше вывода. Это необходимо для входа в веб-интерфейс.

Затем cоздайте новый каталог и скопируйте файлы конфигурации с помощью следующей команды

1
2
$ sudo mkdir /etc/centrifugo
$ sudo mv config.json /etc/centrifugo/config.json

Как только вы закончите, вы можете перейти к следующему шагу.

Шаг 4. Запустите Centrifugo в качестве systemd

Далее вам нужно будет создать файл службы systemd для управления службой Centrifugo внутри каталога /etc/systemd/system.

1
$ sudo nano /etc/systemd/system/centrifugo.service

Затем добавьте в файл следующее содержимое:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[Unit]
Description=Centrifugo Websocket Server
After=network.target syslog.target
 
[Service]
LimitNOFILE=30000
ExecStartPre=/usr/bin/centrifugo checkconfig --config /etc/centrifugo/config.json
ExecStart=/usr/bin/centrifugo --config /etc/centrifugo/config.json
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -SIGTERM $MAINPID
TimeoutStopSec=5
KillMode=control-group
RestartSec=2
Restart=always
SyslogIdentifier=centrifugo
 
[Install]
WantedBy=multi-user.target
Alias=centrifugo.service

Сохраните и закройте файл.

Затем перезагрузите демон systemd и запустите Centrifugo:

1
2
3
4
$ sudo systemctl daemon-reload
$ sudo systemctl start centrifugo.service
$ sudo systemctl enable centrifugo.service
$ sudo systemctl status centrifugo.service

На данный момент служба Centrifugo запущена и прослушивает порт 8000. Вы можете проверить это с помощью следующей команды:

1
$ sudo ss -tunelp | grep 8000

Вы должны получить следующий результат:

1
tcp   LISTEN 0      4096               *:8000             *:*    users:(("centrifugo",pid=4220,fd=3)) ino:30931 sk:b cgroup:/system.slice/centrifugo.service v6only:0 <->

Всё, что осталось - это войти в систему по адресу http://localhost:8000 вы будете перенаправлены на страницу входа в Centrifugo:

Используйте учетные данные в:

  • Admin_password: Это пароль для входа в веб-интерфейс администратора.
  • Admin_secret: Это секретный ключ для токена аутентификации, установленного при успешном входе в систему.

Шаг 5. Теперь мы должны установить Nginx

Для установки веб-сервера Nginx выполните команду ниже:

1
$ sudo apt install nginx

Далее мы создадим базовую конфигурацию для этого проекта.

1
$ sudo nano /etc/nginx/sites-available/centrifugo.conf

В этом файле поместите следующий содержимое.

 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
server {
    listen 80;
    listen [::]:80;
    index index.html;
    server_name messaging.example.com;

    location / {
        proxy_pass http://localhost:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;

        # Add these lines
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Add timeout settings
        proxy_read_timeout 60s;
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
    }

    # Add error log for this specific site
    error_log /var/log/nginx/messaging.example.com_error.log;
    access_log /var/log/nginx/messaging.example.com_access.log;
}

Теперь весь входящий трафик на messaging.example.com по умолчанию http 80 порт будет перенаправлен на localhost:8000.

И привязать наш новый файл конфигурации к сайтам доступного каталога:

1
$ sudo ln -sf /etc/nginx/sites-available/centrifugo.conf /etc/nginx/sites-enabled/centrifugo.conf

Наконец, мы можем проверить, не имеет ли наш файл nginx никакой ошибки:

1
2
$ sudo nginx -t
$ sudo systemctl restart nginx.service

И, наконец, теперь мы можем увидеть наше приложение Centrifugo из вашего браузера, чтобы продолжить конфигурацию http://messaging.example.com.

Шаг 6. Получите сертификат TLS от Let’s Encrypt

Мы будем использовать Acme.sh для получения SSL-сертификата Let’s Encrypt бесплатно. Пожалуйста, убедитесь, что вы указали свой поддомен на IP-адрес сервера. Шаги, приведенные ниже, будут работать только в том случае, если вы обслуживаете интерфейс управления с помощью Nginx.

1
2
3
4
5
6
$ sudo su -
# git clone https://github.com/Neilpang/acme.sh.git
# cd acme.sh
# ./acme.sh --register-account -m [email protected] --server zerossl
# source ~/.bashrc
# cd ~

Получите сертификаты RSA для вашего имени хоста:

1
# acme.sh --issue --standalone -d messaging.example.com --keylength 2048 

Создайте каталог для хранения ваших сертификатов:

1
# mkdir -p /etc/letsencrypt/messaging.example.com 

Установите сертификаты в созданные каталоги:

1
2
3
4
# acme.sh --install-cert -d messaging.example.com \ 
       --cert-file /etc/letsencrypt/messaging.example.com/cert.pem \ 
       --key-file /etc/letsencrypt/messaging.example.com/private.key \ 
       --fullchain-file /etc/letsencrypt/messaging.example.com/fullchain.pem \ 

Этот режим состоит только в том, чтобы выпустить сертификат, он не изменит ваши настраиваемые файлы nginx. Вам нужно настроить файлы конфигурации вашего сайта самим, чтобы использовать сертификат.

Завершение

Поздравляем! вы успешно установили сервер Centrifugo на сервер Ubuntu 25.04. Для получения дополнительной информации вы должны прочитать документацию Centrifugo.

Если вам понравился этот пост пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.