Skip to content

Docker Compose установка Pepeunit

INFO

Данное руководство для debian 12, но подойдёт почти для всех unix систем.

WARNING

Если сомневаетесь, спросите для вашей платформы у доступной вам LLM, следующий промт:

text
Напиши гайд как установить docker и docker compose на машину <Название дистрибутива>

Установка Docker

Данный набор команд позволит установить Docker в систему для пользователя root:

bash
sudo su
curl -fsSL https://get.docker.com -o get-docker.sh
sh ./get-docker.sh

Проверьте установку Docker:

bash
docker --version
docker run hello-world

Если права для использования команды docker нужно предоставить другому пользователю - можно воспользоваться командой:

bash
sudo su
sudo usermod -aG docker <user-name>

Установите docker в автозапуск:

bash
sudo systemctl start docker
sudo systemctl enable docker

Устновка Docker Compose

Выполните команды:

bash
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Проверьте установку Docker Compose:

bash
docker-compose --version

Репозиторий Pepeunit Deploy

Хранит в себе все файлы и примеры нужные для запуска инстанса Pepeunit при помощи docker compose, чтобы склонировать репозиторий выполните команды:

bash
git clone https://git.pepemoss.com/pepe/pepeunit/pepeunit_deploy.git
cd pepeunit_deploy

Заполняем первичный .env файл

На выбор есть два варианта установки:

  1. Для локального использования на основе .env.local.example
  2. Для глобального использования на основе .env.global.example

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

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

  • .env.local.example -> .env.local
  • .env.global.example -> .env.global

Например командой:

bash
mv .env.local.example .env.local

В файлах .env.local и .env.global используется уменьшенное число переменных окружения, т.к. на его основе генирируются файлы для всех docker compose сервисов:

ПеременнаяПример для .env.localПример для .env.globalЗачем нужна?
POSTGRES_USERpepeunit-adminpepeunit-adminИмя пользователя, от имени которого будет создана база данных
POSTGRES_PASSWORDf6prBUMbhvNnlLZ0f0HNf6prBUMbhvNnlLZ0f0HNПароль пользователя, от имени которого будет создана база данных
POSTGRES_DBpepeunit-dbpepeunit-dbНазвание базы данных
BACKEND_DOMAIN192.168.0.22unit.pepeunit.comДоменное имя от инстанса Pepeunit
BACKEND_SECUREFalse-Выбирает http или https для BACKEND_DOMAIN инстанса Pepeunit, по умолчанию https
TELEGRAM_TOKEN 1111111111:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1111111111:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAТокен Telegram Bot можно получить у Bot Father
TELEGRAM_BOT_LINKhttps://t.me/PepeUnitRobothttps://t.me/PepeUnitRobotCcылка на бота, которого вы создаёте в Bot Father
MQTT_HOST192.168.0.22emqx.pepeunit.comДоменное имя от инстансa EMQX MQTT Broker
MQTT_SECUREFalse-Выбирает http или https для MQTT_HOST инстансa Pepeunit, по умолчанию https
MQTT_USERNAMEYabJTlmvQ4tvweuTl0gnYabJTlmvQ4tvweuTl0gnИмя администратора EMQX MQTT Broker
MQTT_PASSWORDF2qvym9lxL0DK6DlhmN1HgczWe9lKj30BvJTyvHuF2qvym9lxL0DK6DlhmN1HgczWe9lKj30BvJTyvHuПароль администратора EMQX MQTT Broker
GF_PASSWORDaN4bzmwMjB0v69LPvxpLLJ7LHXTe6hlqZ703mVmBaN4bzmwMjB0v69LPvxpLLJ7LHXTe6hlqZ703mVmBПароль для Grafana

Генерация env/.env.service

Выполните команду генерирующую итоговые .env.service файлы в дирректории env/.env.service:

bash
$> python3 make_env.py
2025-02-03 04:35:32,123 - INFO - Run make envs
2025-02-03 04:35:32,123 - INFO - Run search .env.local or .env.global
2025-02-03 04:35:32,123 - INFO - The .env.local file was found
2025-02-03 04:35:32,123 - INFO - Load variables from .env.local
2025-02-03 04:35:32,123 - INFO - Generate .env.emqx
2025-02-03 04:35:32,123 - INFO - Save env/.env.emqx
2025-02-03 04:35:32,123 - INFO - Generate .env.postgres
2025-02-03 04:35:32,124 - INFO - Save env/.env.postgres
2025-02-03 04:35:32,124 - INFO - Generate .env.frontend
2025-02-03 04:35:32,124 - INFO - Save env/.env.frontend
2025-02-03 04:35:32,124 - INFO - Generate .env.backend
2025-02-03 04:35:32,124 - INFO - Save env/.env.backend
2025-02-03 04:35:32,124 - INFO - Environment file generation is complete

DANGER

Команда python3 make_env.py каждый раз перегенерирует конфиги. При перегенерации существующие секретные 32 битные ключи не измененяются. Используйте команды создания backup, для сохранения старой конфигурации.

DANGER

Вам может потребоваться внести изменения в конфигурацию отдельных сервисов для тонкой настройки. Подробнее о переменных окружения Backend и Frontend

Настройка Nginx

Обычно настройка Nginx для docker compose не требуется. Если ваш инстанс Pepeunit будет находиться за ещё одним Nginx, используйте подробную настройку: Подробная настройка nginx для https и reverse proxy

Открытие портов

Для корректной работы Pepeunit, нужно открыть следующие порты:

  1. 80 - для работы по http
  2. 443 - для работы по https
  3. 1883 - для работы по протоколу MQTT

WARNING

если ваш 1883 порт занят другими приложениями, изменить его на другой и внесите изменения в ENV переменные Backend - MQTT_PORT, а также в docker-compose.yml в секцию emqx.ports - значение - "1883:1883" вам нужно будет заменить например на: - "1885:1883"

DANGER

Если у вас публичный инстанс Pepeunit с доменом - вам потребуется прокинуть данные порты наружу

Первый запуск

Настройте доступ для volumes:

bash
sudo chmod 777 -R data

Выполните команду запуска Pepeunit:

bash
docker compose up

INFO

Пример корреткного запуска Backend на основе конфига .env.global. Для .env.local будут отличаться только ip адреса и установка pooling для Telegram Bot:

bash
INFO - 2025-03-14 01:11:48,419 - HTTP Request: GET https://dcemqx.pepemoss.com/api-docs/swagger.json "HTTP/1.1 200 OK"
INFO - 2025-03-14 01:11:49,541 - EMQX Broker https://dcemqx.pepemoss.com - Ready to work
INFO - 2025-03-14 01:11:49,594 - HTTP Request: POST https://dcemqx.pepemoss.com/api/v5/login "HTTP/1.1 200 OK"
INFO - 2025-03-14 01:11:49,594 - Del file auth hook MQTT Broker
INFO - 2025-03-14 01:11:49,677 - HTTP Request: DELETE https://dcemqx.pepemoss.com/api/v5/authorization/sources/file "HTTP/1.1 204 No Content"
INFO - 2025-03-14 01:11:49,678 - Del http auth hook MQTT Broker
INFO - 2025-03-14 01:11:49,749 - HTTP Request: DELETE https://dcemqx.pepemoss.com/api/v5/authorization/sources/http "HTTP/1.1 204 No Content"
INFO - 2025-03-14 01:11:49,750 - Del redis auth hook MQTT Broker
INFO - 2025-03-14 01:11:49,838 - HTTP Request: DELETE https://dcemqx.pepemoss.com/api/v5/authorization/sources/redis "HTTP/1.1 204 No Content"
INFO - 2025-03-14 01:11:49,838 - Set ACL file auth hook MQTT Broker
INFO - 2025-03-14 01:11:49,911 - HTTP Request: POST https://dcemqx.pepemoss.com/api/v5/authorization/sources "HTTP/1.1 204 No Content"
INFO - 2025-03-14 01:11:49,912 - Set http auth hook MQTT Broker
INFO - 2025-03-14 01:11:50,144 - HTTP Request: POST https://dcemqx.pepemoss.com/api/v5/authorization/sources "HTTP/1.1 204 No Content"
INFO - 2025-03-14 01:11:50,145 - Set redis auth hook MQTT Broker
INFO - 2025-03-14 01:11:50,342 - HTTP Request: POST https://dcemqx.pepemoss.com/api/v5/authorization/sources "HTTP/1.1 204 No Content"
INFO - 2025-03-14 01:11:50,343 - Set cache settings auth hook MQTT Broker
INFO - 2025-03-14 01:11:50,485 - HTTP Request: PUT https://dcemqx.pepemoss.com/api/v5/authorization/settings "HTTP/1.1 200 OK"
INFO - 2025-03-14 01:11:50,486 - Disable ssl listener MQTT Broker
INFO - 2025-03-14 01:11:50,555 - HTTP Request: POST https://dcemqx.pepemoss.com/api/v5/listeners/ssl:default/stop "HTTP/1.1 200 OK"
INFO - 2025-03-14 01:11:50,556 - Disable ws listener MQTT Broker
INFO - 2025-03-14 01:11:50,620 - HTTP Request: POST https://dcemqx.pepemoss.com/api/v5/listeners/ws:default/stop "HTTP/1.1 200 OK"
INFO - 2025-03-14 01:11:50,620 - Disable wss listener MQTT Broker
INFO - 2025-03-14 01:11:50,692 - HTTP Request: POST https://dcemqx.pepemoss.com/api/v5/listeners/wss:default/stop "HTTP/1.1 200 OK"
INFO - 2025-03-14 01:11:50,692 - Set settings for tcp listener
INFO - 2025-03-14 01:11:50,776 - HTTP Request: PUT https://dcemqx.pepemoss.com/api/v5/listeners/tcp:default "HTTP/1.1 200 OK"
INFO - 2025-03-14 01:11:50,777 - Set global mqtt settings
INFO - 2025-03-14 01:11:50,813 - HTTP Request: PUT https://dcemqx.pepemoss.com/api/v5/configs/global_zone "HTTP/1.1 200 OK"
INFO - 2025-03-14 01:11:50,814 - Disable retainer
INFO - 2025-03-14 01:11:50,876 - HTTP Request: PUT https://dcemqx.pepemoss.com/api/v5/mqtt/retainer "HTTP/1.1 200 OK"
INFO - 2025-03-14 01:11:50,883 - Get current TG bot webhook info
INFO - 2025-03-14 01:11:50,883 - Delete webhook before set new webhook
INFO - 2025-03-14 01:11:51,107 - Set new TG bot webhook url: https://dcunit.pepeunit.com/pepeunit/api/v1/bot
INFO - 2025-03-14 01:11:51,177 - Success set TG bot webhook url
INFO - 2025-03-14 01:11:51,196 - run sync local repo storage
INFO - 2025-03-14 01:11:51,234 - end sync local repo storage
INFO - 2025-03-14 01:11:51,235 - 
            
                           ........:                                   
                          :......::-                                   
                           .....::.:                                   
                           .....::.-                                   
                      :.........::.-****                               
                    :........::::--==++###%                            
                  :::-++*++=======++*#@@%%-::                          
                ....:-=---==++******###%%*-...:                        
              :....:--===++=*=+**%@@%@%%%%*+:..:                       
            :....::=====+====+==*##%@%%%#*##+=...:                     
          -...........:-===++*=++**#%*:....::---...:                   
         :......-..:*##%%*+++===+#*-.:-..+#%%%#*+:...:                 
       :......=..++*##%%%%#**++--=..-.--*##%%*%@#+=....-               
      :..:-:.+-+=+#%%***+#@#*=---..+:=**+%@%%*%@@*+=-...:              
     =--===-.%%=#*#%-.=:+@@%**==-::%%#==#@@#%@@+@%**+=:::              
     =-=====.+@%%+@@%:.-#@@##***+-:%@%*%@%@%%=%@@#++::-::              
     =--====-.#@@*@+@@*@@@#***#**#-:%@*%%+@=@*@@#*==-..::              
     ==+*=+++=::#@@@@@@@########*#%==+%@@@@@@@#**++++*+::-             
     *@*+++++++++****#####%##%###%#%%%%#########*##+==*#--             
     -*@%**==+=+*#=+**###%%%%####%%##%%%%%%%#%%%#####@@%=+             
  :::-=--+%%@*##*.-.*#####%%%########%%%%%%%###%%@@%*++=+****          
  ....:---------==***#%%%%%*%#%%#%%%%%%%%%#*++=====+**#######%         
  ....:-:::-=====-----------------------===+++***+++*#%@@%###%         
  :--=:=++++====---::::---------===========++*##%@@@@@@@@@@@@@         
     =--+*++++***+=+*****###########%%%%%%%%%#%%%#@@@@@@@@             
       +==++++**+...:*=+=*=+==*++##++=+++#%-:-*%#%@@@@@@               
          %#*****#####*##*-+-=*==#--+#**%*%%%%@@@@@@@                  
            *##%@@@@@@@%%%%%%%%%%%%%%@@@@@@@@@@@@@@                    
            *###%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                    
                %%@@@@@@@@@@@@@@@@@@@@@@@@@@@@       
             _____                            _ _   
            |  __ \                          (_) |  
            | |__) |__ _ __   ___ _   _ _ __  _| |_ 
            |  ___/ _ \ '_ \ / _ \ | | | '_ \| | __|
            | |  |  __/ |_) |  __/ |_| | | | | | |_ 
            |_|   \___| .__/ \___|\__,_|_| |_|_|\__|
                      | |                           
                      |_|   
                   
     v0.3.0 - AGPL v3 License
     Federated IoT Platform
     Front: https://dcunit.pepeunit.com
     REST:  https://dcunit.pepeunit.com/pepeunit/docs
     GQL:   https://dcunit.pepeunit.com/pepeunit/graphql
     TG:    https://t.me/PepeUnitDevRobot
     Docs:  https://pepeunit.com
            
INFO - 2025-03-14 01:11:51,235 - Connect to mqtt server: dcemqx.pepemoss.com:1885
[2025-03-14 01:11:51 +0000] [35] [INFO] Used broker version is 5
INFO - 2025-03-14 01:11:51,239 - [CONNECTION MADE]
INFO - 2025-03-14 01:11:51,257 - Connect to mqtt server: dcemqx.pepemoss.com:1885
[2025-03-14 01:11:51 +0000] [36] [INFO] Used broker version is 5
INFO - 2025-03-14 01:11:51,264 - [CONNECTION MADE]
INFO - 2025-03-14 01:11:53,243 - MQTT subscriptions initialized in this worker
INFO - 2025-03-14 01:11:53,243 - [SEND SUB] 1 [b'dcunit.pepeunit.com/+/+/+/pepeunit']
INFO - 2025-03-14 01:11:53,244 - [SEND SUB] 2 [b'dcunit.pepeunit.com/+/pepeunit']
[2025-03-14 01:11:53 +0000] [35] [INFO] Application startup complete.
INFO - 2025-03-14 01:11:53,249 - [SUBACK] 1 (0,)
INFO - 2025-03-14 01:11:53,249 - [SUBACK] 2 (0,)
INFO - 2025-03-14 01:11:53,268 - Another worker already subscribed to MQTT topics
[2025-03-14 01:11:53 +0000] [36] [INFO] Application startup complete.

WARNING

Стоит обратить особое внимание на строчки:

bash
INFO - 2025-03-14 01:11:53,249 - [SUBACK] 1 (0,)
INFO - 2025-03-14 01:11:53,249 - [SUBACK] 2 (0,)

Они отображают смог ли Backend подписаться на топики dcunit.pepeunit.com/+/+/+/pepeunit и dcunit.pepeunit.com/+/pepeunit. Если в скобках будет указано (135,) вместо (0,), то Backend не смог подписаться на основные топики. Обычно это связано со следующими недочётами:

  1. Закрытым портом 1883
  2. Настройкой портов сервиса emqx в docker-compose.yml, вы могли указать другой порт, и не открыли его
  3. Ошибками в настройках EMQX MQTT Broker и Backend, например MQTT_REDIS_AUTH_URL или REDIS_URL. Подробнее о переменных окружения Backend Env. Данные переменные должны смотреть строго на один и тот же инстанас Redis. За первичную авторизацию отвечает именно Redis.

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

Первый созданный пользователь на инстансе Pepeunit автоматически становится Администратором. Для этого достаточно пройти стандартную форму регистрации.

Работа с бэкапами

  1. Запустите Pepeunit командой, это требуется для получения корректной версии
    bash
    docker compose up -d
  2. Запустите создание backup командой, скрипт сам выключит контейнеры
    bash
    sudo ./backup.sh backup
  3. Развернуть версию из backup
    bash
    sudo ./backup.sh restore backups/backup_name.tar

Обновление

  1. Создайте backup
    bash
    sudo ./backup.sh backup
  2. Выполните обновление репозитория
    bash
    git pull
  3. Выполните обновление env переменных. Существующие секретные 32 битные ключи изменены не будут. Остальные переменные будут сгенерированны, как при первой генерации, если вы выполняли ручной ввод данных в env/.env.<service-name> файлы, то ваши изменения будут УДАЛЕНЫ, поэтому обязательно делайте backup перед запуском команды. Если у вас очень тонкая настройка, изменяйте настройки в ручную, напрямую в env/.env.<service-name>.
    bash
    python make_env.py
  4. Выполните запуск Pepeunit
    bash
    docker compose up -d

Полезные команды для дебага

  • Остановить docker compose
    bash
    docker compose down
  • Запустить docker compose в фоновом режиме
    bash
    docker compose up -d
  • Посмотреть логи конкретного контейнера
    bash
    docker logs postgres
  • Зайти во внутрь контейнера, чтобы посмотреть состояние файлов и тд:
    bash
    docker exec -it frontend /bin/sh
    docker exec -it backend /bin/bash
    docker exec -it emqx /bin/bash
    docker exec -it postgres /bin/bash
    docker exec -it redis /bin/bash
    docker exec -it nginx /bin/bash
  • Зайти в консоль базы данных, POSTGRES_USER и POSTGRES_DB можно найти в env/.env.postgres
    bash
    docker exec -it postgres psql -U <POSTGRES_USER> -d <POSTGRES_DB>
    psql -U <POSTGRES_USER> -d <POSTGRES_DB>