Skip to main content

Deploying Bludit CMS on YunoHost using Docker (Port 50328)

This entry documents the efficient deployment of Bludit CMS, a flat-file content management system, within a YunoHost environment using Docker.

The objective is to achieve a clean separation of concerns: keeping the application containerised while leveraging YunoHost's Nginx reverse proxy for domain management and SSL termination. This method minimises system conflicts and ensures easier backups through Docker volumes.

System Specifications

  • Target Domain: market.nulu.my
  • Internal Port: 50328
  • Persistence Strategy: Docker Named Volumes (to avoid permission issues with bind mounts on the host filesystem).

1. Directory Structure & Preparation

We begin by establishing a dedicated directory. This standardises where our configuration files live, making future maintenance easier.

mkdir -p /opt/bludit
cd /opt/bludit

2. Configuration (docker-compose.yml)

Create the configuration file:

nano docker-compose.yml

Paste the following configuration.

Critical Note: We explicitly map three separate volumes (content, themes, plugins). This is essential because Bludit stores data in flat files; if we do not persist these specific directories, all data (including installed themes and plugins) would be lost during a container restart or update.

services:
  bludit:
    image: bludit/docker:latest
    container_name: bludit_cms
    restart: unless-stopped
    ports:
      - "50328:80" # Maps Host Port 50328 -> Container Port 80
    volumes:
      # Named volumes for data persistence
      - bludit_content:/usr/share/nginx/html/bl-content
      - bludit_themes:/usr/share/nginx/html/bl-themes
      - bludit_plugins:/usr/share/nginx/html/bl-plugins
    environment:
      - PUID=1000 # Matches standard user permissions
      - PGID=1000

volumes:
  bludit_content:
  bludit_themes:
  bludit_plugins:

3. Deployment & Verification

Launch the container in detached mode:

docker compose up -d

Verification Step: Before configuring the domain, verify the container is active and listening on the correct port:

docker compose ps
# Ensure status is 'Up' and ports list '0.0.0.0:50328->80/tcp'

4. YunoHost Integration (Reverse Proxy)

To make the site accessible via the public internet without exposing the raw port, we configure YunoHost to proxy traffic.

  1. Access Admin Panel: Navigate to Applications > Install.
  2. Select App: Search for and install "Redirect" (or "My Webapp" if you prefer manual Nginx config, but Redirect is cleaner for pure proxying).
  3. Configure Settings:
  • Domain: market.nulu.my
  • URL Path: /
  • Destination URL: http://127.0.0.1:50328
  • Redirect Type: Proxy (Invisible Proxy)

5. Post-Installation Notes

  • Plugin Management: Since we used Docker Volumes, you should install plugins and themes directly via the Bludit Admin Panel (Upload feature).
  • Troubleshooting: If the site loads but assets (CSS/Images) are broken, check the "Site URL" setting in the Bludit Admin panel > Settings > General, and ensure it matches https://market.nulu.my.

This documentation is part of an ongoing effort to standardise self-hosting deployments and improve information literacy regarding server management.