#!/bin/sh check_retval(){ case $1 in 1|255) echo "Stopped" exit;; esac } check_input(){ if [ "$1" = "" ] then echo "Can't be empty" exit fi } exec 3>&1 domain_root=$(dialog \ --title "Configure" \ --ok-label "Ok" \ --clear \ --cancel-label "Exit" \ --inputbox "Domain root:" 12 51 \ 2>&1 1>&3) check_retval $? exec 3>&- check_input $domain_root exec 3>&1 sub_domain=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --inputbox "Subdomain (can be empty):" 12 51 \ 2>&1 1>&3) check_retval $? exec 3>&- exec 3>&1 signed=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --menu "Use certificate signed by Let's Encrypt?" 12 51 2 \ "Y" "" \ "n" "" \ 2>&1 1>&3) check_retval $? exec 3>&- [ "${signed}" = "${signed#[Yy]}" ] signed=$? if [ $signed -ne 0 ]; then exec 3>&1 email=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --inputbox "Email:" 12 51 \ 2>&1 1>&3) check_retval $? exec 3>&- check_input $email fi if [ -z "$sub_domain" ] then domain="${domain_root}" else domain="${sub_domain}.${domain_root}" fi root="$(git rev-parse --show-toplevel)" mkdir -p root/docker/bootstrap cat > ./docker/bootstrap/bootstrap.env <&1 dbms=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --menu "Select DBMS:" 12 51 2 \ "postgres" "" \ "mariadb" "" \ 2>&1 1>&3) check_retval $? exec 3>&- exec 3>&1 db=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --inputbox "Social database name:" 12 51 \ 2>&1 1>&3) check_retval $? exec 3>&- if [ "${dbms}" = 'mariadb' ] then exec 3>&1 user=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --inputbox "Database user:" 12 51 \ 2>&1 1>&3) check_retval $? exec 3>&- check_input $user fi exec 3>&1 password=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --inputbox "Database password:" 12 51 \ 2>&1 1>&3) check_retval $? exec 3>&- check_input $password exec 3>&1 sitename=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --inputbox "Sitename:" 12 51 \ 2>&1 1>&3) check_retval $? exec 3>&- check_input $sitename exec 3>&1 admin_nick=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --inputbox "Admin nickname:" 12 51 \ 2>&1 1>&3) check_retval $? exec 3>&- check_input $admin_nick exec 3>&1 admin_password=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --inputbox "Admin password:" 12 51 \ 2>&1 1>&3) check_retval $? exec 3>&- check_input $admin_password exec 3>&1 profile=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --menu "Site profile:" 12 51 4 \ "public" "" \ "private" "" \ "community" "" \ "single_user" "" \ 2>&1 1>&3) check_retval $? exec 3>&- exec 3>&1 mailer_dsn=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --inputbox "Mailer dsn:" 12 51 \ 2>&1 1>&3) check_retval $? exec 3>&- check_input $mailer_dsn mkdir -p root/docker/db if [ "${dbms}" = 'mariadb' ]; then exec 3>&1 db_root_password=$(dialog \ --title "Configure" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --inputbox "DB root password" 12 51 \ 2>&1 1>&3) check_retval $? exec 3>&- check_input $db_root_password cat > ./docker/db/db.env < ./docker/db/db.env <> .env.local mkdir -p root/docker/social cat > ./docker/social/social.env < docker-compose.yaml exec 3>&1 choice=$(dialog \ --title "Services" \ --clear \ --ok-label "Ok" \ --cancel-label "Exit" \ --checklist "Services to include in docker-compose:" 12 44 6 \ 1 "nginx" on \ 2 "certbot" on \ 3 "php" on \ 4 "db" on \ 5 "redis" on \ 2>&1 1>&3) check_retval $? exec 3>&- echo "\nservices:" >> docker-compose.yaml case $choice in *"1"*) echo " nginx: image: nginx:alpine depends_on: - php restart: always tty: false ports: - 80:80 - 443:443 volumes: # Nginx - ./docker/nginx/nginx.conf:/var/nginx/social.conf - ./docker/nginx/domain.sh:/var/nginx/domain.sh # Certbot - ./docker/certbot/www:/var/www/certbot - ./docker/certbot/.files:/etc/letsencrypt # Social - ./public:/var/www/social/public env_file: - ./docker/bootstrap/bootstrap.env - ./docker/db/db.env command: /bin/sh -c '/var/nginx/domain.sh; while :; do sleep 6h & wait \$\${!}; nginx -s reload; done & nginx -g \"daemon off;\"'\n" >> docker-compose.yaml;; esac case $choice in *"2"*) echo " certbot: image: certbot/certbot depends_on: - nginx # Check for certificate renewal every 12h as # recomnended by Let's Encryot entrypoint: /bin/sh -c 'trap exit TERM; while :; do certbot renew > /dev/null; sleep 12h & wait \$\${!}; done' volumes: - ./docker/certbot/www:/var/www/certbot - ./docker/certbot/.files:/etc/letsencrypt\n" >> docker-compose.yaml;; esac case $choice in *"3"*) echo " php: build: docker/php depends_on: - db restart: always tty: true ports: - 9000:9000 volumes: # Entrypoint - ./docker/php/entrypoint.sh:/entrypoint.sh - ./docker/db/wait_for_db.sh:/wait_for_db.sh - ./docker/social/install.sh:/var/entrypoint.d/social_install.sh # Main files - .:/var/www/social env_file: - ./docker/social/social.env - ./docker/db/db.env command: /entrypoint.sh\n" >> docker-compose.yaml;; esac case $choice in *"4"*) echo " db: image: postgres:alpine restart: always tty: false ports: - 5432:5432 environment: - PGDATA=/var/lib/postgres/data env_file: - ./docker/db/db.env volumes: - database:/var/lib/postgres/data\n" >> docker-compose.yaml;; esac case $choice in *"5"*) echo " redis: image: redis:alpine restart: always tty: false ports: - 6379:6379" >> docker-compose.yaml;; esac echo "\nvolumes:\n database:" >> docker-compose.yaml clear