Как на реальном сервере задать папку из которой будет работать сайт, как web?

Главные вкладки

Аватар пользователя VasyOK VasyOK 29 ноября 2021 в 17:07

Всем привет. На реальном сервере (это не Патруль и не Радон) структура папок:
~/domains/sitename.com/public_html

Т.к. сайт будет собран Композером, как задать рабочую папку сайта web?

Т.е. или
~/domains/sitename.com/public_html/web
или
~/domains/sitename.com/web

Сейчас можно в sitename.com положить composer.json и поменять в нем "web" на "public_html". Может оно и будет работать, но хотелось бы работать "стандартно".

Лучший ответ

Аватар пользователя Selpi Selpi 29 ноября 2021 в 17:38
1

Если хочется работать стандартно, можно не менять ничего, просто положить сайт в ~/domains/sitename.com/ а public_html превратить в ссылку на директорию web:
rmdir public_html
ln -s ./web ./public_html

Комментарии

Аватар пользователя Selpi Selpi 29 ноября 2021 в 17:38
1

Если хочется работать стандартно, можно не менять ничего, просто положить сайт в ~/domains/sitename.com/ а public_html превратить в ссылку на директорию web:
rmdir public_html
ln -s ./web ./public_html

Аватар пользователя Selpi Selpi 29 ноября 2021 в 17:49

Физически оно будет в директории web, а public_html будет просто ссылаться на web, если сделать симлинк, как я предложил выше.

Если же ты хочешь совсем отказаться от public_html, то это надо смотреть в настройках хостера, позволяют они поменять веб директорию через свою панель настроек или нет.

Можно и шаблон проекта поменять, чтоб избавиться от папки web, но нужно ли тебе это- решай сам, ведь хостеры могут меняться, а создание симлинка гораздо проще решает проблему.

Аватар пользователя DmitryN DmitryN 30 ноября 2021 в 13:44

В директории /public_html еще лежат
/vendor
composer.json
composer.lock
что будет при обращении к ним, если из /public_html дорога ведет в /web ?

Аватар пользователя Selpi Selpi 30 ноября 2021 в 13:46

Если вы пользуетесь рекомендованным шаблоном композер проекта (а это лучший выбор), то ни вендор директории ни композер файлов в веб руте не будет.

Аватар пользователя DmitryN DmitryN 30 ноября 2021 в 13:56

Если вместо "директория-проекта" ставим точку,
composer create-project drupal/recommended-project .
то все загружается в текущую директорию, например /public_html
и там оказываются и файлы композера и папка вендор
зачем много вложений?

Аватар пользователя Selpi Selpi 30 ноября 2021 в 14:05
1

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

Т.е. вот это вот все должно лежать в директории "мой-сайт":
composer.json
omposer.lock
.editorconfig
.gitattributes
vendor/
web/

а мой-сайт/public_html делается симлинком на web/ и структура вашего проекта в "мой-сайт"выглядит так:

composer.json
omposer.lock
.editorconfig
.gitattributes
vendor/
public_html -> web/ -- симлинк на web/
web/

Нужно это все для того, что веб серверу не нужно давать доступ к вендор директории, так как внешним посетителям не стоит давать туда доступ, как и к файлам композера, вашим гит директориям, настройкам и, возможно, директории с конфигами вашего редактора .idea/code и т.п.

В общем единственное, что должно быть доступно веб серверу- содержимое директории web.

Аватар пользователя Selpi Selpi 30 ноября 2021 в 13:50

Собственно, специально для вас, так как вы в соседней теме на такие же грабли натолкнулись:

Вот официальная рекомендация по установке друпала: https://www.drupal.org/docs/develop/using-composer/using-composer-to-ins...

Конкретно 9-ку устанавливать лучше так: composer create-project drupal/recommended-project директория-проекта.
Таким образом в вашей "директории-проекта" вендор и композер будут лежать в корне проекта, а то, к чему должен иметь доступ веб сервер будет в директории web. Соответственно вы сможете спокойно сделать симлинк public_html ссылающийся на web.

Аватар пользователя chelwolf chelwolf 26 ноября 2023 в 14:51

Верно ли я понял, что если на моём хостинге в корне проекта есть три папки:
- cgi-bin
- tmp
- www
То мне нужно пробовать ставить проект в корень командой вида:

composer create-project --no-install drupal/recommended-project .

и далее делать симлинк с www на web?

Если я поставлю все в www командой вида:

composer create-project --no-install drupal/recommended-project www/

и потом добавлю в www/ файл .htaccess, который будет перенаправлять на директорию www/web - в этом не будет никакого смысла, т.к. папка vendor не вынесена за пределы рута, в моём случае www? Или как?)

Аватар пользователя Selpi Selpi 26 ноября 2023 в 15:01

Делай первый вариант.
Твоя задача простая: директория vendor, возможно private должны быть вне доступа веб сервера.
Веб сервер должен ходить только в web. Раз у хостера эта директория называется www- делай с нее симлинк на web.