How to deploy a learn-ocaml instance
This section explains how to deploy an instance of the learn-ocaml platform on a server.
Using pre-built docker images
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 '{{.Mountpoint}}'
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 withoutsudo
or 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).
Manual compilation
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)
-
Compile the learn-ocaml management tool using:
make && make opaminstall
-
Build the app for your given exercise repository. This will put it into a
www/
directory:learn-ocaml build --repo DIR
(depending on your opam configuration, you might need to run the command from thelearn-ocaml
directory or to specify the absolute path to the command:.../learn-ocaml/_opam/bin/learn-ocaml
) -
Run the learn-ocaml web server
learn-ocaml serve --port 8080