prelom/fabfile.py

119 lines
2.9 KiB
Python

import datetime
import socket
from fabric.api import *
env.use_ssh_config = True
env.host_string = 'nfb'
def re():
local('sudo systemctl restart gunicorn')
def up():
local('django/manage.py runserver')
def static():
local('django/manage.py collectstatic --noinput')
def md():
local('django/manage.py cms_remarkdown')
local('django/manage.py journal_remarkdown')
def get_backup_filename(hostname):
return 'backups/{}_{}.json'.format(
hostname,
datetime.datetime.now().strftime('%Y-%m-%d-%H%M')
)
BACKUP_COMMAND = 'django/manage.py dumpdata cms journal blog uploads > '
def backup():
"""Does a local database dump. Returns the filename."""
local_filename = get_backup_filename(hostname=socket.gethostname())
local(BACKUP_COMMAND + local_filename)
return local_filename
def backup_remote():
"""Does a remote database dump and scps the file. Returns the filename."""
remote_filename = get_backup_filename(hostname=env.host_string)
print("Remote filename: " + remote_filename)
with cd('notes-from-below'):
run('source env/bin/activate && ' + BACKUP_COMMAND + remote_filename)
# scp the remote backup file to local.
get(remote_filename, remote_filename)
return remote_filename
def confirm_local():
if socket.gethostname() == env.host_string:
abort("You're on the remote machine (run this locally)")
# ONLY RUN THIS LOCALLY. Imports the remote database dump.
def imp():
confirm_local()
# First, backup locally.
backup()
# Then backup remotely & download the file.
remote_filename = backup_remote()
# Then run loaddata.
local('django/manage.py loaddata ' + remote_filename)
# rsync with the remote media dir.
local('rsync -Prz %s:notes-from-below/media/ media/' % env.host_string)
def import_media():
with cd('notes-from-below'):
run('tar czvf media.tar.gz media/')
get('media.tar.gz', 'media.tar.gz')
# ONLY RUN THIS LOCALLY. Exports the local database dump.
def exp():
confirm_local()
# First, backup remotely & download the file.
backup_remote()
# Then backup locally.
local_filename = backup()
# Move the local dump over to remote.
put(local_filename, 'notes-from-below/backups')
# Sync the media directories.
#local('tar czvf media.tar.gz media/*')
#put('media.tar.gz', 'notes-from-below/media.tar.gz')
# rsync with the remote media dir.
local('rsync -Prz media/ %s:notes-from-below/media/' % env.host_string)
with cd('notes-from-below'):
#run('tar xvzf media.tar.gz')
# Then run loaddata.
run('source env/bin/activate && django/manage.py loaddata ' + local_filename)
def deploy():
confirm_local()
local('git push')
with cd('notes-from-below'):
run('git pull')
sudo('systemctl restart gunicorn')
def migrate():
local('django/manage.py makemigrations')
local('django/manage.py migrate')