/ dev

Удаленное управление сервером с MODX сайтами

У Василия Наумкина есть отличная инструкция по настройке сервера для MODX, и к ней прилагаются скрипты установки, обновления и удаления сайта. Все работает отлично и радует глаз, но мне надоедала одна вещь, что для того чтобы что-то сделать необходимо зайти на сервер, и вот я сделал для себя решение этой проблемы

Для этого я использовал библиотеку Fabric, это настоящий комбайн для развертывания приложений и работы по ssh написанный на Python

И в итоге я получил возможность создавать новые сайт, обновлять и удалять их со своего компьютера не заходя на сервер, и также проводить автоматический перенос, pull новых коммитов из git и еще много приятных мелочей

Теперь я расскажу как установить все это счастье себе. Я описываю весь процесс для Linux/Mac на этих система Python стоит по умолчанию и все что нужно это установить нужные пакеты, ну начнем:

easy_install pip
pip install Fabric

В общем это все что нужно, теперь осталось только написать скрипт для работы с сервером. Для этого нудно создать файл fabfile.py

mkdir ~/server && cd server
touch fabfile.py

Я приложу простейший вариант в котором нужно заменить лишь пути для скриптов автоустановки и логин пароль от сервера

# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.colors import green, red
from contextlib import contextmanager as _contextmanager

env.hosts = ['user@192.168.0.1'] # здесь нужно ввести свой логин (ваш профиль должен быть в группе sudo) и ip адрес сервера
env.password = 'EbIpL6tqcLX' # пароль к вашему аккаунту

функция для создания нового сайта

def add():
print(green(u'Создание сайта....'))
try:
sudo('sh /home/user/modx/addsite.sh') # нужно изменить путь до скрипта install
except:
pass

функция для удаления сайта

def remove():
print(green(u'Удаление сайта....'))
try:
sudo('sh /home/user/modx/remove.sh') # нужно изменить путь до скрипта remove
except:
pass

функция для обновления сайта

def update():
print(green(u'Обновление сайта....'))
try:
sudo('sh /home/user/modx/update.sh') # нужно изменить путь до скрипта update
except:
pass

перезагрузка сервера

def reboot():
print(green(u'Перезагрузка сервера...'))
sudo('reboot')

перезагрузка nginx

def nginxrestart():
print(green(u'Перезапуск nginx...'))
sudo('service nginx restart')

показать сгенерированные доступы для сайта

def info(name=None):
if name:
command = 'cat /var/www/%s/pass.txt' % name
run(command)
else:
print(red(u"Введите правильное имя"))

Остался вопрос как этим пользоваться

cd ~/server # нужно перейти в директорию со скриптом
fab add # добавляем новый сайт
fab update # обновляем сайт
fab nginxrestart # перезапускаем nginx
fab info:test # смотрим данные для сайта test
fab remove #удаляем сайт

Как мне кажется здесь все понятно, в директории со скриптом мы можем работать с командой fab <имя_функции>