This project is under very early, active development and may contain bugs or security issues. It is likely not ready for production websites.

You are responsible for reviewing, testing, and securing any deployment. Ava CMS is provided as free, open-source software without warranty (GNU General Public License), see LICENSE.

Hosting

This guide walks you through getting Ava CMS live on the internet. Whether you're hosting your first website ever or you're a seasoned developer, there's an option that fits your needs.

Quick Start: Upload Ava CMS, point your web root to the public/ directory, run composer install, and configure. Done!

Before You Start

Ava CMS needs:

  • PHP 8.3 or later
  • Composer (PHP's package manager)

That's it. No database, no special server software, no complex stack to configure.

What's Composer?

Composer manages PHP dependencies (the libraries Ava uses). Most hosts have it pre-installed. You only need to run composer install once after uploading Ava — it downloads everything into the vendor/ folder.

Storage Requirements

Ava CMS itself is small. What consumes significant disk space:

  • Uploaded media in public/media/
  • Cache files in storage/cache/
  • Logs in storage/logs/

Make sure PHP can write to the storage/ directory. For large sites (10k+ items), the content index cache can grow to 100 MB or more depending on your content size and index backend.

Local Development

PHP includes a built-in server perfect for local development:

php -v                              # Check PHP is installed (need 8.3+)
cd /path/to/your/ava-site
composer install                    # Install dependencies (first time only)
php -S localhost:8000 -t public     # Start the dev server

Open http://localhost:8000 in your browser. No Apache, Nginx, or LAMP stack required.

Installing PHP and Composer

macOS:

brew install php composer

Linux (Ubuntu/Debian):

sudo apt install php php-mbstring php-xml composer

Windows:

  1. Download PHP from windows.php.net/download (choose the VS16 x64 Thread Safe ZIP)
  2. Extract to C:\php and add it to your PATH (guide)
  3. Copy php.ini-development to php.ini and enable required extensions (uncomment extension=mbstring)
  4. Download Composer-Setup.exe and run the installer

Or use a package manager like Scoop: scoop install php composer

Verify installation:

php -v        # Should show PHP 8.3+
composer -V   # Should show Composer version
Windows: Running Ava CLI Commands

On Windows, you can't run ./ava directly. Use php ava instead:

php ava status       # Check site status
php ava rebuild      # Rebuild content index
php ava lint         # Validate content files

All Ava CLI commands work this way—just prefix with php.

Shared Hosting

Shared hosting is the easiest and most affordable option. The hosting company handles server maintenance while you get a control panel, file manager, and one-click SSL.

What to Look For

  • PHP 8.3+ — Check before signing up
  • SSH access — Optional but highly recommended for running commands
  • Enough RAM — Ava works fine with 128M memory_limit, but larger sites may need more
  • SSD/NVMe storage — Faster file reads/writes
  • Write permissions — PHP must be able to write to storage/
  • Free SSL — Look for Let's Encrypt support
  • Daily backups — Your content is files, so backups matter
Provider Starting Price Notes
Krystal Hosting From £7/month UK-based, SSH access, renewable energy
Porkbun Easy PHP From $10/month Simple setup, includes domain management

Had a good experience elsewhere? Let us know in GitHub Discussions!

File Structure

Ava CMS has a simple flat structure:

/home/yourusername/
├── app/                  ← Themes, plugins, config
├── content/              ← Your Markdown content
├── core/                 ← Ava CMS core (don't edit)
├── public/               ← Web root (point your domain here)
│   ├── index.php
│   ├── assets/
│   ├── robots.txt
│   └── media/
├── storage/              ← Cache, logs (PHP needs write access)
├── vendor/               ← Composer dependencies
├── ava                   ← CLI tool
├── bootstrap.php
└── composer.json

Setup steps:

  1. Upload Ava CMS to your home directory (e.g., /home/yourusername/).
  2. Point your domain's document root to the public/ folder.
  3. Run composer install --no-dev and ./ava rebuild.

If your content_index.mode is set to auto (the default) or always, the first request will rebuild automatically. If it’s set to never, you must run ./ava rebuild (or trigger a rebuild from the admin dashboard).

If SSH isn't available, generate the vendor/ folder locally, upload it, then rebuild via the admin dashboard.

Can't change the document root? Some shared hosts lock you to public_html/. In that case, copy the contents of public/ into public_html/, then edit index.php to update the AVA_ROOT path to point to where you uploaded the rest of Ava.

Connecting to Your Server

You'll need to connect to your server to upload files and run commands. Both SSH and SFTP use the same credentials—look in your hosting control panel under "SSH Access" or "SFTP".

Your credentials:

  • Host: Your domain or server IP
  • Username: Your hosting account username
  • Password: Your account password (or SSH key)
  • Port: 22

SSH (Running Commands)

SSH lets you run commands on your server. It's optional but highly recommended — it makes ./ava rebuild and troubleshooting much easier.

Don't Be Scared of the Terminal!

SSH looks intimidating at first — a black screen with a blinking cursor. But it's just typing commands instead of clicking buttons. You only need a few commands:

  • cd folder-name — Go into a folder
  • ls — See what's in the current folder
  • ./ava status — Check if Ava is happy

That's 90% of what you'll do. See the CLI Guide for all available commands.

Platform Client
macOS/Linux Built-in Terminal
Windows Windows Terminal, PowerShell, or PuTTY
ssh [email protected]

Once connected, you can run Ava CMS commands:

./ava status       # Check site health
./ava rebuild      # Rebuild content index
./ava cache:clear  # Clear webpage cache
Permission Denied? If you get a "permission denied" error when running ./ava, the file needs execute permissions. Run chmod +x ava once to make it executable, then try again.
Optional: Using SSH keys instead of passwords

SSH Keys

SSH keys are more secure and convenient than passwords. Generate a key pair once:

ssh-keygen -t ed25519 -C "[email protected]"
ssh-copy-id [email protected]

Now you can connect without entering your password each time.

SFTP (Uploading Files)

SFTP lets you upload files via a graphical interface. Use "SFTP" (not plain "FTP") in your client.

Platform Client
macOS Cyberduck (free), Transmit
Windows WinSCP, FileZilla
Linux FileZilla, built-in file managers

Tip: VS Code's Remote - SSH extension lets you edit files on your server directly—no separate SFTP client needed.

Uploading Ava CMS

  1. Upload all Ava CMS files to your server
  2. Run composer install --no-dev (via SSH, or locally then upload the vendor/ folder)
  3. Run ./ava rebuild (or visit your site — auto mode will rebuild on first load)

No SSH? Run composer install --no-dev on your computer, upload the vendor/ folder, then visit your site.

Troubleshooting: "composer: command not found"

# Install Composer locally to your project
curl -sS https://getcomposer.org/installer | php
php composer.phar install --no-dev

VPS Hosting

A VPS (Virtual Private Server) gives you dedicated resources and full control. Consider this when shared hosting can't keep up, you need specific PHP extensions, or you want to host multiple sites.

Provider Starting Price Notes
Hetzner Cloud From €4/month Excellent value, EU-based
Krystal Cloud VPS From £10/month UK-based, renewable energy

Don't want to manage a server? Use Ploi.io—it connects to your VPS and handles server setup, SSL, and deployments through a friendly dashboard.

Deployment Workflows

Manual (SFTP)

Upload changed files via SFTP, then run ./ava rebuild if you have SSH.

Git-Based

If you keep your site in a Git repository (your own customised Ava CMS installation—not a clone of the main Ava repo), you can deploy by pulling changes:

# On your server (pulling your own site repo)
git pull origin main && ./ava rebuild
Note: This assumes you started from a release and committed your site to your own repository. Never clone the main Ava CMS repo directly for production—it may contain incomplete work.

Automated (CI/CD)

Use GitHub Actions, Ploi, or Laravel Forge to deploy automatically when you push:

name: Deploy
on: { push: { branches: [main] } }
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          key: ${{ secrets.SSH_KEY }}
          script: git pull && composer install --no-dev && ./ava rebuild

CDN (Optional)

Ava CMS's built-in page cache is already fast. A CDN helps most when you have a global audience or lots of large media files.

Cloudflare (free tier) provides caching, DDoS protection, and free SSL. Just point your domain's nameservers to Cloudflare.

Other options: BunnyCDN (pay-as-you-go), KeyCDN (simple).

Server Configuration (Advanced)

PHP Settings

Setting Recommended Purpose
memory_limit 128M Increase for 10k+ items
max_execution_time 30 Increase if rebuilds timeout
upload_max_filesize 10M For admin media uploads

Nginx

server {
    listen 80;
    server_name example.com;
    root /home/yourusername/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\. { deny all; }
}

Apache

Ava CMS ships with a default .htaccess file in public/. Ensure mod_rewrite is enabled:

sudo a2enmod rewrite && sudo systemctl restart apache2

Need to customize? Edit public/.htaccess or move the rules into your Apache vhost.

Need Help?