| 
									
										
										
										
											2020-05-06 11:57:32 +00:00
										 |  |  | #!/bin/sh | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval(){ | 
					
						
							|  |  |  |   case $1 in | 
					
						
							|  |  |  |     1|255) | 
					
						
							|  |  |  |       echo "Stopped" | 
					
						
							|  |  |  |       exit;; | 
					
						
							|  |  |  |   esac | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | check_input(){ | 
					
						
							|  |  |  |   if [ "$1" = "" ]  | 
					
						
							|  |  |  |   then   | 
					
						
							|  |  |  |     echo "Can't be empty"  | 
					
						
							|  |  |  |     exit  | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | DIALOG=${DIALOG=dialog} | 
					
						
							|  |  |  | tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$ | 
					
						
							|  |  |  | trap "rm -f $tempfile" 0 1 2 5 15 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | $DIALOG --title "Configure"  \ | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  |         --inputbox "Domain root:" 12 51 2> $tempfile | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | domain_root=`cat $tempfile` | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_input $domain_root | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | $DIALOG --title "Configure"  \ | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  |         --inputbox "Subdomain (can be empty):" 12 51 2> $tempfile | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | sub_domain=`cat $tempfile` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | $DIALOG --title "Configure" --clear \ | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  |         --menu "Use certificate signed by Let's Encrypt?" 12 51 2 \ | 
					
						
							|  |  |  |         "Y"  "" \ | 
					
						
							|  |  |  |         "n" ""  2> $tempfile | 
					
						
							|  |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | signed=`cat $tempfile` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ "${signed}" = "${signed#[Yy]}" ] | 
					
						
							|  |  |  | signed=$? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [ $signed -ne 0 ]; then | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  |   $DIALOG --title "Configure"  \ | 
					
						
							|  |  |  |         --inputbox "Email:" 12 51 2> $tempfile | 
					
						
							|  |  |  |   check_retval $? | 
					
						
							|  |  |  |   email=`cat $tempfile` | 
					
						
							|  |  |  |   check_input $email | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | 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 <<EOF | 
					
						
							|  |  |  | #!/bin/sh | 
					
						
							|  |  |  | email=${email} | 
					
						
							|  |  |  | domain=${domain} | 
					
						
							|  |  |  | domain_root=${domain_root} | 
					
						
							|  |  |  | signed=${signed} | 
					
						
							|  |  |  | EOF | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | chmod +x ./docker/bootstrap/bootstrap.env | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | docker-compose -f docker/bootstrap/bootstrap.yaml up | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-16 12:37:06 +00:00
										 |  |  | git_dir=$PWD | 
					
						
							|  |  |  | while [ ! -d .git ]; do | 
					
						
							|  |  |  |     git_dir=$(dirname "${git_dir}") | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | cd "${git_dir}" || exit | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-07 13:29:17 +01:00
										 |  |  | if [ ! -f ./docker/bootstrap/bootstrap.env ]; then | 
					
						
							|  |  |  |    printf "bootstrap.env missing! Please run the bootstrap_certificates script.\n" | 
					
						
							|  |  |  |    exit 1 | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-05 15:10:20 +00:00
										 |  |  | . ./docker/bootstrap/bootstrap.env | 
					
						
							| 
									
										
										
										
											2020-05-06 11:57:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | $DIALOG --clear --title "Configure" \ | 
					
						
							|  |  |  |         --menu "Select DBMS:" 12 51 2 \ | 
					
						
							|  |  |  |         "postgres"  "" \ | 
					
						
							|  |  |  |         "mariadb" ""  2> $tempfile | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | dbms=`cat $tempfile` | 
					
						
							| 
									
										
										
										
											2020-05-06 11:57:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | $DIALOG --title "Configure" --clear \ | 
					
						
							|  |  |  |         --inputbox "Social database name:" 12 51 2> $tempfile | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | db=`cat $tempfile` | 
					
						
							| 
									
										
										
										
											2020-05-06 11:57:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | if [ "${dbms}" = 'mariadb' ]  | 
					
						
							|  |  |  | then | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  |   $DIALOG --title "Configure" --clear \ | 
					
						
							|  |  |  |           --inputbox "Database user:" 12 51 2> $tempfile | 
					
						
							|  |  |  |   check_retval $? | 
					
						
							|  |  |  |   user=`cat $tempfile` | 
					
						
							|  |  |  |   check_input $user | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | fi | 
					
						
							| 
									
										
										
										
											2020-05-16 12:37:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | $DIALOG --title "Configure" --clear \ | 
					
						
							|  |  |  |         --inputbox "Database password:" 12 51 2> $tempfile | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | password=`cat $tempfile` | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_input $password | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | $DIALOG --title "Configure" --clear \ | 
					
						
							|  |  |  |         --inputbox "Sitename:" 12 51 2> $tempfile | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | sitename=`cat $tempfile` | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_input $sitename | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | $DIALOG --title "Configure" --clear \ | 
					
						
							|  |  |  |         --inputbox "Admin nickname:" 12 51 2> $tempfile | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | admin_nick=`cat $tempfile` | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_input $admin_nick | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | $DIALOG --title "Configure" --clear \ | 
					
						
							|  |  |  |         --inputbox "Admin password:" 12 51 2> $tempfile | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | admin_password=`cat $tempfile` | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_input $admin_password | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | $DIALOG --clear --title "Configure" \ | 
					
						
							|  |  |  |         --menu "Site profile:" 12 51 4 \ | 
					
						
							|  |  |  |         "public"  "" \ | 
					
						
							|  |  |  |         "private"  "" \ | 
					
						
							|  |  |  |         "community"  "" \ | 
					
						
							|  |  |  |         "single_user" ""  2> $tempfile | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | profile=`cat $tempfile` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $DIALOG --title "Configure" --clear \ | 
					
						
							|  |  |  |         --inputbox "Mailer dsn:" 12 51 2> $tempfile | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | mailer_dsn=`cat $tempfile` | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_input $mailer_dsn | 
					
						
							| 
									
										
										
										
											2020-05-16 12:37:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | mkdir -p ./docker/db | 
					
						
							| 
									
										
										
										
											2020-05-06 11:57:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-16 12:37:06 +00:00
										 |  |  | if [ "${dbms}" = 'mariadb' ]; then | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  |     $DIALOG --title "Configure" --clear \ | 
					
						
							|  |  |  |             --inputbox "DB root password" 12 51 2> $tempfile | 
					
						
							|  |  |  |     check_retval $? | 
					
						
							|  |  |  |     db_root_password=`cat $tempfile` | 
					
						
							|  |  |  |     check_input $db_root_password | 
					
						
							| 
									
										
										
										
											2020-05-06 11:57:32 +00:00
										 |  |  |     cat > ./docker/db/db.env <<EOF | 
					
						
							|  |  |  | DBMS=${dbms} | 
					
						
							|  |  |  | MYSQL_ROOT_PASSWORD=${db_root_password} | 
					
						
							|  |  |  | EOF | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     database_url="DATABASE_URL=mysql://${user}:${password}@db:3306/${db}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     cat > ./docker/db/db.env <<EOF | 
					
						
							|  |  |  | DBMS=${dbms} | 
					
						
							|  |  |  | POSTGRES_USER=postgres | 
					
						
							| 
									
										
										
										
											2020-05-16 12:37:06 +00:00
										 |  |  | POSTGRES_PASSWORD=${password} | 
					
						
							| 
									
										
										
										
											2020-05-06 11:57:32 +00:00
										 |  |  | EOF | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-16 12:37:06 +00:00
										 |  |  |     user='postgres' | 
					
						
							| 
									
										
										
										
											2020-05-06 11:57:32 +00:00
										 |  |  |     database_url="DATABASE_URL=postgresql://${user}:${password}@db:5432/${db}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-30 22:40:37 +00:00
										 |  |  | echo "${database_url}" >> .env.local | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-06 11:57:32 +00:00
										 |  |  | mkdir -p ./docker/social | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | cat > ./docker/social/social.env <<EOF | 
					
						
							| 
									
										
										
										
											2020-07-10 14:01:49 +00:00
										 |  |  | SOCIAL_DBMS="${dbms}" | 
					
						
							|  |  |  | SOCIAL_DB="${db}" | 
					
						
							|  |  |  | SOCIAL_USER="${user}" | 
					
						
							|  |  |  | SOCIAL_PASSWORD="${password}" | 
					
						
							|  |  |  | SOCIAL_DOMAIN="${domain}" | 
					
						
							|  |  |  | SOCIAL_SITENAME="${sitename}" | 
					
						
							|  |  |  | SOCIAL_ADMIN_NICK="${admin_nick}" | 
					
						
							|  |  |  | SOCIAL_ADMIN_PASSWORD="${admin_password}" | 
					
						
							|  |  |  | SOCIAL_ADMIN_EMAIL="${email}" | 
					
						
							|  |  |  | SOCIAL_SITE_PROFILE="${profile}" | 
					
						
							| 
									
										
										
										
											2020-07-30 22:40:37 +00:00
										 |  |  | MAILER_DSN="${mailer_dsn}" | 
					
						
							| 
									
										
										
										
											2020-05-06 11:57:32 +00:00
										 |  |  | EOF | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##docker-compose  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo "version: '3.3'" > 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 | 
					
						
							| 
									
										
										
										
											2020-10-20 23:23:51 +01:00
										 |  |  | check_retval $? | 
					
						
							| 
									
										
										
										
											2020-10-20 02:49:49 +01:00
										 |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |