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
|
||||
merenber
commented
This is necessary for Drone, since service containers exit after the last command. This is necessary for Drone, since service containers exit after the last command.
If you don't want this in the shell script, then you need to add it back into .drone.yml.
|
||||
|
|
|
@ -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
|
||||
merenber
commented
Same comment as above. Same comment as above.
|
||||
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
|
||||
merenber
commented
Same comment as above. Same comment as above.
|
||||
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
|
||||
merenber
commented
Logging in as ctdalek will automatically acquire a Kerberos ticket (via libpam-krb5). Logging in as ctdalek will automatically acquire a Kerberos ticket (via libpam-krb5).
r345liu
commented
Ah, good to know. Ah, good to know.
|
||||
```
|
||||
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
|
||||
merenber
commented
I don't see this anywhere in your docker-compose.yml? (the docker network) I don't see this anywhere in your docker-compose.yml? (the docker network)
r345liu
commented
docker-compose automatically creates a network using the project name for all services defined in the file, so we don't need to create one manually. docker-compose automatically creates a network using the project name for all services defined in the file, so we don't need to create one manually.
|
||||
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.