Use docker-compose to manage containers. #19
|
@ -28,10 +28,12 @@ services:
|
|||
image: debian:buster
|
||||
commands:
|
||||
- .drone/auth1-setup.sh
|
||||
- sleep infinity
|
||||
- name: coffee
|
||||
image: debian:buster
|
||||
commands:
|
||||
- .drone/coffee-setup.sh
|
||||
- sleep infinity
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
|
|
|
@ -46,7 +46,7 @@ cp .drone/nsswitch.conf /etc/nsswitch.conf
|
|||
service nslcd start
|
||||
ldapadd -c -f .drone/data.ldif -Y EXTERNAL -H ldapi:///
|
||||
if [ -z "$CI" ]; then
|
||||
ldapadd -c -f .drone/uwldap_data.ldif -Y EXTERNAL -H ldapi:///
|
||||
ldapadd -c -f .drone/uwldap_data.ldif -Y EXTERNAL -H ldapi:/// ||:
|
||||
|
||||
fi
|
||||
|
||||
# KERBEROS
|
||||
|
@ -95,12 +95,10 @@ done
|
|||
|
||||
apt install -y netcat-openbsd
|
||||
# sync with phosphoric-acid
|
||||
nc -l 0.0.0.0 9000
|
||||
nc -l 0.0.0.0 9000 &
|
||||
if [ -z "$CI" ]; then
|
||||
# sync with coffee
|
||||
nc -l 0.0.0.0 9001
|
||||
nc -l 0.0.0.0 9001 &
|
||||
# sync with mail
|
||||
nc -l 0.0.0.0 9002
|
||||
nc -l 0.0.0.0 9002 &
|
||||
fi
|
||||
|
||||
sleep infinity
|
||||
|
|
|
@ -18,7 +18,7 @@ service mysql stop
|
|||
sed -E -i 's/^(bind-address[[:space:]]+= 127.0.0.1)$/#\1/' /etc/mysql/mariadb.conf.d/50-server.cnf
|
||||
service mysql start
|
||||
cat <<EOF | mysql
|
||||
CREATE USER 'mysql' IDENTIFIED BY 'mysql';
|
||||
CREATE USER IF NOT EXISTS 'mysql' IDENTIFIED BY 'mysql';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'mysql' WITH GRANT OPTION;
|
||||
EOF
|
||||
|
||||
|
@ -52,6 +52,4 @@ if [ -z "$CI" ]; then
|
|||
fi
|
||||
|
||||
# sync with phosphoric-acid
|
||||
nc -l 0.0.0.0 9000
|
||||
|
||||
sleep infinity
|
||||
nc -l 0.0.0.0 9000 &
|
||||
|
|
|
@ -8,7 +8,7 @@ set -ex
|
|||
add_fqdn_to_hosts $(get_ip_addr $(hostname)) mail
|
||||
add_fqdn_to_hosts $(get_ip_addr auth1) auth1
|
||||
|
||||
. venv/bin/activate
|
||||
[ -f venv/bin/activate ] && . venv/bin/activate
|
||||
python tests/MockMailmanServer.py &
|
||||
python tests/MockSMTPServer.py &
|
||||
|
||||
|
@ -18,6 +18,4 @@ apt install -y netcat-openbsd
|
|||
auth_setup mail
|
||||
|
||||
# sync with phosphoric-acid
|
||||
nc -l 0.0.0.0 9000
|
||||
|
||||
sleep infinity
|
||||
nc -l 0.0.0.0 9000 &
|
||||
|
|
|
@ -5,9 +5,9 @@ set -ex
|
|||
. .drone/common.sh
|
||||
|
||||
# set FQDN in /etc/hosts
|
||||
add_fqdn_to_hosts $(get_ip_addr $(hostname)) phosphoric-acid
|
||||
add_fqdn_to_hosts $(get_ip_addr auth1) auth1
|
||||
add_fqdn_to_hosts $(get_ip_addr coffee) coffee
|
||||
add_fqdn_to_hosts "$(get_ip_addr $(hostname))" phosphoric-acid
|
||||
add_fqdn_to_hosts "$(get_ip_addr auth1)" auth1
|
||||
add_fqdn_to_hosts "$(get_ip_addr coffee)" coffee
|
||||
# mail container doesn't run in CI
|
||||
if [ -z "$CI" ]; then
|
||||
add_fqdn_to_hosts $(get_ip_addr mail) mail
|
||||
|
@ -25,12 +25,11 @@ cp /etc/skel/* /users/skel/
|
|||
|
||||
# create directories for users
|
||||
for user in ctdalek regular1 exec1; do
|
||||
mkdir /users/$user
|
||||
mkdir -p /users/$user
|
||||
chown $user:$user /users/$user
|
||||
done
|
||||
|
||||
sync_with coffee
|
||||
if [ -z "$CI" ]; then
|
||||
sync_with mail
|
||||
sleep infinity
|
||||
fi
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
#!/bin/sh
|
||||
# A script that supervises a program. The program is restarted TIMEOUT second after it exits.
|
||||
# SIGHUP restarts the program
|
||||
# SIGTERM and SIGINT stops the program
|
||||
|
||||
TIMEOUT=1
|
||||
|
||||
running=1
|
||||
trap 'kill -TERM $! 2>/dev/null' HUP
|
||||
trap 'running=0; kill -TERM $! 2>/dev/null' TERM INT
|
||||
trap 'running=0; kill -KILL $! 2>/dev/null' EXIT
|
||||
|
||||
while [ "$running" = 1 ]; do
|
||||
"$@" &
|
||||
wait
|
||||
sleep "$TIMEOUT"
|
||||
done
|
37
README.md
37
README.md
|
@ -10,26 +10,37 @@ overview of its architecture.
|
|||
If you are not modifying code related to email or Mailman, then you may use
|
||||
Docker containers instead, which are much easier to work with than the VM.
|
||||
```
|
||||
docker.sh up
|
||||
docker-compose up -d # or without -d to run in the foreground
|
||||
```
|
||||
This will create some containers with the bare minimum necessary for ceod to
|
||||
run. Run `docker logs -f phosphoric-acid` and wait until you see the line
|
||||
`sleep infinity`. Then attach to each of phosphoric-acid, mail and coffee,
|
||||
and start ceod (see 'Running the application', below). Once inside a container,
|
||||
make sure to `cd` into the current working directory on the host.
|
||||
|
||||
To use ceo, run the following inside the phosphoric-acid container:
|
||||
run, and start ceod on each of phosphoric-acid, mail, and coffee container.
|
||||
You can check the containers status using:
|
||||
```sh
|
||||
docker-compose logs -f
|
||||
```
|
||||
login
|
||||
<username is ctdalek, password is krb5>
|
||||
<cd into your directory OUTSIDE the container>
|
||||
. venv/bin/activate
|
||||
python -m ceo
|
||||
|
||||
To use ceo, run the following:
|
||||
```sh
|
||||
docker-compose exec phosphoric-acid bash
|
||||
su ctdalek
|
||||
python -m ceo # the password for kerobos is krb5
|
||||
```
|
||||
This should bring up the TUI.
|
||||
|
||||
Normally, ceod should autoamtically restart when the source files are changed.
|
||||
To manually restart the service, run:
|
||||
```sh
|
||||
docker-compose kill -s SIGHUP phosphoric-acid
|
||||
```
|
||||
|
||||
To stop the containers, run:
|
||||
```sh
|
||||
docker-compose down
|
||||
```
|
||||
Alternatively, if you started docker-compose in the foreground, just press Ctrl-C.
|
||||
|
||||
### VM
|
||||
If you are making changes related to email or Mailman, you will need the full
|
||||
If you need the full environment running in VM, follow the guide on
|
||||
[syscom dev environment](https://git.uwaterloo.ca/csc/syscom-dev-environment).
|
||||
This will setup all of the services needed for ceo to work. You should clone
|
||||
this repo in the phosphoric-acid container under ctdalek's home directory; you
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
version: "3.6"
|
||||
|
||||
x-common: &common
|
||||
image: python:3.7-buster
|
||||
volumes:
|
||||
- .:$PWD
|
||||
environment:
|
||||
FLASK_APP: ceod.api
|
||||
FLASK_ENV: development
|
||||
working_dir: $PWD
|
||||
entrypoint:
|
||||
- ./docker-entrypoint.sh
|
||||
|
||||
services:
|
||||
auth1:
|
||||
<<: *common
|
||||
image: debian:buster
|
||||
hostname: auth0
|
||||
command: auth1
|
||||
|
||||
coffee:
|
||||
<<: *common
|
||||
command: coffee
|
||||
hostname: coffee
|
||||
depends_on:
|
||||
- auth1
|
||||
|
||||
mail:
|
||||
<<: *common
|
||||
command: mail
|
||||
hostname: mail
|
||||
depends_on:
|
||||
- auth1
|
||||
|
||||
phosphoric-acid:
|
||||
<<: *common
|
||||
command: phosphoric-acid
|
||||
hostname: phosphoric-acid
|
||||
depends_on:
|
||||
- auth1
|
||||
- coffee
|
||||
- mail
|
||||
|
||||
# vim: expandtab sw=2 ts=2
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/sh -e
|
||||
host="$1"
|
||||
[ -x ".drone/$host-setup.sh" ] && "./.drone/$host-setup.sh"
|
||||
|
||||
if [ "$host" = auth1 ]; then
|
||||
exec sleep infinity
|
||||
else
|
||||
python3 -m pip install -r requirements.txt -r dev-requirements.txt
|
||||
merenber
commented
The venv should be installed on the host - this will save a lot of disk space. The venv should be installed on the host - this will save a lot of disk space.
|
||||
exec ./.drone/supervise.sh flask run -h 0.0.0.0 -p 9987
|
||||
fi
|
41
docker.sh
41
docker.sh
|
@ -1,41 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -x
|
||||
|
||||
case $1 in
|
||||
up)
|
||||
if ! [ -d venv ]; then
|
||||
docker run --rm -v "$PWD:$PWD" -w "$PWD" python:3.7-buster \
|
||||
sh -c "python -m venv venv && . venv/bin/activate && pip install -r dev-requirements.txt && pip install -r requirements.txt"
|
||||
fi
|
||||
docker network create ceod
|
||||
for host in auth1 coffee mail phosphoric-acid; do
|
||||
if [ $host = auth1 ]; then
|
||||
image=debian:buster
|
||||
else
|
||||
image=python:3.7-buster
|
||||
fi
|
||||
docker run \
|
||||
--detach \
|
||||
--name $host \
|
||||
--hostname $host \
|
||||
--network ceod \
|
||||
--volume "$PWD:$PWD" \
|
||||
--workdir "$PWD" \
|
||||
--env FLASK_APP=ceod.api \
|
||||
--env FLASK_ENV=development \
|
||||
$image .drone/$host-setup.sh
|
||||
done
|
||||
;;
|
||||
down)
|
||||
for host in auth1 coffee mail phosphoric-acid; do
|
||||
docker kill $host
|
||||
docker rm $host
|
||||
done
|
||||
docker network rm ceod
|
||||
;;
|
||||
*)
|
||||
echo 'Usage: docker.sh <up|down>' >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
Loading…
Reference in New Issue
Why are we ignoring the error? Are you trying to make the script idempotent?
Yeah. This is actually not the optimal setup with Docker with these setup scripts running every time it starts. But this is the minimal change for a running Docker setup without recreating and rerunning everything everytime.