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 withoutsudoor adding your current user to the groupdocker. 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 2.0.0~rc2).
Install the dependencies using:
opam switch create . --deps-only && opam install opam-installer && eval $(opam env)
make && make opaminstall
www/ directory:
    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/_opam/bin/learn-ocaml)
learn-ocaml serve --port 8080