119 lines
2.9 KiB
Python
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')
|