Search Results for

    Show / Hide Table of Contents

    Publishing Server Images

    [!SUMMARY] This page explains how to:

    • See which image each hosted server runs
    • Move a hosted server to a release, a pre-release or a server built on your machine
    • Roll production back to an earlier release
    • Run a server on your own machine

    The dedicated server ships as the Docker image itlfi/anywhere-academy-server: Ubuntu with the contents of Build/Server in /app (Server-Dockerfile in the project root). The CI/CD Pipeline publishes it as :X.Y.Z, :latest and :stable for a release and as :pre-release for a pre-release.


    Hosted Servers

    Each hosted server runs the image under a tag of its own, so it changes only when its own tag is moved. publish_local_server.ps1 in the project root knows them as presets:

    -Server Tag
    production stable
    internal-testing internal-testing (may run any tag)
    public-testing public-testing
    demo demo-<DemoName>
    univrse-connect univrse-connect

    Run the script without parameters for an overview, and Get-Help .\publish_local_server.ps1 -Full for every detail. It needs Docker with buildx (part of Docker Desktop) and the DOCKER_HUB_PASSWORD environment variable.

    # What every server's tag points at now, and which versions are the same image. Changes nothing.
    .\publish_local_server.ps1 -List
    
    # Copy an image the pipeline built (a release, or the current pre-release). Preferred.
    .\publish_local_server.ps1 -Server public-testing -From pre-release
    .\publish_local_server.ps1 -Server univrse-connect -From 1.0.5
    
    # Build Build/Server on this machine and push it.
    .\publish_local_server.ps1 -Server demo -DemoName xrmas
    
    # Roll production back to an earlier release. Asks for confirmation (-Force skips it).
    .\publish_local_server.ps1 -Server production -From 1.0.4
    

    Prefer -From. It copies the image on Docker Hub without pulling or rebuilding it, so the server runs exactly what the pipeline built and checked against the clients of the same pipeline. A server built on your machine has had no such check, and until AnyVR no longer splits RPCs across partial files, one built on Windows can disagree with the Linux-built Quest client even at the same commit (see the incident). The script warns when it pushes one.

    Production follows the release pipeline. Every release moves stable, so merging into main updates production the next time its container is pulled and restarted. By hand, production only moves with -From, to roll back; the next release moves it on again. The script never pushes a locally built image there.

    The script never writes the tags the pipeline owns (X.Y.Z, latest, pre-release, staging-<commit>-<pipeline>), and the pipeline's cleanup never deletes anything but a staging- tag.

    A moved tag does nothing until the server's host pulls it: pull the image and restart the container, e.g. docker compose pull && docker compose up -d.


    Running a Server on Your Machine

    create_local_server.ps1 builds itlfi/anywhere-academy-server:local from Build/Server and starts it as aa-local-server, next to a LiveKit server in development mode (Docker/docker-compose-local-server.yml). That tag is never pushed. Build the Linux server first, see Building in the Editor.

    In This Article
    Back to top Anywhere Academy Documentation