From 88bef1ebce42b2a2c625ebe24908933d80d8f644 Mon Sep 17 00:00:00 2001 From: ra2y Date: Fri, 10 Apr 2026 00:11:40 -0700 Subject: [PATCH 1/3] add redis and executor services --- .env.example | 6 ++++++ Dockerfile | 9 +++++++++ docker-compose.dev.yml | 23 ++++++++++++++++++++++- docker-compose.yml | 31 +++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index ae4bbc1..2152708 100644 --- a/.env.example +++ b/.env.example @@ -12,3 +12,9 @@ DATABASE_URL=postgres://codesce:changeme@database:5432/codesce?sslmode=disable # Frontend FRONTEND_PORT=3000 VITE_API_URL=http://localhost:6767 + +# Redis +REDIS_URL=redis://redis:6379 +WORKER_COUNT=4 +EXECUTION_TIMEOUT=10 +SANDBOX_MEMORY_LIMIT=256 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 7a2bbd3..326b442 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,3 +24,12 @@ COPY --from=build /bin/server /bin/server EXPOSE 6767 CMD ["/bin/server"] + + +FROM python3.12-slim + +WORKDIR /app + +# entrypoint lets us pipe stdin and returns stdout + +ENTRYPOINT ["python", "/code/solution.py"] diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index a308fb0..78bd156 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -2,7 +2,27 @@ services: database: ports: - "${DB_PORT:-5432}:5432" - + redis: + ports: + - "6379:6379" + executor: + # docker can only access files in /executor + build: + context: ./executor + dockerfile: Dockerfile.dev + environment: + REDIS_URL: ${REDIS_URL} + DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}?sslmode=disable + WORKER_COUNT: ${WORKER_COUNT} + EXECUTION_TIMEOUT: ${EXECUTION_TIMEOUT} + SANDBOX_MEMORY_LIMIT: ${SANDBOX_MEMORY_LIMIT} + volumes: + - /var/run/docker.sock:/var/run/docker.sock + depends_on: + redis: + condition: service_healthy + database: + condition: service_healthy backend: build: context: . @@ -11,6 +31,7 @@ services: GIN_MODE: debug PORT: ${BACKEND_PORT:-6767} DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}?sslmode=disable + REDIS_URL: ${REDIS_URL} volumes: - .:/app - go-mod-cache:/go/pkg/mod diff --git a/docker-compose.yml b/docker-compose.yml index 4b8d47c..df82fbc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,34 @@ services: +# each service is a container + redis: + image: redis:7-alpine + ports: + - "6379:6379" + # will return pong if up + healthcheck: + test: ["CMD-SHELL", "redis-cli", "ping"] + interval: 5s + timeout: 5s + retries: 5 + executor: + build: + context: ./executor + dockerfile: Dockerfile + environment: + REDIS_URL: ${REDIS_URL} + DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}?sslmode=disable + WORKER_COUNT: ${WORKER_COUNT} + EXECUTION_TIMEOUT: ${EXECUTION_TIMEOUT} + SANDBOX_MEMORY_LIMIT: ${SANDBOX_MEMORY_LIMIT} + # executor allows us to run other containers + # left side is file from host, right side is file inside container + volumes: + - /var/run/docker.sock:/var/run/docker.sock + depends_on: + redis: + condition: service_healthy + database: + condition: service_healthy database: image: postgres:16-alpine container_name: codesce-db @@ -25,6 +55,7 @@ services: DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}?sslmode=disable GIN_MODE: ${GIN_MODE:-release} PORT: ${BACKEND_PORT:-6767} + REDIS_URL: ${REDIS_URL} ports: - "${BACKEND_PORT:-6767}:6767" depends_on: From e19d78ef005e717a92aa0ae745079cdd8f524f63 Mon Sep 17 00:00:00 2001 From: ra2y Date: Fri, 10 Apr 2026 00:59:59 -0700 Subject: [PATCH 2/3] fix typo and create Dockerfile.python --- Dockerfile | 9 --------- docker-compose.dev.yml | 3 +-- docker-compose.yml | 2 +- docker/Dockerfile.python | 7 +++++++ 4 files changed, 9 insertions(+), 12 deletions(-) create mode 100644 docker/Dockerfile.python diff --git a/Dockerfile b/Dockerfile index 326b442..7a2bbd3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,12 +24,3 @@ COPY --from=build /bin/server /bin/server EXPOSE 6767 CMD ["/bin/server"] - - -FROM python3.12-slim - -WORKDIR /app - -# entrypoint lets us pipe stdin and returns stdout - -ENTRYPOINT ["python", "/code/solution.py"] diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 78bd156..d701ea4 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -6,9 +6,8 @@ services: ports: - "6379:6379" executor: - # docker can only access files in /executor build: - context: ./executor + context: . dockerfile: Dockerfile.dev environment: REDIS_URL: ${REDIS_URL} diff --git a/docker-compose.yml b/docker-compose.yml index df82fbc..c5ac09c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,7 +12,7 @@ services: retries: 5 executor: build: - context: ./executor + context: . dockerfile: Dockerfile environment: REDIS_URL: ${REDIS_URL} diff --git a/docker/Dockerfile.python b/docker/Dockerfile.python new file mode 100644 index 0000000..c910674 --- /dev/null +++ b/docker/Dockerfile.python @@ -0,0 +1,7 @@ +FROM python3.12-slim + +WORKDIR /app + +# entrypoint lets us pipe stdin and returns stdout + +ENTRYPOINT ["python", "/code/solution.py"] \ No newline at end of file From 0366fb108441c7df6bbcf8b683c8091e5297f853 Mon Sep 17 00:00:00 2001 From: ra2y Date: Sat, 11 Apr 2026 01:05:35 -0700 Subject: [PATCH 3/3] add Dockerfile.executor and fix Dockerfile.python --- Dockerfile | 2 +- Dockerfile.executor | 31 +++++++++++++++++++++++++++++++ docker-compose.dev.yml | 2 +- docker-compose.yml | 2 +- docker/Dockerfile.python | 8 +------- 5 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 Dockerfile.executor diff --git a/Dockerfile b/Dockerfile index 7a2bbd3..dfd0c51 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,4 +23,4 @@ COPY --from=build /bin/server /bin/server EXPOSE 6767 -CMD ["/bin/server"] +CMD ["/bin/server"] \ No newline at end of file diff --git a/Dockerfile.executor b/Dockerfile.executor new file mode 100644 index 0000000..cb63801 --- /dev/null +++ b/Dockerfile.executor @@ -0,0 +1,31 @@ +# typing everythig up manually: high cortisol +# COPY AND PASTE FROM OTHER FILES: low cortisol + +# executor dockerfile (go) thinking monkey.... + +# --- Build stage --- + +# go image with compiler, names it build +FROM golang:1.25-alpine AS build + +# set working directory inside container +WORKDIR /app + +# copy two dependency files for main.go into ./ inside the container aka /app +COPY cmd/runner/go.mod cmd/runner/go.sum ./ +RUN go mod download + +# copy source code (left) into image (right) +COPY cmd/runner/ . + +# compiles code in /app into service called runner +RUN go build -o runner . + +# --- Production stage --- +FROM alpine:3.20 AS production + +WORKDIR /app + +COPY --from=build /app/runner /app/runner + +CMD ["/app/runner"] diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index d701ea4..47da342 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -8,7 +8,7 @@ services: executor: build: context: . - dockerfile: Dockerfile.dev + dockerfile: Dockerfile.executor environment: REDIS_URL: ${REDIS_URL} DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}?sslmode=disable diff --git a/docker-compose.yml b/docker-compose.yml index c5ac09c..985dbb7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,7 @@ services: executor: build: context: . - dockerfile: Dockerfile + dockerfile: Dockerfile.executor environment: REDIS_URL: ${REDIS_URL} DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}?sslmode=disable diff --git a/docker/Dockerfile.python b/docker/Dockerfile.python index c910674..560fcb9 100644 --- a/docker/Dockerfile.python +++ b/docker/Dockerfile.python @@ -1,7 +1 @@ -FROM python3.12-slim - -WORKDIR /app - -# entrypoint lets us pipe stdin and returns stdout - -ENTRYPOINT ["python", "/code/solution.py"] \ No newline at end of file +FROM python3.12-slim \ No newline at end of file