2013-07-13 9 views
1

У меня есть две версии сайта, которые мне нужно поменять очень быстро, несколько раз.Обмен папкой public_html для быстрого изменения сайта

В моем домашнем каталоге, у меня есть:

drwxr-x--- 8 lorem nobody  4096 Jul 12 20:50 public_html/ 
drwxr-x--- 3 lorem nobody  4096 Jul 13 12:59 public_html_3.0/ 

public_html держит текущий сайт, public_html_3.0 имеет новый веб-сайт.

Я хотел бы заменить два, выполнив:

//move the complete current site to another tmp location 
mv public_html public_html_2.0 
//move the new site in place 
mv public_html_3.0 public_html 

Попробовав его на тестовом счете, я получаю Запрещенный У вас нет разрешения на доступ/на этом сервере. ошибка.

Я убедился, что папки public_html_ * имеют одинаковые разрешения, но я думаю, что это проблема с символической связью? Я пытаюсь сделать что-то немыслимое и не рекомендую?

Использование VPS WHM/Cpanel с привилегиями root на CentOs 5.9.

РЕДАКТИРОВАТЬ

После некоторого webreading, я удалил public_html (переехал темп) и SYM-сшитый public_html -> public_html_3.0 в результате:

lrwxrwxrwx 1 lorem nobody   15 Jul 13 14:11 public_html -> public_html_3.0/ 
drwxr-x--- 3 lorem nobody  4096 Jul 13 12:59 public_html_2.0/ 
drwxr-x--- 2 lorem nobody  4096 Jul 13 14:02 public_html_3.0/ 
lrwxrwxrwx 1 lorem lorem   11 Jul 9 2012 www -> public_html/ 

все тот же результат.

ответ

1

Перемещение public_html, как вы упомянули выше, не является большой проблемой.

мв public_html public_html_2.0 мв public_html_3.0 public_html

Безобидные команды, если вы знаете, что вы на самом деле делаете.

Убедитесь, что обе каталоги имеют 750 разрешений.

CHMOD 750 public_html *

Затем убедитесь, что файлы внутри обоих каталогов, имеющих правильные разрешения.

найти/home/user/public_html/-type f -exec chmod -R 644 {} \; find /home/user/public_html_3.0/ -type f -exec chmod -R 644 {} \;

find/home/user/public_html/-type d -exec chmod -R 755 {} \; find /home/user/public_html_3.0/ -type d -exec chmod -R 755 {} \;

Также убедитесь, что право собственности также верно.Изменение тех рекурсивно

Чаун -R Lorem:/Главный/пользователя/public_html/* Чаун -R Lorem: /home/user/public_html_3.0/*

В случае, если вы используете suphp, вы можете использовать lorem: никто также. Сообщите нам, если бы это помогло вам.

+0

Спасибо, человек, это определенно сработает. Я потратил часы на цикл обучения learn => trial =>, и сам пришел к подобному документообороту. Опубликуйте мое решение ниже, но ваш - более глубокое представление о том, что происходит, и это здорово. –

+0

Добро пожаловать, друг. :) –

1

Ошибка, с которой я столкнулся (Forbidden У вас нет прав на доступ к этому серверу.) был неуместной корневой папкой нового сайта, а не проблемой файловой системы. Новый сайт был фактически расположен в ~/public_html_3.0/public_html/, потому что я расстегнул его неправильно. Новая сим-ссылка, которую я установил, public_html => public_html_3.0, теперь указывала на папку без индексного файла, следовательно, на ошибку.


Альтернативное решение

ответ

Лео принца является правильным, но я предлагаю альтернативное решение с одной командой переключателем, который также работал для меня (объяснение для newbs как я):

Это решение требует, чтобы для сервера или данного конкретного виртуального хоста были включены FollowSymlinks, и предполагается, что ваш vhost указывает на/home/user/public_html (~/public_html). См. Принятый ответ для получения разрешений/прав собственности.

Давайте предположим, что ваш старого сайта в ~/public_html и ваш нового сайта в ~/app2.

-public_html 
    -index.html 
    -other.html 
-app2 
    -index.html 
    -other_new.html 

Во-первых, скопировать старый сайт в новый каталог:

# mkdir app1 
# cp -a public_html/. app1/. 
// -a option copies recursively with permissions/owners/groups 
// but doesn't follow symbolic links 

Затем переместите (переименовать) public_html во временный каталог, а затем создать символическую ссылку из public_html в старые приложения ,

# mv public_html public_html_bak 
// moves the public_html "out of way" 
# ln -s app1 public_html 
// creates a symbolic-link 
# ls -l 
drwxr-x--- user nobody app1/ 
drwxr-x--- user nobody app2/ 
lrwxr-x--- user nobody public_html -> app1/ 
drwxr-x--- user nobody public_html_bak/ 

Это делает ~/public_html POINT для ~/app1. Read more on symbolic links. Сервер видит public_html, но файлы из приложения 1.

Если это не работает, вернитесь к предыдущему состоянию:

# rm public_html 
//// use rm, NOT rmdir, since it's a symlink, not a dir 
# mv public_html_bak public_html 
// return backup to previous location 

Если он работает, то момент, когда вы хотите перейти на новый сайт (app2), вам необходимо изменить символическую ссылку Дело в каталог app2:

# rm public_html; ln -s app2 public_html 
// remove existing link, create new link with a single line (instant change) 
# ls -l 
drwxr-x--- user nobody app1/ 
drwxr-x--- user nobody app2/ 
lrwxr-x--- user nobody public_html -> app2/ 
drwxr-x--- user nobody public_html_bak/ 

Хотя это примерно так же, как делать две папки переименовывает подряд, он делает для чистого обзора версий приложений, который является то, что я пытаюсь достичь:

# ls -l 
drwxr-x--- user nobody app2.3/ 
drwxr-x--- user nobody app3.0/ 
drwxr-x--- user nobody app3.1/ 
drwxr-x--- user nobody app3.2b/ 
lrwxr-x--- user nobody public_html -> app3.0/ <- the current active version 

# rm public_html; ln -s app3.1 public_html 
/// a one-line switch to a different app version 
/// first remove the symbolic link; then create new 

Конечно, все каталоги приложений должны иметь соответствующие разрешения, как описано в принятом ответе выше, а владелец: группа каталогов должна быть такой же, как и исходный public_html. Кроме того, символическая ссылка должна принадлежать одному пользователю: группе с одинаковыми разрешениями, если ваша конфигурация сервера допускает только символические ссылки от одного и того же пользователя.

Обратите внимание, что для удаления символической ссылки вы должны использовать rm, а не rmdir, так как она не удалась, если вы пытаетесь удалить фактический каталог.

Я все еще изучаю * NIX, поэтому могут возникнуть некоторые проблемы с этим решением, о котором я не знаю. Но для частых изменений в версии это работает как magic :)

+0

Хорошо объяснил Ваня. Одно редактирование может быть полезно. Используйте «cp -a public_html/app1 /» вместо «cp -r public_html/app1 /». Поскольку параметр -a выполняет работу -r (рекурсивный) и -p (сохраняет разрешения и права собственности) –

+0

Хорошая точка, еще раз спасибо! –