mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-26 18:03:24 -07:00
Docker: Add initial configuration for project (#4419)
* feat(docker): Add initial Docker configuration for project
- Add .dockerignore file to ignore unnecessary files
- Create Dockerfile with basic build and deployment configuration
* feat(docker): Updated Docker configuration for improved security and build efficiency
- Removed sensitive files from .dockerignore
- Moved WORKDIR to /app in Dockerfile
- Added gunicorn==23.0.0 dependency in RUN command
- Created new docker-compose.yml file for service definition
* feat(deployment): Implement containerized deployment configuration
- Add additional environment variables for Python optimization
- Update Dockerfile with new dependencies: eventlet, gevent, tornado
- Create docker-compose.yml and configure services for web and nginx
- Implement example configurations for web host settings and gunicorn
- Establish nginx configuration for reverse proxy
- Remove outdated docker-compose.yml from root directory
* feat(deploy): Introduce Docker Compose configuration for multi-world deployment
- Separate web service into two containers, one for main process and one for gunicorn
- Update container configurations for improved security and maintainability
- Remove unused volumes and network configurations
* docs: Add new documentation for deploying Archipelago using containers
- Document standalone image build and run process
- Include example Docker Compose file for container orchestration
- Provide information on services defined in the `docker-compose.yaml` file
- Mention optional Enemizer feature and Git requirements
* fixup! feat(docker): Updated Docker configuration for improved security and build efficiency - Removed sensitive files from .dockerignore - Moved WORKDIR to /app in Dockerfile - Added gunicorn==23.0.0 dependency in RUN command - Created new docker-compose.yml file for service definition
* feat(deploy): Updated gunicorn configuration example
- Adjusted worker and thread counts
- Switched worker class from sync to gthread
- Changed log level to info
- Added example code snippet for customizing worker count
* fix(deploy): Adjust concurrency settings for self-launch configuration
- Reduce the number of world generators from 8 to 3
- Decrease the number of hosters from 5 to 4
* docs(deploy using containers): Improve readability, fix broken links
- Update links to other documentation pages
- Improve formatting for better readability
- Remove unnecessary sections and files
- Add note about building the image requiring a local copy of ArchipelagoMW source code
* Update deploy/example_config.yaml
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update deploy/example_selflaunch.yaml
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update Dockerfile
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update deploy/example_selflaunch.yaml
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* fixup! Update Dockerfile
* fix(Dockerfile): Update package installations to use latest versions
- Remove specific version pins for git and libc6-dev
- Ensure compatibility with newer package updates
* feat(ci): Add GitHub Actions workflow for building and publishing Docker images
- Create a new workflow for Docker image build and publish
- Configure triggers for push and pull_request on main branch
- Set up QEMU and Docker Buildx for multi-platform builds
- Implement Docker login for GitHub Container Registry
- Include Docker image metadata extraction and tagging
* feat(healthcheck): Update Dockerfile and docker-compose for health checks
- Add health check for the Webhost service in Dockerfile
- Modify docker-compose to include a placeholder health check for multiworld service
- Standardize comments and remove unnecessary lines
* Revert "feat(ci): Add GitHub Actions workflow for building and publishing Docker images"
This reverts commit 32a51b2726.
* feat(docker): Enhance Dockerfile with Cython build stage
- Add Cython builder stage for compiling speedups
- Update package installation and organization for efficiency
- Improve caching by copying requirements before installing
- Add documentation for rootless Podman
* fixup! feat(docker): Enhance Dockerfile with Cython build stage - Add Cython builder stage for compiling speedups - Update package installation and organization for efficiency - Improve caching by copying requirements before installing - Add documentation for rootless Podman
---------
Co-authored-by: Adrian Priestley <apriestley@gmail.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Adrian Priestley <apriestley@bob.localdomain>
This commit is contained in:
61
deploy/docker-compose.yml
Normal file
61
deploy/docker-compose.yml
Normal file
@@ -0,0 +1,61 @@
|
||||
services:
|
||||
multiworld:
|
||||
# Build only once. Web service uses the same image build
|
||||
build:
|
||||
context: ..
|
||||
# Name image for use in web service
|
||||
image: archipelago-base
|
||||
# Use locally-built image
|
||||
pull_policy: never
|
||||
# Launch main process without website hosting (config override)
|
||||
entrypoint: python WebHost.py --config_override selflaunch.yaml
|
||||
volumes:
|
||||
# Mount application volume
|
||||
- app_volume:/app
|
||||
|
||||
# Mount configs
|
||||
- ./example_config.yaml:/app/config.yaml
|
||||
- ./example_selflaunch.yaml:/app/selflaunch.yaml
|
||||
|
||||
# Expose on host network for access to dynamically mapped ports
|
||||
network_mode: host
|
||||
|
||||
# No Healthcheck in place yet for multiworld
|
||||
healthcheck:
|
||||
test: ["NONE"]
|
||||
web:
|
||||
# Use image build by multiworld service
|
||||
image: archipelago-base
|
||||
# Use locally-built image
|
||||
pull_policy: never
|
||||
# Launch gunicorn targeting WebHost application
|
||||
entrypoint: gunicorn -c gunicorn.conf.py
|
||||
volumes:
|
||||
# Mount application volume
|
||||
- app_volume:/app
|
||||
|
||||
# Mount configs
|
||||
- ./example_config.yaml:/app/config.yaml
|
||||
- ./example_gunicorn.conf.py:/app/gunicorn.conf.py
|
||||
environment:
|
||||
# Bind gunicorn on 8000
|
||||
- PORT=8000
|
||||
|
||||
nginx:
|
||||
image: nginx:stable-alpine
|
||||
volumes:
|
||||
# Mount application volume
|
||||
- app_volume:/app
|
||||
|
||||
# Mount config
|
||||
- ./example_nginx.conf:/etc/nginx/nginx.conf
|
||||
ports:
|
||||
# Nginx listening internally on port 80 -- mapped to 8080 on host
|
||||
- 8080:80
|
||||
depends_on:
|
||||
- web
|
||||
|
||||
volumes:
|
||||
# Share application directory amongst multiworld and web services
|
||||
# (for access to log files and the like), and nginx (for static files)
|
||||
app_volume:
|
||||
10
deploy/example_config.yaml
Normal file
10
deploy/example_config.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# Refer to ../docs/webhost configuration sample.yaml
|
||||
|
||||
# We'll be hosting VIA gunicorn
|
||||
SELFHOST: false
|
||||
# We'll start a separate process for rooms and generators
|
||||
SELFLAUNCH: false
|
||||
|
||||
# Host Address. This is the address encoded into the patch that will be used for client auto-connect.
|
||||
# Set as your local IP (192.168.x.x) to serve over LAN.
|
||||
HOST_ADDRESS: localhost
|
||||
19
deploy/example_gunicorn.conf.py
Normal file
19
deploy/example_gunicorn.conf.py
Normal file
@@ -0,0 +1,19 @@
|
||||
workers = 2
|
||||
threads = 2
|
||||
wsgi_app = "WebHost:get_app()"
|
||||
accesslog = "-"
|
||||
access_log_format = (
|
||||
'%({x-forwarded-for}i)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
|
||||
)
|
||||
worker_class = "gthread" # "sync" | "gthread"
|
||||
forwarded_allow_ips = "*"
|
||||
loglevel = "info"
|
||||
|
||||
"""
|
||||
You can programatically set values.
|
||||
For example, set number of workers to half of the cpu count:
|
||||
|
||||
import multiprocessing
|
||||
|
||||
workers = multiprocessing.cpu_count() / 2
|
||||
"""
|
||||
64
deploy/example_nginx.conf
Normal file
64
deploy/example_nginx.conf
Normal file
@@ -0,0 +1,64 @@
|
||||
worker_processes 1;
|
||||
|
||||
user nobody nogroup;
|
||||
# 'user nobody nobody;' for systems with 'nobody' as a group instead
|
||||
error_log /var/log/nginx/error.log warn;
|
||||
pid /var/run/nginx.pid;
|
||||
|
||||
events {
|
||||
worker_connections 1024; # increase if you have lots of clients
|
||||
accept_mutex off; # set to 'on' if nginx worker_processes > 1
|
||||
# 'use epoll;' to enable for Linux 2.6+
|
||||
# 'use kqueue;' to enable for FreeBSD, OSX
|
||||
use epoll;
|
||||
}
|
||||
|
||||
http {
|
||||
include mime.types;
|
||||
# fallback in case we can't determine a type
|
||||
default_type application/octet-stream;
|
||||
access_log /var/log/nginx/access.log combined;
|
||||
sendfile on;
|
||||
|
||||
upstream app_server {
|
||||
# fail_timeout=0 means we always retry an upstream even if it failed
|
||||
# to return a good HTTP response
|
||||
|
||||
# for UNIX domain socket setups
|
||||
# server unix:/tmp/gunicorn.sock fail_timeout=0;
|
||||
|
||||
# for a TCP configuration
|
||||
server web:8000 fail_timeout=0;
|
||||
}
|
||||
|
||||
server {
|
||||
# use 'listen 80 deferred;' for Linux
|
||||
# use 'listen 80 accept_filter=httpready;' for FreeBSD
|
||||
listen 80 deferred;
|
||||
client_max_body_size 4G;
|
||||
|
||||
# set the correct host(s) for your site
|
||||
# server_name example.com www.example.com;
|
||||
|
||||
keepalive_timeout 5;
|
||||
|
||||
# path for static files
|
||||
root /app/WebHostLib;
|
||||
|
||||
location / {
|
||||
# checks for static file, if not found proxy to app
|
||||
try_files $uri @proxy_to_app;
|
||||
}
|
||||
|
||||
location @proxy_to_app {
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header Host $http_host;
|
||||
# we don't want nginx trying to do something clever with
|
||||
# redirects, we set the Host: header above already.
|
||||
proxy_redirect off;
|
||||
|
||||
proxy_pass http://app_server;
|
||||
}
|
||||
}
|
||||
}
|
||||
13
deploy/example_selflaunch.yaml
Normal file
13
deploy/example_selflaunch.yaml
Normal file
@@ -0,0 +1,13 @@
|
||||
# Refer to ../docs/webhost configuration sample.yaml
|
||||
|
||||
# We'll be hosting VIA gunicorn
|
||||
SELFHOST: false
|
||||
# Start room and generator processes
|
||||
SELFLAUNCH: true
|
||||
JOB_THRESHOLD: 0
|
||||
|
||||
# Maximum concurrent world gens
|
||||
GENERATORS: 3
|
||||
|
||||
# Rooms will be spread across multiple processes
|
||||
HOSTERS: 4
|
||||
Reference in New Issue
Block a user