Skip to content

Instantly share code, notes, and snippets.

@robkooper
Created September 26, 2019 15:24
Show Gist options
  • Save robkooper/826576ca67c42034e15125108209ba2a to your computer and use it in GitHub Desktop.
Save robkooper/826576ca67c42034e15125108209ba2a to your computer and use it in GitHub Desktop.
PEcAn installation using docker only
# this assumes a Ubuntu 18.04 VM
# run following as root
sudo -s
# install docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
apt-get -qq update
apt-get install -y docker-ce
# install docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# add carya user
useradd -c "PEcAn Demo User" -g users -G docker -m -p $(echo "illinois" | openssl passwd -1 -stdin) -s /bin/bash carya
# switch to carya user
sudo -H -s -u carya
cd
# create some folder
mkdir -p ~/docker/{traefik,pecan,postgres,rabbitmq,portainer,site-library}
mkdir -o ~/docker/pecan/workflows
chmod 777 ~/docker/pecan/workflows
# clone pecan
git clone https://github.com/PecanProject/pecan.git
cd pecan
git checkout develop
cd
# setup docker environment
ln -s pecan/docker-compose.yml docker-compose.yml
# setup docker .env file
cat << EOF > .env
TRAEFIK_IPFILTER=172.16.0.0/12
PECAN_VERSION=develop
EOF
# create docker-compose.override.yml
cat << EOF > docker-compose.override.yml
version: "3"
services:
web:
volumes:
- \${HOME}/pecan/web:/var/www/html/pecan
- \${HOME}/pecan/docker/web/config.docker.php:/var/www/html/pecan/config.php
rstudio:
volumes:
- site-library:/usr/local/lib/R/site-library/
- \${HOME}/pecan:/home/carya/pecan
executor:
volumes:
- site-library:/usr/local/lib/R/site-library/
- \${HOME}/pecan:/pecan
sipnet:
volumes:
- site-library:/usr/local/lib/R/site-library/
ed2:
volumes:
- site-library:/usr/local/lib/R/site-library/
maespa:
volumes:
- site-library:/usr/local/lib/R/site-library/
# if you change any of the volumes you will need the volumes header.
volumes:
# use a local subfolders in data folder to store the volumes.
traefik:
driver_opts:
type: none
device: \${HOME}/docker/traefik
o: bind
postgres:
driver_opts:
type: none
device: \${HOME}/docker/postgres
o: bind
rabbitmq:
driver_opts:
type: none
device: \${HOME}/docker/rabbitmq
o: bind
pecan:
driver_opts:
type: none
device: \${HOME}/docker/pecan
o: bind
site-library:
driver_opts:
type: none
device: \${HOME}/docker/site-library
o: bind
portainer:
driver_opts:
type: none
device: \${HOME}/docker/portainer
o: bind
EOF
# start postgres
docker-compose up -d postgres
# copy site-library
docker run -ti --rm -v ~/docker/site-library:/site-library pecan/base:develop cp -dr /usr/local/lib/R/site-library/. /site-library
# initialize bety
docker-compose run --rm bety initialize
# start pecan
docker-compose up -d
# add data
docker run -ti --rm --network carya_pecan --volume carya_pecan:/data --env FQDN=docker pecan/data:develop
docker rmi pecan/data:develop
# build pecan
docker-compose exec executor /bin/sh -c 'cd /pecan && make'
# add cronjob
cat << EOF > /tmp/cronjob
@reboot (cd ${HOME} && /usr/local/bin/docker-compose pull --quiet && /usr/local/bin/docker-compose up --no-color --detach 2>&1 | grep -v up-to-date)
0 0 * * * (cd ${HOME} && /usr/local/bin/docker-compose pull --quiet && /usr/local/bin/docker-compose up --no-color --detach 2>&1 | grep -v up-to-date)
EOF
(crontab -l 2>/dev/null; cat /tmp/cronjob) | crontab -
# add compile script
cat << EOF > compile
#!/bin/sh
cd ${HOME}
docker-compose exec executor /bin/sh -c 'cd /pecan && make'
EOF
chmod 755 compile
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment