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


Самый простой способ перенести сайт с одного хостинга/аккаунта на другой — скопировать заранее конфиги в новом месте для сайта, чтобы потом руками не менять везде пути и логин/пароль к БД. Можно делать с помощью 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, 15:48    Воеводский Михаил   G+  
4    815 +4

Комментарии (8)

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

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

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

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

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

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

                Ну или, по такой же логике, лучше в бэкап не брать: /config.core.php, /connectors/config.core.php, /manager/config.core.php, /core/config/config.inc.php
                И тогда скрипт можно не использовать.
                1. Роман Садоян 28 сентября 2016, 18:55 # +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
                  
    Вы должны авторизоваться, чтобы оставлять комментарии.