diff --git a/Dockerfile b/Dockerfile index ee6902d..c15777a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,6 +5,9 @@ FROM python:3.11-slim RUN echo "deb http://deb.debian.org/debian testing main" \ > /etc/apt/sources.list.d/testing.list +# Création d'un utilisateur programmeur avec UID 1000 et home dans /home/programmer +RUN useradd -u 1000 -m -d /home/programmer -s /bin/bash programmer + WORKDIR /app # Installer les outils de développement Go et Rust @@ -24,7 +27,8 @@ RUN apt-get update && \ black \ flake8 \ mypy \ - isort + isort \ + logrotate COPY tools tools @@ -50,12 +54,30 @@ RUN cargo binstall --strategies crate-meta-data jj-cli # Installer le SDK MCP Python RUN pip install --no-cache-dir ruff fastmcp ipython +RUN curl -fsSL https://opencode.ai/install | bash \ + && mv /root/.opencode/bin/opencode /usr/local/bin/ + # Copier le serveur COPY src . +# Copier le script de démarrage +COPY docker_startup.sh . +COPY opencode.json ~/.config/opencode + # Exposer le port -EXPOSE 6666 +EXPOSE 7860 ENV OLLAMA_ADDR="http://host.docker.internal:11434" -# Lancer le serveur -CMD ["python", "./PMOCrazyCoder.py"] +# Rendre le script exécutable et lancer le serveur +RUN chmod +x docker_startup.sh +RUN mkdir /sandbox /log \ + && chown programmer:programmer /sandbox /log + +# Création de la configuration logrotate +COPY logrotate-config /etc/logrotate.d/mcp-logs + +# Changer l'utilisateur pour programmeur +USER programmer +RUN mkdir -p /home/programmer/.config/opencode +COPY opencode.json /home/programmer/.config/opencode +CMD ["./docker_startup.sh"] diff --git a/Makefile b/Makefile index beeb82b..67afa2d 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,8 @@ IMAGE_NAME = pmo_crazy_coder TAG = latest PORT = 7860 SANDBOX_VOLUME = "./bac_a_sable" -DOCKER_RUN_COMMON = --rm -p $(PORT):$(PORT) -v $(SANDBOX_VOLUME):/sandbox +CONTAINER_NAME = $(IMAGE_NAME) +DOCKER_RUN_COMMON = --rm -p $(PORT):$(PORT) -v $(SANDBOX_VOLUME):/sandbox --name $(CONTAINER_NAME) FULL_IMAGE_NAME = $(IMAGE_NAME):$(TAG) all: run @@ -25,6 +26,7 @@ build: stamp/build_PMOCrazyCoder run: build $(SANDBOX_VOLUME) @echo Launching the PMOCrazyCoder MCP server @docker run $(DOCKER_RUN_COMMON) \ + -it \ $(FULL_IMAGE_NAME) debug: build $(SANDBOX_VOLUME) diff --git a/docker_startup.sh b/docker_startup.sh new file mode 100755 index 0000000..504b088 --- /dev/null +++ b/docker_startup.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Docker Startup Script for MCP Server and Open Code +# This script launches the MCP server in background and starts Open Code in interactive mode + +echo "Starting MCP server in background..." +python3 PMOCrazyCoder.py >/log/server.log 2>&1 & + +# Give the server a moment to start +sleep 3 + +echo "Starting Open Code in interactive mode..." +opencode diff --git a/logrotate-config b/logrotate-config new file mode 100644 index 0000000..b06f1f5 --- /dev/null +++ b/logrotate-config @@ -0,0 +1,13 @@ +/log/server.log /log/opencode.log { + daily + rotate 5 + compress + delaycompress + missingok + notifempty + create 644 programmer programmer + sharedscripts + postrotate + # No restart needed for log files + endscript +} \ No newline at end of file