mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 04:01:32 -06:00

* 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 32a51b272627d99ca9796cbfda2e821bfdd95c70. * 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>
98 lines
2.2 KiB
Docker
98 lines
2.2 KiB
Docker
# hadolint global ignore=SC1090,SC1091
|
|
|
|
# Source
|
|
FROM scratch AS release
|
|
WORKDIR /release
|
|
ADD https://github.com/Ijwu/Enemizer/releases/latest/download/ubuntu.16.04-x64.zip Enemizer.zip
|
|
|
|
# Enemizer
|
|
FROM alpine:3.21 AS enemizer
|
|
ARG TARGETARCH
|
|
WORKDIR /release
|
|
COPY --from=release /release/Enemizer.zip .
|
|
|
|
# No release for arm architecture. Skip.
|
|
RUN if [ "$TARGETARCH" = "amd64" ]; then \
|
|
apk add unzip=6.0-r15 --no-cache && \
|
|
unzip -u Enemizer.zip -d EnemizerCLI && \
|
|
chmod -R 777 EnemizerCLI; \
|
|
else touch EnemizerCLI; fi
|
|
|
|
# Cython builder stage
|
|
FROM python:3.12 AS cython-builder
|
|
|
|
WORKDIR /build
|
|
|
|
# Copy and install requirements first (better caching)
|
|
COPY requirements.txt WebHostLib/requirements.txt
|
|
|
|
RUN pip install --no-cache-dir -r \
|
|
WebHostLib/requirements.txt \
|
|
setuptools
|
|
|
|
COPY _speedups.pyx .
|
|
COPY intset.h .
|
|
|
|
RUN cythonize -b -i _speedups.pyx
|
|
|
|
# Archipelago
|
|
FROM python:3.12-slim AS archipelago
|
|
ARG TARGETARCH
|
|
ENV VIRTUAL_ENV=/opt/venv
|
|
ENV PYTHONUNBUFFERED=1
|
|
WORKDIR /app
|
|
|
|
# Install requirements
|
|
# hadolint ignore=DL3008
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends \
|
|
git \
|
|
gcc=4:12.2.0-3 \
|
|
libc6-dev \
|
|
libtk8.6=8.6.13-2 \
|
|
g++=4:12.2.0-3 \
|
|
curl && \
|
|
apt-get clean && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Create and activate venv
|
|
RUN python -m venv $VIRTUAL_ENV; \
|
|
. $VIRTUAL_ENV/bin/activate
|
|
|
|
# Copy and install requirements first (better caching)
|
|
COPY WebHostLib/requirements.txt WebHostLib/requirements.txt
|
|
|
|
RUN pip install --no-cache-dir -r \
|
|
WebHostLib/requirements.txt \
|
|
gunicorn==23.0.0
|
|
|
|
COPY . .
|
|
|
|
COPY --from=cython-builder /build/*.so ./
|
|
|
|
# Run ModuleUpdate
|
|
RUN python ModuleUpdate.py -y
|
|
|
|
# Purge unneeded packages
|
|
RUN apt-get purge -y \
|
|
git \
|
|
gcc \
|
|
libc6-dev \
|
|
g++ && \
|
|
apt-get autoremove -y
|
|
|
|
# Copy necessary components
|
|
COPY --from=enemizer /release/EnemizerCLI /tmp/EnemizerCLI
|
|
|
|
# No release for arm architecture. Skip.
|
|
RUN if [ "$TARGETARCH" = "amd64" ]; then \
|
|
cp /tmp/EnemizerCLI EnemizerCLI; \
|
|
fi; \
|
|
rm -rf /tmp/EnemizerCLI
|
|
|
|
# Define health check
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
|
|
CMD curl -f http://localhost:${PORT:-80} || exit 1
|
|
|
|
ENTRYPOINT [ "python", "WebHost.py" ]
|