Я разработал веб-приложение на основе Symfony3.4. На производстве он разворачивается на сервере Ubuntu 18.04 через deployer (deployer.org).
Пока все отлично работает. Веб-приложение развернуто в / opt / app / prod, созданное пользователем, который входит в группу www-data.
Мое веб-приложение позволяет загружать файлы. Чтобы поддержать это, я добавил данные папки, в которой хранятся загруженные файлы.
Чтобы сохранить доступ к файлам после другого выпуска, я добавил папку данных в список общих папок.
Мой deploy.php выглядит следующим образом:
set('bin_dir', 'bin');
// Symfony console bin
set('bin/console', function () {
return sprintf('{{release_path}}/%s/console', trim(get('bin_dir'), '/'));
});
// Project name
set('application', 'appname');
set('http_user', 'www-data');
set('writable_mode', 'acl');
// Project repository
set('repository', '<MY_GITREPO>');
// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', true);
// Shared files/dirs between deploys
add('shared_files', []);
add('shared_dirs', ['data']);
// Writable dirs by web server
add('writable_dirs', ['{{release_path}}','data']);
// Hosts
host('prod')
->hostname('<MY_HOST>')
->user('<MY_USER>')
->stage('prod')
->set('deploy_path', '/opt/app/prod/<MY_APPNAME>');
Это приводит к следующей структуре папок:
.
├── current -> releases/5
├── releases
│ ├── 2
│ ├── 3
│ ├── 4
│ └── 5
└── shared
├── app
└── data
Так что пока все в порядке - с одним исключением:
Deployer хочет установить папку данных, которая не разрешена, поскольку файлы в данных принадлежат www-data: www-data, где развертыватель пытается изменить это как.
The command "export SYMFONY_ENV='prod'; cd /opt/app/prod/<MY_APPNAME>/releases/5 && (setfacl -RL -m u:"www-data":rwX -m u:`whoami`:rwX /opt/app/prod/<MY_APPNAME>/releases/5)" failed.
setfacl: /opt/app/prod/<MY_APPNAME>/releases/5/data/child/679/ba7f9641061879554e5cafbd6a3a557b.jpeg: Operation not permitted
У меня сложилось впечатление, что я допустил ошибку в моем deployer.php или что-то пропустил.
Кто-нибудь знает, что мне нужно сделать, чтобы запустить развертывание?
Спасибо и всего наилучшего