#! /bin/bash -e # Provision an AWS cloud instance with tutor. # Run with: curl -sSL https://raw.githubusercontent.com/regisb/tutor/master/cloud/aws.sh | bash -e export DEBIAN_FRONTEND=noninteractive echo "=============== Installing system dependencies" sudo apt update \ && sudo apt install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common echo "=============== Installing docker" curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io sudo usermod -aG docker $USER sudo su - $USER echo "=============== Run local docker registry on port 5000" docker run -d -p 5000:5000 --restart=always --name docker_registry registry:2.7.1 echo "=============== Installing docker-compose" sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose echo "=============== Installing tutor" export TUTOR_VERSION="$(curl -sSL https://api.github.com/repos/regisb/tutor/releases/latest | grep tag_name | sed "s/.*tag_name\": \"\(.*\)\",/\1/g")" sudo curl -L "https://github.com/regisb/tutor/releases/download/$TUTOR_VERSION/tutor-$(uname -s)_$(uname -m)" -o /usr/local/bin/tutor sudo chmod +x /usr/local/bin/tutor echo "=============== Pulling vendor docker images" tutor config save tutor images pull elasticsearch tutor images pull memcached tutor images pull mongodb tutor images pull mysql tutor images pull nginx tutor images pull rabbitmq tutor images pull smtp echo "=============== Tagging vendor docker images" docker tag $(tutor config printvalue DOCKER_IMAGE_ELASTICSEARCH) localhost:5000/$(tutor config printvalue DOCKER_IMAGE_ELASTICSEARCH) docker tag $(tutor config printvalue DOCKER_IMAGE_MEMCACHED) localhost:5000/$(tutor config printvalue DOCKER_IMAGE_MEMCACHED) docker tag $(tutor config printvalue DOCKER_IMAGE_MONGODB) localhost:5000/$(tutor config printvalue DOCKER_IMAGE_MONGODB) docker tag $(tutor config printvalue DOCKER_IMAGE_MYSQL) localhost:5000/$(tutor config printvalue DOCKER_IMAGE_MYSQL) docker tag $(tutor config printvalue DOCKER_IMAGE_SMTP) localhost:5000/$(tutor config printvalue DOCKER_IMAGE_SMTP) docker tag $(tutor config printvalue DOCKER_IMAGE_NGINX) localhost:5000/$(tutor config printvalue DOCKER_IMAGE_NGINX) docker tag $(tutor config printvalue DOCKER_IMAGE_RABBITMQ) localhost:5000/$(tutor config printvalue DOCKER_IMAGE_RABBITMQ) echo "=============== Pushing vendor docker images to the local registry" docker push localhost:5000/$(tutor config printvalue DOCKER_IMAGE_ELASTICSEARCH) docker push localhost:5000/$(tutor config printvalue DOCKER_IMAGE_MEMCACHED) docker push localhost:5000/$(tutor config printvalue DOCKER_IMAGE_MONGODB) docker push localhost:5000/$(tutor config printvalue DOCKER_IMAGE_MYSQL) docker push localhost:5000/$(tutor config printvalue DOCKER_IMAGE_SMTP) docker push localhost:5000/$(tutor config printvalue DOCKER_IMAGE_NGINX) docker push localhost:5000/$(tutor config printvalue DOCKER_IMAGE_RABBITMQ) echo "=============== Building openedx docker images" tutor config save --set ACTIVATE_NOTES=true --set ACTIVATE_XQUEUE=true --set DOCKER_REGISTRY=localhost:5000/ tutor images build all echo "=============== Create Web UI script" echo '#! /bin/bash if [ ! -f $(tutor config printroot)/env/webui/config.yml ]; then mkdir -p $(tutor config printroot)/env/webui tutor webui configure --user tutor --password "$(curl http://169.254.169.254/latest/meta-data/instance-id)" fi tutor webui start' | sudo tee /usr/local/bin/tutor-webui sudo chmod +x /usr/local/bin/tutor-webui echo "=============== Configuring systemd" echo "[Unit] Description=Tutor web UI After=network.target [Service] User=$USER WorkingDirectory=/home/$USER Environment=HOME=/home/$USER Environment=TUTOR_DOCKER_REGISTRY=localhost:5000/ ExecStart=/usr/local/bin/tutor-webui Restart=on-failure [Install] WantedBy=multi-user.target" | sudo tee /etc/systemd/system/tutor-webui.service sudo systemctl enable tutor-webui echo "=============== Clean tutor environment, configuration and data" sudo rm -rf $(tutor config printroot) echo "=============== Clean authorized keys" sudo find / -name "authorized_keys" -exec rm -f {} \; echo "=============== Clean history" sudo find /root/.*history /home/*/.*history -exec rm -f {} \;