🤫 Psst! Článek vyšel v roce 2021 a protože řeší technikálie, nemusí už být aktuální. Berte ho 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?
- Potřebné nástroje
- Nastavení S3
- Nastavení BackWPup
- Ochrana před smazáním
- Mazaní starých záloh
- Automatická kontrola
Potřebné nástroje
Celý systém má pouze tři části – plugin BackWPup, AWS S3 a Make – 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
- Otevřít stránku pro vytvoření politiky a přepnout se na záložku
JSON. - Vložit konfig (níže) a potvrdit tlačítkem
Review policy. - 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
- Otevřít stránku pro vytvoření uživatelského účtu.
- Zvolit
User name, kterým následně pojmenujete i bucket pro data záloh, například tedy „zalohy-ales-net“. - U
Access typezatrhnoutProgrammatic accessa potvrdit tlačítkemNext: Permissions. - 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čítkemNext: Tags. - Přiřadit tagy není nutné, ale mohou pomoci s organizací. Dalším tlačítkem přejdeme na
Next: Review. - Po kontrole můžeme účet vytvořit přes
Create user. Access key ID&Secret access keysi poznamenejte, budeme ho potřebovat.
Vytvoření bucketu
- Otevřít stránku pro vytvoření bucketu.
Bucket namezvolit stejný, jako user name z předchozího kroku (příklad: zalohy-ales-net).Regionzvolit podle ceny a požadavků na rychlost.Block all public accessnechat zaplé.- Zapnout
Bucket Versioning. - Alespoň pro základ zapnout
Server-side encryptionsAmazon S3 key (SSE-S3). - 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:
- Na záložce
Generalminimálně zaškrtnoutBackup to an S3 Servicea vyplnit mail pro zasílání logů. - Nastavit
Schedulepodle potřeb, ideálně na brzké ranní hodiny. - Ve
Files(respektiveDB Backup) nastavit, co je třeba zálohovat. - A konečně na záložce
To: S3 Servicenastavit samotnou S3:- V
Select a S3 servicevyberte region nastavený při tvorbě bucketu. - Celou část
Or a S3 Server URLv bílém rámečku můžete přeskočit díky nastavení první položky. Access Key&Secret Keyjsou údaje vygenerované při tvorbě uživatele.- Vzhledem k nastavení stačí do
Bucket selectionnapsat 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ě. File deletionnastavit 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.- U
Amazon: Storage Classse řiďte ceníkem a požadavky. Server side encryptionmůžeme pro klid v duši zaškrtnout, ale máme vynucené přímo v bucketu.
- V
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:
Rule scopenastavit na všechny objekty a potvrdit, že chápete následky.- V
Lifecycle rule actionszatrhnoutExpire current versions of objectsa níže nastavitNumber of days after object creationpodle domluvené doby + případné rezervy. - To samé je třeba udělat u
Permanently delete previous versions of objectsaNumber of days after objects become previous versions. - 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
Prostor najdu sice jen na menší melouchy, ale napište i tak.
Třeba pomůžeme procentíčkem!