Pomigracyjnie

W poprzednim wpisie pisałem o planowanej migracji na Oracle Cloud. Jak widać blog stoi już w nowej lokalizacji, więc operacja jest zakończona i mogę napisać kilka słów z perspektywy.

Migracja

Poszło niemal bezproblemowo. Backup w zasadzie zadziałał. Był problem z detalami typu lista zainstalowanych pakietów i crony. W sumie nieistotne i/lub poprawione. Xpil opisał swoją migrację VPSa i po tej lekturze miałem silne postanowienie zamknięcia wszystkiego w kontenerach LXC. To nieco wydłużyło proces migracji i dodało trochę zadań. Co prawda nadal nie jest to taka separacja jak w dockerach czyli per usługa, ale mariadb + nginx + całe WWW w osobnym VPSie też jest OK.

Konieczne było lekkie przemeblowanie. Musiałem rozdzielić skrypty cron do właściwych kontenerów. Okazało się też, że wynik działania jednego kontenera (Planeta Joggera) musi trafić nie do hypervisora, tylko do innego kontenera, a ten nie ma dostępu. Skrypt w cronie na hypervisorze załatwił sprawę.
Podobnie niezbyt elegancko rozwiązany jest backup bazy danych. Dump robię teraz w LXC, a następnie cały kontener jest backupowany. W ten sposób zawartość bazy jest zdublowana. Mam pomysł jak to rozwiązać, nie wiem, czy potrzebuję. Tyle o samej migracji, a efekty i hosting?

Efekty

Przede wszystkim jest szybciej, przynajmniej wg GTmetrix. Niestety nie zrobiłem testu tuż przed migracją i od razu po niej. Mam tylko ten link z twardymi danymi, ale w międzyczasie się poprawiło, więc polegam głównie na pamięci. Ale tak dobrze to nigdy nie było:

Blog GTmetrix w Oracle Cloud
GTmetrix w Oracle Cloud

Hosting

Pewnie w sporej części to kwestia przejścia z jednego VPSa na dwa, w dodatku z widocznymi dwoma rdzeniami w systemie. W Arubacloud było:

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 79
model name      : Intel(R) Xeon(R) CPU E5-2650L v4 @ 1.70GHz
stepping        : 1
microcode       : 0xb000038
cpu MHz         : 1699.999
cache size      : 35840 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx hypervisor lahf_lm 3dnowprefetch pti arat
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips        : 3399.99
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual

Teraz jest (pojedynczy rdzeń):

processor       : 1
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 1
model name      : AMD EPYC 7551 32-Core Processor
stepping        : 2
microcode       : 0x1000065
cpu MHz         : 1996.249
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr virt_ssbd arat npt nrip_save arch_capabilities
bugs            : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 3992.49
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual

Blog zawsze dominował, jeśli chodzi o obciążenie, ale teraz ma całe zasoby dla siebie. Z drugiej strony bieżący VPS ma sporo wolniejszy dysk (3000 IOPS, 24 MB/s). Można tym jakoś sterować, ale zakładałem na domyślnych wartościach. No i nie widzę potrzeby zmiany.

Wady

Żeby nie było, że wszystko jest fajnie – port 25 TCP w Oracle Cloud jest zablokowany na twardo, w obie strony. Czyli ani maila nie przyjmę, ani nie wyślę. Znalazłem, że trzeba pisać do supportu o odblokowanie. Napisałem i zobaczymy. O ile do monitoringu poczta nie jest mi potrzebna, bo powiadomienia mogę wysyłać Telegramem, to przy blogu jest to jakby kluczowe. Potwierdzanie subskrybcji komentarzy itp. Z drugiej strony widzę, że nie było to jakoś mocno wykorzystywane… Zobaczę co odpowiedzą i wtedy pomyślę, co dalej.

Ogólnie sporo rzeczy w Oracle Cloud jest załatwianych przez support. Ustawienie PTR – support (działa!). Inny obraz dysku dla arm64 – support (tak powiedzieli na czacie, odpuściłem).

Chmura Wyroczni

Niewiele brakowało, a lipiec byłby pierwszym od wielu miesięcy, jeśli nie w historii, miesiącem bez wpisu. Jakoś tak się złożyło, że było parę rzeczy, ale żadna nie wydała mi się godna wpisu.

Najważniejszym zagadnieniem jest rozpoczęcie prac związanych z migracją na nowy hosting (Oracle Cloud), o którym wspominałem we wpisie z początku roku. Jest to jednocześnie ostatnie z zaplanowanych postanowień. PUM jest już przepisany na Pythona i działa. Skrypt generujący stan rowerów na stacjach Nextbike, w zeszłym miesiącu przeniosłem na repo na GitHub.

Pozostał hosting. Moim wyborem jest Oracle Cloud. Ich free tier jest bardzo zachęcający, szczególnie jeśli chodzi o moje potrzeby. Ilość przestrzeni na dysku wręcz rozpieszcza – obecnie mieszczę się „ze wszystkim” na 1 VPS i 20 GB. Przynajmniej, jeśli chodzi o rzeczy „produkcyjne”. Nie ukrywam, że po pierwsze dopiero się uczę, po drugie nie jest to wszystko ani intuicyjne, ani dopracowane. Dobrze, że kiedyś miałem nieco więcej do czynienia z Openstack, bo filozofia podobna.

Napaliłem się na maszynki ARMowe i… szybko dostałem kubłem zimnej wody. Po pierwsze, w oficjalnych obrazach nie ma Debiana. Po drugie, w przypadku ARM nie ma możliwości cywilizowanej metody instalacji, przez dostarczenie swojego obrazu. Znalazłem co prawda tego typu wygibasy, które rozumiem, ale… nie działają od kopa. Przynajmniej nie dla najnowszego Ubuntu. Pewnie popróbuję jeszcze, ale wariant, że polegam na dostępności starego Ubuntu dla „produkcyjnych” gratów, średnio mi się uśmiecha.

Tak czy inaczej mam soft, który wymaga amd64, więc po prostu postawiłem maszynkę amd64. Tu również nie dają Debiana, ale istnieje ręczna, jednak dość cywilizowana metoda instalacji Debiana w Oracle Cloud. Trochę mniejsze zasoby, ale w zupełności wystarczają. Pierwsze kontenery już przeniosłem. Oczywiście zacząłem od strony zadniej, czyli od zabawek i rzeczy nieprodukcyjnych. Pozwoliło mi to złożyć „tymczasowego” VPSa. W przyszłym tygodniu pewnie będzie większa przerwa. Akurat blog nie jest skonteneryzowany, więc przywrócenie nie będzie po prostu wgraniem backupu kontenera.

hCaptcha na WordPress przeciwko spamowi

Jednym z powodów dla których umieściłem CAPTCHA[1] na blogu była chęć zmniejszenia ilości spamu w komentarzach. Dokładniej, ilości spamu do moderacji, bo i tak wszystkie komentarze przechodzą tu przez ręczną moderację, nim pojawią się na blogu.

Na początek drobne statystyki. WordPress pokazuje równe 230 komentarzy oznaczonych jako spam. Najstarszy z 24.10.2018. Do wczoraj[2] daje to 909 dni, czyli średnio ok. jednego spamu na cztery dni. Nie jest to dokładna statystyka, część mogłem kiedyś usunąć, zamiast oznaczyć jako spam. Zjawisko nie było też stałe w czasie. Mam wrażenie, że ostatnio się nasilało. Na pewno luty, marzec i kwiecień tego roku to większe ilości. Z kolei styczeń to tylko pięć spamów. Jeśli miałbym oceniać na oko, to stawiałbym bardziej średnio na spam co drugi dzień. Do przeżycia.

Rodzajów spamu też było kilka i pojawiał się falami. Były i polskie pseudokomentarze typu „ciekawy wpis” z typowym SEO linkiem, i komentarze pisane cyrylicą. Dominowały jednak anglojęzyczne reklamy środków viagropodobnych. Regularności we wpisach pod którymi zamieszczano komentarze praktycznie żadnej. Podobnie z IP wykorzystywanymi do wysyłki spamu. Na oko raczej stare wpisy, z różnych kategorii. 230 to nie jest duża próbka do analizy, ale może kiedyś zrobię statystyki.

W każdym razie w ostatnim czasie liczba spamów wzrosła. Dominował w zasadzie jeden IP: 92.204.174.134, we WHOIS mający powiązania z SEODEDIC. Zamieszczał nawet po trzy komentarze dziennie. Sprawdzenie logów serwera WWW pokazało, że po prostu wchodzi i wysyła komentarz. Żadnych wielokrotnych prób, ale niekoniecznie byłyby widoczne po stronie mojego serwera. Zatem ciężko stwierdzić czy któryś z serwisów do omijania CAPTCHA przy pomocy ludzi, czy sprytne metody typu machine learning do rozpoznawania obrazków[3] czy w końcu może sprytne wykorzystanie Google text to speech do obchodzenia CAPTCHA od Google.

Skoro spamerzy obchodzili reCAPTCHA, stwierdziłem, że to dobra okazja do wypróbowania alternatywy, o której ostatnio trochę było słychać. Chodzi o serwis hCaptcha. Rejestracja niezbyt gładka. A to mail na Onecie został uznany za nieprawdziwy adres email, a to były problemy z dostarczeniem maila z linkiem aktywacyjnym na inną skrzynkę. W końcu odnalazł się on w folderze spam.

Po aktywacji jest już z górki. Użyłem pluginu hCaptcha for WordPress, który pozwala na określenie, gdzie ma być serwowana CAPTCHA. Podajemy klucze API i… już. Przyznam, że kusiło mnie przez moment wypróbowanie używania obu pluginów jednocześnie. Szybko porzuciłem tę myśl. CAPTCHA jednak i jest nieco upierdliwym mechanizmem, i dokłada trochę objętości do wielkości strony.

No właśnie. W porównaniu z pierwotną wersją strona jest obecnie nieco cięższa. I główna, i strony poszczególnych wpisów. Dramatu nie ma, nad główną jeszcze popracuję, ale z kronikarskiego obowiązku odnotowuję.

Co dalej? Ano czekam na feedback od użytkowników jak się nowa CAPTCHA podoba. A jeśli spamer wróci z tego samego IP, to dostanie w łeb. Tarpitem. Jeśli i to nie pomoże, poszukam innych pluginów WordPress stworzonych, by zwalczać spam. No i przede wszystkim będę obserwował ilość spamu przychodzącego do moderacji.

[1] Dokładnie reCAPTCHA wraz z pluginem Advanced noCaptcha & invisible Captcha. Tutaj znajdziesz więcej o wykorzystywanych na tym blogu czy polecanych pluginach do WordPressa.
[2] Jeśli ktoś zada sobie trud policzenia, to wyjdzie nieścisłość matematyczna. I można policzyć ile dni wpis leżakował jako szkic.
[3] Tak, to akurat przeciwko hCaptcha, ale miałem pod ręką linka. Dla reCaptcha pewnie też coś analogicznego istnieje.