▍Minio¶
Настройка S3-совместимого бэкап-сервер на Minio¶
Настроим домашний аналог S3 на Minio и будем загружать бэкапы с Duplicati.
Compose для нашего Minio¶
В моём случае используется Traefik в качестве обратного прокси для маршрутизации трафика внутрь Docker контейнеров. Базовую конфигурацию Traefik можно посмотреть здесь.
version: '3.3'
services:
minio:
image: quay.io/minio/minio
container_name: minio
restart: always
command: server /data --address ":9000" --console-address ":9001"
environment:
MINIO_ROOT_USER: minio
MINIO_ROOT_PASSWORD: miniopassword
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
volumes:
- $DIR_DATA/minio:/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.minio.rule=Host(`minio.example.ru`)"
- "traefik.http.routers.minio.entrypoints=https"
- "traefik.http.routers.minio.tls=true"
- "traefik.http.routers.minio.middlewares=WhitelistHome"
- "traefik.http.services.minio.loadbalancer.server.port=9001"
- "com.centurylinklabs.watchtower.enable=true"
Запускаем:
Настройка Minio в web-интерфейсе¶
Переходим по адресу minio.example.ru и вводим minio и miniopassword, указанные в переменных MINIO_ROOT_USER и MINIO_ROOT_PASSWORD.
После авторизации в разделе Buckets нажимаем на Create Bucket
Указывавем имя бакета и создаём его
Теперь переходим в раздел Access Keys и нажимаем на кнопку Create access key:
Настройка Duplicati¶
Теперь заходим в web-интерфейс Duplicati, нажимаем на Добавить резервную копию
Вводим имя, задаём кодовую фразу если необходимо зашифровать наш бэкап
В разделе Тип хранилища выбираем S3 совместимый
Сервер - Пользовательский URL - minio:9000
В качестве AWS Access ID указываем Access Key из раздела Access Keys в web-интерфейсе minio. Аналогично AWS Access Key указываем Secret Key.
Выбираем директорию, которую собираемся бэкапить, в моём случае это папка www с файлами сайтов:
Основные параметры можно выставить так
Готово. Можно нажать на Запустить сейчас
и убедиться, что бэкап проходит корректно и появляются файлы в нашем бакете.
Полиси пользователя¶
Для разграничения доступа необходимо добавить полиси для каждого конкретного пользователя, тогда он будет видеть только конкретный бакет, в указанно ниже случае это бакет nextcloud.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::nextcloud"
]
},
{
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:ListMultipartUploadParts",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::nextcloud/*"
]
}
]
}