Сохранение правильного конфига при переносе сайта

Самый простой способ перенести сайт с одного хостинга/аккаунта на другой — скопировать заранее конфиги в новом месте для сайта, чтобы потом руками не менять везде пути и логин/пароль к БД. Можно делать с помощью mc, как описано в разделе помощи Modhost, а можно руками в консоли писать команды. Или даже с помощью файлового менеджера через (S)FTP.

А можно еще проще, если есть доступ к SSH — запустить скрипт и выбрать режим работы:
1) Сохранить конфиги
2) Восстановить конфиги

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

Скрипт копирует конфиги в ~/config_backup выбранного пользователя либо, наоборот, из указанного каталога в правильные места сайта.

Запускать необходимо по SSH. Если вызывать без параметров, копирование произойдет для текущего пользователя — удобно на MODHOST. Если первым (единственным) параметром указать имя пользователя, копирование произойдет для него. Во втором случае лучше запускать через sudo.

Сам скрипт:

#!/bin/bash

USER=$1
if [ "$USER" == "" ];
then
USER=$(getent passwd $UID | sed -e 's/\:.*//')
fi

# Home directory
HOME=$(getent passwd $USER)
HOME=${HOME#*:/}
HOME='/'$(echo $HOME | cut -f1 -d:)
# Site directory
SDIR=$HOME'/www'
# Backup directory
BDIR=$HOME'/config_backup'

echo 'Running for user "'$USER'"'
echo "Enter mode (1 - backup config; 2 - restore config; 0 - exit):"
read MODE

if [ "$MODE" == "1" ];
then
    if ! [ -d $BDIR ]; then
    echo 'Backup directory '$BDIR' is not exists. Creating'
    mkdir $BDIR
    fi
cp $SDIR/connectors/config.core.php $BDIR
cp $SDIR/core/config/config.inc.php $BDIR
chown -R $USER:$USER $BDIR
echo "Done."
elif [ "$MODE" == "2" ];
then
cp $BDIR/config.core.php $SDIR
cp $BDIR/config.core.php $SDIR/connectors
cp $BDIR/config.core.php $SDIR/manager
cp $BDIR/config.inc.php $SDIR/core/config
chown $USER:$USER $SDIR/config.core.php
chown $USER:$USER $SDIR/connectors/config.core.php
chown $USER:$USER $SDIR/manager/config.core.php
chown $USER:$USER $SDIR/core/config/config.inc.php
echo "Done."
elif [ "$MODE" == "0" ];
then
exit;
else
echo "Unknown MODE. Do nothing. Exit."
exit;
fi
Воеводский Михаил
28 сентября 2016, 12:48
modx.pro
4
2 240
+4

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

Роман Садоян
28 сентября 2016, 16:11
0
Так пути то всё равно придется править. Я не прав?
    Воеводский Михаил
    28 сентября 2016, 16:14
    +1
    В этом вся суть — когда создаешь новый пустой сайт, в его конфигах правильные пути. При разворачивании дампа сайта с другого хостинга конфиги перезаписываются, пути в них становятся неправильными. Если же ты следующим шагом скопируешь конфиги от пустого сайта поверх старых от готового, все заработает без ручной правки.

    Или я снова путано объяснил?
      Роман Садоян
      28 сентября 2016, 16:26
      0
      Или я снова путано объяснил?
      скопировать заранее конфиги в новом месте для сайта, чтобы потом руками не менять везде пути и логин/пароль к БД.
      Я вот почему то подумал про конфиги со старого сайта.

      А теперь всё ясно, конец беготне по /manager/ /core /connectors/ и правке конфигов.

      Закину в избранное, люблю баш скрипты =)

      Спасибо!
        Воеводский Михаил
        28 сентября 2016, 16:31
        0
        А теперь всё ясно, конец беготне по /manager/ /core /connectors/ и правке конфигов.
        Именно ради этого и написан скрипт :)
        В результате у меня теперь выкладывание сайта с тестового сервера на modhost сводится к:
        1) запуску скрипта резервного копирования;
        2) закачиванию архива на MH (напрямую, через wget);
        3) запуску этого скрипта в режиме 1;
        4) распаковке архива;
        5) заливке БД;
        6) запуску скрипта в режиме 2.

        Выглядит все еще громоздко, но, фактически, работы на 2-3 минуты без учета длительности процесса архивирования и скачивания.
          Кирилл
          28 сентября 2016, 18:07
          0
          Было бы не плохо еще после восстановления конфигов из бэкапа удалять /core/cache/*
          За скрипт — спасибо!
            Роман Садоян
            28 сентября 2016, 18:46
            0
            Лучше в бэкап не брать /core/cache
              Кирилл
              28 сентября 2016, 18:51
              0
              С этим никто не спорит, но если надо развернуть бэкап, которые создавал сервер, проще в скрипт добавить удаление (лишним точно не будет), чем сначала из архива удалить, а потом закачивать.

              Ну или, по такой же логике, лучше в бэкап не брать: /config.core.php, /connectors/config.core.php, /manager/config.core.php, /core/config/config.inc.php
              И тогда скрипт можно не использовать.
                Роман Садоян
                28 сентября 2016, 18:55
                1
                +1
                Пользуйся, только осторожно!
                Добавил: При восстановлении конфигов — очищает /core/cache
                #!/bin/bash
                
                USER=$1
                if [ "$USER" == "" ];
                then
                USER=$(getent passwd $UID | sed -e 's/\:.*//')
                fi
                
                # Home directory
                HOME=$(getent passwd $USER)
                HOME=${HOME#*:/}
                HOME='/'$(echo $HOME | cut -f1 -d:)
                # Site directory
                SDIR=$HOME'/www'
                # Backup directory
                BDIR=$HOME'/config_backup'
                
                echo 'Running for user "'$USER'"'
                echo "Enter mode (1 - backup config; 2 - restore config; 0 - exit):"
                read MODE
                
                if [ "$MODE" == "1" ];
                then
                    if ! [ -d $BDIR ]; then
                    echo 'Backup directory '$BDIR' is not exists. Creating'
                    mkdir $BDIR
                    fi
                cp $SDIR/connectors/config.core.php $BDIR
                cp $SDIR/core/config/config.inc.php $BDIR
                chown -R $USER:$USER $BDIR
                echo "Done."
                elif [ "$MODE" == "2" ];
                then
                cp $BDIR/config.core.php $SDIR
                cp $BDIR/config.core.php $SDIR/connectors
                cp $BDIR/config.core.php $SDIR/manager
                cp $BDIR/config.inc.php $SDIR/core/config
                chown $USER:$USER $SDIR/config.core.php
                chown $USER:$USER $SDIR/connectors/config.core.php
                chown $USER:$USER $SDIR/manager/config.core.php
                chown $USER:$USER $SDIR/core/config/config.inc.php
                rm -rf $SDIR/core/cache/
                echo "Done."
                elif [ "$MODE" == "0" ];
                then
                exit;
                else
                echo "Unknown MODE. Do nothing. Exit."
                exit;
                fi
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    8