# Static sites (Pages) with `aral`

    aral site create --name docs                     # free docs.site.aralcloud.uz address
    aral site create --name docs --domain docs.example.uz   # your own domain
    aral site get <site>                   # <site> = id, name or domain
    aral site deploy <site> ./.output/public        # upload a local directory (zipped on the fly)
    aral site deploy <site> ./site.zip              # upload a ready .zip as-is
    aral site deploy <site> --url https://host/bundle.zip   # bundle URL the platform fetches
    aral site deploys <site>
    aral site activate <site> --deploy-id <deploy-id> # rollback to a previous deploy
    aral site verify <site>               # ownership check of the site's own domain
    aral site domains <id>                 # own address + extra domains: verified, force_https
    aral site add-domain <id> www.example.uz                   # redirects plain HTTP to HTTPS
    aral site add-domain <id> legacy.example.uz --no-force-https
    aral site verify-domain <id> www.example.uz                # re-check an extra domain's proof
    aral site domain-https <id> www.example.uz off             # on|off, takes effect in seconds
    aral site delete-domain <id> www.example.uz                # name or the id `domains` prints
    aral site delete <site>

Platform-owned domains (aralcloud.uz and its subdomains) are reserved — use
the customer's own domain. Point the domain (or its NS) at Aral DNS or follow
`verify` for the ownership proof. The console additionally supports drag-drop
and git deploys.

`deploy <site> <path>` takes a directory or a .zip (exactly one of a path or
`--url`). A directory is zipped into a temp file first: regular files only
(a symbolic link aborts the deploy — copy its target in), `.git/` skipped,
media stored uncompressed. The zip is uploaded straight to object storage
(one presigned PUT, up to 2 GiB by default), so large bundles such as a
`nuxt generate` output with videos deploy fine. Deploy the build OUTPUT
directory (e.g. `.output/public`, `dist`, `build`), not the project root.
With `--output json` stdout carries only the final result; the progress line
goes to stderr and only when it is a terminal.

"Always HTTPS" is per domain: plain HTTP gets a 308 to the same URL on
https, while ACME HTTP-01 challenges are never redirected. It is on by default
for every newly added domain. The first row of `domains` is the site's own
address (no id); its flag also covers the site's platform alias, and it is
toggled with `domain-https` like any other domain but cannot be detached.
