#!/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 } DIALOG=${DIALOG=dialog} tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$ trap "rm -f $tempfile" 0 1 2 5 15 $DIALOG --title "Configure" \ --inputbox "Domain root:" 12 51 2> $tempfile check_retval $? domain_root=`cat $tempfile` check_input $domain_root $DIALOG --title "Configure" \ --inputbox "Subdomain (can be empty):" 12 51 2> $tempfile check_retval $? sub_domain=`cat $tempfile` $DIALOG --title "Configure" --clear \ --menu "Use certificate signed by Let's Encrypt?" 12 51 2 \ "Y" "" \ "n" "" 2> $tempfile check_retval $? signed=`cat $tempfile` [ "${signed}" = "${signed#[Yy]}" ] signed=$? if [ $signed -ne 0 ]; then $DIALOG --title "Configure" \ --inputbox "Email:" 12 51 2> $tempfile check_retval $? email=`cat $tempfile` check_input $email fi if [ -z "$sub_domain" ] then domain="${domain_root}" else domain="${sub_domain}.${domain_root}" fi mkdir -p ./docker/bootstrap cat > ./docker/bootstrap/bootstrap.env < $tempfile check_retval $? dbms=`cat $tempfile` $DIALOG --title "Configure" --clear \ --inputbox "Social database name:" 12 51 2> $tempfile check_retval $? db=`cat $tempfile` if [ "${dbms}" = 'mariadb' ] then $DIALOG --title "Configure" --clear \ --inputbox "Database user:" 12 51 2> $tempfile check_retval $? user=`cat $tempfile` check_input $user fi $DIALOG --title "Configure" --clear \ --inputbox "Database password:" 12 51 2> $tempfile check_retval $? password=`cat $tempfile` check_input $password $DIALOG --title "Configure" --clear \ --inputbox "Sitename:" 12 51 2> $tempfile check_retval $? sitename=`cat $tempfile` check_input $sitename $DIALOG --title "Configure" --clear \ --inputbox "Admin nickname:" 12 51 2> $tempfile check_retval $? admin_nick=`cat $tempfile` check_input $admin_nick $DIALOG --title "Configure" --clear \ --inputbox "Admin password:" 12 51 2> $tempfile check_retval $? admin_password=`cat $tempfile` check_input $admin_password $DIALOG --clear --title "Configure" \ --menu "Site profile:" 12 51 4 \ "public" "" \ "private" "" \ "community" "" \ "single_user" "" 2> $tempfile check_retval $? profile=`cat $tempfile` $DIALOG --title "Configure" --clear \ --inputbox "Mailer dsn:" 12 51 2> $tempfile check_retval $? mailer_dsn=`cat $tempfile` check_input $mailer_dsn mkdir -p ./docker/db if [ "${dbms}" = 'mariadb' ]; then $DIALOG --title "Configure" --clear \ --inputbox "DB root password" 12 51 2> $tempfile check_retval $? db_root_password=`cat $tempfile` check_input $db_root_password cat > ./docker/db/db.env < ./docker/db/db.env <> .env.local mkdir -p ./docker/social cat > ./docker/social/social.env < docker-compose.yaml $DIALOG --title "Services" --clear \ --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> $tempfile check_retval $? choice=`cat $tempfile` 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