К содержанию

Аналог функционала MODX Cloud для Ajenti

Сейчас разбираю архивы того что делал в очень давно и провожу реструктурезацию серверов и нашел дополнение для ajenti которое позволяет делать образы сайтов на MODX, копировать их, устанавливать и все такое. Плюс просто может создавать, обновлять и удалять сайты, сбрасывать пароль администратора, делать полноценный бекап для переноса. Все работает при конфигурации как в инструкции по настройке хостинга от Василия.

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

В общем прошу всех отписать по вопросу нужно ли это вам и если кто знает про само отношение MODX к такому.
Alex Vakhitov
Alex Vakhitov
18 апреля 2014, 01:43
modx.pro
3 480
Реклама

Комментарии: 22

Василий Наумкин
Василий Наумкин Администратор
18 апреля 2014, 06:58
Исходники Vapor открыты, однако внизу приписан копирайт MODX LLC и никакой свободной лицензии в репозитории я не вижу.
Наверное, самый правильный вариант был бы переписать дополнение так, чтобы оно не использовало vapor.

Честно говоря, я сейчас пишу что-то подобное на Python, поэтому было бы интересно посмотреть на исходники хоть с vapor, хоть без.
    Alex Vakhitov
    Alex Vakhitov Проверенный
    18 апреля 2014, 07:13
    Я под ajenti это делал, и его api покрывает 90% функционала, но впринципе перенести все на чистый python с одно направленной функциональность проблем вообще нет.

    Сейчас посмотрел исходники vapor, перенести его на python дело выходных, наверное этим и займусь сейчас.

    Короче, если что могу помочь, все-таки я python программист (:
      Василий Наумкин
      Василий Наумкин Администратор
      18 апреля 2014, 09:08
      Короче, если что могу помочь, все-таки я python программист (:
      Я теперь немного тоже. Вот, что пока накодил, только не смейся =)

      Помощь — это хорошо, но нужно набивать свои шишки самостоятельно.

        Alex Vakhitov
        Alex Vakhitov Проверенный
        18 апреля 2014, 09:15
        Посмеюсь тихо в сторонке (: Вообще советую сразу изучить стандарт написания кода pep8, все сразу станет проще и намного легче читать код будет. Плюс посмотреть в сторону готовых решений и стандартных библиотек, все можно сделать гораздо проще (:
          Василий Наумкин
          Василий Наумкин Администратор
          18 апреля 2014, 09:20
          Эммм… Ну мне тут PyCharm подсказывает, что моё творчество вполне похоже на PEP-8. Есть некоторые «continuation line over-indented for hanging indent», но я ваще не понимаю, как от них избавиться — он на них ругается всегда (может, глюк?).

          Да и модули помогает импортировать. Другое дело, что пока неясно что именно нужно импортировать из огромной коллекции готового, но это только методом проб и ошибок.

          Python-daemon для 3й версии нет, поэтому использую найденный скрипт. А всё остальное — родными модулями: logging, socketserver и т.д.
            Alex Vakhitov
            Alex Vakhitov Проверенный
            18 апреля 2014, 09:29
            Ну это мелких огрех, небольшая ошибка форматирования. В pep8 есть еще нормы импорта модулей, особенно важно выбирать абсолютный или относительный путь для импорта, чтобы не было проблем при установки модулей из pip
              Alex Vakhitov
              Alex Vakhitov Проверенный
              18 апреля 2014, 09:42
              Склонировал репозиторий, у тебя какой то треш из смеси пробелов и табуляций. Для исправлений можешь нажимать CMD+ALT+L исправит все явные ошибки, только часто ошибается в форматировании списков, словарей и кортежев по pep8
                Василий Наумкин
                Василий Наумкин Администратор
                18 апреля 2014, 10:15
                У меня все табами, пробелов нигде нет.

                Возможно, это git что-то наисправлял при коммите.
                  Василий Наумкин
                  Василий Наумкин Администратор
                  18 апреля 2014, 10:29
                  Переделал на пробелы — всё-таки в Python их черным по белому просят использовать.
        Alex Vakhitov
        Alex Vakhitov Проверенный
        18 апреля 2014, 07:57
        Я вот думаю есть ли необходимость делать пакеты как vapor, или оставить все в своем формате и управлять посредством командной строки? То с php вообще связываться не хочется
          Василий Наумкин
          Василий Наумкин Администратор
          18 апреля 2014, 09:09
          Я планирую бэкапить и восстанавливать без php.
            Alex Vakhitov
            Alex Vakhitov Проверенный
            18 апреля 2014, 09:24
            Я написал простенькую прогу, сейчас тестирую как работает.

            Сейчас работает так: программа запускается от пользователя и имеет две функции создать образ или запилить на сайт, при создании парсит конфиги MODX, копирует бд, вычищает служебные таблицы, копирует пакеты и статику и все закидывает в архив. При распаковке имеет дополнительные настройки в виде пути до образа, если его нет смотрит директорию на предмет наличия образа (если их несколько предлагает выбрать один из них), дальше берет конфиги все заливает на свои места и чистит кеш
              Alex Vakhitov
              Alex Vakhitov Проверенный
              18 апреля 2014, 13:20
              Выложил первую часть для дампа базы github
                Василий Наумкин
                Василий Наумкин Администратор
                18 апреля 2014, 17:12
                Что-то дофига всяких обвязок, мне пока такое рано.

                Но посмотреть интересно, в целом похоже, что я двигаюсь в верном направлении.
                  Alex Vakhitov
                  Alex Vakhitov Проверенный
                  18 апреля 2014, 17:24
                  Основные обвязки для установки через pip, то просто файлы не интересно (:
                  Осталось файлы в архив закидывать и тесты написать и будет готово решение для бекапов и создания образов
                    Василий Наумкин
                    Василий Наумкин Администратор
                    18 апреля 2014, 17:25
                    Вот на тесты я бы тоже посмотрел — как оно вообще делается?

                    Пора уже себя приучать к порядку.
                      Alex Vakhitov
                      Alex Vakhitov Проверенный
                      18 апреля 2014, 17:32
                      Пишется проверка всех доступных действий, в данном случаи алгоритм простой, буде создаваться сай на modx и будут проводится миграции, если проблем не обнаруженно то тесты пройдены. Писать их можно через стандартные библиотеки. В общем на выходных сделаю посмотришь
          Виталий Батушев
          18 апреля 2014, 11:21
          Чувствую себя ребенком, который стоит у двери в темном коридоре и подслушивает разговор взрослых о подарках к Новому году. :)
            Алексей
            Алексей Проверенный
            16 июня 2014, 06:04
            Под какую версию ajenti написаны скрипты? задумал обновиться до последнего ajenti — хочется попробовать что-то новенькое
              Андрей Рябченко
              11 мая 2016, 11:43
              Доброго дня!
              Подниму эту тему.
              Получилось в результате написать/переписать/выложить дополнение под Ajenti?
                Alex Vakhitov
                Alex Vakhitov Проверенный
                11 мая 2016, 11:52
                Если честно уже не помню что было в результате, но сейчас это бессмысленно, есть modhost для этих задач или даже проще использовать docker и docker-machine для деплоя на vscale или DO
                Alexander V
                Alexander V Проверенный
                11 мая 2016, 12:05
                А в чем сложность бекапов?
                На Ansible элементарно делается.
                ---
                 - hosts: 'all'
                   gather_facts: no
                   vars_files: 
                    - 'vars/main.yml' 
                
                   tasks:
                    - name: 'Sync'
                      synchronize: src=/var/www/{{ username }}/ dest=/backup/{{ username }} owner=no group=no delete=yes
                      tags: 'update'
                    
                    - name: 'DB backup'
                      mysql_db: state=dump name={{ username }} target=/backup/{{ username }}/{{ username }}.sql login_user=root login_password={{ mysql_root_pass }}
                      tags: 'update'
                
                    - name: 'Sync restore'
                      synchronize: 
                       src: /backup/{{ username }} 
                       dest: /var/www/
                       delete: yes 
                       rsync_opts:
                        - "--exclude=.sql"
                      become: yes
                      become_user: "{{ username }}"
                      tags: 'restore'
                
                    - name: 'Del MySQL database'
                      mysql_db: 'name={{ username }} login_user=root login_password={{ mysql_root_pass }} state=absent'
                      tags: 'restore'
                
                    - name: 'Add MySQL DB'
                      mysql_db: 'name={{ username }} encoding=utf8 login_user=root login_password={{ mysql_root_pass }} state=present'
                      tags: 'restore'
                
                    - name: 'DB restore'
                      mysql_db: state=import name={{ username }} target=/backup/{{ username }}/{{ username }}.sql login_user=root login_password={{ mysql_root_pass }}
                      tags: 'restore'
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  22