hangar18/setup.sh

309 lines
8.1 KiB
Bash
Executable File

#!/bin/bash
#
# zestawianie całej magii
#
# konfiguracja
static_data_dir="/opt/hangar18"
mode=""
# czy chcemy publicznemu nginxowi od razu przydzielić publiczne porty?
public_nginx_ports=false # true/false
# a tu dokładna opcja, która miałaby być użyta
public_nginx_ports_def=""
if [ $public_nginx_ports = true ]; then
# to jest w formacie opcji -p dockera,
# a zatem jeśli chcemy porty 80 i 443 "upublicznić", użyjemy:
# -p 80:80 -p 443:443
public_nginx_ports_def=" -p 80:80 -p 443:443 "
fi
# jeśli mamy 2 argumenty, pierwszy to switch, drugi to katalog
# jeśli tylko jeden -- albo jedno, albo drugie, trzeba rozpoznać po '--' na początku
if [[ "$1" != "" ]]; then
# mamy drugi argument?
if [[ "$2" != "" ]]; then
# przypisujemy
static_data_dir="$2"
mode="$1"
# reality checks
if [[ "${static_data_dir:0:2}" == "--" ]]; then
echo "to nie wygląda na katalog: $static_data_dir"
exit 1
fi
if [[ "${mode:0:2}" != "--" ]]; then
echo "to nie wygląda na tryb pracy: $mode"
exit 1
fi
# z czym mamy do czynienia?
elif [[ "${1:0:2}" == "--" ]]; then
# znaczy, tryb!
mode="$1"
else
# znaczy, katalog!
static_data_dir="$1"
fi
fi
# prefix obrazów, kontenerów, ...
prefix="plug"
#
# budujemy
#
# czy budujemy?
if [[ "$mode" == "" || "$mode" == "--build" ]]; then
# katalog obecny
startdir=`pwd`
# budujemy nowy dom...
cd images/
for img in postgres etherpad php-fpm nginx pgadmin rest cron; do
# informujemy
echo -ne "\n\n - buduję: $prefix/$img\n"
# budujemy
docker build -t "$prefix/$img" $img || exit 1
done
# wracamy
cd "$startdir"
fi
#
# katalog konfiguracji, danych, i tak dalej
#
if [[ "$mode" == "" || "$mode" == "--populate-static-data" ]]; then
# potrzebujemy sudo
echo "By jechać dalej, potrzebujemy sudo. To ja poproszę..."
sudo echo -ne " ...mamy sudo, jedziemy dalej.\n\n\n" || exit 2
# tworzymy
sudo mkdir -p "$static_data_dir"
# run
sudo mkdir -p "$static_data_dir/run"
sudo mkdir -p "$static_data_dir/run/php-fpm"
sudo mkdir -p "$static_data_dir/run/openldap"
# logi
sudo mkdir -p "$static_data_dir/logs/"
sudo mkdir -p "$static_data_dir/logs/postgres"
sudo mkdir -p "$static_data_dir/logs/etherpad"
sudo mkdir -p "$static_data_dir/logs/php-fpm"
sudo mkdir -p "$static_data_dir/logs/openldap"
sudo mkdir -p "$static_data_dir/logs/nginx-public"
sudo mkdir -p "$static_data_dir/logs/nginx-internal"
# dane
sudo mkdir -p "$static_data_dir/data"
sudo mkdir -p "$static_data_dir/data/postgres"
sudo mkdir -p "$static_data_dir/data/php-fpm"
sudo mkdir -p "$static_data_dir/data/php-fpm/frontend"
sudo mkdir -p "$static_data_dir/data/php-fpm/ldapadmin"
sudo mkdir -p "$static_data_dir/data/cron"
sudo mkdir -p "$static_data_dir/data/cron/d"
sudo mkdir -p "$static_data_dir/data/cron/daily"
sudo mkdir -p "$static_data_dir/data/cron/weekly"
sudo mkdir -p "$static_data_dir/data/cron/hourly"
sudo mkdir -p "$static_data_dir/data/cron/monthly"
sudo rsync -av static_data/data/ "$static_data_dir/data/"
# configs if needed
if [ ! -e "$static_data_dir/configs" ]; then
sudo cp -a static_data/configs "$static_data_dir/configs"
fi
# uprawnienia
sudo chown -R root:root "$static_data_dir"
fi
#
# obrazy
#
img_postgres="$prefix/postgres"
img_nginx="$prefix/nginx"
img_phpfpm="$prefix/php-fpm"
img_pgadmin="$prefix/pgadmin"
img_rest="$prefix/rest"
img_cron="$prefix/cron"
img_etherpad="$prefix/etherpad"
#
# kontenery
#
# postgres
cnt_postgres="$prefix-postgres"
# nginx
cnt_nginx_public="$prefix-nginx.public"
cnt_nginx_internal="$prefix-nginx.internal"
# php-fpm
cnt_phpfpm_frontend="$prefix-php-fpm.frontend"
cnt_rest="$prefix-rest"
cnt_pgadmin="$prefix-pgadmin"
#cnt_phpfpm_ldapadmin="$prefix-ldapadmin"
# cron
cnt_cron="$prefix-cron"
# cron
cnt_etherpad="$prefix-etherpad"
# wszystkie
cnt_all="$cnt_postgres $cnt_nginx_public $cnt_nginx_internal $cnt_phpfpm_frontend $cnt_rest $cnt_pgadmin $cnt_phpfpm_ldapadmin $cnt_cron $cnt_etherpad"
#
# stopujemy (w tym zawsze przy domyslnej akcji)
#
if [[ "$mode" == "" || "$mode" == "--stop" ]]; then
echo -ne "\n\nzatrzymuję kontenery...\n"
docker stop $cnt_all
docker kill $cnt_all
docker rm -v $cnt_all
fi
#
# killujemy
#
if [[ "$mode" == "--kill" ]]; then
echo -ne "\n\nzabijam kontenery...\n"
docker kill $cnt_all
docker rm -v $cnt_all
fi
#
# odpalamy kolejno dockery
#
if [[ "$mode" == "" || "$mode" == "--run" ]]; then
echo -ne "\n\nuruchamiam kontenery...\n"
set -x
# postgres wpierw, inne się doń łączą
docker run -d \
-v "$static_data_dir/data/postgres":/var/lib/postgresql/ \
-v "$static_data_dir/logs/postgres":/var/log/postgresql/ \
--name $cnt_postgres \
$img_postgres
# etherpad
docker run -d \
-v "$static_data_dir/logs/etherpad/":/var/log/etherpad \
--link $cnt_postgres:$cnt_postgres \
--name $cnt_etherpad \
$img_etherpad
# - rest
docker run -d \
-v "$static_data_dir/logs/php-fpm/":/var/log/php-fpm \
-v "$static_data_dir/run/php-fpm/":/var/run/php-fpm \
--link $cnt_postgres:$cnt_postgres \
-e "APP_NAME=rest" \
--name $cnt_rest \
$img_rest
# - pgadmin
docker run -d \
-v "$static_data_dir/configs/pgadmin/":/opt/pgadmin/conf/:ro \
-v "$static_data_dir/logs/php-fpm/":/var/log/php-fpm \
-v "$static_data_dir/run/php-fpm/":/var/run/php-fpm \
--link $cnt_postgres:$cnt_postgres \
--name $cnt_pgadmin \
$img_pgadmin
# - ldapadmin
#docker run -d \
# -v "$static_data_dir/data/php-fpm/ldapadmin/":/opt/php/ldapadmin/ \
# -v "$static_data_dir/logs/php-fpm/":/var/log/php-fpm \
# -v "$static_data_dir/run/php-fpm/":/var/run/php-fpm \
# -e "APP_NAME=ldapadmin" \
# --name $cnt_phpfpm_ldapadmin \
# $img_phpfpm
# czas na nginxy
# - publiczny
docker run -d \
-v "$static_data_dir/configs/nginx-public/":/etc/nginx/sites-enabled:ro \
-v "$static_data_dir/logs/nginx-public/":/var/log/nginx/ \
-v "$static_data_dir/run/php-fpm/":/var/run/php-fpm/ \
-v "$static_data_dir/data/php-fpm/":/opt/php/ \
--link $cnt_etherpad:$cnt_etherpad \
--name $cnt_nginx_public \
$public_nginx_ports_def \
$img_nginx
# - wewnętrzny
docker run -d \
-v "$static_data_dir/configs/nginx-internal/":/etc/nginx/sites-enabled:ro \
-v "$static_data_dir/logs/nginx-internal/":/var/log/nginx/ \
-v "$static_data_dir/run/php-fpm/":/var/run/php-fpm/ \
-v "$static_data_dir/data/php-fpm/":/opt/php/ \
--volumes-from $cnt_pgadmin \
--volumes-from $cnt_rest \
--name $cnt_nginx_internal \
$img_nginx
# php-fpm front-endowy
# tu, bo musi mieć dostęp do nginx.private, by robić restowe zapytania
# a teraz php-fpmy!
# - frontend
docker run -d \
-v "$static_data_dir/data/php-fpm/frontend/":/opt/php/frontend/ \
-v "$static_data_dir/logs/php-fpm/":/var/log/php-fpm \
-v "$static_data_dir/run/php-fpm/":/var/run/php-fpm \
--link $cnt_nginx_internal:rest \
-e "APP_NAME=frontend" \
--name $cnt_phpfpm_frontend \
$img_phpfpm
# - cron
# TODO: czy powinien mieć dostęp do db i ldapa?
docker run -d \
-v "$static_data_dir/data/cron/d/":/etc/cron.d/ \
-v "$static_data_dir/data/cron/daily/":/etc/cron.daily/ \
-v "$static_data_dir/data/cron/weekly/":/etc/cron.weekly/ \
-v "$static_data_dir/data/cron/hourly/":/etc/cron.hourly/ \
-v "$static_data_dir/data/cron/monthly/":/etc/cron.monthly/ \
--name $cnt_cron \
$img_cron
set +x
fi
if [[ "$mode" == "" || "$mode" == "--status" ]]; then
echo -ne "\n\nwszystko odpalone, kontenery:\n"
for cnt in $cnt_all; do
if [[ "`docker inspect --format '{{ .State.Running }}' $cnt`" == "true" ]]; then
echo " - $cnt : `docker inspect --format '{{ .NetworkSettings.IPAddress }}' $cnt`"
else
echo " - $cnt : leży"
fi
done
fi
# food for thought
# https://medium.com/coding-and-deploying-in-the-cloud/simple-logging-to-logentries-from-a-docker-container-d3609073db30
# http://phusion.github.io/baseimage-docker/
# https://blog.logentries.com/2014/03/how-to-run-rsyslog-in-a-docker-container-for-logging/
# https://github.com/octohost/remote_syslog
# http://www.projectatomic.io/blog/2014/09/running-syslog-within-a-docker-container/