Skip to content

Self-host Joomla

updated Sep 2026prices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →

A PHP content management system for websites, with built-in multilingual support, access control and an extension directory.

Key facts

LicenseGPL-2.0-or-later
StackPHP, MySQL
Min RAM1024 MB
Official imageyes
Measured idle RAM458 MB
Difficulty

What you need

  • Any VPS with at least 1024 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install

Run these commands on your server:

# Joomla — the Docker Official Image with MySQL 8; the JOOMLA_ADMIN_* variables skip the browser installer
mkdir -p joomla && cd joomla
cat > .env <<EOF
DB_PASS=$(openssl rand -hex 16)
ADMIN_PASS=$(openssl rand -hex 12)
EOF
cat > docker-compose.yml <<'EOF'
services:
  joomla:
    image: joomla:latest
    restart: always
    ports: ["8080:80"]
    depends_on: [db]
    environment:
      JOOMLA_DB_HOST: db
      JOOMLA_DB_USER: joomla
      JOOMLA_DB_PASSWORD: ${DB_PASS}
      JOOMLA_DB_NAME: joomla
      JOOMLA_SITE_NAME: Joomla
      JOOMLA_ADMIN_USER: Site Admin
      JOOMLA_ADMIN_USERNAME: admin
      JOOMLA_ADMIN_PASSWORD: ${ADMIN_PASS}
      JOOMLA_ADMIN_EMAIL: admin@example.com
    volumes: ["joomla:/var/www/html"]
  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_DATABASE: joomla
      MYSQL_USER: joomla
      MYSQL_PASSWORD: ${DB_PASS}
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes: ["db:/var/lib/mysql"]
volumes:
  joomla:
  db:
EOF
docker compose up -d   #  →  http://SERVER_IP:8080/administrator  (admin / ADMIN_PASS from .env)

More in CMS & blogging

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.