Я опубликовал вопрос и свое собственное решение этой проблемы, чтобы сделать его доступным для других.
Это относится к резервной копии borg и было опубликовано в этой проблеме borg
github: Разрешить проверку файловых систем только для чтения
Попытка доступа к удаленному репозиторию borg для список
, информация
, mount
и другие действия только для чтения завершаются ошибкой, когда удаленный репозиторий находится в моментальном снимке ZFS (только для чтения).
Я выполняю резервное копирование с помощью borg с ежедневной очисткой ( borg prune .. .
) для шифрования и удаленных снимков ZFS для хранения (и защиты от уничтожения резервных копий).
Важнейшей причиной для этого является защита данных резервных копий на удаленном сервере резервного копирования от злоумышленника, имеющего доступ к хост делает резервную копию. С моментальными снимками ZFS, доступными только для чтения, злоумышленник не может удалить удаленные резервные копии.
До сих пор я пытался использовать список borg
, но это не помогло:
Remote: borg.locking.LockFailed: ('/data/backup/.zfs/snapshot/daily_2017-05-23/home/lock.exclusive', «[Errno 30] Файловая система только для чтения: '/data/backup/.zfs/snapshot/daily_2017-05 -23 / дом / замок. - просмотр) Я действительно хотел бы иметь возможность использовать Elastic Beanstalk для размещения приложения Joomla. Однако есть пара проблем: Пользователи должны быть ...
(Оригинал задан суперпользователем, но теперь "приостановлен" - view )
Я бы очень хотел уметь использовать Elastic Beanstalk для размещения приложения Joomla. Однако есть несколько проблем:
- Пользователи должны иметь возможность загружать контент на сайт Joomla.
- Joomla обновляется автоматически, и я ожидаю, что мне нужно будет установить больше - просмотр) Я действительно хотел бы иметь возможность использовать Elastic Beanstalk для размещения приложения Joomla. Однако есть пара проблем: Пользователи должны быть ...
(Оригинал задан суперпользователем, но теперь "приостановлен" - view )
Я бы очень хотел уметь использовать Elastic Beanstalk для размещения приложения Joomla. Однако есть несколько проблем:
- Пользователи должны иметь возможность загружать контент на сайт Joomla.
- Joomla обновляется автоматически, и я ожидаю, что мне нужно будет установить больше Я действительно хотел бы иметь возможность использовать Elastic Beanstalk для размещения приложения Joomla. Однако есть несколько проблем:
- Пользователи должны иметь возможность загружать контент на сайт Joomla.
- Joomla обновляется автоматически, и я ожидаю, что мне нужно будет установить больше Я действительно хотел бы иметь возможность использовать Elastic Beanstalk для размещения приложения Joomla. Однако есть несколько проблем:
- Пользователи должны иметь возможность загружать контент на сайт Joomla.
- Joomla обновляется автоматически, и я ожидаю, что мне нужно будет установить больше
Я знаю, что с помощью множества хаков / настроек я могу настроить локальную среду Joomla, затем использовать ее для администрирования сайта и отправлять изменения в приложение EB с помощью Git.
Однако я склоняюсь к идее выполнения единого развертывания в Elastic Beanstalk и настройки среды для обслуживания контента из эластичной файловой системы. Затем он может быть передан любому из экземпляров в группе автомасштабирования, созданной Elastic Beanstalk.
Я знаю, что создание и подключение EFS к экземплярам в EB может быть достигнуто с помощью файлов конфигурации, найденных здесь ], однако, хотя EFS действительно смонтирован, приложение по-прежнему обслуживается с локального диска.
Кроме того, официальные инструкции AWS по развертыванию сайта Wordpress с использованием EFS приведены здесь . После проверки файлов конфигурации в папке .ebextensions я вижу, что файл конфигурации, который монтирует EFS, создает символическую ссылку между каталогом монтирования и wp-content / uploads. Это может сработать для установки Wordpress, но то, что я хотел бы сделать с Joomla, - это обслуживать все приложение из EFS.
Похоже, мне либо нужен способ создания символической связи между корнем приложения и каталог монтирования или просто изменить корневой каталог приложения на сам каталог монтирования. Проблема в том, что я не могу понять, как это сделать.
Любая помощь будет очень признательна.
Я так далеко зашел в этом сам. Я застрял в нескольких вопросах. Но вот что у меня есть:
Я создал файл 01-mount-efs.config в моей папке .ebextensions в корне моего приложения со следующим содержимым:
##########################################################
Enter your EFS File System ID into EFS_VOLUME_ID and your mount point in EFS_MOUNT_DIR
##########################################################
option_settings:
- option_name: EFS_VOLUME_ID
value: fs-xxxxxxxx
- option_name: EFS_MOUNT_DIR
value: /var/www/html/efs
##########################################################
#### Do not touch below
##########################################################
- option_name: EFS_REGION
value: '`{"Ref": "AWS::Region"}`'
packages:
yum:
nfs-utils: []
jq: []
commands:
01_mount:
command: "/tmp/mount-efs.sh"
files:
"/tmp/mount-efs.sh":
mode: "000755"
content : |
#!/bin/bash
EFS_REGION=$(/opt/elasticbeanstalk/bin/get-config environment | jq -r '.EFS_REGION')
EFS_MOUNT_DIR=$(/opt/elasticbeanstalk/bin/get-config environment | jq -r '.EFS_MOUNT_DIR')
EFS_VOLUME_ID=$(/opt/elasticbeanstalk/bin/get-config environment | jq -r '.EFS_VOLUME_ID')
echo "Mounting EFS filesystem ${EFS_DNS_NAME} to directory ${EFS_MOUNT_DIR} ..."
echo "Region is ${EFS_REGION}"
echo 'Stopping NFS ID Mapper...'
service rpcidmapd status &> /dev/null
if [ $? -ne 0 ] ; then
echo 'rpc.idmapd is already stopped!'
else
service rpcidmapd stop
if [ $? -ne 0 ] ; then
echo 'ERROR: Failed to stop NFS ID Mapper!'
exit 1
fi
fi
echo 'Checking if EFS mount directory exists...'
if [ ! -d ${EFS_MOUNT_DIR} ]; then
echo "Creating directory ${EFS_MOUNT_DIR} ..."
mkdir -p ${EFS_MOUNT_DIR}
if [ $? -ne 0 ]; then
echo 'ERROR: Directory creation failed!'
exit 1
fi
chmod 777 ${EFS_MOUNT_DIR}
if [ $? -ne 0 ]; then
echo 'ERROR: Permission update failed!'
exit 1
fi
else
echo "Directory ${EFS_MOUNT_DIR} already exists!"
fi
mountpoint -q ${EFS_MOUNT_DIR}
if [ $? -ne 0 ]; then
AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
echo "mount -t nfs4 -o nfsvers=4.1 ${AZ}.${EFS_VOLUME_ID}.efs.${EFS_REGION}.amazonaws.com:/ ${EFS_MOUNT_DIR}"
mount -t nfs4 -o nfsvers=4.1 ${AZ}.${EFS_VOLUME_ID}.efs.${EFS_REGION}.amazonaws.com:/ ${EFS_MOUNT_DIR}
if [ $? -ne 0 ] ; then
echo 'ERROR: Mount command failed!'
exit 1
fi
else
echo "Directory ${EFS_MOUNT_DIR} is already a valid mountpoint!"
fi
echo 'EFS mount complete.'
Это монтирует ваш том EFS в каталог с именем 'efs' в корне вашего приложения. Затем в Elastic Beanstalk> Конфигурация> Конфигурация программного обеспечения вам необходимо установить корень вашего документа на '/ efs'
Также в Elastic Beanstalk> Конфигурация> Экземпляр вам нужно добавить 'default' в 'Группы безопасности EC2', убедитесь, что вы оставили тот, который уже есть, просто добавьте в конец ', default'.
Для меня это работает в первый раз или когда я выбираю «Rebuild Environment», однако при развертывании обновления я получаю сообщение об ошибке, когда экземпляр пытается построить и run:
mv /var/app/current /var/app/current.old
Он говорит: Директория не пуста
Я думаю, это проблема с монтированием, которое не позволяет ему удалить /var/app/current.old
Если вы пройдете через это, дайте мне знать, пока я нужно перестраивать каждый раз, когда я хочу развернуть обновление.
Позвольте мне продолжить работу Крейга ответ. Крейг реализует возможность просто изменить корневой каталог приложения на сам каталог монтирования , как упоминалось в вопросе. Однако такой подход не работает. Повторное развертывание не удается, поскольку flip.sh
не может переместить / var / app / current, потому что EFS смонтирован внутри него. flip.sh
является частью среды Beanstalk, предоставляемой AWS.
/ var / www / html
, используемый в пути к точке монтирования Крейга, является просто символической ссылкой на / var / app / current
.
Я успешно реализовал другой вариант, упомянутый в вопросе, который создает символическую ссылку между корнем приложения и каталогом монтирования .
Реализация:
Для монтирования EFS я использую файл конфигурации .ebextensions / storage-efs-mountfilesystem.config
, , предоставленный AWS . В .ebextensions / storage-efs-mountfilesystem.config
я установил точку монтирования следующим образом:
option_settings:
aws: elasticbeanstalk: приложение: среда:
MOUNT_DIRECTORY: '/ efs'
Затем в пакете приложения Beanstalk я создал символическую ссылку:
ln -s / efs ./docroot
Чтобы включить символическую ссылку в пакет приложения Beanstalk, я создал ZIP-архив с помощью следующей команды:
zip --symlinks -r ../beanstalk_application.zip. --exclude = *. git *
Исключенные файлы связаны с репозиторием git,поскольку я использую git для хранения конфигурации, и нежелательно включать файлы репозитория git в пакет.
В Elastic Beanstalk> Конфигурация> Конфигурация программного обеспечения параметр Корневой каталог документа должен быть установлен на / docroot