Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.DS_Store
.vscode
persist-data/**
server-dotlocal/**
server-logs/**

28 changes: 23 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,6 @@ clients use ports all over the place. The assignment-clients need some
taming on their port usage and some parameterization for running
multiple domain-servers on one processor.

TODO: Break out all the assignment clients into separate containers running
on the 'internal' virtual network. Use `docker-compose` or similar to
start them all up and to do scaling for things like audio load, etc.

## Ice Server

The Docker image also contains an ice-server which you can run if you
Expand All @@ -91,8 +87,30 @@ was built with:
"GIT_COMMIT_SHORT": "FirstEightCharactersOfGitCommitString",
"GIT_TAG": "GitBranchTag",
"BUILD_DATE": "YYYYMMDD.HHMM",
"BUILD_DAY": "YYYYMMDD"
"BUILD_DAY": "YYYYMMDD",
"VERSION_TAG": "TAG-YYYYMMDD-xxxxxxxx"
}

```

### Docker Compose
Start and stop all necessary services using `docker-compose`.
A. In order to do so, followig the instruction for the domain-server and the ice-server build above. It will create vircadia-domain-server. Based on this docker image, domain-server and ice-server can be launched.
B. Create a mentaverse docker image. To do so, consult https://github.com/vircadia/vircadia-metaverse/blob/master/docs/RunningDockerImage.md

C. Run `build-mongo.sh` from `vircadia-mongo` dir.
```
cd vircadia-mongo && ./buid-mongo.sh
```
Mongo will be pulled from Mongo(4.4) repository.

For now, it will deploy vircadia domain-server, ice-server, mongoDB, and metaverse server.
MongoDB will be persists at `./persist-data/vircadia-mongo`.

D. Launch docker-compose.
```
docker-compose up -d
```
This will launch 1) vircadia-mongodb 2) metaverseserver 3) vircadia-ice-server and 4) vircadia-domain-server

TODO: Split network to configuration frontend and backend and hide backend serveses such as mongodb and metaverse-server.
5 changes: 5 additions & 0 deletions add-mailuser.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#! /bin/bash

docker run --rm -v ${PWD}/persist-data/dms/config/:/tmp/docker-mailserver/ vircadia-mailserver setup email add cadia@n=vircadia-metaverse.com noneknowsit mailuser.sh
docker run --rm -v ${PWD}/persist-data/dms/config/:/tmp/docker-mailserver/ vircadia-mailserver setup alias add postmaster@vircadia-metaverse.com cadia@vircadia-metaverse.com
docker run --rm -v ${PWD}/persist-data/dms/config/:/tmp/docker-mailserver/ vircadia-mailserver setup config dkim
110 changes: 110 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
version: '3.9'

services:
vircadia-mongodb:
image: vircadia-mongodb:4.4
container_name: vircadia-mongodb
restart: unless-stopped
hostname: vircadia-mongodb
ports:
- 27017:27017
volumes:
- ./persist-data/vircadia-mongo/data/db:/data/db
- ./persist-data/vircadia-mongo/data/log:/var/log/mongodb
networks:
- vircadia

vircadia-metaverse-server:
image: metaverse-server:latest
container_name: vircadia-metaverse-server
restart: unless-stopped
hostname: vircadia-metaverse-server
environment:
- IAMUS_CONFIG_FILE=/home/cadia/config/iamus.json
volumes:
- ./files/metaverse/iamus.json:/home/cadia/config/iamus.json
- ./persist-data/vircadia-metaverse/metaverse/logs:/home/cadia/vircadia-metaverse/logs
- ./persist-data/vircadia-metaverse/metaverse/Logs:/home/cadia/vircadia-metaverse/Logs
ports:
- 9400:9400
links:
- vircadia-mongodb
networks:
- vircadia
depends_on:
- vircadia-mongodb

vircadia-metaverse-dashboard:
image: metaverse-dashboard:latest
container_name: vircadia-metaverse-dashboard
restart: unless-stopped
hostname: vircadia-metaverse-dashboard
volumes:
- ./persist-data/vircadia-metaverse-dashboard/logs:/home/cadia/metaverse-dashboard/log
ports:
- 8090:8080
links:
- vircadia-metaverse-server
networks:
- vircadia
depends_on:
- vircadia-metaverse-server

vircadia-ice-server:
image: vircadia-domain-server:latest
container_name: vircadia-ice-server
restart: unless-stopped
hostname: vircadia-ice-server
ports:
- 7337:7337
- 7337:7337/udp
environment:
- METAVERSE_URL=http://localhost:9400
entrypoint: /home/cadia/start-ice-server.sh
volumes:
- ./persist-data/vircadia-ice-server/server-dotlocal/testmeteverse:/home/cadia/.local
- ./persist-data/vircadia-ice-server/server-logs/testmeteverse:/home/cadia/logs
networks:
- vircadia
depends_on:
- vircadia-metaverse-server

vircadia-domain-server:
image: vircadia-domain-server:latest
container_name: vircadia-domain-server
restart: unless-stopped
hostname: vircadia-domain-server
ports:
- 40100-40102:40100-40102
- 40100-40102:40100-40102/udp
- 48000-48009:48000-48009/udp
environment:
- METAVERSE_URL=http://localhost:9400
- ICE_SERVER=localhost:7337
- CLEANNAME=vircadia-metaverse-server
- INSTANCE=0
volumes:
- ./persist-data/vircadia-domain-server/server-dotlocal/testmeteverse:/home/cadia/.local
- ./persist-data/vircadia-domain-server/server-logs/testmeteverse:/home/cadia/logs
networks:
- vircadia
depends_on:
- vircadia-ice-server

vircadia-web:
image: vircadia-web:latest
container_name: vircadia-web
restart: unless-stopped
hostname: vircadia-web
ports:
- 8080:8080
volumes:
- ./persist-data/vircadia-web/logs:/home/cadia/vircadia-web/log
networks:
- vircadia
depends_on:
- vircadia-domain-server

networks:
vircadia:
driver: bridge
19 changes: 19 additions & 0 deletions files/metaverse/iamus.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"metaverse": {
"metaverse-name": "TestMetaverse",
"metaverse-nick-name": "TestMetaverse",
"metaverse-server-url": "http://localhost:9400",
"default-ice-server-url": "http://localhost:7337",
"dashboard-url": "http://localhost:8080"
},
"database": {
"db": "domainstore",
"db-host": "vircadia-mongodb",
"db-user": "cadiauser",
"db-pw": "noneknowsit"
},
"debug": {
"loglevel": "debug",
"devel": true
}
}
14 changes: 7 additions & 7 deletions files/start-domain-server.sh
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,13 @@ DOMAIN_SERVER_PORT=$(( $DOMAIN_SERVER_BASE + 2 ))

cd "${RUNDIR}"

#./run_assignment-client -t 0 -p $(( $ASSIGNMENT_BASE + 0 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-0.log" 2>&1 &
#./run_assignment-client -t 1 -p $(( $ASSIGNMENT_BASE + 1 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-1.log" 2>&1 &
#./run_assignment-client -t 6 -p $(( $ASSIGNMENT_BASE + 6 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-6.log" 2>&1 &
#./run_assignment-client -t 3 -p $(( $ASSIGNMENT_BASE + 3 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-3.log" 2>&1 &
#./run_assignment-client -t 5 -p $(( $ASSIGNMENT_BASE + 5 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-5.log" 2>&1 &
#./run_assignment-client -t 4 -p $(( $ASSIGNMENT_BASE + 4 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-4.log" 2>&1 &
#./run_assignment-client -t 2 -p $(( $ASSIGNMENT_BASE + 2 )) --server-port ${DOMAIN_SERVER_PORT} --max 60 >> "${ALOGFILE}-2.log" 2>&1 &
# ./run_assignment-client -t 0 -p $(( $ASSIGNMENT_BASE + 0 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-0.log" 2>&1 &
# ./run_assignment-client -t 1 -p $(( $ASSIGNMENT_BASE + 1 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-1.log" 2>&1 &
# ./run_assignment-client -t 6 -p $(( $ASSIGNMENT_BASE + 6 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-6.log" 2>&1 &
# ./run_assignment-client -t 3 -p $(( $ASSIGNMENT_BASE + 3 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-3.log" 2>&1 &
# ./run_assignment-client -t 5 -p $(( $ASSIGNMENT_BASE + 5 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-5.log" 2>&1 &
# ./run_assignment-client -t 4 -p $(( $ASSIGNMENT_BASE + 4 )) --server-port ${DOMAIN_SERVER_PORT} >> "${ALOGFILE}-4.log" 2>&1 &
# ./run_assignment-client -t 2 -p $(( $ASSIGNMENT_BASE + 2 )) --server-port ${DOMAIN_SERVER_PORT} --max 60 >> "${ALOGFILE}-2.log" 2>&1 &

./run_assignment-client -p $ASSIGNMENT_BASE --server-port ${DOMAIN_SERVER_PORT} --max 20 >> "${ALOGFILE}-A.log" 2>&1 &

Expand Down
12 changes: 9 additions & 3 deletions run-domain-server.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,15 @@ if [[ ! -z "$2" ]] ; then
ICE_SERVER=$2
fi

export DOCKER_REPOSITORY=${DOCKER_REPOSITORY:-misterblue}
export IMAGE_NAME=${IMAGE_NAME:-vircadia-domain-server}
export IMAGE_VERSION=${IMAGE_VERSION:-latest}
# export DOCKER_REPOSITORY=${DOCKER_REPOSITORY:-misterblue}
# export IMAGE_NAME=${IMAGE_NAME:-vircadia-domain-server}
# export IMAGE_VERSION=${IMAGE_VERSION:-latest}

# runs local
export DOCKER_REPOSITORY=LOCAL
export IMAGE_NAME=vircadia-domain-server
export IMAGE_VERSION=latest

if [[ "${DOCKER_REPOSITORY}" == "LOCAL" ]] ; then
export DOCKER_IMAGE=${IMAGE_NAME}:${IMAGE_VERSION}
else
Expand Down
118 changes: 118 additions & 0 deletions vircadia-mongo/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# Majority of the script is from https://github.com/docker-library/mongo
# Adding vircadia related stuffs.

FROM ubuntu:20.04

# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mongodb && useradd -r -g mongodb mongodb

RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
ca-certificates \
jq \
numactl \
; \
if ! command -v ps > /dev/null; then \
apt-get install -y --no-install-recommends procps; \
fi; \
rm -rf /var/lib/apt/lists/*

# grab gosu for easy step-down from root (https://github.com/tianon/gosu/releases)
ENV GOSU_VERSION 1.12
# grab "js-yaml" for parsing mongod's YAML config files (https://github.com/nodeca/js-yaml/releases)
ENV JSYAML_VERSION 3.13.1

RUN set -ex; \
\
savedAptMark="$(apt-mark showmanual)"; \
apt-get update; \
apt-get install -y --no-install-recommends \
wget \
; \
if ! command -v gpg > /dev/null; then \
apt-get install -y --no-install-recommends gnupg dirmngr; \
savedAptMark="$savedAptMark gnupg dirmngr"; \
elif gpg --version | grep -q '^gpg (GnuPG) 1\.'; then \
# "This package provides support for HKPS keyservers." (GnuPG 1.x only)
apt-get install -y --no-install-recommends gnupg-curl; \
fi; \
rm -rf /var/lib/apt/lists/*; \
\
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
command -v gpgconf && gpgconf --kill all || :; \
rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc; \
\
wget -O /js-yaml.js "https://github.com/nodeca/js-yaml/raw/${JSYAML_VERSION}/dist/js-yaml.js"; \
# TODO some sort of download verification here
\
apt-mark auto '.*' > /dev/null; \
apt-mark manual $savedAptMark > /dev/null; \
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
\
# smoke test
chmod +x /usr/local/bin/gosu; \
gosu --version; \
gosu nobody true

RUN mkdir /docker-entrypoint-initdb.d

RUN set -ex; \
export GNUPGHOME="$(mktemp -d)"; \
set -- '20691EEC35216C63CAF66CE1656408E390CFB1F5'; \
for key; do \
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key"; \
done; \
gpg --batch --export "$@" > /etc/apt/trusted.gpg.d/mongodb.gpg; \
command -v gpgconf && gpgconf --kill all || :; \
rm -r "$GNUPGHOME"; \
apt-key list

# Allow build-time overrides (eg. to build image with MongoDB Enterprise version)
# Options for MONGO_PACKAGE: mongodb-org OR mongodb-enterprise
# Options for MONGO_REPO: repo.mongodb.org OR repo.mongodb.com
# Example: docker build --build-arg MONGO_PACKAGE=mongodb-enterprise --build-arg MONGO_REPO=repo.mongodb.com .
ARG MONGO_PACKAGE=mongodb-org
ARG MONGO_REPO=repo.mongodb.org
ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}

ENV MONGO_MAJOR 4.4
RUN echo "deb http://$MONGO_REPO/apt/ubuntu focal/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR multiverse" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"

# http://docs.mongodb.org/master/release-notes/4.4/
ENV MONGO_VERSION 4.4.11
# 12/28/2021, https://github.com/mongodb/mongo/tree/b7530cacde8432d2f22ed506f258ff9c3b45c5e9

RUN set -x \
# installing "mongodb-enterprise" pulls in "tzdata" which prompts for input
&& export DEBIAN_FRONTEND=noninteractive \
&& apt-get update \
# starting with MongoDB 4.3 (and backported to 4.0 and 4.2 *and* 3.6??), the postinst for server includes an unconditional "systemctl daemon-reload" (and we don't have anything for "systemctl" to talk to leading to dbus errors and failed package installs)
&& ln -s /bin/true /usr/local/bin/systemctl \
&& apt-get install -y \
${MONGO_PACKAGE}=$MONGO_VERSION \
${MONGO_PACKAGE}-server=$MONGO_VERSION \
${MONGO_PACKAGE}-shell=$MONGO_VERSION \
${MONGO_PACKAGE}-mongos=$MONGO_VERSION \
${MONGO_PACKAGE}-tools=$MONGO_VERSION \
&& rm -f /usr/local/bin/systemctl \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /var/lib/mongodb \
&& mv /etc/mongod.conf /etc/mongod.conf.orig

RUN mkdir -p /data/db /data/configdb \
&& chown -R mongodb:mongodb /data/db /data/configdb
VOLUME /data/db /data/configdb

COPY add_db_users.js /docker-entrypoint-initdb.d/
COPY docker-entrypoint.sh /usr/local/bin/
COPY config/mongod.conf /opt/mongod.conf
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

EXPOSE 27017
CMD ["mongod", "-f", "/opt/mongod.conf"]
29 changes: 29 additions & 0 deletions vircadia-mongo/add_db_users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
print("Started Adding the Users.");
db = db.getSiblingDB("admin");
db.createUser({
user:"adminer",
pwd: "noneknowsit",
roles: [ "root" ]
});
db.createUser({
user:"backuper",
pwd: "noneknowsit",
roles: [ "backup" ]
});
db.createUser({
user:"cadiauser",
pwd: "noneknowsit",
roles: [{
role: "readWrite",
db: "domainstore"
}]
});
db.createUser({
user:"metaverse",
pwd: "noneknowsit",
roles: [{
role: "readWrite",
db: "tester"
}]
});
print("End Adding the User Roles.");
3 changes: 3 additions & 0 deletions vircadia-mongo/build-mongo.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash

docker build -t vircadia-mongodb:4.4 .
Loading