This section explains how to deploy an instance of the learn-ocaml platform on a server.
Assuming your exercise repository is in directory REPOSITORY, you can either:
build and serve it directly on port 80 (REPOSITORY needs to be an absolute path) using
docker run --rm -v REPOSITORY:/repository:ro -v learn-ocaml-sync:/sync -p 80:8080 --name learn-ocaml-server ocamlsf/learn-ocaml:master
NB: Do not forget to escape
: if it appears in
REPOSITORY to avoid a parsing error of the command line arguments.
or generate a new docker image that includes your repository:
cd REPOSITORY wget https://raw.githubusercontent.com/ocaml-sf/learn-ocaml/master/Dockerfile.app docker build -t learn-ocaml-app -f Dockerfile.app .
and then deploy that image:
docker run --rm -p 80:8080 -v learn-ocaml-sync:/sync --name learn-ocaml-server learn-ocaml-app
The user data will persist between runs within the Docker “Volume” called
learn-ocaml-sync. You can find out where it stores its data using:
docker volume inspect learn-ocaml-sync -f ''
This method can allow you to distribute the Docker image, which doesn’t contain the exercise solutions in plaintext.
A remark about security
As a reminder, the Docker deamon’s socket is owned by default by
root. Hence, these scripts cannot work without
sudoor adding your current user to the group
docker. For more information, see post installation steps for Linux from the documentation. In any case, be advised there exists security flaws in the Docker daemon (see documentation).
Note: you need a working
opam environment (at least
Install the dependencies using:
opam switch create . --deps-only && opam install opam-installer && eval $(opam env)
make && make opaminstall
learn-ocaml build --repo DIR
(depending on your opam configuration, you might need to run the command from the
learn-ocaml directory or to specify the absolute path to the command:
learn-ocaml serve --port 8080