wip -- core.deploy -- Scripts to deploy {www,dev}.cof
This commit is contained in:
parent
eb83c58f05
commit
e6d47c2b25
2 changed files with 142 additions and 2 deletions
|
@ -16,8 +16,8 @@ apt-get install -y python3-pip python3-dev python3-venv libpq-dev postgresql \
|
|||
postgresql-contrib libjpeg-dev nginx git redis-server
|
||||
|
||||
# Postgresql
|
||||
sudo -u postgres createdb $DBNAME
|
||||
sudo -u postgres createuser -SdR $DBUSER
|
||||
sudo -u postgres createdb $DBNAME || echo "Database creation: skipped"
|
||||
sudo -u postgres createuser -SdR $DBUSER || echo "Database user creation: skipped"
|
||||
sudo -u postgres psql -c "ALTER USER $DBUSER WITH PASSWORD '$DBPASSWD';"
|
||||
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DBNAME TO $DBUSER;"
|
||||
|
||||
|
|
140
provisioning/deploy.sh
Normal file
140
provisioning/deploy.sh
Normal file
|
@ -0,0 +1,140 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -eu
|
||||
|
||||
info() { echo "[INFO] $*"; }
|
||||
warning() { echo "[WARNING] $*"; }
|
||||
error() { echo "[ERROR] $*"; }
|
||||
fatal() { echo "[FATAL] $*"; exit 1; }
|
||||
|
||||
# Config
|
||||
#
|
||||
# Presets are available, and can be used with the env var "TARGET_NAME":
|
||||
# - TARGET_NAME=www.cof for www.cof.ens.fr
|
||||
# - TARGET_NAME=dev.cof for dev.cof.ens.fr
|
||||
|
||||
TARGET_NAME="${TARGET_NAME:-dev.cof}"
|
||||
|
||||
SERVICE_DIR="${SERVICE_DIR:-/etc/system/systemd}"
|
||||
|
||||
if [ "${TARGET_NAME}" = "www.cof" ]; then
|
||||
DJANGO_SETTINGS_MODULE="cof.settings.prod"
|
||||
SERVICE_DAPHNE_PATH="${SERVICE_DIR}/gestiocof-daphne.service"
|
||||
SERVICE_WORKER_PATH="${SERVICE_DIR}/gestiocof-worker.service"
|
||||
SERVICE_LOCAL_DIR="./provisioning/www.cof/systemd"
|
||||
VENV="<path/to/venv>"
|
||||
elif [ "${TARGET_NAME}" = "dev.cof" ]; then
|
||||
DJANGO_SETTINGS_MODULE="cof.settings.<WHICH ONE?>"
|
||||
SERVICE_DAPHNE_PATH="${SERVICE_DIR}/gestiocof-dev-daphne.service"
|
||||
SERVICE_WORKER_PATH="${SERVICE_DIR}/gestiocof-dev-worker.service"
|
||||
SERVICE_LOCAL_DIR="./provisioning/dev.cof/systemd"
|
||||
VENV="<path/to/venv>"
|
||||
fi
|
||||
|
||||
SERVICE_LOCAL_DAPHNE_PATH="${SERVICE_LOCAL_DIR}/daphne.service"
|
||||
SERVICE_LOCAL_WORKER_PATH="${SERVICE_LOCAL_DIR}/worker.service"
|
||||
PYTHON="DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE} ${VENV}/bin/python"
|
||||
|
||||
# Default to @{u}, equivalent to "origin/<current branch>".
|
||||
GIT_TARGET="${GIT_TARGET:-@{u}}"
|
||||
|
||||
# Services
|
||||
|
||||
service_print_changes() {
|
||||
# TODO: One could check diff, print it and prompt user to confirm.
|
||||
# info ">>> Services: diff"
|
||||
return
|
||||
}
|
||||
|
||||
service_start() {
|
||||
info "Starting service ${1}..."
|
||||
sudo systemctl enable "${2}"
|
||||
sudo systemctl start "${2}"
|
||||
}
|
||||
|
||||
service_stop() {
|
||||
info "Stopping service ${1}... "
|
||||
if sudo systemctl stop "${2}"; then info OK; else warning SKIPPED; fi
|
||||
}
|
||||
|
||||
service_upgrade_config() {
|
||||
info "Upgrading config of service ${1}... "
|
||||
sudo cp "${2}" "${3}"
|
||||
}
|
||||
|
||||
service_start_all() {
|
||||
info ">>> Services: starting all..."
|
||||
service_start Worker "${SERVICE_WORKER_PATH}"
|
||||
service_start Daphne "${SERVICE_DAPHNE_PATH}"
|
||||
}
|
||||
|
||||
service_stop_all() {
|
||||
info ">>> Services: stopping all..."
|
||||
service_stop Worker "${SERVICE_WORKER_PATH}"
|
||||
service_stop Daphne "${SERVICE_DAPHNE_PATH}"
|
||||
}
|
||||
|
||||
service_upgrade_config_all() {
|
||||
info ">>> Services: upgrading all..."
|
||||
service_upgrade Daphne "${SERVICE_LOCAL_DAPHNE_PATH}" "${SERVICE_DAPHNE_PATH}"
|
||||
service_upgrade Worker "${SERVICE_LOCAL_WORKER_PATH}" "${SERVICE_WORKER_PATH}"
|
||||
systemctl daemon-reload
|
||||
}
|
||||
|
||||
# Django
|
||||
|
||||
django_migrate() {
|
||||
info ">>> Django: applying database migrations..."
|
||||
${PYTHON} manage.py migrate
|
||||
}
|
||||
|
||||
django_collectstatic() {
|
||||
info ">>> Django: collecting static assets and placing them in configured location..."
|
||||
${PYTHON} manage.py collectstatic
|
||||
}
|
||||
|
||||
# Git
|
||||
|
||||
git_check_clean_workingtree() {
|
||||
[ -z "$(git status --porcelain)" ]
|
||||
}
|
||||
|
||||
git_run_checks() {
|
||||
info ">>> Git: running checks"
|
||||
|
||||
info "- Checking working tree state... "
|
||||
if ! git_check_clean_workingtree; then
|
||||
git status -s
|
||||
warning "The working tree is not cleaned. Some data could be lost."
|
||||
warning "Stash or commit the changes."
|
||||
read -rp "Do you want to continue? [y/N] " continue
|
||||
[ "$continue" = y ] || fatal "Aborting!"
|
||||
fi
|
||||
|
||||
info "- Current commit is: $(git rev-parse HEAD)"
|
||||
info "- New commit will be: ${GIT_TARGET}"
|
||||
}
|
||||
|
||||
git_upgrade() {
|
||||
info ">>> Git: pulling latest version of remote branch"
|
||||
# git fetch
|
||||
# git reset --hard "${GIT_TARGET}"
|
||||
}
|
||||
|
||||
# Our job
|
||||
|
||||
main() {
|
||||
git_run_checks
|
||||
service_stop_all
|
||||
git_upgrade
|
||||
# TODO: Handle failure of the following commands
|
||||
service_print_changes
|
||||
django_migrate
|
||||
django_collectstatic
|
||||
service_upgrade_all
|
||||
service_start_all
|
||||
}
|
||||
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
main "$@"
|
||||
fi
|
Loading…
Reference in a new issue