mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 20:13:46 +00:00 
			
		
		
		
	stop-server and restart-server address all services which talk to the database, and are thus more correct than restarting or stopping everything in supervisor. This is possible now that the previous commit ensures that the zulip user can read the zulip installation directory during `create-database`; previously, that directory was still owned by root when `create-database` was run, whereas now it is in `~zulip/deployments/`.
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | ||
| set -e
 | ||
| 
 | ||
| if [ "$EUID" -ne 0 ]; then
 | ||
|     echo "Error: This script must be run as root" >&2
 | ||
|     exit 1
 | ||
| fi
 | ||
| set -x
 | ||
| 
 | ||
| # What user should we use for connecting to the database
 | ||
| POSTGRES_USER="${POSTGRES_USER:-postgres}"
 | ||
| 
 | ||
| # What database name and username to use when connecting to the database
 | ||
| DATABASE_NAME=$(crudini --get /etc/zulip/zulip.conf postgresql database_name 2>/dev/null || echo zulip)
 | ||
| DATABASE_USER=$(crudini --get /etc/zulip/zulip.conf postgresql database_user 2>/dev/null || echo zulip)
 | ||
| 
 | ||
| # This psql command may fail because the Zulip database doesn’t exist,
 | ||
| # hence the &&.
 | ||
| if records="$(
 | ||
|     cd / # Make sure the current working directory is readable by postgres
 | ||
|     su "$POSTGRES_USER" -c "psql -v ON_ERROR_STOP=1 -Atc 'SELECT COUNT(*) FROM $DATABASE_NAME.zerver_message;' $DATABASE_USER"
 | ||
| )" && [ "$records" -gt 200 ]; then
 | ||
|     set +x
 | ||
|     echo "WARNING: This will delete your Zulip database which currently contains $records messages."
 | ||
|     read -p "Do you want to proceed? [y/N] " -r
 | ||
|     echo
 | ||
|     if [[ ! $REPLY =~ ^[Yy]$ ]]; then
 | ||
|         exit 1
 | ||
|     fi
 | ||
|     set -x
 | ||
| fi
 | ||
| 
 | ||
| # Shut down all services to ensure a quiescent state.
 | ||
| if [ -e "/var/run/supervisor.sock" ]; then
 | ||
|     su zulip -c "$(dirname "$0")/../stop-server"
 | ||
| fi
 | ||
| 
 | ||
| # Drop any open connections to any old database.
 | ||
| # Send the script via stdin in case the postgres user lacks permission to read it.
 | ||
| su -s /usr/bin/env - -- "$POSTGRES_USER" \
 | ||
|     bash -s - zulip zulip_base <"$(dirname "$0")/terminate-psql-sessions"
 | ||
| 
 | ||
| (
 | ||
|     cd / # Make sure the current working directory is readable by postgres
 | ||
|     su "$POSTGRES_USER" -c "psql -v ON_ERROR_STOP=1 -v dbname=$DATABASE_NAME -v dbuser=$DATABASE_USER -e"
 | ||
| ) <"$(dirname "$0")/create-db.sql"
 | ||
| 
 | ||
| # Set a postgres password if the postgres username is not "zulip".
 | ||
| # When the username is zulip, we rely on running as the zulip system
 | ||
| # user for authentication via postgres' peer authentication.
 | ||
| if [ "$DATABASE_USER" != "zulip" ]; then
 | ||
|     PASSWORD=$(crudini --get /etc/zulip/zulip-secrets.conf secrets postgres_password)
 | ||
|     su "$POSTGRES_USER" -c "psql -v ON_ERROR_STOP=1  -e postgres" <<EOF
 | ||
| ALTER ROLE $DATABASE_USER PASSWORD '$PASSWORD';
 | ||
| EOF
 | ||
| fi
 | ||
| 
 | ||
| # Clear memcached to avoid contamination from previous database state
 | ||
| "$(dirname "$0")/flush-memcached"
 | ||
| 
 | ||
| echo "Database created"
 |