WordPress: kompletní záloha webu na Amazon S3

🤫 Psst! Článek vyšel v roce 2021 a protože řeší technikálie, nemusí už být zcela aktuální. Berte ho tedy s rezervou.

Manuální zálohování WordPressu mě nikdy nebavilo. Stažení databáze a ruční kopírování souborů z FTP sice moc času nezabere, ale je třeba na zálohy myslet a věnovat jim čas. Postupně jsem se navíc dostal do stavu, kdy bylo třeba odbavovat větší množství webů, než je přijatelné řešit ručně.

Nezbývalo tedy, než vyhrnout rukávy a proces automatizovat na úrovni startovacího WordPress balíčku. Volba padla na „Simple Storage Service“ od Amazonu, známější spíše pod zkratkou S3. A že je v porovnání s Google Cloud Storage, na kterém jsem si vylámal zuby, fakt docela simple!


Jak zálohovat WordPress na S3?

  1. Potřebné nástroje
  2. Nastavení S3
    1. Vytvoření politiky
    2. Vytvoření účtu
    3. Vytvoření bucketu
  3. Nastavení BackWPup
  4. Ochrana před smazáním
  5. Mazaní starých záloh
  6. Automatická kontrola

Potřebné nástroje

Celý systém má pouze tři části – plugin BackWPup, AWS S3Make – protože čím méně toho použijeme, tím spíš se to nerozbije.

Jak jednotlivé součástky seskládat v dobře fungující stroj popíšu níže. Primárně pro sebe, abych odladil případné nedostatky a měl z čeho vycházet při nastavení nových záloh, sekundárně se však může hodit i vám. Minimálně pro inspiraci. Pokud se vám něco nezdá, echo na krejci@ales.net potěší.

💡 Přečtěte si, proč je zálohování vlastně důležité. A pokud je na vás celý postup zbytečně technický, přenechte starost se zálohami na mně.


Nastavení S3

U Amazonu je třeba provést několik nastavení na různých místech. Po prvním oťukání je však AWS velmi příjemný nástroj, ve kterém lze spoustu věcí odbavit tak nějak na klik.

Přístupové údaje do AWS je dobré používat právě a jenom k přístupu do administrace AWS. Jinak byste tím dali všanc v podstatě celé prostředí. Jako první je proto třeba vytvořit pro každý web vlastní přístup a práva mu omezit na minimum. To je naštěstí velmi snadné, stačí konfigem v JSONu vytvořit univerzální politiku pro zálohy.

Vytvoření politiky

  1. Otevřít stránku pro vytvoření politiky a přepnout se na záložku JSON.
  2. Vložit konfig (níže) a potvrdit tlačítkem Review policy.
  3. Zvolit obecný název a uložit tlačítkem Create policy.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::${aws:username}",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": "arn:aws:s3:::${aws:username}/*",
      "Condition": {}
    }
  ]
}

Všimněte si zejména ${aws:username}. To nám zajistí, že všem účtům budeme moci nastavit stejnou politiku a specifické údaje se vezmou z uživatelského jména jednotlivých účtů. Bucketům a účtům pak akorát dáme stejný název a přes tento univerzální konfig se již „spárují“.

Vytvoření účtu

  1. Otevřít stránku pro vytvoření uživatelského účtu.
  2. Zvolit User name, kterým následně pojmenujete i bucket pro data záloh, například tedy „zalohy-ales-net“.
  3. Access type zatrhnout Programmatic access a potvrdit tlačítkem Next: Permissions.
  4. Přiřadit uživateli dříve vytvořenou politiku překliknutím na Attach existing policies directly, vybrat tu správnou a potvrdit tlačítkem Next: Tags.
  5. Přiřadit tagy není nutné, ale mohou pomoci s organizací. Dalším tlačítkem přejdeme na Next: Review.
  6. Po kontrole můžeme účet vytvořit přes Create user.
  7. Access key ID & Secret access key si poznamenejte, budeme ho potřebovat.

Vytvoření bucketu

  1. Otevřít stránku pro vytvoření bucketu.
  2. Bucket name zvolit stejný, jako user name z předchozího kroku (příklad: zalohy-ales-net).
  3. Region zvolit podle ceny a požadavků na rychlost.
  4. Block all public access nechat zaplé.
  5. Zapnout Bucket Versioning.
  6. Alespoň pro základ zapnout Server-side encryptionAmazon S3 key (SSE-S3).
  7. To vše potvrdit tlačítkem Create bucket.

Možný zádrhel: Protože Amazon účtuje podle toho, jak dáváte estrojce zabrat, vyplatí se nastavit rozpočet. Halíře tu budou jen těžko dělat talíře, ale co kdyby.


Nastavení BackWPup

V obecné rovině je vhodné zvlášť zálohovat databázi a soubory. Pokud je na webu hodně uživatelsky nahraných souborů, zálohuji je bokem a pro systémové vyhrazuji zvláštní úlohu.

V konkrétní rovině pak stačí plugin v podstatě jen nainstalovat a vytvořit zálohovací úlohy:

  1. Na záložce General minimálně zaškrtnout Backup to an S3 Service a vyplnit mail pro zasílání logů.
  2. Nastavit Schedule podle potřeb, ideálně na brzké ranní hodiny.
  3. Ve Files (respektive DB Backup) nastavit, co je třeba zálohovat.
  4. A konečně na záložce To: S3 Service nastavit samotnou S3:
    1. Select a S3 service vyberte region nastavený při tvorbě bucketu.
    2. Celou část Or a S3 Server URL v bílém rámečku můžete přeskočit díky nastavení první položky.
    3. Access Key & Secret Key jsou údaje vygenerované při tvorbě uživatele.
    4. Vzhledem k nastavení stačí do Bucket selection napsat název bucketu. Technicky je možné zde mít i dropdown se všemi buckety v účtu, ale lepší je práva omezit a název zadat ručně.
    5. File deletion nastavit na nulu, tím se plugin nebude snažit o promazávání starých záloh. Stejně k tomu nedáváme účtům právo pro případ, že by pluginu šiblo nebo se někdo dostal do administrace webu.
    6. Amazon: Storage Class se řiďte ceníkem a požadavky.
    7. Server side encryption můžeme pro klid v duši zaškrtnout, ale máme vynucené přímo v bucketu.

Ochrana před smazáním

BackWPup může do bucketu pouze nahrávat, práva k mazání souborů nemá. Nemůže se tedy stát, že se plugin zblázní a promaže data. Může ale své vlastní zálohy přepsat – ať už prázdnými nebo podvrženými soubory – a právě proto jsme při tvorbě bucketu zapli verzování.

Když po sobě pluginu zakazujeme uklízet, jak tedy zajistíme, aby se S3 nepřeplnila již nepotřebnými zálohami?


Mazaní starých záloh

Staré zálohy necháme mazat přímo Amazon, tím se s jistotou vyhneme „vysokým“ účtům za skladování nepotřebných dat. Bucketu stačí nastavit automatickou expiraci objektů v délce domluvených X dní (plus pár pojistkových). Pokud tedy potřebuji držet 3 měsíce záloh, v praxi držím třeba 4. Náklady jsou zanedbatelné a dává to dostatek prostoru k případným opravám.

Celé se to nastavuje v Management > Lifecycle rules:

  1. Rule scope nastavit na všechny objekty a potvrdit, že chápete následky.
  2. Lifecycle rule actions zatrhnout Expire current versions of objects a níže nastavit Number of days after object creation podle domluvené doby + případné rezervy.
  3. To samé je třeba udělat u Permanently delete previous versions of objectsNumber of days after objects become previous versions.
  4. Uložit pravidlo tlačítkem Create rule.

Automatická kontrola

Pak je tu ještě robot pracující mimo tento systém. Pokud by plugin selhal, přestal vytvářet zálohy a zároveň o tom neposlal notifikaci na mail, je tu Make. Ten má svůj vlastní přístup ke všem bucketům v účtu, ale pouze k základnímu čtení:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": "*",
      "Condition": {}
    }
  ]
}

Opět tedy nemůže nic smazat a pouze kontroluje, zda je v bucketu dostatek souborů, ke kterému už se lze snadno dopočítat.

Pokud se počet ZIPů v bucketu dostane pod vypočítanou hranici, posílá se notifikace k ruční kontrole. Je totiž pravděpodobné, že se zálohy nevytváří a díky automatickému mazání těch starých se jejich součet dostal pod požadovanou hranici.


A nakonec manuální kontrola

To nejtěžší máte za sebou a pokud si vše sedlo, zálohujete automaticky. 🪄 Jen nezapomeňte, že není možné se od celého procesu odstřihnout úplně. Kromě situací, kdy začne křičet automat, je nutné také čas od času vyzkoušet obnovu nanečisto. Ale to už přeci není nic nového.

Jo! A v rámci udržitelnosti webu prosím zvažte kromě soukromých záloh i veřejné zrcadlení třeba pomocí Wayback Machine.

🤙 Mrkněme na zoubek vašemu projektu

Mám sice prostor jen na menší melouchy, ale napište i tak. Třeba si plácnem a pomůžeme procentíčkem.

krejci@ales.net