Add deployment examples.
This commit is contained in:
@@ -1,29 +1,41 @@
|
||||
# [Massive Decks ][hosted]
|
||||
|
||||
[](https://github.com/Lattyware/massivedecks/actions)
|
||||

|
||||
[](LICENSE)
|
||||
|
||||
Massive Decks is a comedy party game based on [Cards against Humanity][cah]. Play with friends! It works great with a
|
||||
bunch of people in the same room on phones, or on voice chat online.
|
||||
Massive Decks is a free, open source comedy party game based on [Cards against Humanity][cah]. Play with friends!
|
||||
|
||||
**[Play Massive Decks][hosted]**
|
||||
|
||||
[hosted]: https://md.rereadgames.com/
|
||||
[cah]: https://cardsagainsthumanity.com/
|
||||
|
||||
## Features
|
||||
|
||||
- Play together in the same room or online.
|
||||
- Use any device (Mobile phone, PC, Chromecast, anything with a web browser).
|
||||
- You can set up a central screen, but you don't need to (no need to stream anything for other players online).
|
||||
- Custom decks.
|
||||
- Customise the rules:
|
||||
- Custom cards.
|
||||
- House rules.
|
||||
- AI players.
|
||||
- Custom time limits if you want them.
|
||||
- Spectators.
|
||||
- Keeps your game private by default, you can also set a game password if needed.
|
||||
|
||||
## About
|
||||
|
||||
The game is open source software available under [the AGPLv3 license][license].
|
||||
The game is open source software available under [the AGPLv3 license](LICENSE).
|
||||
|
||||
The web client for the game is written in [Elm][elm], while the back-end is written in [Typescript][typescript].
|
||||
|
||||
[elm]: https://elm-lang.org/
|
||||
[typescript]: https://www.typescriptlang.org/
|
||||
[license]: https://github.com/Lattyware/massivedecks/blob/master/LICENSE
|
||||
|
||||
## Deploying
|
||||
|
||||
If you would like to run an instance of Massive Decks, there are a couple of options.
|
||||
If you would like to run a production instance of Massive Decks, there are a couple of options.
|
||||
|
||||
It is suggested you read the [deployment guide on the wiki][deployment-guide].
|
||||
|
||||
@@ -31,16 +43,19 @@ It is suggested you read the [deployment guide on the wiki][deployment-guide].
|
||||
|
||||
### Docker
|
||||
|
||||
[Server](https://hub.docker.com/r/massivedecks/server) / [Client](https://hub.docker.com/r/massivedecks/client)
|
||||
The Docker images can be found on Docker Hub: [Server](https://hub.docker.com/r/massivedecks/server) / [Client](https://hub.docker.com/r/massivedecks/client).
|
||||
|
||||
Also see [`docker-compose.yml`](https://github.com/Lattyware/massivedecks/blob/master/docker-compose.yml). The client image
|
||||
is an nginx server that both serves the static web client and acts as a proxy for the server. As such, the server should
|
||||
not be exposed publicly directly.
|
||||
There are example docker deployments in [the deployment folder](deployment).
|
||||
|
||||
### Heroku
|
||||
|
||||
You can deploy to Heroku with the button below:
|
||||
|
||||
[](https://heroku.com/deploy?template=https://github.com/Lattyware/massivedecks)
|
||||
|
||||
If you want to customise the deployment further, you can deploy through heroku from your own fork of the project with
|
||||
modification (note the button above is hard-coded to this repository).
|
||||
|
||||
## Contributing
|
||||
|
||||
If you have any problems with the game, please [raise an issue][issue]. If you would like to help develop the game,
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# Production Deployment with Docker
|
||||
|
||||
Each directory in this one is an example of how one might create a production deployment of Massive Decks using Docker.
|
||||
|
||||
- [memory](memory) contains a deployment that creates a server that simply stores all the game data and caches in memory.
|
||||
- [postgres](postgres) contains a deployment that creates a server that uses a postgres database for storage and caching.
|
||||
|
||||
These use [Docker Compose](https://docs.docker.com/compose/), a tool that comes with Docker for running multi-container
|
||||
applications.
|
||||
@@ -0,0 +1,35 @@
|
||||
# This docker compose file is for building and running a production version of Massive Decks.
|
||||
# This uses the built images from the docker hub.
|
||||
|
||||
version: "3"
|
||||
|
||||
networks:
|
||||
internal:
|
||||
|
||||
services:
|
||||
server:
|
||||
container_name: server
|
||||
# If you want to keep your deployment stable, it would be sensible to specify a specific tag rather than just `latest` here.
|
||||
# Make sure you always deploy the same tag for client and server.
|
||||
image: "massivedecks/server:latest"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
# This needs to be changed to a secret value.
|
||||
# You can run `npm run generate-secret` in the server project to generate an appropriate value.
|
||||
- MD_SECRET=CHANGE ME
|
||||
networks:
|
||||
- internal
|
||||
restart: unless-stopped
|
||||
|
||||
client:
|
||||
container_name: client
|
||||
depends_on:
|
||||
- server
|
||||
# If you want to keep your deployment stable, it would be sensible to specify a specific tag rather than just `latest` here.
|
||||
# Make sure you always deploy the same tag for client and server.
|
||||
image: "massivedecks/client:latest"
|
||||
ports:
|
||||
- "80:8080"
|
||||
networks:
|
||||
- internal
|
||||
restart: unless-stopped
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
// In a production environment, be sure to change this value to a random secret for security.
|
||||
// You can use `npm run generate-secret` to generate a suitable value.
|
||||
// Note that changes to this value will kick all users from all games.
|
||||
secret: "CHANGE ME",
|
||||
// This will be overwritten by the environment variable MD_SECRET, if set.
|
||||
|
||||
// The port to serve on. Note this should always be behind a reverse proxy.
|
||||
listenOn: 8081,
|
||||
// It is also possible to listen on a unix socket.
|
||||
// listenOn: "/tmp/sock",
|
||||
// This will be overwritten by the environment variable MD_LISTEN_ON, if set.
|
||||
|
||||
// The path this is hosted behind - only relevant when behind a reverse proxy, this won't actually host on a different
|
||||
// path. This should always have a trailing slash if it isn't empty, and never one at the start.
|
||||
basePath: "",
|
||||
// This will be overwritten by the environment variable MD_BASE_PATH, if set.
|
||||
|
||||
// Timeouts determine how long the server waits before taking certain actions.
|
||||
// These values are all ISO 8601 durations.
|
||||
timeouts: {
|
||||
// How long to wait in between checking timeouts.
|
||||
// Note that this will effectively determine the resolution of all other timeouts, so should be kept low.
|
||||
// Increasing the value will decrease server load, however.
|
||||
// Zero-durations elsewhere will result in instant execution, regardless of frequency here.
|
||||
timeoutCheckFrequency: "PT1S",
|
||||
|
||||
// How long to wait before marking a player as disconnected.
|
||||
disconnectionGracePeriod: "PT2S",
|
||||
|
||||
// How long to wait after everyone has played to begin the revealing phase. Having this as a non-zero value lets
|
||||
// the last person playing
|
||||
finishedPlayingDelay: "PT2S"
|
||||
},
|
||||
|
||||
// Tasks are things that take some time to happen (e.g: requesting data from external card services).
|
||||
// These are queued, and the settings here will determine server load and game responsiveness when under load.
|
||||
tasks: {
|
||||
// The number of tasks that can be processed at once. Limiting this stops the server getting overloaded, but setting
|
||||
// too low a value will result in games being slowed down.
|
||||
rateLimit: 20,
|
||||
// How often to process queued tasks. Setting this too high will result in games being slowed down a lot when the
|
||||
// rate limit is hit (an ISO 8601 duration).
|
||||
processTickFrequency: "PT0.5S"
|
||||
},
|
||||
|
||||
// How to store game data.
|
||||
storage: {
|
||||
// Example of a configuration using a postgres database.
|
||||
type: "PostgreSQL",
|
||||
connection: {
|
||||
host: "storage",
|
||||
port: 5432 ,
|
||||
user: "massivedecks",
|
||||
database: "massivedecks",
|
||||
password: "CHANGE ME",
|
||||
keepAlive: false,
|
||||
},
|
||||
|
||||
// How long to allow without any activity before garbage collecting the game.
|
||||
abandonedTime: "PT15M",
|
||||
// How often to delete abandoned/finished games (an ISO 8601 duration).
|
||||
garbageCollectionFrequency: "PT5M"
|
||||
},
|
||||
|
||||
// How to cache game data.
|
||||
cache: {
|
||||
// Example of a configuration using a postgres database.
|
||||
type: "PostgreSQL",
|
||||
connection: {
|
||||
host: "storage",
|
||||
port: 5432 ,
|
||||
user: "massivedecks",
|
||||
database: "massivedecks",
|
||||
password: "CHANGE ME",
|
||||
keepAlive: false,
|
||||
},
|
||||
|
||||
// How old a cached value should be before we check to see if we should update it on a hit.
|
||||
checkAfter: "PT5M"
|
||||
},
|
||||
|
||||
// A file to touch when the server is started. If null, we won't touch any files.
|
||||
touchOnStart: null,
|
||||
// This will be overwritten by the environment variable MD_TOUCH_ON_START, if set.
|
||||
|
||||
// The version of Massive Decks.
|
||||
version: "dev"
|
||||
// This will be overwritten by the environment variable MD_VERSION, if set.
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
# This docker compose file is for building and running a production version of Massive Decks.
|
||||
# This uses the built images from the docker hub.
|
||||
# This version also configures a postgres server for data storage.
|
||||
|
||||
version: "3"
|
||||
|
||||
networks:
|
||||
internal:
|
||||
|
||||
# You may not want docker to manage your data like this.
|
||||
# Please see Docker's documentation for more on managing volumes: https://docs.docker.com/compose/compose-file/#volume-configuration-reference
|
||||
volumes:
|
||||
storage-volume:
|
||||
|
||||
services:
|
||||
storage:
|
||||
container_name: storage
|
||||
image: "postgres:12"
|
||||
# See the postgres image's documentation for more on configuring it.
|
||||
# https://hub.docker.com/_/postgres
|
||||
environment:
|
||||
- POSTGRES_USER=massivedecks
|
||||
# This should be changed to a secret value, matched to the config.
|
||||
- POSTGRES_PASSWORD=CHANGE ME
|
||||
networks:
|
||||
- internal
|
||||
volumes:
|
||||
- storage-volume:/var/lib/postgresql/data
|
||||
restart: unless-stopped
|
||||
|
||||
server:
|
||||
container_name: server
|
||||
# If you want to keep your deployment stable, it would be sensible to specify a specific tag rather than just `latest` here.
|
||||
# Make sure you always deploy the same tag for client and server.
|
||||
image: "massivedecks/server:latest"
|
||||
depends_on:
|
||||
- storage
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
# This needs to be changed to a secret value.
|
||||
# You can run `npm run generate-secret` in the server project to generate an appropriate value.
|
||||
- MD_SECRET=CHANGE ME
|
||||
networks:
|
||||
- internal
|
||||
volumes:
|
||||
# This mounts a new configuration file over the default one, which is easier than building a whole new image on top of the normal one with a new config file.
|
||||
# Note the path to the local file will need changing to the real location.
|
||||
- /host/path/to/config.json5:/md/config.json5:ro
|
||||
restart: unless-stopped
|
||||
|
||||
client:
|
||||
container_name: client
|
||||
# If you want to keep your deployment stable, it would be sensible to specify a specific tag rather than just `latest` here.
|
||||
# Make sure you always deploy the same tag for client and server.
|
||||
image: "massivedecks/client:latest"
|
||||
depends_on:
|
||||
- server
|
||||
ports:
|
||||
- "80:8080"
|
||||
networks:
|
||||
- internal
|
||||
restart: unless-stopped
|
||||
@@ -1,3 +1,7 @@
|
||||
# This docker compose file is for building and running a development version of Massive Decks.
|
||||
# If you want to deploy a production instance, please see
|
||||
# https://github.com/Lattyware/massivedecks/wiki/Deploying for important steps you should take.
|
||||
|
||||
version: "3"
|
||||
|
||||
networks:
|
||||
|
||||
Reference in New Issue
Block a user