io.livecode.ch is a prototype for turning code repositories into interactive tutorials and books, with code snippets that can be edited and run on the web.
git clone https://github.com/namin/io.livecode.ch
cd io.livecode.ch
git submodule init; git submodule update
cd pub/templates/local
git clone https://github.com/<user>/<repo>.git
cd ../..
(back topub
directory)python local.py
(powered by flask and requests)- visit
http://localhost:5000/learn/<user>/<repo>
- if you make code changes, refresh the server installation by visiting
http://io.livecode.ch/learn/<user>/<repo>?refresh=1
These steps have been tested on an Ubuntu derivative and Mac OS X.
-
Install dependencies
-
Set up local
io.livecode.ch
repository in a directory of your choicegit clone --recursive https://github.com/namin/io.livecode.ch
export LIVECODE_DIR=``pwd``/io.livecode.ch
-
Install the
io.livecode.ch
docker image- Get the official image
docker pull namin/io.livecode.ch
export LIVECODE_CONFIG="dev"
- Or build your own from the source repo
cd $LIVECODE_DIR; docker build -t=namin/io.livecode.ch-dev .
export LIVECODE_CONFIG="dev_docker"
- Get the official image
-
export GITHUB_BOT_TOKEN="your_access_token"
-
Run local development server
export APP_SETTINGS=$LIVECODE_DIR/cfg/$LIVECODE_CONFIG.cfg
cd $LIVECODE_DIR/pub
python __init__.py
These steps have been tested on a DigitalOcean (referral link) docker application droplet, and work regardless of the actual (sub)domain name of your server (i.e. no need to change occurrences of io.livecode.ch
in config files).
-
Create a new droplet in the DigitalOcean UI:
- for the image, select the default Ubuntu image
- for the other options, select as you please. My options:
- for the size, I use the second smallest droplet, though any other including the smallest should work too.
- for the last settings, I keep the default VirtIO enabled (I have not tested it disabled).
-
Initial setup of the server
- Instructions to install Docker
$ME
refers to your preferred username (e.g.namin
for me)$DKR
refers to a docker-enabled user (e.g.dkr
, which I use for scheduling docker cleanups)- as
root
:- be sure to set
$ME
and$DKR
as you like. I do:export ME=namin
export DKR=dkr
apt-get update
apt-get upgrade
- Install docker.
adduser $ME
usermod -a -G www-data,docker,sudo $ME
usermod -a -G docker www-data
adduser $DKR
usermod -a -G docker $DKR
- be sure to set
- as
$ME
:- set up your favorite editor (and other tools) as you please. I do:
- set up emacs
-
sudo apt-get install emacs
-
git clone -b server https://github.com/namin/.emacs.d.git
(in
$HOME
directory) -
run
emacs
to ensure customization works
-
- configure git
git config --global user.name "Nada Amin"
git config --global user.email "namin@alum.mit.edu"
git config --global core.editor emacs
- set up emacs
- pull official
io.livecode.ch
docker imagedocker pull namin/io.livecode.ch
- set up NGINX
-
sudo apt-get install nginx
-
sudo rm /etc/nginx/sites-enabled/default
(rationale: the default kicks in too easily)
-
(when adding another domain (e.g.
dev.livecode.ch
), I had to comment out this line in/etc/nginx/nginx.conf
:server_names_hash_bucket_size 64;
)
-
- set up dependencies
sudo apt-get install uwsgi uwsgi-plugin-python
sudo apt-get install redis-server
sudo apt-get install python-pip python-dev
sudo pip install flask redis docker-py
- set up website
cd /var
sudo mkdir -p www
sudo chown www-data:www-data www
sudo chmod g+w www
cd www
git clone https://github.com/namin/io.livecode.ch.git
cd io.livecode.ch
git submodule init; git submodule update
cp app.wsgi.sample app.wsgi
- edit the app.wsgi to include the environment variable
GITHUB_BOT_TOKEN
cd cfg
sudo cp nginx-site.sample /etc/nginx/sites-available/io.livecode.ch
sudo ln -s /etc/nginx/sites-available/io.livecode.ch /etc/nginx/sites-enabled/io.livecode.ch
sudo cp uwsgi-app.ini.sample /etc/uwsgi/apps-available/io.livecode.ch.ini
sudo ln -s /etc/uwsgi/apps-available/io.livecode.ch.ini /etc/uwsgi/apps-enabled/io.livecode.ch.ini
- set up your favorite editor (and other tools) as you please. I do:
- as
$DKR
:mkdir log
touch log/clean.log
contrab -e
- add line
*/10 * * * * (/var/www/io.livecode.ch/bin/clean) >>log/clean.log
-
docker run -i -t -u runner -e HOME=/home/runner namin/io.livecode.ch /bin/bash --login
(shell access)