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