Grapevine is a MUD chat network.
View the websocket details on Grapevine.
This is only required to run Grapevine itself, the server. These are not required to connect as a game. See the above websocket docs for connecting as a client.
- PostgreSQL 11
- Elixir 1.9.0
- Erlang 22.0.4
- node.js 10.13.0
- Yarn
cd apps/grapevine
mix deps.get
mix compile
yarn --cwd assets
mix ecto.reset
mix phx.server
This will start a web server on port 4100. You can now load http://localhost:4100/ to view the application.
MIX_ENV=test mix ecto.create
MIX_ENV=test mix ecto.migrate
mix test
Telnet connections live in the apps/telnet
application. This node holds the telnet connections so the main application can reboot on deploys and not drop active game connections.
For deployment the telnet application needs to be on its own erlang node. You can connect with something similar to:
config :grapevine,
topologies: [
local: [
strategy: Cluster.Strategy.Epmd,
config: [
hosts: [
:grapevine@localhost,
:telnet@localhost,
]
]
]
]
To run a production like system locally, you can use docker-compose.
The following commands will get a system running locally at http://grapevine.local
. This also assumes you have something listening locally (such as nginx) that will proxy port 80 traffic to port 4100.
docker-compose build
docker-compose up -d postgres
docker-compose up -d socket
docker-compose up -d telnet
docker-compose run --rm web eval "Grapevine.ReleaseTasks.migrate()"
docker-compose run --rm web eval "Grapevine.ReleaseTasks.seed()"
docker-compose up web
This nginx config will configure your server to listen for grapevine.local
and forward to either a local development server or the docker-compose setup from above.
upstream grapevine {
server localhost:4100;
}
server {
listen 80;
server_name grapevine.local;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://grapevine;
}
}
- Game sets the CNAME to
client.grapevine.haus
- Game must have a homepage url
- Game must have the web client enabled
- Update game's record for their CNAME
- Update nginx config for new domain
- Run certbot for the new domain
- Refresh CNAMEs in ETS
Grapevine.CNAMEs.reload()
Some notes on installing into kubernetes:
# Set up nginx ingress
helm install nginx-ingress stable/nginx-ingress --set controller.publishService.enabled=true