WordPress i Amazon S3 – historia o tym jak przeniosłem 150 000 plików do chmury i podniosłem bezpieczeństwo

Poznaj zalety przeniesienia plików z dysku serwera do chmury. W tym odcinku wyjaśniam, co to jest Amazon S3, jak wygląda struktura przechowywania danych w bucketach i jak bezpiecznie zintegrować tę usługę z Twoim WordPressem. Dodatkowo, dowiesz się, jak sprawnie przeprowadziłem proces migracji 150 000 plików do chmury Amazona i dlaczego to rozwiązanie okazało się kluczowe dla optymalizacji, bezpieczeństwa i wydajności pewnego projektu.

🎙️ Nowy odcinek podcastu już dostępny!

Podcast dostępny m.in w: Spotify, Apple Podcasts, Google Podcasts

TRANSKRYPCJA AUTOMATYCZNA:
Cześć, witam Cię w kolejnym odcinku Rób WordPressa.  Dzisiaj temat, który chodził mi po głowie od dosyć długiego czasu, wtedy był to troszkę inny kontekst, ale tak się zdarzyło, że w ostatnich tygodniach pracowałem nad pewną migracją, gdzie wykorzystałem właśnie coś takiego jak Amazon S3. S3, czyli skrót od Simple Storage Service. Krótko mówiąc, jest to taka usługa do przechowywania plików. 

I w tym odcinku opowiem Ci jak zintegrowałem takie customowe rozwiązanie na WordPressie właśnie z S3 po to aby przechowywać tam dosyć dużą ilość danych i łatwo nimi zarządzać.

Zanim jednak przejdziemy do głównego tematu tego odcinka chwila dla mojego partnera czyli marki CyberFolks od której możecie kupić domenę bądź hosting pod swojego WordPressa. Z kodem podcast otrzymacie 20 % rabatu na usługę hostingu WordPress.

Wrócy do tematu odcinka – czyli plików przechowywanych w naszych WordPressach i sposobów na optymalizację tego przechowywaia. Domyślnie jeśli mamy WordPressa, to sklep, czy zwykłą stronę i ładujemy tam jakieś pliki np. zdjęcia produktowe, inne pliki multimedialne, PDFy, cokolwiek co wrzucimy do biblioteki mediów no to ląduje oczywiście na dysku naszego serwera, tam są jeszcze dodatkowo generowane miniatury, więc tak naprawdę z jednego pliku robi nam się kilka, a czasem nawet kilkanaście różnych wersji. W zależności oczywiście od konkretnej konfiguracji, konkretnej instancji WordPressa.

I przy mniejszych wdrożeniach to nie ma zbyt dużego znaczenia, bo ani objętość, ani ilość tych plików nie jest problemem, bo czy to backupy, czy ewentualne migracje na inne serwery idzie to dosyć sprawnie, bo można te pliki dosyć szybko i łatwo przenieść.

Natomiast w momencie, w którym mamy jakieś wdrożenie, gdzie mamy bardzo dużo tych plików i pojemność dysku już zaczyna być problemem no to warto pomyśleć o zewnętrznym przechowywaniu plików, jakiejś zewnętrznej usłudze, która może nam zapewnić właśnie gromadzenie tych plików i oczywiście udostępnianie im osobom, które wchodzą na naszą stronę i które ładują jakieś tam konkretne podstrony, na których np. znajdują się te zdjęcia czy ewentualnie linki np. do jakichś PDF-u.

Wspomniałem już na początku odcinka, jednym z rozwiązań, które możemy wykorzystać jest Amazon S3, czyli usługa Simple Storagen Service.

Krótko mówiąc jest to po prostu takie miejsce, w którym możecie przechowywać pliki. Te pliki w S3 są zorganizowane w ramach tak zwanych bucketów. Bucket to jest po prostu z biur jakichś plików. Można potraktować to jako jakiś tam taki główny katalog do przechowywania.

Oczywiście tam możemy mieć różną strukturę zbudowaną, jakieś podkatalogi i tak dalej w zależności od tego co potrzebujemy. W ramach tych backetów możemy sobie też definiować różne polityki, czy to politykę choćby dostępu, czyli czy pliki, które się znajdują w danym bakecie są publicznie dostępne, czyli jeśli wyślemy komuś link do pliku w takim bakecie, czy on się otworzy, czy może trzeba będzie taki link podpisać odpowiednio bądź udostępnić jeszcze w ramach jakiejś innej polityki. Dodatkowo oprócz tego mamy tam dużo takich reguł, które możemy sobie ustalić. Jedną z takich reguł jest np. przenoszenie plików po pewnym czasie do jakiejś innej klasy tego storage’u Amazonowego bądź na przykład usuwanie plików jeśli mamy do czynienia z backupami możemy sobie stworzyć w bucketie taką politykę, że usuń wszystkie pliki starsze niż załóżmy miesiąc i to się dzieje automatycznie już bez naszej ingerencji. Pod kątem bezpieczeństwa mamy również takie mechanizmy jak replikacje do innych regionów bo warto tu wspomnieć, że zakładając taki bucket no to musimy sobie wybrać konkretny region, w którym ten bucket będzie się znajdował region, to jest po prostu jakaś tam lokalizacja geograficzna. Amazon w Europie ma kilka tych lokalizacji, jak oczywiście na całym świecie, czy to Stany, Azja i tak dalej. Mamy praktycznie dowolność, jeśli chodzi o wybór.

Ja tutaj będę się posługiwał nomenklaturą Amazona i tą S3 od Amazona, bo akurat tego rozwiązania użyłem przy moim ostatnim wdrożeniu. Natomiast w pewnym stopniu można powiedzieć, że ta S3 stała się takim branżowym standardem i mamy od Cloudflera usługę, która jest kompatybilna z E3, czyli de facto nawet jeśli mamy coś przygotowane pod API Amazona pod S3, no to na rynku jest wiele innych providerów, którzy dostarczają można powiedzieć usługę na bardzo podobnym poziomie z podobną funkcjonalnością, gdzie możemy po prostu przepiąć te usługi wręcz transparentnie dla naszego WordPressa czy jakiegoś tam innego oprogramowania, z którym integrujemy tą S3.

Do zalet tego rozwiązania możemy zaliczyć przede wszystkim niezawodność, ponieważ Amazon na przykład gwarantuje nam niezawodność na poziomie 99,9999 i tam tych dziewiątek jest bodajże 10 albo 11 po możemy założyć, że te dane są tam naprawdę porządnie zabezpieczone, co więcej tak jak mówiłem wcześniej, bez problemu możemy sobie wyklikać replikację. Takiego bucketa gdzieś tam do lokalizacji nawet na innym kontynencie jeśli chcielibyśmy już tak bardzo paranoicznie podejść do łatwość integracji bo mamy zarówno dużo gotowych wtyczek, które możemy użyć ale też Amazon dostępnia swoje SDK w większości popularnych języków programowania więc jeśli potrzebujemy zrobić coś bardziej niestandardowego no to wtedy użyć takiego SDK i zaprogramować coś na własną rękę.

I skalowalność jest przede wszystkim chyba jedną z największych zalet ponieważ tak naprawdę nie ma to znaczenia czy chcemy wrzucić tutaj 10, 20, 50 plików czy na przykład mamy 10 milionów plików do S3 poradzi sobie bez problemu zarówno z małym wolumenem jak i ogromną ilością plików Wszystko zależy oczywiście od tego czego potrzebujemy i myślę, też próg wejścia jest dosyć niski, ponieważ do testów nawet możemy użyć konta, nam jakieś darmowe limity na wykorzystanie tych usług Amazona, więc jeśli chcemy sobie poklikać, potestować, zobaczyć z czym to bez podpinania karty nawet możemy sobie przetestować te usługi, zobaczyć jak to działa w praktyce. Oczywiście… ceny są zależne od wielu różnych czynników, ponieważ tutaj te koszty są powiedzieć z trzech składników. Pierwszy taki podstawowy, no to jest ile danych przechowujemy i tutaj jest liczone za gigabajt miesięcznie europejskich lokalizacjach z tego co patrzyłem w dniu nagrywania tego te stawki to jest tam powiedzmy około za 1 gigabajt. Stawki są oczywiście podane w dolarach, więc to jest bardzo tanie miejsce do przechowywania, biorąc pod uwagę to co oferuję. Natomiast żeby nie było tak pięknie, to tu jeszcze musimy dopłacić za dwa elementy, musimy requesty. Requesty, czyli na przykład moment, w którym wrzucamy do S3 jakiś bądź go pobieramy, bądź wykonujemy na nim jakąś tam inną to też są takie kwoty liczone gdzieś tam w jakichś setnych częściach dolara za pakiet tysiąca takich requestów więc nie jest to wielki chyba największym problemem szczególnie jeśli chcielibyśmy hostować te publiczne to jest transfer, który również jest kalkulowany na bazie jakby zużycia tego ile faktycznie wykorzystujemy tego.

Więc no tu już może być drogo jeśli mamy bardzo popularną stronę z bardzo dużym ruchem i z bardzo dużą ilością mediów, które przechowujemy właśnie w S3. Jeśli chcielibyście sobie policzyć mniej więcej oszacować te koszty, to no albo musicie zajrzeć do cenników Amazona, wrzucić to w jakiegoś Excela i policzyć według waszych Ale Amazon też ma kalkulatory na swoich stronach, gdzie możemy wybrać sobie właśnie to, jakiej klasy ten storage potrzebujemy, ile go ile będziemy mieli operacji, powiedzmy, wejścia tych plików do tej S3, ile będziemy mieli jakiegoś tam pobierania innych requestów. i na bazie tych wszystkich danych on nam wyliczy miesięczny z jednej strony może być to bardzo opłacalne rozwiązanie jeśli mamy dużo dużych rozmiarów, ale one są stosunkowo rzadko używane, rzadko No jeśli mamy znowu sytuację taką, że tych plików mamy powiedzmy nawet mniej, ale mamy dosyć duży transfer na nich, no to wtedy już tak tanio nie będzie. bo oczywiście wszystko zależy od konkretnego przypadku więc nie chcę tutaj jakoś się zatrzymywać w tym punkcie no bo to jest już stricte uzależnione od konkretnego wdrożenia.

Żeby zintegrować WordPressa właśnie w zakresie przechowywania mediów w S3, no to możemy oczywiście wykorzystać jedno z kilku dostępnych Takie trzy najpopularniejsze chyba, no to WP Offload Media, Media Cloud i S3 One się trochę różnią, ale mniej więcej działają na podobnej zasadzie. Chodzi tutaj o to, że w momencie, którym wrzucamy takie media do biblioteki no to WordPress wysyła je do E3 w bazie danych podmienia adresu URL w bazie danych w taki sposób, że nie linkują do naszego serwera tylko linkują właśnie do zasobów S3 dzięki czemu w momencie ładowania strony już te zdjęcia lecą sobie bezpośrednio z serwerów to można powiedzieć dzieje się wszystko automatycznie to znaczy i ta wysyłka i potem ta podmiana to punktu widzenia pracy z takim WordPressem no to w zasadzie nie ma różnicy czy te pliki są na dysku naszego serwera czy w S3. Jest to zupełnie transparentne dla takiego powiedzmy redaktora, który pracuje na co dzień z takim

Oczywiście możemy też zintegrować to jakoś na własną rękę jeśli potrzebowalibyśmy jakichś specyficznych konfiguracji i o takiej konfiguracji powiem za chwilę.

Warto tu też wspomnieć, to nie jest to samo co np. Cloudflare i bo S3 nie jest zoptymalizowana stricte pod szybkie dostarczanie contentu na całym świecie. Tutaj musielibyśmy taką konfigurację, że albo użyć np. Cloudflare, którym mówiłem w jednym z ostatnich albo podobnego rozwiązania Aleo d’Amazon, czyli CloudFront. i wtedy możemy sobie zrobić taką konfigurację, gdzie S3 odpowiada za przechowywanie tych wszystkich plików, czyli za zagromadzenie ich tak jak dysk naszego na poziomie CloudFronta czy Cloudflera, czy jeszcze innych tego typu możemy dostarczać te treści na cały świat, praktycznie właśnie w zoptymalizowany sposób, że jeśli ktoś wchodzi ze Stanów, te obrazki lecą ze Stanów, z jakiegoś serwera, który tam jest, a jeśli ktoś wchodzi…

Europie na naszą stronę, z jakiegoś tam najbliższego centrum danych. I taka konfiguracja daje też dosyć dużo takich nieoczywistych korzyści, jak choćby to, że jeśli mamy te obrazki w S3 i robimy jakieś dodatkowe środowiska, czy to staging, czy jakiś preprod, zresztą o tych środowiskach również mówiłem w ostatnim odcinku albo jednym z ostatnich no to wtedy nie mamy tego całego narzutu, że jeśli mamy bardzo dużo tych mediów, to musimy za każdym razem kopiować te media pomiędzy środowiskami.

No oczywiście w momencie tworzenia backupów czy odtwarzania na przykład w jakiejś krytycznej sytuacji jeśli mamy serwis, który potrzebujemy szybko odtworzyć z backupu, ale w jakiejś zupełnie innej to wtedy te media już są w E3, nie musimy absolutnie nic z nimi To wszystko integruje się można powiedzieć samo i na przykład jeśli cały WordPress z mediami waży, nie wiem, 500 czego media to jest 495 no to tak naprawdę my mamy tylko te 5 Giga do przerzucenia, uruchamiamy takiego WordPressa, a cała reszta leci już z serwerów na przykład Amazona czy jakiegoś innego Wendora, który dostarcza nam taką

I tu jeszcze jeden taki aspekt, czyli migracja tych mediów. Jeśli to jest sytuacja, której mamy nową stronę, od samego początku zakładamy użycie tej S3 czy podobnych mechanizmów, to nie ma większego problemu, bo wraz tworzeniem treści te wszystkie pliki multimedialne będą leciały właśnie na te zewnętrzne Natomiast jeśli to jest tak, że mamy stronę, która jest powiedzmy tam 2-3-5 lat w internecie, to musimy wykonać w jakiś sposób tą migrację tego rozwiązania chmurowego tu te wtyczki też mają narzędzia, które umożliwiają taką migrację, czy to właśnie z poziomu linii comment, czy  WP-admina, ale to już odsyłam Was do dokumentacji tych konkretnych. Ja się dzisiaj skupię na trochę innym rozwiązaniu, gdzie chciałem się z Wami podzielić właśnie takim małym case study, jak rozwiązałem sobie sporo problemów właśnie za pomocą tej S3.

Ok, przejdźmy więc do tego mojego, nakreślić Ci kontekst, to przybliżę Ci to utrzymuję gdzieś tam od kilku lat. Oczywiście nie będę mógł tutaj zdradzić wszystkiego i będzie to w takiej formie można powiedzieć zanonimizowane. Natomiast na odcinka i zrozumienia całego mechanizmu myślę, że będzie to dla Ciebie jasne i te mechanizmy, które tam…

Zachodzą będą po prostu jasne i klarowne, nie będzie problemu ze zrozumieniem. Całość tego rozwiązania oparta jest o WordPressa i u Commerza i tutaj akurat ta część plików, która jest gdzieś tam czy we wpisach blogowych, na takich stronach statycznych typu strona główna, kontakt i tak dalej, ona jest serwowana normalnie z dysku serwera za pośrednictwem Cloudflera. Tutaj nic się nie zmienia, tych plików nie przenosimy do S3. jest bardzo duża grupa plików, która pochodzi tak naprawdę od klientów. proces wygląda tak, że w momencie zakupu takiego wirtualnego produktu jest wypełnienie ankiety i przesłanie pewnych plików do właściciela, żeby mógł świadczyć pewną I odbywa się to tak, że formularz jest złożony z wielu pytań. Na końcu jest możliwość przesłania plików właśnie czy to graficznych, czy PDF.

Co ważne też prywatność tych plików jest dosyć istotna, ponieważ no mogą tam być zawarte jakieś dane, które niekoniecznie chcielibyśmy, żeby były udostępnione, więc tu jeszcze musimy zadbać o bezpieczeństwo całego takim kątem, że jeśli ten plik trafi na serwer, musi trafić, żeby właściciel sklepu mógł obsłużyć takie zamówienie, żeby mógł się zapoznać z treścią tych ale jednocześnie nie może być dostępne dla nikogo poza tym zalogowanym użytkownikiem, który ma do tego uprawnienia. Na dalszym etapie obsługi tego wygląda tak, że jeszcze raz użytkownik przesyła zestaw plików do właściciela sklepu, strony technicznej jest to to samo rozwiązanie, prostu pliki są przesyłane, są trzymane na dysku serwera, w zasadzie były trzymane na dysku serwera i zabezpieczone w taki sposób, zewnątrz nie były w początkowym okresie rozwiązany to było w ten sposób, że po wypełnieniu tej ankiety, która jest wysyłana do i obsługiwana w ogóle przez jakiś tam customowy kod, który był napisany na potrzeby tego danego projektu, no to te pliki są przesyłane i wrzucane do odpowiedniego katalogu, który jest niedostępny z webserwera, czyli jeśli wpiszemy link do tego pliku, no to… dostaniemy 403 nie będzie on wyświetlony ponieważ serwer na to nie taki też był cel natomiast od strony administratora tego sklepu jeśli chcemy zajrzeć do tych cały proces wygląda tak że na poziomie PHP jest sprawdzane czy dany użytkownik który jest uzyskać dostęp do takiego pliku jeśli tam wszystkie warunki się zgadzają to PHP odczytuje taki plik i wysyła przeglądarki, czyli całość z udziałem PHP, no bo domyślnie jeśli mamy jakiś plik graficzny czy PDF no to PHP tu nie bierze udziału w dostarczaniu go do tej osoby, która chce taki plik obejrzeć, tylko po prostu serwer bierze taki plik z dysku, wysyła do przeglądarki i tutaj się kończy cały proces.

Natomiast w tym rozwiązaniu, którym mówię, to musieliśmy wprowadzić taką dodatkową warstwę, czyli PHP najpierw sprawdza, czy dany użytkownik może uzyskać dostęp do takiego bliku. Jeśli tak, pobiera go z dysku i wysyła i to rozwiązanie działało dosyć Było wystarczająco dobre pod kątem tego zarządzania Natomiast tych plików z czasem się nazbierało dosyć dużo, chwilę migracji tych plików było prawie 150 tysięcy. Były to obrazki, Jeśli chodzi o typy tak, obrazki w różnych formatach plus pliki PDF.

Udostępnienie tych plików też z pośrednictwem PHP oczywiście jest dużo bardziej zasobożerne niż takie pobranie bezpośrednio przez web server, no ale to akurat było najmniejszym problemem, bo o ile tych plików było dużo, zajmowały dosyć dużo

to dostęp do nich był stosunkowo rzadki, bo na przestrzeni jakby realizacji danego zamówienia to było tam kilka, max kilkanaście razy, gdzie trzeba było zajrzeć do tych więc tutaj nie zajężało nam to serwera, ani nie było to jakieś tam wymagające pod kątem takim, że musieliśmy mieć jakiś super mocny serwer do tego, z tych mechanizmów, natomiast było to z definicji bardziej za sobą żarne niż takie klasyczne pobranie pliku z I na pewnym etapie pomyślałem, że fajnie by było to jakoś rozwiązać przede wszystkim z tego względu, żeby po pierwsze utrzymać bezpieczeństwo tych a po drugie, żeby móc swobodnie zarządzać tym wszystkim i mieć też taki scenariusz na wypadek jakiejś sytuacji awaryjnej w momencie, której na przykład nie wiem, coś niedobrego się dzieje z serwerownią, a jak wiemy historia zna takie totalnie wszystkie usługi nam się tam wykładają, żeby mieć taką szybką ścieżkę do tego, aby odtworzyć projekt w praktycznie dowolnej lokalizacji. na świecie w możliwie krótkim czasie. I tutaj pomyślałem od razu o właśnie rozwiązania typu Amazon szybkim researchu wyszło na to, że będzie to bardzo dobre rozwiązanie również pod kątem kosztów, tak jak wspominałem gigabajty, czyli sam ten storage jest tani Tutaj płacimy głównie właśnie za transfer i te requesty, ale tutaj w tym przypadku akurat to był żaden problem, bo ten transfer jest bardzo, bardzo nie ma też żadnego problemu z tym, aby używać takiej usługi i dosłownie za parę dolarów miesięcznie przechowywać sobie takie ilości danych w odpowiednim środowisku.

Jak zacząłem sobie tak analizować to jak ten system działa obecnie, a jak chciałbym żeby no to na początku miałem pomysł taki, że w momencie w którym zapisuję ten plik na to wysyłam sobie go od razu do E3 i tu jakby się kończy cały proces. Ale potem jak zacząłem się zastanawiać, no to stwierdziłem, że może nie do końca jest to dobre względu na to, że no to wpływa bezpośrednio na moment wysłania tego formularza. czyli w momencie, w którym klient wysyła dany formularz, załącza tam kilka, kilkanaście plików czasem, no to musielibyśmy poczekać, aż to wszystko wyśle do tej S3 i potem dopiero moglibyśmy wyświetlić na przykład potwierdzenie klientowi hej, dzięki za wysłanie i tak dalej. Więc tutaj już się zatrzymałem i to też było dosyć wygodne w sumie, bo Można powiedzieć, że miałem paradoksalnie mniej pracy z tym, żeby te pliki wysyłać już po zapisaniu ich na gdyby to było robione tak w Tak jak mówiłem wcześniej, Amazon ma dostępne SDK również dla PHPa, więc wziąłem takie SDK oficjalne Amazonowe, czyli miałem gotową bibliotekę do zarządzania tymi plikami do wysyłania, krótko mówiąc do API Amazon, a przy czym właśnie z tym API w zasadzie nie musiałem nic robić, bo ta biblioteka dawała mi proste metody do tego, aby np. czy to zautoryzować, czy właśnie wysłać pliki, pobrać itd. Więc tutaj na tym etapie to było dosłownie jedno polecenie kompozera, który mi zainstalował taką bibliotekę w moim rozwiązaniu, gdzie mogłem już korzystać w tym moim customowym pluginie właśnie z tej biblioteki od Amazona. I tutaj, tak jak mówiłem wcześniej, mniej pracy paradoksalnie, bo dopisałem sobie tylko kawałek który dodawał mi zadanie w WP-Kronie z informacją o tym, że… obiekt o jakimś tam id i tu mam na myśli id- nowe pliki w tym momencie wp-kron który jest uruchamiany w tle jest odpięty i trigerowany z Crone’a takie zadanie brał te pliki wysyłał do s3 ale to się działo już zupełnie w tle poza tym co widzi wpływało to absolutnie na czas wysyłki tego formularza na czas obsługi. strony klienta nic się nie zmieniło. Te pliki były zapisywane na dysku serwera tak jak było to robione do tej pory i dopiero potem WP Chrome wysyłał je do Amazona. w post odpowiednie dane, odpowiednie ścieżki gdzie te pliki są tak, abym mógł potem w systemie łatwo obsłużyć to i podlinkować te pliki już właśnie z linków do Amazona. Więc tu na tym etapie mamy powiedzmy połowę roboty zrobionej, no bo te pliki lecą już do Amazona, no ale okej, mieliśmy takie założenie, że te pliki nie mogą być dostępne dla nikogo poza uprawnionymi użytkownikami. Wcześniej wyglądało to tak, że ten PHP na naszym serwerze to obsługiwał, teraz musimy zrobić tak, żebyśmy mogli podlinkować te pliki z Amazona.

No z jednej strony możemy oczywiście wstawić te linki i podlinkować normalnie tak jak choćby te media. No ale jednak nie do końca, bo musimy ustawić taką politykę na tym bucketie, który przechowywał te dane, nikt nie jest w stanie się do nich dobre. Czyli jakby wszyscy są zbanowani z definicji. To jest zresztą chyba domyślna polityka, która jest nakładana przez Amazona w momencie tworzenia takiego bucketa, czyli jakby wszyscy mają zakaz I o coś takiego nam chodziło. Czyli nawet jeśli wrzucimy ten plik, mamy link do tego pliku, jeśli wysłałbym go no dostanie 403, nie ma dostępu i ten plik się nam nie pojawi.

Więc tutaj odpowiednia konfiguracja bucket’a oczywiście była ale ok, dobra co dalej, co z tymi plikami, jak je możemy podejrzeć i rozwiązałem to na takiej zasadzie, że za pomocą tego SDK mogę wygenerować linki, które będą ważne przez jakiś tam określony czas, na przykład przez 5 minut. Link wygląda można powiedzieć tak samo jak ten ogólny z tym, że ma po po pytajniku doklejony jakiś tam odpowiedni odpowiednią długą ciąg znaków, tam hash token coś, coś co po prostu mówi Amazonowi, że okej mogę pokazać ten plik i te linki można generować z jakimś tam odpowiednim czasem żeby to wszystko można było robić dla danego bucket’a musimy wygenerować sobie parę kluczy, w tym SDK, która nas autoryzuje tam po prostu to nie jest tak, że po prostu działa sobie jak… tylko musimy się odpowiednie zautoryzować. No jeśli podpinaliście jakąkolwiek usługę po API, no to na pewno wiecie o czym mówię. I właśnie na tej podstawie wysyłamy do Amazona pliku, który chcemy wygenerować tak zwany presign URL i w odpowiedzi on nam daje właśnie taki podpisany adres URL za pomocą którego możemy pobrać taki plik. i ja to zaimplementowałem w ten sposób, że oczywiście to co kontrolowałem wcześniej przy pobieraniu tych plików na poziomie PHP jest kontrolowane dalej na poziomie w momencie renderowania widoków, w którym są osadzone te pliki bądź linki do plików PHP za pomocą tego SDK, AWS strzela do tej S3 generuje te podpisane URL i dzięki temu w przeglądarce ten plik nam się załaduje oczywiście po dłuższej, krótszej chwili ten link nie ma z tym problemu i pliki są zabezpieczone.

Tutaj teoretycznie mamy też taką której jeśli byśmy otworzyli taki ekran z dostępem do tych plików, gdzie mamy na przykład załadowane zdjęcia wysłali link do takiego zdjęcia, na przykład za pomocą messengersa do kolegi, no to oczywiście jemu się to zdjęcie otworzy, jeśli ten timeout nie minie, jeśli powiedzmy link jest generowany z czasem ważności 5 minut, no to jeśli w 3 minuty się uwiniemy, no to to zdjęcie się otworzy.

tutaj miałem nawet kolegą, którym robimy ten projekt, czy tak powinno być, czy nie, czy nie jest to jakaś luka No bo teoretycznie mogłem to zrobić w podobny sposób jak były te pliki pobierane z dysku, czyli za pomocą PHPa podawać ten plik do mojej nie czytać go z dysku, tylko po prostu wczytać serwerów Amazona. Natomiast zdecydowałem się na to rozwiązanie ze względu na to. no i tak… ta osoba, która może wysłać link i tak ma te pliki, Może kliknąć prawym klawiszem, dać zapisz jako wysłać ten plik jako plik, a nie jako link, więc korzyść pod kątem bezpieczeństwa żadna, a jednak dosyć znacznie by to obciążało serwer, którym pracuje aplikacja, więc tutaj ograniczyliśmy się do tych linków podpisanych na jakiś tam czas od momentu otwarcia strony, zdjęcia oczywiście nie są problemem, no bo one się ładują automatycznie. a pliki PDF, które są podlinkowane, to jeśli byłaby sytuacja typu, że powiedzmy zamówienie i zostawię w karcie do jutra, jutro przyjdę, kliknę sobie w link, no to oczywiście dostaniemy 403, no bo nie będzie dostępu, ale wtedy wystarczy tylko odświeżyć stronę z PHP wygeneruje nam nowe linki dla tych plików z nowymi podpisami i będziemy mieli znowu ten określony czas na to, aby sobie pobrać takiego PDF.

Zresztą to jest model wykorzystywany w wielu aplikacjach. Ostatnio chociażby spotkałem się z tym w takiej aplikacji. To jest taka aplikacja do listy zadań na telefon, tablet, komputer, generalnie na wszystko. I tam też jeśli wrzucimy sobie na przykład do jakiegoś taska jakiś plik tekstowy, pdf, czy cokolwiek innego, na przykład fakturę do zapłacenia, no to to jest też przechowywany w S3 od Amazona z tego co pamiętam.

Jeśli klikniemy w taki link, to on też jest podpisany tak aby nikt inny nie mógł się dostać do tych plików i działa to na dokładnie tej samej zasadzie. I na tym etapie miałem już obsłużone wysyłanie tych plików do chmury, obsługę w panelu, to znaczy bezpieczne pobieranie, podpisowanie tych URL itd. No ale została jeszcze kwestia tych 150 tysięcy plików, które sobie leżały na dysku mojego. I tutaj też w zasadzie można powiedzieć nie wyważałem otwartych drzwi, skorzystałem z możliwości stworzenia sobie customowej komendy do WPC-li. Dzięki temu z konsoli mogłem sobie uruchamiać taki proces importu tych. Zrobiłem sobie komendę, która albo mi obsługuje zakres tych zamówień po idikach, czyli czy są wysłane pliki do E3 w zamówieniach od id 100 do id 1000 na przykład i on sekwencyjnie sobie przeglądał te wszystkie zamówienia. Jeśli znalazł coś do wysłania, no to wysyłał. i zapisywał odpowiednie dane w a jeśli nie, to leciał sobie dalej i druga wersja tej komendy to zamiast zakresu mogłem podać id konkretnego zamówienia, które wysyłał do S3, to też się przydawało na etapie więc miałem już możliwość robienia tego importu w tle bez udziału webserwera, bo uruchamiałem to po prostu przez SSH na tym… na tym serwerze, na którym właśnie było te 150 tysięcy plików do . Z takiej, powiedzmy, prostej matematyki to tam mi wychodziło chyba coś około 80-90 godzin, że się to będzie. Natomiast poszło to dosyć sprawnie, sprawniej niż zakładałem, z tego względu, że uruchamiałem te procesy równolegle, szły na przykład trzy zakresy równolegle i to, powiedzmy, nie wpływało jakoś znacząco na prędkość przetwarzania, no bo… Tam jeszcze na etapie wysyłania tych plików do S3 jedna operacja, to znaczy resize plików graficznych, bo zdarcza się, że tam klienci wrzucają pliki prosto z aparatu, które mają np. nie wiem, 6000 na 4000 pikseli, a na potrzeby obsługi danego zamówienia, powiedzmy skalowanie do max 2500 na dłuższym

jest nawet powiedzmy za dużo, ale…gdzieś tam na takim poziomie ustawiłem ten parametr, więc jest jeszcze optymalizowany rozmiar tych plików, co też się przekłada oczywiście na koszty, na to, że te pliki się szybciej wczytują, a tak jak powiedziałem, no nie absolutnie potrzeby, żeby przechowywać np. pliki w rozmiarach 4×6000 pikseli. Więc tu jeszcze dodatkowo sobie optymalizujemy w tle i też nie wpływamy bezpośrednio na czas wysyłki takiego formularza przez klienta do naszego sklepu.

I ten odcinek miałem nagrać trochę wcześniej, jakieś 2-3 tygodnie temu. Natomiast trochę jeszcze się wstrzymałem, żeby zobaczyć jak faktycznie w środowisku produkcyjnym ta S3 będzie funkcjonowała. No funkcjonuje bardzo dobrze, rozwiązanie się świetnie sprawdza. Koszty są również dużo mniejsze niż zakładałem, bo jak liczyłem w tym kalkulatorze, to tak można powiedzieć bardzo mocno zaokrąglałem do góry na takiej zasadzie, że jak powiedzmy przyrost plików miałem w okolicach 100-200 dziennie, to wpisywałem 500, tak żeby określić też klientowi potencjalne faktury, które będzie Amazon nam wystawiał za przechowywanie tych danych, więc w praktyce jeszcze te koszty okazały się dużo niższe niż

Głównie też ze względu oczywiście na to, jak mówiłem, nas ten dostęp do pliku jest dosyć rzadki. Głównie chodzi o to, żebyśmy mieli gdzie magazynować te pliki i… i chronić dostępu do nich. Tu jeszcze warto wspomnieć to, że pliki w chmurze Amazona są szyfrowane i w momencie pobierania ich są odszyfrowywane i przesyłane do przeglądarki, więc to jest też dodatkowe że nie leżą po prostu te pliki tak jak wcześniej to było na naszym serwerze, to był też taki improvement, jeśli chodzi o bezpieczeństwo całego rozwiązania. Miał być to dosyć krótki odcinek, a z tego co widzę tutaj na zegarku no to wyszło dosyć dużo, przynajmniej tej surowej treści po montażu będzie pewnie trochę mniej. A ja chciałem Wam jeszcze opowiedzieć też o backupach, które robię do E3, o całej strategii odzyskiwania, ale myślę, że z tego przygotuję nowy odcinek. Także w tym odcinku to wszystko, a Wy dajcie znać czy chcecie posłuchać o tym jak robię backupy właśnie do E3, jak przygotowałem sobie to środowisko. w taki sposób, żeby w bardzo krótkim to odzyskać dosłownie na każdym który gdzieś tam sobie stoi na świecie, nawet gdyby serwerownia, w której aktualnie to wszystko jest przechowywane, wyparowała z powierzchni ziemi. Jeśli Was interesuje taki temat, dajcie znać, przygotuję taki materiał,  a tymczasem dziękuję bardzo za wysłuchanie i do usłyszenia w kolejnym odcinku.

0 0 votes
Article Rating
Subscribe
Powiadom o
guest
0 komentarzy
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x