🤫 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?
- 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 type
zatrhnoutProgrammatic access
a 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 key
si poznamenejte, budeme ho potřebovat.
Vytvoření bucketu
- Otevřít stránku pro vytvoření bucketu.
Bucket name
zvolit stejný, jako user name z předchozího kroku (příklad: zalohy-ales-net).Region
zvolit podle ceny a požadavků na rychlost.Block all public access
nechat zaplé.- Zapnout
Bucket Versioning
. - Alespoň pro základ zapnout
Server-side encryption
sAmazon 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
General
minimálně zaškrtnoutBackup to an S3 Service
a vyplnit mail pro zasílání logů. - Nastavit
Schedule
podle 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 Service
nastavit samotnou S3:- V
Select a S3 service
vyberte region nastavený při tvorbě bucketu. - 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. Access Key
&Secret Key
jsou údaje vygenerované při tvorbě uživatele.- 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ě. 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.- U
Amazon: Storage Class
se řiďte ceníkem a požadavky. Server side encryption
můž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 scope
nastavit na všechny objekty a potvrdit, že chápete následky.- V
Lifecycle rule actions
zatrhnoutExpire current versions of objects
a níže nastavitNumber of days after object creation
podle domluvené doby + případné rezervy. - To samé je třeba udělat u
Permanently delete previous versions of objects
aNumber 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
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