Box IO

Self-hosted IoT for Arduino and ESP32.

Install Box IO on BlueOnyx 5212R

BlueOnyx 5212R is AlmaLinux 10 with Apache already listening on ports 80 and 443. Box IO uses a separate compose file so those ports stay with the panel. The dashboard is a virtual site that proxies to the container. Arduino boards still use HTTP port 5923.

The Ubuntu install on the Docker page is a different compose file. Do not run that one on this server. It would try to bind ports 80 and 443.

1. Install Docker

Sign in as root over SSH. BlueOnyx turns SELinux off, which Docker needs on this panel.

dnf -y install dnf-plugins-core git
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
docker version
docker compose version

2. Copy Box IO onto the server

cd /root
git clone https://github.com/Someone275/Box_io.git box_io
cd /root/box_io/server

3. Create the secret file

cd /root/box_io/server
cp .env.example .env
openssl rand -hex 48

Open .env and set JWT_SECRET to that hex string. One line, no quotes. Do not commit .env.

JWT_SECRET=paste_the_hex_here

4. Start the container

This compose file publishes the dashboard on 127.0.0.1:3847 only, and the device hub on 5923.

cd /root/box_io/server
docker compose -f docker-compose.blueonyx.yml up --build -d
docker compose -f docker-compose.blueonyx.yml ps
curl -sS http://127.0.0.1:3847/api/health

The health URL returns JSON with ok set to true. Nothing on the public ports 80 or 443 has moved.

5. Open port 5923

In the BlueOnyx GUI, open Server Management, then Security, then Firewall, and allow TCP 5923. The proxy script also adds that port in firewalld when firewalld is running. Boards use this port. They do not use 80 or 443.

6. Create the dashboard site

  1. In Site Management, create a virtual site for the dashboard name, such as boxio.example.com.
  2. Point DNS for that name at this server.
  3. Turn on SSL for the site and use the panel’s Let’s Encrypt button.
  4. Leave the site document root empty of a real site. Apache will proxy every request to Box IO.

7. Proxy the site to the container

cd /root/box_io/server
sh blueonyx/install-proxy.sh boxio.example.com

Replace boxio.example.com with the virtual site name. The script writes the proxy rules, reloads Apache, and allows TCP 5923. Open https://boxio.example.com and create the admin account.

If Network Services, Web, Nginx has the SSL proxy turned on, the same script updates that site’s Nginx file so live pin updates can use the websocket. Saving the site in the GUI can rewrite those files. Run the script again if the dashboard stops loading or live updates freeze.

8. Connect a board

The sketch host is the server’s address, and the port is 5923. Example: http://203.0.113.10:5923. Create a device key in the dashboard and put it in BOXIO_AUTH. The rest of the setup matches the Docker page: a project, widgets, Save layout, then Live.

9. Update

cd /root/box_io
git checkout main
git pull origin main
cd server
docker compose -f docker-compose.blueonyx.yml up --build -d
sh blueonyx/install-proxy.sh boxio.example.com

The Docker volume boxio-data keeps users, device keys, and layouts. git pull does not delete it.