- Docker Engine
- Docker Compose
- Optionally GitLab's fork of the deprecated Docker Machine
Runs a single FortressOne server on port 27500.
- Locally clone map-repo
- Clone and compile server-qwprogs
Edit .env.example
and save it as .env
.
docker-compose up -d
docker-compose logs -f
docker attach <container name>
ctrl-p
ctrl-q
to detach.
docker-compose down
Runs seven automatically updated FortressOne FTE QuakeWorld servers in different modes and QWfwd proxy.
Mode | Port |
---|---|
Pub | 27500 |
Duel | 27501 |
Quad | 27502 |
Trick | 27503 |
Tourney | 27504 |
Staging | 27510 |
QWfwd | 30000 |
Edit .env.production_example
and save it as .env.production
.
Before executing commands you must source the production environment file:
source .env.production
docker-compose -f production.yml up -d
docker-compose -f production.yml logs -f
docker ps
docker attach <container>
ctrl-p
ctrl-q
to detach.
docker-compose -f production.yml down
docker exec -it docker-server_updater_1 /updater/sync.sh
Install Docker Machine.
- Create an IAM user with admin access
- Run
docker-machine create
with arguments as in the examples below, or create an EC2 instance and open up ports 27500-27504, 27510 on udp and tcp - Edit
.env.production
and source - Run
eval $(docker-machine env <name>)
- Run
docker-machine active
to confirm connection - Run
docker-compose -f production.yaml up -d && docker-compose -f prodction.yaml logs -tf
to start it up. - Run
docker exec -it docker-server_updater_1 /updater/sync.sh
to update progs - Update cloudflare to point to newly created EC2 instance
- New regions aren't being added to docker-machine, but generic instructions beow still work.
E.G. I used this for Sydney:
docker-machine create \
--driver amazonec2 \
--amazonec2-access-key AKIA5Q3DPGBMILTLCFE2 \
--amazonec2-secret-key AatUNhC/VPut45Mnw8OEgNdMEqguDU6AdEnxL9qL \
--amazonec2-root-size 30 \
--amazonec2-region ap-southeast-2 \
--amazonec2-open-port 27500/udp \
--amazonec2-open-port 27500 \
--amazonec2-open-port 27501/udp \
--amazonec2-open-port 27501 \
--amazonec2-open-port 27502/udp \
--amazonec2-open-port 27502 \
--amazonec2-open-port 27503/udp \
--amazonec2-open-port 27503 \
--amazonec2-open-port 27504/udp \
--amazonec2-open-port 27504 \
--amazonec2-open-port 27510/udp \
--amazonec2-open-port 27510 \
--amazonec2-open-port 30000/udp \
--amazonec2-open-port 28000 \
sydney
Tokyo:
docker-machine create \
--driver amazonec2 \
--amazonec2-access-key <AWS_ACCESS_KEY> \
--amazonec2-secret-key <AWS_SECRET_KEY> \
--amazonec2-root-size 30 \
--amazonec2-region ap-northeast-1 \
--amazonec2-open-port 27500/udp \
--amazonec2-open-port 27500 \
--amazonec2-open-port 27501/udp \
--amazonec2-open-port 27501 \
--amazonec2-open-port 27502/udp \
--amazonec2-open-port 27502 \
--amazonec2-open-port 27503/udp \
--amazonec2-open-port 27503 \
--amazonec2-open-port 27504/udp \
--amazonec2-open-port 27504 \
--amazonec2-open-port 27510/udp \
--amazonec2-open-port 27510 \
--amazonec2-open-port 30000/udp \
--amazonec2-open-port 28000 \
tokyo
This for Stockholm, with non-default VPC and where t2.micro isn't available:
docker-machine create \
--driver amazonec2 \
--amazonec2-instance-type t3.micro \
--amazonec2-vpc-id <VPC_ID> \
--amazonec2-access-key <AWS_ACCESS_KEY> \
--amazonec2-secret-key <AWS_SECRET_KEY> \
--amazonec2-root-size 30 \
--amazonec2-region eu-north-1 \
--amazonec2-open-port 27500/udp \
--amazonec2-open-port 27500 \
--amazonec2-open-port 27501/udp \
--amazonec2-open-port 27501 \
--amazonec2-open-port 27502/udp \
--amazonec2-open-port 27502 \
--amazonec2-open-port 27503/udp \
--amazonec2-open-port 27503 \
--amazonec2-open-port 27504/udp \
--amazonec2-open-port 27504 \
--amazonec2-open-port 27510/udp \
--amazonec2-open-port 27510 \
--amazonec2-open-port 30000/udp \
--amazonec2-open-port 28000 \
stockholm
I used this for Dallas Linode:
docker-machine create \
--driver linode \
--linode-token <LINODE_API_TOKEN> \
--linode-instance-type g6-nanode-1 \
--linode-region us-central \
dallas
N.B. On linode if you get:
Error creating machine: Error running provisioning: Unable to verify the Docker daemon is listening: Maximum number of retries (10) exceeded
Just restart the VPS and it should work after that.
For a generic server:
- Create user with passwordless sudo access
- Add public key to ~/.ssh/authorized_hosts
I used this for guam:
docker-machine create \
--driver generic \
--generic-ip-address guam.fortressone.org \
--generic-ssh-user <HOST_USERNAME> \
guam
See scripts/open-ports
Requires a .env.<docker-machine name>
file with FO environment variables set.
source scripts/connect <docker-machine name>
- auto update maps
- auto update qwprogs
- sane default config
- autorecord and mvd file server
- QTV
- QWFWD
- stats
E.G. for 2021 Virginia I did:
- Create new AWS account
- email: zel+virginia2021@fortressone.org
- password: xxxx
- AWS account name: fortressone-virginia2021
- Company name: FortressOne Team
- Credit card: FortressOne Team credit card
- Basic plan
- Set reminder for a year to renew again :P
- AIM > Add user
- name: admin
- access type: Programmatic access
- Create group
- Group name: admin
- Tick AdministratorAccess
- Save credentials
- Delete old instance:
docker-machine rm virginia
- Run
docker-machine create
command from above, with new credentials, region and name - Update DNS with new IP at cloudflare
- .env file shouldn't change (credentials in env file are for storage).
source .env.virginia; eval $(docker-machine env virginia)
docker-compose -f production.yml up -d
- Close old account in My Account