On two machines
Prerequisite
- Ubuntu server 16.04 operating system.
-
Record the Domain names, Public and Private IP Addresses and Login Credentials of both the machines. Let label the IP addresses as follows.
Machine Public IP Private IP Front-End-and-LB Public_IP_1 Private_IP_1 Execution-Nodes Public_IP_2 Private_IP_2 Because of ease of use, domain names (DNS) are a preferred option for hostnames in all the configuration files. If you have domain names for the machines, you can use the domain names in the place of IP addresses in all the configuration files.
Most likely, your machine may be on a corporate private network with a gateway / proxy server / firewall connection to Internet. In that case, please use your machine's private ip address.
You can locate the configured IP address of your machine using the following command.
ip addr show
in the displayed output, look for IP address following the inet keyword. -
Change the listening port of SSH server to 2222 in /etc/ssh/sshd_config file and restart the SSH server using the following command.
sudo service ssh restart
If the SSH server is not running on your machine, please ignore the rest of this section and directly go to On Machine 1 section. - For the SSH setting to be fully effective, logout of the current SSH session and relogin.
- From Machine 1, SSH into Machine 2 using its Private IP once to add the SSH server public key of Machine 2 to
~/.ssh/known_hosts
in Machine 1.
On Machine 1
- Create SSH config file (~/.ssh/config) with the following contents.
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
- Create ansible config file (~/.ansible.cfg) with the following contents
[defaults]
host_key_checking = False
- Clone Repository
git clone https://github.com/AutolabJS/AutolabJS
- Change to deploy directory
cd AutolabJS/deploy
- Execute setup script
./setup.sh
- Configure the AutolabJS components by editing the configuration files in
deploy/configs/<component>
. Note that you need to use the Private IP of the machines wherever required.
The list of configuration files to be changed are:
deploy/configs/main_server: APIKeys.json, conf.json, courses.json, labs.json
deploy/configs/load_balancer: nodes_data_conf.json
deploy/configs/execution_nodes: scores.json, conf.json -
Edit the ansible inventory file. You can find the inventory in
AutolabJS/deploy
directory.-
Update the credentials as required. Please make sure that the changed passwords match in both the inventory file and the configuration files.
The locations of credentials are:File MySQL GitLab Main Server deploy/inventory ✔ ✔ deploy/configs/main_server/APIKeys.json ✔ (for /admin route) deploy/configs/main_server/conf.json ✔ ✔ deploy/configs/load_balancer/nodes_data_conf.json ✔ -
In the
gitlab
section of inventory file, change the hostname of gitlab item from localhost to Public IP. The line should look like
``` [gitlab]
ansible_connection=local ansible_python_interpreter=/usr/bin/python2 gitlab_password= ``` The only exception to the use of private IP is given in the above line. If your Gitlab installation runs on a computer with one public IP address and one private IP address, use the public_IP_1 address in the above line. Otherwise, use private_IP_1 address. -
-
In the
loadbalancer
section of inventory file, change gitlab_hostname variable in loadbalancer group to Private IP of Machine 1.
``` [loadbalancer]localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python2 submissions_dir=../load_balancer/submissions gitlab_hostname=
gitlab_password=12345678 4. In the `executionnodes` section of inventory file, change the hostname of **executionnode** item to **Private IP** of Execution Node and change gitlab_hostname variable to **Private IP** of Machine 1. The connection to execution nodes is changed from localhost to ssh. The line should look like
[executionnodes]ansible_connection=ssh ansible_user= ansible_password= ansible_python_interpreter=/usr/bin/python2 gitlab_hostname= gitlab_password=12345678 port=8082 `` 1. Run the ansible-playbook
sudo ansible-playbook -i inventory playbook.yml -u--ask-sudo-pass`
The username and the password to be provided are the credentials of root user of machine2. -
Ansible installs all the components of AutolabJS. If the previous step executes successfully, the installation is complete.
-
Add cron job to restart the AutolabJS components automatically. You need to do this on both the machines.
- Login as root
sudo su
- Copy restart script to root account on both the machines
cp deploy/autolab-restart.sh /root/
You need to usesftp
to copy autolab-restart.sh script to machine2. - Open crontab editor as root user
crontab -e
- Enter a job in the file to run the restart script every minute.
* * * * * bash /root/autolab-restart.sh
- Login as root
-
In case of installation failure due to incorrect configuration, please see the FAQ page to see if you can resolve the error. If not, you can run the following commands to uninstall AutolabJS.
-
The uninstall command is:
sudo ansible-playbook -i inventory uninstall.yml -u <username2> --ask-sudo-pass
The username and the password to be provided are the credentials of root user of machine2. -
Remove the previously generated SSH keys
rm -f AutolabJS/deploy/keys/main_server/*
rm -f AutolabJS/deploy/keys/load_balancer/id_rsa*
-
Check the configuration done in steps - (6), (7) and Repeat the installation step-(8) given above.
-
-
After successful installation, delete SSH and ansible configuration files.
rm ~/.ssh/config ~/.ansible.cfg
-
Installation creates containers for main server, load balancer, execution node, data base and Gitlab. For further information on managing these containers see container maintenance page.