provision.sh 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/bin/bash
  2. PROJECT_NAME=$1
  3. : ${PROJECT_DIR:=/vagrant}
  4. : ${DEV_USER:=vagrant}
  5. VIRTUALENV_DIR=/home/$DEV_USER/.virtualenvs/$PROJECT_NAME
  6. PYTHON=$VIRTUALENV_DIR/bin/python
  7. PIP=$VIRTUALENV_DIR/bin/pip
  8. # Update APT database
  9. apt-get update -y
  10. apt install -y python3-pip
  11. pip3 install virtualenv
  12. # Virtualenv setup for project
  13. su - $DEV_USER -c "virtualenv --python=python3 $VIRTUALENV_DIR"
  14. # Replace previous line with this if you are using Python 2
  15. # su - $DEV_USER -c "virtualenv --python=python2 $VIRTUALENV_DIR"
  16. su - $DEV_USER -c "echo $PROJECT_DIR > $VIRTUALENV_DIR/.project"
  17. # Upgrade PIP
  18. su - $DEV_USER -c "$PIP install --upgrade pip"
  19. # Install PIP requirements
  20. su - $DEV_USER -c "cd $PROJECT_DIR && $PIP install -r requirements/base.txt"
  21. # Set execute permissions on manage.py as they get lost if we build from a zip file
  22. chmod a+x $PROJECT_DIR/manage.py
  23. # copy local settings file
  24. cp $PROJECT_DIR/bakerydemo/settings/local.py.example $PROJECT_DIR/bakerydemo/settings/local.py
  25. # add .env file for django-dotenv environment variable definitions
  26. echo DJANGO_SETTINGS_MODULE=$PROJECT_NAME.settings.dev > $PROJECT_DIR/.env
  27. if [ -n "$USE_POSTGRESQL" ]
  28. then
  29. echo Creating database.....
  30. DB_EXISTS=$(
  31. su - $DEV_USER -c \
  32. "psql -lqt | cut -d \| -f 1 | grep -q '^ $PROJECT_NAME $' && echo yes || echo no"
  33. )
  34. if [[ "$DB_EXISTS" == "no" ]]; then
  35. echo Database does not exist, creating...
  36. su - $DEV_USER -c "createdb $PROJECT_NAME"
  37. else
  38. echo Database already exists, skipping...
  39. fi
  40. su - $DEV_USER -c "$PIP install \"psycopg2-binary>=2.7,<3\""
  41. cat << EOF >> $PROJECT_DIR/bakerydemo/settings/local.py
  42. DATABASES = {
  43. 'default': {
  44. 'ENGINE': 'django.db.backends.postgresql',
  45. 'NAME': '$PROJECT_NAME',
  46. }
  47. }
  48. EOF
  49. fi
  50. # Run syncdb/migrate/load_initial_data/update_index
  51. su - $DEV_USER -c "$PYTHON $PROJECT_DIR/manage.py migrate --noinput && \
  52. $PYTHON $PROJECT_DIR/manage.py load_initial_data && \
  53. $PYTHON $PROJECT_DIR/manage.py update_index"
  54. # Add a couple of aliases to manage.py into .bashrc
  55. BASHRC=/home/$DEV_USER/.bashrc
  56. BASHRC_BACKUP="${BASHRC}__pre_provision_backup"
  57. if [[ ! -f "$BASHRC_BACKUP" ]];
  58. then
  59. # On the first provision run:
  60. # Create backup of .bashrc if it doesn't exist
  61. cp -f $BASHRC $BASHRC_BACKUP
  62. else
  63. # If provision runs twice or more
  64. # restore "pure" .bashrc from the backup
  65. cp -f $BASHRC_BACKUP $BASHRC
  66. fi
  67. cat << EOF >> /home/$DEV_USER/.bashrc
  68. export PYTHONPATH=$PROJECT_DIR
  69. alias dj="$PROJECT_DIR/manage.py"
  70. alias djrun="dj runserver 0.0.0.0:8000"
  71. source $VIRTUALENV_DIR/bin/activate
  72. export PS1="[$PROJECT_NAME \W]\\$ "
  73. cd $PROJECT_DIR
  74. EOF