Digital Signage Deployment with PiSignage

Build the PiSignage server and player Docker images, push them to the Sixfab Registry, and deploy a full digital-signage system on ALPON X5 AI and ALPON X4.

Digital Signage with PiSignage on ALPON

PiSignage is a robust digital-signage solution that runs well on ALPON edge computers. This guide builds the server and player Docker images, pushes them to the Sixfab Registry, and deploys a complete signage system on your ALPON X5 AI or ALPON X4.

ALPON X5 AI ALPON X4 PiSignage Digital signage
ALPON · Tutorial · Signage · Containers
How do I deploy PiSignage on ALPON?

Build the PiSignage server and Player2 images for arm64 on your computer, push them to the Sixfab Registry, then deploy three containers through Sixfab Connect on your ALPON X5 AI or ALPON X4: MongoDB, the server, and Player2. Player2 needs X11 access, so grant it with xhost +, set DISPLAY=:0, mount the X11 and audio volumes, and enable Host Network and Privileged mode.

Prerequisites

To run PiSignage on ALPON, you build both the server and player images. Sixfab has containerized these applications to run on ALPON devices; the Dockerfiles are included below.

Player2 is large — use a fast connection

Deploying Player2 through Sixfab Connect requires a high-speed internet connection. The image is approximately 2.2 GB, and deployment may fail with timeouts on a slow connection.

  1. 1

    Build the server image

    Run these steps on your personal computer, where Docker and buildx are installed. Create a directory for the server:

    bash · create directory
    mkdir pisignage-server
    cd pisignage-server

    Create a Dockerfile with this content:

    Dockerfile · server
    FROM node:14.15-alpine3.10
    RUN apk update && apk add bash
    RUN apk add git
    RUN apk add ffmpeg
    RUN apk add imagemagick
    
    ENV NODE_ENV=production
    
    WORKDIR /pisignage-server
    RUN git clone https://github.com/colloqi/pisignage-server.git /pisignage-server
    
    COPY . .
    
    RUN npm install --production
    
    RUN chmod +x ./wait-for-it.sh
    
    CMD [ "./wait-for-it.sh", "127.0.0.1:27017", "--", "node", "server.js"]

    Build the server image:

    bash · build server
    docker buildx build --platform linux/arm64 -t pisignage-server:latest .
  2. 2

    Build the player image

    Create a directory for the player:

    bash · create directory
    mkdir pisignage-player
    cd pisignage-player

    Create a Dockerfile with this content:

    Dockerfile · player
    FROM bitnami/minideb:latest-arm64
    
    WORKDIR /root
    COPY . .
    
    RUN apt -y update && apt -y upgrade
    RUN apt install -y wget unzip nodejs npm sudo chromium net-tools iproute2 rfkill
    RUN ln -s /usr/bin/chromium /usr/bin/chromium-browser
    RUN wget https://pisignage.com/releases/pi-image-p2-v14.zip
    RUN unzip -o pi-image-p2-v14.zip
    RUN cp player2/build-scripts/install-pisignage.sh .
    RUN chmod +x install-pisignage.sh
    RUN chmod +x -R player2/build-scripts
    RUN chmod +x -R player2/shell-scripts
    RUN ./install-pisignage.sh
    RUN sed -i "s/\"--default-background-color='00000000'\"/\"--default-background-color='00000000'\", \"--no-sandbox\"/g" player2/pisignage.js
    RUN apt update --fix-missing
    
    CMD ["./start.sh"]

    Build the player image:

    bash · build player
    docker buildx build --platform linux/arm64 -t pisignage-player:latest .
  3. 3

    Push both images to the Sixfab Registry

    Upload both images so they're available to the device:

    • Open the Sixfab Registry page.
    • Click + Add Container and follow the prompts for each image.
  4. 4

    Deploy the containers

    Deploy three containers from the Applications tab of your asset, in order.

    1 · MongoDB

    • Click + Deploy, enter a container name, and check “I would like to use my own container path”.
    • Set the image name to arm64v8/mongo:4.4.18.
    • Enable Host Network, then click Deploy.

    2 · PiSignage server

    • Click + Deploy, enter a container name, and select the server image and tag.
    • Enable Host Network, then click Deploy.

    3 · PiSignage Player2

    First grant the container access to the graphical interface by running this on the device terminal (see Running GUI Apps with X11 in Containers):

    bash · grant X11 access
    xhost +

    Then click + Deploy, enter a container name, and select the Player2 image and tag. Add this environment variable:

    DISPLAY :0

    Add these volumes (all Read/Write):

    X11 socket /tmp/.X11-unix/tmp/.X11-unix
    .Xauthority /root/.Xauthority/root/.Xauthority
    Audio /dev/snd/dev/snd

    Enable Host Network and Privileged, then click Deploy.

  5. 5

    Verify the deployment

    • Check the device's main screen to confirm Player2 is running in fullscreen.
    • In a browser, open ports 3000 and 8000 at the device's IP to confirm the server and player are up.
    • To use the local server, update the server address in the Player2 interface (port 8000) to 127.0.0.1:3000 — otherwise the device keeps talking to the default main server.

Troubleshooting

Make sure a display is physically connected. Without one, xhost + fails to open the display:

terminal · error
xhost: unable to open display ""

If a display is connected, export the variable and retry:

bash · set DISPLAY
export DISPLAY=:0
Expected behavior

A black screen after the Xorg service starts is expected. These display errors usually mean no physical display is connected or the X11 setup is misconfigured.


Did this page help you?