diff --git a/.gitignore b/.gitignore index 80e4978b..d9c76d50 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ tmp/* .byebug_history coverage/ srv/ +environment diff --git a/Dockerfile b/Dockerfile index 877e4631..4d596e8c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,8 +22,7 @@ RUN apt-get update && \ gem install bundler:2.1.4 && \ npm install -g --unsafe-perm aglio@2.3.0 -ENV VIRTUAL_PORT 2358 -EXPOSE $VIRTUAL_PORT +EXPOSE 2358 WORKDIR /api @@ -38,21 +37,16 @@ COPY . . ENTRYPOINT ["/api/docker-entrypoint.sh"] CMD ["/api/scripts/server"] -ENV JUDGE0_VERSION "1.13.0" -LABEL version=$JUDGE0_VERSION +RUN useradd -u 1000 -m -r judge0 && \ + echo "judge0 ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers && \ + chown judge0: /api/tmp/ +USER judge0 -FROM production AS development +ENV JUDGE0_VERSION "1.13.1" +LABEL version=$JUDGE0_VERSION -ARG DEV_USER=judge0 -ARG DEV_USER_ID=1000 -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - vim && \ - useradd -u $DEV_USER_ID -m -r $DEV_USER && \ - echo "$DEV_USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers - -USER $DEV_USER +FROM production AS development CMD ["sleep", "infinity"] diff --git a/Gemfile.lock b/Gemfile.lock index 1524fe4f..532948b9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -91,7 +91,9 @@ GEM mime-types (3.3.1) mime-types-data (~> 3.2015) mime-types-data (3.2020.0512) - mimemagic (0.3.5) + mimemagic (0.3.10) + nokogiri (~> 1) + rake mini_mime (1.0.2) mini_portile2 (2.4.0) minitest (5.14.1) diff --git a/app/jobs/isolate_job.rb b/app/jobs/isolate_job.rb index 49e3ff2f..52db05e2 100644 --- a/app/jobs/isolate_job.rb +++ b/app/jobs/isolate_job.rb @@ -168,7 +168,7 @@ def compile files_to_remove = [compile_output_file] files_to_remove << compile_script unless submission.is_project files_to_remove.each do |f| - `sudo chown $(whoami): #{f} && sudo rm -rf #{f}` + `sudo rm -rf #{f}` end return :success if process_status.success? @@ -229,7 +229,7 @@ def run `#{command}` - `sudo chown $(whoami): #{run_script} && rm #{run_script}` unless submission.is_project + `sudo rm #{run_script}` unless submission.is_project end def verify diff --git a/cron/clear_cache b/cron/clear_cache index 18e1e7b8..ae1aad99 100644 --- a/cron/clear_cache +++ b/cron/clear_cache @@ -1 +1 @@ -0 0 * * * bash -c "source /api/tmp/environment; cd /api; rake judge0:clear_cache &> /api/log/clear_cache.log" +0 0 * * * bash -c "source /api/environment && cd /api && rake judge0:clear_cache &> ./log/clear_cache.log" diff --git a/cron/telemetry b/cron/telemetry index d15d6520..33ab0a59 100644 --- a/cron/telemetry +++ b/cron/telemetry @@ -1 +1 @@ -0 */12 * * * bash -c "source /api/tmp/environment; /api/bin/telemetry &> /api/log/telemetry.log" +0 */12 * * * bash -c "source /api/environment && cd /api && ./bin/telemetry &> ./log/telemetry.log" diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 84a80a60..a166dbc6 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,19 +1,9 @@ -version: '2' services: - nginx: - image: judge0/jwilder-nginx-proxy:latest-2020-10-30 - environment: - - DEFAULT_HOST=judge0.local - volumes: - - /var/run/docker.sock:/tmp/docker.sock:ro - ports: - - "80:80" - restart: always - - server: + judge0: image: judge0/judge0:latest-dev - environment: - - VIRTUAL_HOST=judge0.local + build: + context: . + target: development volumes: - .:/api ports: @@ -22,47 +12,20 @@ services: privileged: true db: - image: postgres:13.0 + image: postgres:16.2 env_file: judge0.conf volumes: - - postgres-data:/var/lib/postgresql/data/ - restart: always - - # Not actually currently used. Just for testing purposes in development. - pgbouncer: - image: pgbouncer/pgbouncer:1.14.0 - environment: # DATABASES_* are the same as from judge0.conf - - DATABASES_HOST=db - - DATABASES_PORT=5432 - - DATABASES_DBNAME=judge0 - - DATABASES_USER=judge0 - - DATABASES_PASSWORD=YourPasswordHere1234 - - PGBOUNCER_LISTEN_PORT=5432 # Set the same as Postgres + - data:/var/lib/postgresql/data/ restart: always redis: - image: redis:6.0 - command: [ - "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' - ] - env_file: judge0.conf - volumes: - - redis-data:/data - restart: always - - resque: - image: ennexa/resque-web:latest - entrypoint: "" + image: redis:7.2.4 command: [ "bash", "-c", - 'resque-web -FL -r redis://:$$REDIS_PASSWORD@$$REDIS_HOST:$$REDIS_PORT' + 'docker-entrypoint.sh --appendonly no --requirepass "$$REDIS_PASSWORD"' ] env_file: judge0.conf - ports: - - "5678:5678" restart: always volumes: - postgres-data: - redis-data: + data: diff --git a/docker-compose.https.yml b/docker-compose.https.yml deleted file mode 100644 index 30f6c208..00000000 --- a/docker-compose.https.yml +++ /dev/null @@ -1,77 +0,0 @@ -version: '2' - -x-logging: - &default-logging - logging: - driver: json-file - options: - max-size: 100m - -services: - nginx: - image: judge0/jwilder-nginx-proxy:latest-2020-10-30 - volumes: - - /var/run/docker.sock:/tmp/docker.sock:ro - - ./srv/nginx/vhost.d:/etc/nginx/vhost.d - - ./srv/nginx/html:/usr/share/nginx/html - - ./srv/ssl_certs:/etc/nginx/certs:ro - ports: - - "80:80" - - "443:443" - <<: *default-logging - restart: always - - letsencrypt: - image: judge0/jrcs-letsencrypt-nginx-proxy-companion:2.0 - volumes: - - /var/run/docker.sock:/var/run/docker.sock:ro - - ./srv/ssl_certs:/etc/nginx/certs:rw - volumes_from: - - nginx - <<: *default-logging - restart: always - - server: - image: judge0/judge0:latest - environment: - - VIRTUAL_HOST=example.com - - LETSENCRYPT_HOST=example.com - - LETSENCRYPT_EMAIL=john.doe@gmail.com - volumes: - - ./judge0.conf:/judge0.conf:ro - privileged: true - <<: *default-logging - restart: always - - workers: - image: judge0/judge0:latest - command: ["./scripts/workers"] - volumes: - - ./judge0.conf:/judge0.conf:ro - privileged: true - <<: *default-logging - restart: always - - db: - image: postgres:13.0 - env_file: judge0.conf - volumes: - - postgres-data:/var/lib/postgresql/data/ - <<: *default-logging - restart: always - - redis: - image: redis:6.0 - command: [ - "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' - ] - env_file: judge0.conf - volumes: - - redis-data:/data - <<: *default-logging - restart: always - -volumes: - postgres-data: - redis-data: \ No newline at end of file diff --git a/docker-compose.server.yml b/docker-compose.server.yml deleted file mode 100644 index d91feda9..00000000 --- a/docker-compose.server.yml +++ /dev/null @@ -1,47 +0,0 @@ -version: '2' - -x-logging: - &default-logging - logging: - driver: json-file - options: - max-size: 100m - -services: - server: - image: judge0/judge0:latest - volumes: - - ./judge0.conf:/judge0.conf:ro - ports: - - "2358:2358" - privileged: true - <<: *default-logging - restart: always - - db: - image: postgres:13.0 - env_file: judge0.conf - volumes: - - postgres-data:/var/lib/postgresql/data/ - ports: - - "5432:5432" - <<: *default-logging - restart: always - - redis: - image: redis:6.0 - command: [ - "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' - ] - env_file: judge0.conf - volumes: - - redis-data:/data - ports: - - "6379:6379" - <<: *default-logging - restart: always - -volumes: - postgres-data: - redis-data: \ No newline at end of file diff --git a/docker-compose.standalone.yml b/docker-compose.standalone.yml deleted file mode 100644 index a2835c55..00000000 --- a/docker-compose.standalone.yml +++ /dev/null @@ -1,70 +0,0 @@ -version: '2' - -x-logging: &logging - logging: - driver: json-file - options: - max-size: 100m - -x-db: &db - POSTGRES_HOST: db - POSTGRES_PORT: 5432 - POSTGRES_DB: judge0 - POSTGRES_USER: judge0 - POSTGRES_PASSWORD: YourPasswordHere1234 - -x-redis: &redis - REDIS_HOST: redis - REDIS_PORT: 6379 - REDIS_PASSWORD: YourPasswordHere1234 - -x-config: &config - JUDGE0_CONFIGURATION_OPTIONS_HELP: https://github.com/judge0/judge0/blob/master/judge0.conf - -services: - server: - image: judge0/judge0:latest - environment: - <<: *config - <<: *db - <<: *redis - ports: - - "2358:2358" - privileged: true - <<: *logging - restart: always - - workers: - image: judge0/judge0:latest - command: ["./scripts/workers"] - environment: - <<: *config - <<: *db - <<: *redis - privileged: true - <<: *logging - restart: always - - db: - image: postgres:13.0 - environment: *db - volumes: - - postgres-data:/var/lib/postgresql/data/ - <<: *logging - restart: always - - redis: - image: redis:6.0 - command: [ - "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' - ] - environment: *redis - volumes: - - redis-data:/data - <<: *logging - restart: always - -volumes: - postgres-data: - redis-data: \ No newline at end of file diff --git a/docker-compose.workers.yml b/docker-compose.workers.yml deleted file mode 100644 index 63b62abb..00000000 --- a/docker-compose.workers.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: '2' - -x-logging: - &default-logging - logging: - driver: json-file - options: - max-size: 100m - -services: - workers: - image: judge0/judge0:latest - command: ["./scripts/workers"] - volumes: - - ./judge0.conf:/judge0.conf:ro - privileged: true - <<: *default-logging - restart: always diff --git a/docker-compose.yml b/docker-compose.yml index 56e4d02d..67e0ec73 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,11 +1,9 @@ -version: '2' - x-logging: &default-logging logging: driver: json-file options: - max-size: 100m + max-size: 100M services: server: @@ -28,25 +26,22 @@ services: restart: always db: - image: postgres:13.0 + image: postgres:16.2 env_file: judge0.conf volumes: - - postgres-data:/var/lib/postgresql/data/ + - data:/var/lib/postgresql/data/ <<: *default-logging restart: always redis: - image: redis:6.0 + image: redis:7.2.4 command: [ "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' + 'docker-entrypoint.sh --appendonly no --requirepass "$$REDIS_PASSWORD"' ] env_file: judge0.conf - volumes: - - redis-data:/data <<: *default-logging restart: always volumes: - postgres-data: - redis-data: \ No newline at end of file + data: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 5bd80749..0f4e9911 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,3 +1,3 @@ #!/bin/bash -cron -exec "$@" \ No newline at end of file +sudo cron +exec "$@" diff --git a/docs/api/docs.md b/docs/api/docs.md index 1ecabf04..44dfd6f3 100644 --- a/docs/api/docs.md +++ b/docs/api/docs.md @@ -12,8 +12,6 @@ In our research paper [Robust and Scalable Online Code Execution System](https:/ To see Judge0 in action, try [Judge0 IDE](https://ide.judge0.com) - our free and open-source online code editor. You can also try using a [dummy client](/dummy-client.html) that can help you explore and test most of the features of Judge0. -Easily integrate online code editor with code execution (a.k.a. online compiler) to your website with our [**embeddable web widgets**](https://judge0.com/#judge0-widgets). - ## Features