diff --git a/template/build_ci.py b/template/build_ci.py index 7455836..1c89b47 100644 --- a/template/build_ci.py +++ b/template/build_ci.py @@ -3,7 +3,7 @@ from template import make_template Template.build( - make_template(set_user_workdir=True), + make_template(), alias=os.environ["E2B_TESTS_TEMPLATE"], cpu_count=2, memory_mb=2048, diff --git a/template/build_docker.py b/template/build_docker.py index 17c1709..7d1438a 100644 --- a/template/build_docker.py +++ b/template/build_docker.py @@ -1,5 +1,5 @@ from template import make_template from e2b import Template -tmp = make_template(kernels=["python", "javascript"]) +tmp = make_template(kernels=["python", "javascript"], is_docker=True) print(Template.to_dockerfile(tmp)) diff --git a/template/build_prod.py b/template/build_prod.py index d88c447..5274d8c 100644 --- a/template/build_prod.py +++ b/template/build_prod.py @@ -5,7 +5,7 @@ load_dotenv() Template.build( - make_template(set_user_workdir=True), + make_template(), alias="code-interpreter-v1", cpu_count=2, memory_mb=2048, diff --git a/template/build_test.py b/template/build_test.py index 2e22878..a11128c 100644 --- a/template/build_test.py +++ b/template/build_test.py @@ -5,9 +5,9 @@ load_dotenv() Template.build( - make_template(kernels=["python", "javascript"], set_user_workdir=True), + make_template(kernels=["python", "javascript"]), alias="code-interpreter-dev", - cpu_count=1, - memory_mb=1024, + cpu_count=2, + memory_mb=2048, on_build_logs=default_build_logger(min_level="debug"), ) diff --git a/template/start-up.sh b/template/start-up.sh index 8137508..d30cfc9 100755 --- a/template/start-up.sh +++ b/template/start-up.sh @@ -13,10 +13,10 @@ function start_jupyter_server() { response=$(curl -s -o /dev/null -w "%{http_code}" "http://localhost:8888/api/status") done - cd /.server/ + cd /root/.server/ .venv/bin/uvicorn main:app --host 0.0.0.0 --port 49999 --workers 1 --no-access-log --no-use-colors --timeout-keep-alive 640 } echo "Starting Code Interpreter server..." start_jupyter_server & -MATPLOTLIBRC=.config/matplotlib/.matplotlibrc jupyter server --IdentityProvider.token="" >/dev/null 2>&1 +MATPLOTLIBRC=/root/.config/matplotlib/.matplotlibrc jupyter server --IdentityProvider.token="" >/dev/null 2>&1 diff --git a/template/template.py b/template/template.py index 3623450..7fb2f1e 100644 --- a/template/template.py +++ b/template/template.py @@ -3,7 +3,7 @@ def make_template( kernels: list[str] = ["python", "r", "javascript", "deno", "bash", "java"], - set_user_workdir: bool = False, + is_docker: bool = False, ): enabled_kernels = set(["python", "javascript"] + kernels) # Start with base template @@ -11,15 +11,15 @@ def make_template( Template() .from_image("python:3.12") .set_user("root") - .set_workdir("/") + .set_workdir("/root") .set_envs( { "PIP_DEFAULT_TIMEOUT": "100", "PIP_DISABLE_PIP_VERSION_CHECK": "1", "PIP_NO_CACHE_DIR": "1", - "JUPYTER_CONFIG_PATH": ".jupyter", - "IPYTHON_CONFIG_PATH": ".ipython", - "SERVER_PATH": ".server", + "JUPYTER_CONFIG_PATH": "/root/.jupyter", + "IPYTHON_CONFIG_PATH": "/root/.ipython", + "SERVER_PATH": "/root/.server", "JAVA_VERSION": "11", "JAVA_HOME": "/usr/lib/jvm/jdk-${JAVA_VERSION}", "IJAVA_VERSION": "1.3.0", @@ -117,9 +117,6 @@ def make_template( ) ) - if set_user_workdir: - template = template.set_user("user").set_workdir("/home/user") - # Copy configuration files template = ( template.copy("matplotlibrc", ".config/matplotlib/.matplotlibrc") @@ -131,6 +128,18 @@ def make_template( .copy("startup_scripts", ".ipython/profile_default/startup") ) + if is_docker: + # create user user and /home/user + template = template.run_cmd("useradd -m user") + template = template.run_cmd("mkdir -p /home/user") + template = template.run_cmd("chown -R user:user /home/user") + # add to sudoers + template = template.run_cmd( + "echo 'user ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers" + ) + + template = template.set_user("user").set_workdir("/home/user") + return template.set_start_cmd( - ".jupyter/start-up.sh", wait_for_url("http://localhost:49999/health") + "sudo /root/.jupyter/start-up.sh", wait_for_url("http://localhost:49999/health") )