#!/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/