mirror of
				https://github.com/cookiecutter/cookiecutter-django.git
				synced 2025-11-04 01:47:28 +03:00 
			
		
		
		
	adds docker database controls
This commit is contained in:
		
							parent
							
								
									93c65590ee
								
							
						
					
					
						commit
						eb4092c159
					
				
							
								
								
									
										11
									
								
								{{cookiecutter.repo_name}}/compose/postgres/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								{{cookiecutter.repo_name}}/compose/postgres/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
FROM postgres:9.5
 | 
			
		||||
 | 
			
		||||
# add backup scripts
 | 
			
		||||
ADD backup.sh /usr/local/bin/backup
 | 
			
		||||
ADD restore.sh /usr/local/bin/restore
 | 
			
		||||
ADD list-backups.sh /usr/local/bin/list-backups
 | 
			
		||||
 | 
			
		||||
# make them executable
 | 
			
		||||
RUN chmod +x /usr/local/bin/restore
 | 
			
		||||
RUN chmod +x /usr/local/bin/list-backups
 | 
			
		||||
RUN chmod +x /usr/local/bin/backup
 | 
			
		||||
							
								
								
									
										22
									
								
								{{cookiecutter.repo_name}}/compose/postgres/backup.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								{{cookiecutter.repo_name}}/compose/postgres/backup.sh
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# stop on errors
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
# we might run into trouble when using the default `postgres` user, e.g. when dropping the postgres
 | 
			
		||||
# database in restore.sh. Check that something else is used here
 | 
			
		||||
if [ "$POSTGRES_USER" == "postgres" ]
 | 
			
		||||
then
 | 
			
		||||
    echo "creating a backup as the postgres user is not supported, make sure to set the POSTGRES_USER environment variable"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# export the postgres password so that subsequent commands don't ask for it
 | 
			
		||||
export PGPASSWORD=$POSTGRES_PASSWORD
 | 
			
		||||
 | 
			
		||||
echo "creating backup"
 | 
			
		||||
echo "---------------"
 | 
			
		||||
 | 
			
		||||
FILENAME=backup_$(date +'%Y_%m_%dT%H_%M_%S').sql
 | 
			
		||||
pg_dump -h postgres -U $POSTGRES_USER >> /backups/$FILENAME
 | 
			
		||||
 | 
			
		||||
echo "successfully created backup $FILENAME"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
echo "listing available backups"
 | 
			
		||||
echo "-------------------------"
 | 
			
		||||
ls /backups/
 | 
			
		||||
							
								
								
									
										56
									
								
								{{cookiecutter.repo_name}}/compose/postgres/restore.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								{{cookiecutter.repo_name}}/compose/postgres/restore.sh
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# stop on errors
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
# we might run into trouble when using the default `postgres` user, e.g. when dropping the postgres
 | 
			
		||||
# database in restore.sh. Check that something else is used here
 | 
			
		||||
if [ "$POSTGRES_USER" == "postgres" ]
 | 
			
		||||
then
 | 
			
		||||
    echo "restoring as the postgres user is not supported, make sure to set the POSTGRES_USER environment variable"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# export the postgres password so that subsequent commands don't ask for it
 | 
			
		||||
export PGPASSWORD=$POSTGRES_PASSWORD
 | 
			
		||||
 | 
			
		||||
# check that we have an argument for a filename candidate
 | 
			
		||||
if [[ $# -eq 0 ]] ; then
 | 
			
		||||
    echo 'usage:'
 | 
			
		||||
    echo '    docker-compose run postgres restore <backup-file>'
 | 
			
		||||
    echo ''
 | 
			
		||||
    echo 'to get a list of available backups, run:'
 | 
			
		||||
    echo '    docker-compose run postgres list-backups'
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# set the backupfile variable
 | 
			
		||||
BACKUPFILE=/backups/$1
 | 
			
		||||
 | 
			
		||||
# check that the file exists
 | 
			
		||||
if ! [ -f $BACKUPFILE ]; then
 | 
			
		||||
    echo "backup file not found"
 | 
			
		||||
    echo 'to get a list of available backups, run:'
 | 
			
		||||
    echo '    docker-compose run postgres list-backups'
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "beginning restore from $1"
 | 
			
		||||
echo "-------------------------"
 | 
			
		||||
 | 
			
		||||
# delete the db
 | 
			
		||||
# deleting the db can fail. Spit out a comment if this happens but continue since the db
 | 
			
		||||
# is created in the next step
 | 
			
		||||
echo "deleting old database $POSTGRES_USER"
 | 
			
		||||
if dropdb -h postgres -U $POSTGRES_USER $POSTGRES_USER
 | 
			
		||||
then echo "deleted $POSTGRES_USER database"
 | 
			
		||||
else echo "database $POSTGRES_USER does not exist, continue"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# create a new database
 | 
			
		||||
echo "creating new database $POSTGRES_USER"
 | 
			
		||||
createdb -h postgres -U $POSTGRES_USER $POSTGRES_USER -O $POSTGRES_USER
 | 
			
		||||
 | 
			
		||||
# restore the database
 | 
			
		||||
echo "restoring database $POSTGRES_USER"
 | 
			
		||||
psql -h postgres -U $POSTGRES_USER < $BACKUPFILE
 | 
			
		||||
| 
						 | 
				
			
			@ -1,11 +1,12 @@
 | 
			
		|||
version: '2'
 | 
			
		||||
services:
 | 
			
		||||
  postgres:
 | 
			
		||||
    image: postgres:9.5
 | 
			
		||||
    build: ./compose/postgres
 | 
			
		||||
    volumes:
 | 
			
		||||
      # If you are using boot2docker, postgres data has to live in the VM for now until #581 is fixed
 | 
			
		||||
      # for more info see here: https://github.com/boot2docker/boot2docker/issues/581
 | 
			
		||||
      - /data/dev/{{cookiecutter.repo_name}}/postgres:/var/lib/postgresql/data
 | 
			
		||||
      - /data/dev/{{cookiecutter.repo_name}}/postgres-backups:/backups
 | 
			
		||||
    environment:
 | 
			
		||||
      - POSTGRES_USER={{cookiecutter.repo_name}}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ services:
 | 
			
		|||
    image: postgres:9.5
 | 
			
		||||
    volumes:
 | 
			
		||||
      - /data/{{cookiecutter.repo_name}}/postgres:/var/lib/postgresql/data
 | 
			
		||||
      - /data/{{cookiecutter.repo_name}}/postgres-backups:/backups
 | 
			
		||||
    env_file: .env
 | 
			
		||||
 | 
			
		||||
  django:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user