WebApp Server
The setup scripts to create development environments for many groups.
Requirements
- Docker >1.13
- Python 3 (pip & venv)
- libyaml-dev
Setup
Students
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
Setup
The scripts require docker-compose
as well as other dependencies.
$ python3 -m venv .
$ . bin/activate
(webapp-server)$ pip3 install -r requirements.txt
Docker-compose
Based on the TSV file, you can generate a Docker Compose YAML file.
$ scripts/make_compose.py eatapp \
< students.tsv \
> teams/eatapp-compose.yml
Then adapt the port number, and run it.
$ docker-compose -f teams/eatapp-compose.yml up
Database creation
Reusing the docker-compose.yml
file, we create the databases.
$ scripts/bdd.py < teams/eatapp-compose.yml
Containers
If 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
Run via docker-compose
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!
Databases
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.
MySQL
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');
PostgreSQL
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';"
Standalone setup
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
Volumes and Windows
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/)