> ## Documentation Index
> Fetch the complete documentation index at: https://docs.azvian.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Installation

> Set up Azvian Social on your own server

## What you need

* PHP 8.3+, with extensions: `mbstring`, `openssl`, `json`, `pdo_mysql`, `fileinfo`, `dom`, `libxml`, `curl`, `iconv`
* MySQL 8+ (or compatible)
* A queue worker and a cron entry — see [Background processes](#background-processes) below

## Steps

<Steps>
  <Step title="Upload the release and point your document root at public/">
    `storage/`, `bootstrap/cache/`, and `.env` all need to be writable by your web server user before you start — the installer writes `.env` directly.
  </Step>

  <Step title="Visit your domain">
    You're redirected straight to the install wizard. Four steps:

    <Steps>
      <Step title="Environment requirements">Confirms PHP version, required extensions, and writable folders.</Step>
      <Step title="Database & mail configuration">Enter your database credentials and mail settings.</Step>
      <Step title="License activation">Enter the license key from your purchase confirmation.</Step>
      <Step title="Admin account">Create your own login.</Step>
    </Steps>
  </Step>
</Steps>

<Danger>
  Once installed, `storage/installed` exists and the wizard can never be re-run through the browser — reinstalling means deleting that file and re-running migrations yourself. **Never delete this file on a real, already-installed site** — it's the only thing standing between a real instance and every visitor being redirected back to the install wizard.
</Danger>

## Background processes

<Steps>
  <Step title="Queue worker">
    Scheduled post publishing is a queued job, not run inline on the request.

    ```bash theme={null}
    php artisan queue:work
    ```

    Run it under a process supervisor (systemd, Supervisor) so it survives restarts — and **restart it after every code deploy**, since a long-running worker keeps old class definitions loaded in memory until restarted.
  </Step>

  <Step title="Scheduler cron">
    Drives scheduled post dispatch and the daily license/update checks.

    ```bash theme={null}
    * * * * * cd /path/to/your/install && php artisan schedule:run >> /dev/null 2>&1
    ```
  </Step>
</Steps>

## Setting up integrations

Neither social connections nor AI captions work until you've entered your own app credentials — see [Connecting Accounts](/social/connecting-accounts) and [AI Captions](/social/ai-captions).
