PageSourceSearch

https://vircadia.com/assets/js/88bf9781.098ea5e9.js

js vircadia.com collected 2026-10-03 20:18:54 UTC 10,092 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkvircadia_public_website=self.webpackChunkvircadia_public_website||[]).push([[830],{2423:(_,E,R)=>{R.r(E),R.d(E,{assets:()=>s,contentTitle:()=>i,default:()=>C,frontMatter:()=>t,metadata:()=>e,toc:()=>V});const e=JSON.parse('{"id":"server/service/README","title":"Services","description":"All Vircadia\'s services run in a secure Docker container environment.","source":"@site/docs/vircadia-world/server/service/README.mdx","sourceDirName":"server/service","slug":"/server/service/","permalink":"/vircadia-world/server/service/","draft":false,"unlisted":false,"editUrl":"https://github.com/Vircadia/vircadia-world/edit/master/server/service/README.mdx","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"Server","permalink":"/vircadia-world/server/"},"next":{"title":"World API Manager","permalink":"/vircadia-world/server/service/api/"}}');var S=R(4848),n=R(8453),r=R(8069);const A='name: ${VRCA_SERVER_CONTAINER_NAME}\n\nnetworks:\n  vircadia_internal_network:\n    driver: bridge\n    internal: true  # Make this network internal to prevent direct internet access\n\n  # Create a separate network for services that need external access\n  vircadia_public_network:\n    driver: bridge\n\nvolumes:\n  postgres_data:\n    name: "${VRCA_SERVER_CONTAINER_NAME}_postgres_data"\n\nservices:\n  # Postgres service\n  vircadia_world_postgres:\n    image: postgres:17.5-alpine3.21\n    container_name: ${VRCA_SERVER_SERVICE_POSTGRES_CONTAINER_NAME}\n    user: "70:70"  # Alpine postgres user (UID:GID)\n    restart: always\n    environment:\n      POSTGRES_DB: ${VRCA_SERVER_SERVICE_POSTGRES_DATABASE}\n      POSTGRES_USER: ${VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_USERNAME}  # This user gets superuser privileges by default\n      POSTGRES_PASSWORD: ${VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_PASSWORD}\n    command: [\n      "postgres", \n      "-c", "wal_level=logical",\n      "-c", "max_wal_size=4GB",        # Increase from default 1GB to 4GB\n      "-c", "checkpoint_timeout=5min", # Default is 5min, but good to explicitly set\n      "-c", "checkpoint_completion_target=0.9"  # Spread checkpoint I/O over more time\n    ]\n    ports:\n      - "${VRCA_SERVER_SERVICE_POSTGRES_HOST_CONTAINER_BIND_EXTERNAL}:${VRCA_SERVER_SERVICE_POSTGRES_PORT_CONTAINER_BIND_EXTERNAL}:5432"\n    read_only: true\n    tmpfs:\n      - /tmp\n      - /var/run/postgresql:uid=70,gid=70,exec\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n    healthcheck:\n      test: [\n        "CMD-SHELL", \n        "pg_isready -U ${VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_USERNAME} -d ${VRCA_SERVER_SERVICE_POSTGRES_DATABASE} && psql -U ${VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_USERNAME} -d ${VRCA_SERVER_SERVICE_POSTGRES_DATABASE} -c \\"SELECT COUNT(*) FROM config.seeds\\" | grep -q \'[1-9]\'"\n      ]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n    networks:\n      - vircadia_internal_network\n      - vircadia_public_network\n\n  # PGWEB service\n  vircadia_world_pgweb:\n    image: sosedoff/pgweb:0.16.2\n    container_name: ${VRCA_SERVER_SERVICE_PGWEB_CONTAINER_NAME}\n    user: "1000:1000"  # Run as non-root user (typical first user UID/GID)\n    restart: always\n    ports:\n      - "${VRCA_SERVER_SERVICE_PGWEB_HOST_CONTAINER_BIND_EXTERNAL}:${VRCA_SERVER_SERVICE_PGWEB_PORT_CONTAINER_BIND_EXTERNAL}:8081"\n    environment:\n      - PGWEB_DATABASE_URL=postgres://${VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_USERNAME}:${VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_PASSWORD}@${VRCA_SERVER_SERVICE_POSTGRES_CONTAINER_NAME}:${VRCA_SERVER_SERVICE_POSTGRES_PORT_CONTAINER_BIND_EXTERNAL}/${VRCA_SERVER_SERVICE_POSTGRES_DATABASE}?sslmode=disable\n    depends_on:\n      vircadia_world_postgres:\n        condition: service_healthy\n        restart: true\n    healthcheck:\n      test: ["CMD-SHELL", "curl -f http://localhost:8081"]\n      interval: 5s\n      timeout: 5s\n      retries: 3\n      start_period: 5s\n    read_only: true\n    tmpfs:\n      - /tmp\n      - /var/run\n      - /var/cache\n      - /var/log\n      - /home/pgweb/.pgweb/bookmarks\n      - /home/pgweb/.pgweb/sessions\n      - /home/pgweb/.pgweb/queries\n    networks:\n      - virc
1adia_internal_network\n      - vircadia_public_network\n\n  # API service\n  vircadia_world_api_manager:\n    image: oven/bun:1.2.17-alpine\n    container_name: ${VRCA_SERVER_SERVICE_WORLD_API_MANAGER_CONTAINER_NAME}\n    user: "1000:1000"  # Run as non-root user\n    restart: always\n    read_only: true\n    ports:\n      - "${VRCA_SERVER_SERVICE_WORLD_API_MANAGER_HOST_CONTAINER_BIND_EXTERNAL}:${VRCA_SERVER_SERVICE_WORLD_API_MANAGER_PORT_CONTAINER_BIND_EXTERNAL}:${VRCA_SERVER_SERVICE_WORLD_API_MANAGER_PORT_CONTAINER_BIND_INTERNAL}"\n    volumes:\n      - ./api/volume/app:/app\n    working_dir: /app\n    command: ["bun", "run", "dist/world.api.manager.js"]\n    environment:\n      VRCA_SERVER_DEBUG: ${VRCA_SERVER_DEBUG}\n      VRCA_SERVER_SUPPRESS: ${VRCA_SERVER_SUPPRESS}\n\n      VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_USERNAME: ${VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_USERNAME}\n      VRCA_SERVER_SERVICE_POSTGRES_AGENT_PROXY_USER_USERNAME: ${VRCA_SERVER_SERVICE_POSTGRES_AGENT_PROXY_USER_USERNAME}\n      VRCA_SERVER_SERVICE_POSTGRES_HOST_CONTAINER_BIND_EXTERNAL: ${VRCA_SERVER_SERVICE_POSTGRES_HOST_CONTAINER_BIND_EXTERNAL}\n      VRCA_SERVER_SERVICE_POSTGRES_PORT_CONTAINER_BIND_EXTERNAL: ${VRCA_SERVER_SERVICE_POSTGRES_PORT_CONTAINER_BIND_EXTERNAL}\n      VRCA_SERVER_SERVICE_POSTGRES_DATABASE: ${VRCA_SERVER_SERVICE_POSTGRES_DATABASE}\n      VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_PASSWORD: ${VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_PASSWORD}\n      VRCA_SERVER_SERVICE_POSTGRES_AGENT_PROXY_USER_PASSWORD: ${VRCA_SERVER_SERVICE_POSTGRES_AGENT_PROXY_USER_PASSWORD}\n\n      VRCA_SERVER_SERVICE_WORLD_API_MANAGER_HOST_CONTAINER_BIND_INTERNAL: ${VRCA_SERVER_SERVICE_WORLD_API_MANAGER_HOST_CONTAINER_BIND_INTERNAL}\n      VRCA_SERVER_SERVICE_WORLD_API_MANAGER_PORT_CONTAINER_BIND_INTERNAL: ${VRCA_SERVER_SERVICE_WORLD_API_MANAGER_PORT_CONTAINER_BIND_INTERNAL}\n      VRCA_SERVER_SERVICE_WORLD_API_MANAGER_HOST_PUBLIC_AVAILABLE_AT: ${VRCA_SERVER_SERVICE_WORLD_API_MANAGER_HOST_PUBLIC_AVAILABLE_AT}\n      VRCA_SERVER_SERVICE_WORLD_API_MANAGER_PORT_PUBLIC_AVAILABLE_AT: ${VRCA_SERVER_SERVICE_WORLD_API_MANAGER_PORT_PUBLIC_AVAILABLE_AT}\n    depends_on:\n      vircadia_world_postgres:\n        condition: service_healthy\n        restart: true\n    healthcheck:\n      test: ["CMD-SHELL", "wget --spider http://127.0.0.1:${VRCA_SERVER_SERVICE_WORLD_API_MANAGER_PORT_CONTAINER_BIND_INTERNAL}/stats"]\n      interval: 10s\n      timeout: 10s\n      retries: 3\n      start_period: 5s\n    networks:\n      - vircadia_internal_network\n      - vircadia_public_network\n\n  # State service\n  vircadia_world_state_manager:\n    image: oven/bun:1.2.17-alpine\n    container_name: ${VRCA_SERVER_SERVICE_WORLD_STATE_MANAGER_CONTAINER_NAME}\n    user: "1000:1000"  # Run as non-root user\n    restart: always\n    read_only: true\n    ports:\n      - "${VRCA_SERVER_SERVICE_WORLD_STATE_MANAGER_HOST_CONTAINER_BIND_EXTERNAL}:${VRCA_SERVER_SERVICE_WORLD_STATE_MANAGER_PORT_CONTAINER_BIND_EXTERNAL}:${VRCA_SERVER_SERVICE_WORLD_STATE_MANAGER_PORT_CONTAINER_BIND_INTERNAL}"\n    volumes:\n      - ./state/volume/app:/app\n    working_dir: /app\n    command: ["bun", "run", "dist/world.state.manager.js"]\n    environment:\n      VRCA_SERVER_DEBUG: ${VRCA_SERVER_DEBUG}\n      VRCA_SERVER_SUPPRESS: ${VRCA_SERVER_SUPPRESS}\n\n      VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_USERNAME: ${VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_USERNAME}\n      VRCA_SERVER_SERVICE_POSTGRES_AGENT_PROXY_USER_USERNAME: ${VRCA_SERVER_SERVICE_POSTGRES_AGENT_PROXY_USER_USERNAME}\n      VRCA_SERVER_SERVICE_POSTGRES_HOST_CONTAINER_BIND_EXTERNAL: ${VRCA_SERVER_SERVICE_POSTGRES_HOST_CONTAINER_BIND_EXTERNAL}\n      VRCA_SERVER_SERVICE_POSTGRES_PORT_CONTAINER_BIND_EXTERNAL: ${VRCA_SERVER_SERVICE_POSTGRES_PORT_CONTAINER_BIND_EXTERNAL}\n      VRCA_SERVER_SERVICE_POSTGRES_DATABASE: ${VRCA_SERVER_SERVICE_POSTGRES_DATABASE}\n      VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_PASSWORD: ${VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_PASSWORD}\n      VRCA_SERVER_SERVICE_POSTGRES_AGENT_PROXY_USER_PASSWORD: ${VRCA_SERVER_SERVICE_POSTGRES_AGENT_PROXY_USER_PASSWORD}\n\n      VRCA_SERVER_SERVICE_WORLD_STATE_MANAGER_HOST_CONTAINER_BIND_INTERNAL: ${VRCA_SERVER_SERVICE_WORLD_STATE_MANAGER_HOST_CONTAINER_BIND_INTERNAL}\n      VRCA_SERVER_SERVICE_WORLD_STATE_MANAGER_PORT_CONTAINER_BIND_INTERNAL: ${VRCA_SERVER_SERVICE_WORLD_STATE_MANAGER_PORT_CONTAINER_BIND_INTERNAL}\n    depends_on:\n      vircadia_world_postgres:\n        condition: service_healthy\n        restart: true\n    healthcheck:\n      test: ["CMD-SHELL", "wget --spider http://127.0.0.1:${VRCA_SERVER_SERVICE_WORLD_STATE_MANAGER_PORT_CONTAINER_BIND_INTERNAL}/stats"]\n      interval: 10s\n      timeout: 10s\n      retries: 3\n      start_period: 5s\n    networks:\n      - virc
1adia_internal_network\n      - vircadia_public_network\n',t={},i="Services",s={},V=[{value:"Docker Compose File",id:"docker-compose-file",level:2}];function a(_){const E={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",...(0,n.R)(),..._.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(E.header,{children:(0,S.jsx)(E.h1,{id:"services",children:"Services"})}),"\n",(0,S.jsx)(E.p,{children:"All Vircadia's services run in a secure Docker container environment."}),"\n",(0,S.jsxs)(E.p,{children:["For maximum production security, Vircadia uses only the default distributed image by each respective vendor, built from Alpine Linux. Each container is set to ",(0,S.jsx)(E.code,{children:"read_only"})," to prevent any modifications to the underlying image."]}),"\n",(0,S.jsx)(E.h2,{id:"docker-compose-file",children:"Docker Compose File"}),"\n",(0,S.jsx)(r.A,{language:"yaml",children:(0,S.jsxs)(E.p,{children:["$",A]})})]})}function C(_={}){const{wrapper:E}={...(0,n.R)(),..._.components};return E?(0,S.jsx)(E,{..._,children:(0,S.jsx)(a,{..._})}):a(_)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.