The setup scripts to create development environments for many groups.
- Docker >1.13
- Python 3 (pip & venv)
- libyaml-dev
The configuration is done via a TSV file (config/students.tsv). Here is its format:
| Lastname | Firstname | Group | Github | Image1 | Team1 | Image2 | Team2 | Comment | |
|---|---|---|---|---|---|---|---|---|---|
| Bon | Jean | jean.bon@example.org | INF3 | jeanjean | Laravel | ninjas | Rails | funky | - |
| Blanc | Yoan | yoan.blanc@he-arc.ch | Teacher | greut | Laravel | admin | Python | admin | - |
This is how this file is used:
- Lastname no particular usage
- Firstname becomes the username
- Email no particular usage
- Group no particular usage
- Github identifier to download the SSH public keys
- ImageX stores the information of which container to use
- TeamX will be the name of the virtual host and identify a container
- Comment no particular usage
The scripts require docker-compose as well as other dependencies.
$ python3 -m venv .
$ . bin/activate
(webapp-server)$ pip3 install -r requirements.txtBased on the TSV file, you can generate a Docker Compose YAML file.
$ scripts/make_compose.py eatapp \
< students.tsv \
> teams/eatapp-compose.ymlThen adapt the port number, and run it.
$ docker-compose -f teams/eatapp-compose.yml upReusing the docker-compose.yml file, we create the databases.
$ scripts/bdd.py < teams/eatapp-compose.ymlIf you don't want to use the publicly available containers, you can build them yourself.
# Base container
$ make base
# Laravel container
$ make laravel
# Python container
$ make python
# Rails container
$ make rails
Create a docker-compose.yml file base on the sample one.
Run the container(s)
# create the shared network
$ docker network create --driver=bridge webapp-net
# running the central services
$ docker-compose up -d
# running "a" project
$ docker-compose -f examples/base.yml up -d- Traefik control dashboard runs on port 8080.
- Portainer control dashboard runs on port 9000. The admin password must be set upon boot!
The databases are open the external world, hence we must modify the super admin password. Setting up a good one during the startup won't be as effective as it will be visible from within the containers anyway.
Change the password either in the docker-compose.yml file or afterwards this way.
$ mysql -h 127.0.0.1 -u root -proot
> SET PASSWORD FOR 'root'@'%' = PASSWORD('s3cur3@P45sw0rd');Change the password either in the docker-compose.yml file or afterwards this way.
$ psql -h 127.0.0.1 \
-U postgres \
-c "ALTER USER postgres WITH PASSWORD 's3cur3@P45sw0rd';"Below is a sample of a simple PHP machine with a MySQL instance. The default
environment variable can be overridden (see scripts/boot.sh)
version: "3"
services:
web:
image: hearcch/webapp-server:laravel
ports:
- "8080:80"
- "2222:22"
environment:
- GROUPNAME=test
- PASSWORD=test
- SSH_KEYS=greut
volumes:
- web:/var/www
depends_on:
- mysql
mysql:
image: mysql:5.7
ports:
- "3306:3306"
environment:
- MYSQL_DATABASE=test
- MYSQL_USER=test
- MYSQL_PASSWORD=test
- MYSQL_RANDOM_ROOT_PASSWORD=1
volumes:
- mysql:/var/lib/mysql
volumes:
web:
mysql:The login using your github SSH key.
$ ssh -p 2222 poweruser@127.0.0.1
On non-UNIX filesystem, it's okay to mount a local folder a the /var/www volume. However, on Windows, don't do it and mount the container volume on the machine using SFTP(e.g. http://www.sftpnetdrive.com/)