forked from GNUsocial/gnu-social
		
	
		
			
				
	
	
		
			308 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			308 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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 <<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
 | |
| 
 | |
| git_dir=$PWD
 | |
| while [ ! -d .git ]; do
 | |
|     git_dir=$(dirname "${git_dir}")
 | |
| done
 | |
| 
 | |
| cd "${git_dir}" || exit
 | |
| 
 | |
| if [ ! -f ./docker/bootstrap/bootstrap.env ]; then
 | |
|    printf "bootstrap.env missing! Please run the bootstrap_certificates script.\n"
 | |
|    exit 1
 | |
| fi
 | |
| 
 | |
| . ./docker/bootstrap/bootstrap.env
 | |
| 
 | |
| $DIALOG --clear --title "Configure" \
 | |
|         --menu "Select DBMS:" 12 51 2 \
 | |
|         "postgres"  "" \
 | |
|         "mariadb" ""  2> $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 <<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
 | |
| POSTGRES_PASSWORD=${password}
 | |
| EOF
 | |
| 
 | |
|     user='postgres'
 | |
|     database_url="DATABASE_URL=postgresql://${user}:${password}@db:5432/${db}"
 | |
| 
 | |
| fi
 | |
| 
 | |
| echo "${database_url}" >> .env.local
 | |
| 
 | |
| mkdir -p ./docker/social
 | |
| 
 | |
| cat > ./docker/social/social.env <<EOF
 | |
| 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}"
 | |
| MAILER_DSN="${mailer_dsn}"
 | |
| EOF
 | |
| 
 | |
| 
 | |
| ##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
 | |
| 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
 | |
| 
 | |
| 
 |