SlideShare ist ein Scribd-Unternehmen logo
1 von 29
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Sysops tipy pro lepší WP
Náhradní přednáška 
Vláďa Smitka
vladimir.smitka@lynt.cz
@smitka
Lynt services s.r.o.
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Milujete příkazovou řádku?
• Nesnáším = developer
• Nutné zlo = devops
• Skvělá věc = sysops
• Nic jiného nepoužívám = sysadmin
28. 4. 2018 2
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Mé testovací prostředí
28. 4. 2018 3
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
WP-CLI
• wp-cli doctor (třeba doinstalovat)
• wp-cli profile (třeba doinstalovat)
• wp-cli search-replace
• wp db size --tables
• wp plugin status
• wp db query "SELECT * FROM wp_options"
• wp revisions clean
28. 4. 2018 4
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
WP-CLI doctor
wp doctor list
+----------------------------+--------------------------------------------------------------------------------+
| name | description |
+----------------------------+--------------------------------------------------------------------------------+
| autoload-options-size | Warns when autoloaded options size exceeds threshold of 900 kb. |
| constant-savequeries-falsy | Confirms expected state of the SAVEQUERIES constant. |
| constant-wp-debug-falsy | Confirms expected state of the WP_DEBUG constant. |
| core-update | Errors when new WordPress minor release is available; warns for major release. |
| core-verify-checksums | Verifies WordPress files against published checksums; errors on failure. |
| cron-count | Errors when there's an excess of 50 total cron jobs registered. |
| cron-duplicates | Errors when there's an excess of 10 duplicate cron jobs registered. |
| file-eval | Checks files on the filesystem for regex pattern `eval(.*base64_decode(.*`. |
| option-blog-public | Confirms the expected value of the 'blog_public' option. |
| plugin-active-count | Warns when there are greater than 80 plugins activated. |
| plugin-deactivated | Warns when greater than 40% of plugins are deactivated. |
| plugin-update | Warns when there are plugin updates available. |
| theme-update | Warns when there are theme updates available. |
| cache-flush | Detects the number of occurrences of the `wp_cache_flush()` function. |
| php-in-upload | Warns when a PHP file is present in the Uploads folder. |
| language-update | Warns when there are language updates available. |
+----------------------------+--------------------------------------------------------------------------------+
28. 4. 2018 5
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
WP-CLI profile
wp profile stage --fields=stage,time,cache_ratio
+------------+---------+-------------+
| stage | time | cache_ratio |
+------------+---------+-------------+
| bootstrap | 0.7994s | 93.21% |
| main_query | 0.0123s | 94.29% |
| template | 0.792s | 91.23% |
+------------+---------+-------------+
| total (3) | 1.6037s | 92.91% |
+------------+---------+-------------+
28. 4. 2018 6
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
WP-CLI profile
wp profile stage bootstrap --fields=hook,time,cache_ratio --
spotlight
+--------------------------+---------+-------------+
| hook | time | cache_ratio |
+--------------------------+---------+-------------+
| muplugins_loaded:before | 0.2335s | 40% |
| muplugins_loaded | 0.0007s | 50% |
| plugins_loaded:before | 0.2792s | 77.63% |
| plugins_loaded | 0.1502s | 100% |
| after_setup_theme:before | 0.068s | 100% |
| init | 0.2643s | 96.88% |
| wp_loaded:after | 0.0377s | |
+--------------------------+---------+-------------+
| total (7) | 1.0335s | 77.42% |
+--------------------------+---------+-------------+
28. 4. 2018 7
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
WP-CLI
• wp scaffold child-theme NEW-CHILD-SLUG --
parent_theme=SLUG --theme_name=TITLE
• wp transient delete --expired
• wp post generate --count=10
• wp rewrite list
• --prompt
• wp shell
28. 4. 2018 8
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
WP = Enviroment
• Můj osobní pohled, nemusíte souhlasit
28. 4. 2018 9
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Na infrastruktuře záleží
28. 4. 2018 10
3 komponenty – HTTP server, DB server a Zdroje dat
Každá má úplně jiné nároky…
DB
Storage
WEBLOADBALANCER
Cloud
× 2
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Apache/Nginx/LiteSpeed
• https://github.com/lynt-smitka/WP-nginx-
config
28. 4. 2018 11
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Kde je .htaccess?
28. 4. 2018 12
/wp-content/uploads/revslider/classicslider/bike.jpg
Heleď,
nemáš tu
.htaccess?
A co
tady?A tady?
A nebo
tady?
A tady už
určitě
bude!
Bez .htaccess s mpm_event je Apache téměř srovnatelný s Nginx
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Vlastní server pro DB?
• ANO!!! (ale záleží na počtu dotazů)
• Škálování
28. 4. 2018 13
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Memory_limit
• 128MB by mělo stačit každému 
• Zpracování feedů spouštět z CLI
28. 4. 2018 14
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
SMTP
function lynt_phpmailer( PHPMailer $mail ) {
$mail->Host = 'smpt.server';
$mail->Port = 465;
$mail->SMTPSecure = 'tls';
$mail->Username = 'jmeno';
$mail->Password = 'heslo';
$mail->SMTPAuth = true;
$mail->IsSMTP();
}
add_action( 'phpmailer_init', 'lynt_phpmailer'
);
28. 4. 2018 15
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
CRON
• define('DISABLE_WP_CRON', true);
• php -q wp-cron.php
• https://www.easycron.com/
28. 4. 2018 16
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Fail2Ban
• Blokace neúspěšných přihlášení ze strany serveru
function lynt_failed_login_401() {
status_header( 401 );
}
add_action( 'wp_login_failed',
'lynt_failed_login_401' );
• https://github.com/lynt-smitka/WP-nginx-
config/tree/master/extras/fail2ban
28. 4. 2018 17
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
User Enum
• /?author=1
• https://webikon.sk/wp-json/wp/v2/users
{"id":3,"name":"Ju00e1n
Bou010du00ednec","url":"http://johnnypea.wp.sk/","description":"Inglourious basterd,
vu00e1u0161nivu00fd WordPress architekt","link":"https://webikon.sk/author/jan-
bocinecwebikon-sk/","slug":"jan-bocinecwebikon-
sk","avatar_urls":{"24":"https://secure.gravatar.com/avatar/d33af7ae65a94efd765fde0968e1
c5b9?s=24&d=mm&r=g","48":"https://secure.gravatar.com/avatar/d33af7ae65a94efd765fde
0968e1c5b9?s=48&d=mm&r=g","96":"https://secure.gravatar.com/avatar/d33af7ae65a94efd
765fde0968e1c5b9?s=96&d=mm&r=g"},"meta":[],"_links":{"self":[{"href":"https://webikon.sk/
wp-json/wp/v2/users/3"}],"collection":[{"href":"https://webikon.sk/wp-
json/wp/v2/users"}]}},{"id":4,"name":"Marek
Dau0148ko","url":"","description":"Koordinu00e1tor projektov a skokan
roka","link":"https://webikon.sk/author/marek-dankowebikon-sk/","slug":"marek-
dankowebikon-
sk","avatar_urls":{"24":"https://secure.gravatar.com/avatar/2e796e6a050c7361afc9e7fae90d
3fb1?s=24&d=mm&r=g","48":"https://secure.gravatar.com/avatar/2e796e6a050c7361afc9e7
fae90d3fb1?s=48&d=mm&r=g","96":"https://secure.gravatar.com/avatar/2e796e6a050c7361
afc9e7fae90d3fb1?s=96&d=mm&r=g"}
https://github.com/lynt-smitka/WP-nginx-config/blob/master/extras/mu-plugins/lynt-enhancer.php
28. 4. 2018 18
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
//Remove sensitive data from REST API
function lynt_remove_sensitive_data_from_rest( $response ) {
if(!current_user_can('list_users')){
//get WP_REST_Response
$data = $response->get_data();
//unset sensitive fields
if(preg_replace('/[W]+/', '',$data['name']) == preg_replace('/[W]+/',
'',$data['slug'])) $data['name']="Author";
unset($data['link']);
unset($data['slug']);
unset($data['avatar_urls']);
//set data back
$response->set_data($data);
}
return $response;
}
add_filter( 'rest_prepare_user', 'lynt_remove_sensitive_data_from_rest');
28. 4. 2018 19
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Maldet
• https://www.rfxn.com/projects/linux-
malware-detect/
28. 4. 2018 20
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
bcrypt
global $wp_hasher;
if ( empty($wp_hasher) ) {
require_once( ABSPATH . WPINC . '/class-
phpass.php');
$wp_hasher = new PasswordHash(10, false);
}
• https://github.com/lynt-smitka/WP-nginx-
config/blob/master/extras/mu-plugins/lynt-enhancer.php
• https://roots.io/plugins/bcrypt-password/
28. 4. 2018 21
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Zálohování
• RESTIC - https://restic.net/
• Do cloudu a šifrovaně
• restic backup /cesta/k/souborum
• restic forget --keep-daily 7 --keep-weekly 4 --keep-
monthly 12 --keep-yearly 3
• restic prune
• https://lynt.cz/blog/zalohovani-serveru-do-cloudu-
pomoci-restic
28. 4. 2018 22
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Hľadanie pomalého pluginu / šablóny
• Query Monitor
• Blackfire.io
• Xdebug (především pro krokování z IDE) + WebGrind
• Nejčastější problémy:
– Mnoho dotazů do DB (nemělo by jich být více než 35)
– Komunikace s externími službami (např. špatně udělaná kontrola
dostupnosti update) - častý problém prémiových šablon a
pluginů
– „Zacyklené“ shortkódy
28. 4. 2018 23
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba28. 4. 2018 24
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba28. 4. 2018 25
Cachování
OP code cache
Transientní cache
Stránková cache
Cache prohlížeče
Objektová cache
Disková cache
Proxy cache
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Cachovánie
28. 4. 2018 26
• Disková cache – Linux využívá volnou RAM pro
rychlejší přístup k souborům = je dobré mít hodně RAM
• OP code cache – PHP do RAM ukládá zpracovaný PHP
kód (PHP 5.6+, starší s rozšířením)
• Transientní cache – při použití WP ukládá výsledky
složitých operací do DB
(https://codex.wordpress.org/Transients_API)
• Objektová cache – ukládá výsledky složitých operací do
jiného úložiště – lze použít jako úložiště pro transienty
– je třeba podpora serveru a drop-in do WP
(Memcache, Redis, Xcache, APCu)
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Cachovánie
28. 4. 2018 27
• Stránková cache – uloží výsledek pracování
skriptu do statického souboru – např. WP
SuperCache, W3 Total Cache, WP-Rocket
• Proxy – reverzní na straně serveru/„dopředná“ na
straně lokální sítě – ukládá statický soubor aby se
nemusel znova stahovat/generovat (varnish,
nginx microcache/squid)
• Cache prohlížeče – řídí se expires hlavičkami,
pokud nejsou, snaží se je odvodit (většinou podle
stáří souboru)
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba
Konstanty vs UI
• Potřebuje můj plugin uživatelské rozhraní?
• Rozhraní = ukládání do wp_options
28. 4. 2018 28
https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba28. 4. 2018 29
aktualizujte, zálohujte, používejte bezpečnostní plugin, buďte opatrní
A to je vše, přátelé.
Reklamní vsuvka:
Děláte s PPC? Sledujte https://twitter.com/PPCrobot
Děláte v Pythonu? PPC Robot hledá vývojáře ;-)

Weitere ähnliche Inhalte

Was ist angesagt?

Hesla a vícefaktorová autentizace ve WP
Hesla a vícefaktorová autentizace ve WPHesla a vícefaktorová autentizace ve WP
Hesla a vícefaktorová autentizace ve WPVladimír Smitka
 
WordPress - základy bezpečnosti
WordPress - základy bezpečnostiWordPress - základy bezpečnosti
WordPress - základy bezpečnostiVladimír Smitka
 
WP výkon a jeho profilování
WP výkon a jeho profilováníWP výkon a jeho profilování
WP výkon a jeho profilováníVladimír Smitka
 
WordCamp Brno 2017 - rychlý a bezpečný web
WordCamp Brno 2017  - rychlý a bezpečný webWordCamp Brno 2017  - rychlý a bezpečný web
WordCamp Brno 2017 - rychlý a bezpečný webVladimír Smitka
 
Nejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webůNejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webůVladimír Smitka
 
Jak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránkyJak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránkyVladimír Smitka
 
Bezpečnost WP, tipy pro každého - wordCamp Praha 2015
Bezpečnost WP, tipy pro každého - wordCamp Praha 2015Bezpečnost WP, tipy pro každého - wordCamp Praha 2015
Bezpečnost WP, tipy pro každého - wordCamp Praha 2015Vladimír Smitka
 
Základní pluginy pro WordPress
Základní pluginy pro WordPressZákladní pluginy pro WordPress
Základní pluginy pro WordPressRadek Kucera
 
Drobné chyby, které vám mohou zlomit vaz
Drobné chyby, které vám mohou zlomit vazDrobné chyby, které vám mohou zlomit vaz
Drobné chyby, které vám mohou zlomit vazVladimír Smitka
 
Wordpress_DOD
Wordpress_DODWordpress_DOD
Wordpress_DODDoubry99
 
WordPress šablony a rychlost načítání (WordCamp Praha 2017)
WordPress šablony a  rychlost načítání (WordCamp Praha 2017)WordPress šablony a  rychlost načítání (WordCamp Praha 2017)
WordPress šablony a rychlost načítání (WordCamp Praha 2017)Martin Michálek
 
WordCamp Praha 2017 - Martin Hlaváč
WordCamp Praha 2017 - Martin HlaváčWordCamp Praha 2017 - Martin Hlaváč
WordCamp Praha 2017 - Martin HlaváčBrilo Team
 

Was ist angesagt? (16)

Hesla a vícefaktorová autentizace ve WP
Hesla a vícefaktorová autentizace ve WPHesla a vícefaktorová autentizace ve WP
Hesla a vícefaktorová autentizace ve WP
 
WordPress - základy bezpečnosti
WordPress - základy bezpečnostiWordPress - základy bezpečnosti
WordPress - základy bezpečnosti
 
WP výkon a jeho profilování
WP výkon a jeho profilováníWP výkon a jeho profilování
WP výkon a jeho profilování
 
WordCamp Brno 2017 - rychlý a bezpečný web
WordCamp Brno 2017  - rychlý a bezpečný webWordCamp Brno 2017  - rychlý a bezpečný web
WordCamp Brno 2017 - rychlý a bezpečný web
 
Nejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webůNejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webů
 
Jak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránkyJak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránky
 
Bezpečnost WP, tipy pro každého - wordCamp Praha 2015
Bezpečnost WP, tipy pro každého - wordCamp Praha 2015Bezpečnost WP, tipy pro každého - wordCamp Praha 2015
Bezpečnost WP, tipy pro každého - wordCamp Praha 2015
 
WP Weekend 2018
WP Weekend 2018WP Weekend 2018
WP Weekend 2018
 
Wordfence 2016
Wordfence 2016Wordfence 2016
Wordfence 2016
 
Základní pluginy pro WordPress
Základní pluginy pro WordPressZákladní pluginy pro WordPress
Základní pluginy pro WordPress
 
Webmeetup #3
Webmeetup #3Webmeetup #3
Webmeetup #3
 
Instalace WordPress
Instalace WordPressInstalace WordPress
Instalace WordPress
 
Drobné chyby, které vám mohou zlomit vaz
Drobné chyby, které vám mohou zlomit vazDrobné chyby, které vám mohou zlomit vaz
Drobné chyby, které vám mohou zlomit vaz
 
Wordpress_DOD
Wordpress_DODWordpress_DOD
Wordpress_DOD
 
WordPress šablony a rychlost načítání (WordCamp Praha 2017)
WordPress šablony a  rychlost načítání (WordCamp Praha 2017)WordPress šablony a  rychlost načítání (WordCamp Praha 2017)
WordPress šablony a rychlost načítání (WordCamp Praha 2017)
 
WordCamp Praha 2017 - Martin Hlaváč
WordCamp Praha 2017 - Martin HlaváčWordCamp Praha 2017 - Martin Hlaváč
WordCamp Praha 2017 - Martin Hlaváč
 

Ähnlich wie Sysops tipy pro lepší WP

Nette v cloudu - Poslední Sobota
Nette v cloudu - Poslední SobotaNette v cloudu - Poslední Sobota
Nette v cloudu - Poslední SobotaPatrik Votoček
 
Základní práce s příkazovým řádkem
Základní práce s příkazovým řádkemZákladní práce s příkazovým řádkem
Základní práce s příkazovým řádkemPeckaDesign.cz
 
Co ukázal globální scan přístupných .git repozitářů?
Co ukázal globální scan přístupných .git repozitářů?Co ukázal globální scan přístupných .git repozitářů?
Co ukázal globální scan přístupných .git repozitářů?Vladimír Smitka
 
Cheat sheet python_vlaxa
Cheat sheet python_vlaxaCheat sheet python_vlaxa
Cheat sheet python_vlaxaVladan Laxa
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciMartin Krištof
 
MicroPython IoT vlaxa
MicroPython IoT vlaxaMicroPython IoT vlaxa
MicroPython IoT vlaxaVladan Laxa
 
WordCamp Bratislava 2017 - Martin Hlaváč
WordCamp Bratislava 2017 - Martin HlaváčWordCamp Bratislava 2017 - Martin Hlaváč
WordCamp Bratislava 2017 - Martin HlaváčBrilo Team
 
vSphere automation workshop python
vSphere automation workshop pythonvSphere automation workshop python
vSphere automation workshop pythonVladan Laxa
 
Wordcamp Praha 2015 - další útržky z prezentace
Wordcamp Praha 2015 - další útržky z prezentaceWordcamp Praha 2015 - další útržky z prezentace
Wordcamp Praha 2015 - další útržky z prezentaceVladimír Smitka
 
WP Frameworky - WordCamp Praha 2018
WP Frameworky - WordCamp Praha 2018WP Frameworky - WordCamp Praha 2018
WP Frameworky - WordCamp Praha 2018Brilo Team
 
Jak zrychlit WP pomocí cachovacích pluginů
Jak zrychlit WP pomocí cachovacích pluginůJak zrychlit WP pomocí cachovacích pluginů
Jak zrychlit WP pomocí cachovacích pluginůJakub Klapka
 
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPress
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPressTomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPress
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPressColpirio.com s.r.o.
 
Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webůMichal Doležel
 
Semantický web (Martin Šimko)
Semantický web (Martin Šimko)Semantický web (Martin Šimko)
Semantický web (Martin Šimko)Taste Medio
 
PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018Brilo Team
 
Michal Konečný - Systém Archivematica z pohledu uživatele
Michal Konečný - Systém Archivematica z pohledu uživateleMichal Konečný - Systém Archivematica z pohledu uživatele
Michal Konečný - Systém Archivematica z pohledu uživateleLTP-portal-cz
 
Webový front-end ve službách mobilního vývojáře
Webový front-end  ve službách mobilního  vývojáře Webový front-end  ve službách mobilního  vývojáře
Webový front-end ve službách mobilního vývojáře Martin Michálek
 
Optimalizace webových aplikací
Optimalizace webových aplikacíOptimalizace webových aplikací
Optimalizace webových aplikacíVašek Purchart
 

Ähnlich wie Sysops tipy pro lepší WP (20)

Nette v cloudu - Poslední Sobota
Nette v cloudu - Poslední SobotaNette v cloudu - Poslední Sobota
Nette v cloudu - Poslední Sobota
 
Základní práce s příkazovým řádkem
Základní práce s příkazovým řádkemZákladní práce s příkazovým řádkem
Základní práce s příkazovým řádkem
 
Co ukázal globální scan přístupných .git repozitářů?
Co ukázal globální scan přístupných .git repozitářů?Co ukázal globální scan přístupných .git repozitářů?
Co ukázal globální scan přístupných .git repozitářů?
 
Cheat sheet python_vlaxa
Cheat sheet python_vlaxaCheat sheet python_vlaxa
Cheat sheet python_vlaxa
 
Kurz webové archivace 2017/2
Kurz webové archivace 2017/2Kurz webové archivace 2017/2
Kurz webové archivace 2017/2
 
Kurz webové archivace III.
Kurz webové archivace III.Kurz webové archivace III.
Kurz webové archivace III.
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaci
 
MicroPython IoT vlaxa
MicroPython IoT vlaxaMicroPython IoT vlaxa
MicroPython IoT vlaxa
 
WordCamp Bratislava 2017 - Martin Hlaváč
WordCamp Bratislava 2017 - Martin HlaváčWordCamp Bratislava 2017 - Martin Hlaváč
WordCamp Bratislava 2017 - Martin Hlaváč
 
vSphere automation workshop python
vSphere automation workshop pythonvSphere automation workshop python
vSphere automation workshop python
 
Wordcamp Praha 2015 - další útržky z prezentace
Wordcamp Praha 2015 - další útržky z prezentaceWordcamp Praha 2015 - další útržky z prezentace
Wordcamp Praha 2015 - další útržky z prezentace
 
WP Frameworky - WordCamp Praha 2018
WP Frameworky - WordCamp Praha 2018WP Frameworky - WordCamp Praha 2018
WP Frameworky - WordCamp Praha 2018
 
Jak zrychlit WP pomocí cachovacích pluginů
Jak zrychlit WP pomocí cachovacích pluginůJak zrychlit WP pomocí cachovacích pluginů
Jak zrychlit WP pomocí cachovacích pluginů
 
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPress
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPressTomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPress
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPress
 
Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webů
 
Semantický web (Martin Šimko)
Semantický web (Martin Šimko)Semantický web (Martin Šimko)
Semantický web (Martin Šimko)
 
PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018
 
Michal Konečný - Systém Archivematica z pohledu uživatele
Michal Konečný - Systém Archivematica z pohledu uživateleMichal Konečný - Systém Archivematica z pohledu uživatele
Michal Konečný - Systém Archivematica z pohledu uživatele
 
Webový front-end ve službách mobilního vývojáře
Webový front-end  ve službách mobilního  vývojáře Webový front-end  ve službách mobilního  vývojáře
Webový front-end ve službách mobilního vývojáře
 
Optimalizace webových aplikací
Optimalizace webových aplikacíOptimalizace webových aplikací
Optimalizace webových aplikací
 

Mehr von Vladimír Smitka

WordPress Security: Defend yourself against digital invaders
WordPress Security:Defend yourself against digital invadersWordPress Security:Defend yourself against digital invaders
WordPress Security: Defend yourself against digital invadersVladimír Smitka
 
WordPress performance tuning
WordPress performance tuningWordPress performance tuning
WordPress performance tuningVladimír Smitka
 
WordPress security for everyone
WordPress security for everyoneWordPress security for everyone
WordPress security for everyoneVladimír Smitka
 
České weby a Wordpress (Q4/2014)
České weby a Wordpress (Q4/2014)České weby a Wordpress (Q4/2014)
České weby a Wordpress (Q4/2014)Vladimír Smitka
 
Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014Vladimír Smitka
 

Mehr von Vladimír Smitka (8)

Http/2 vs Image Sprites
Http/2 vs Image SpritesHttp/2 vs Image Sprites
Http/2 vs Image Sprites
 
Ansible
AnsibleAnsible
Ansible
 
WordPress Security: Defend yourself against digital invaders
WordPress Security:Defend yourself against digital invadersWordPress Security:Defend yourself against digital invaders
WordPress Security: Defend yourself against digital invaders
 
WordPress performance tuning
WordPress performance tuningWordPress performance tuning
WordPress performance tuning
 
WordPress security for everyone
WordPress security for everyoneWordPress security for everyone
WordPress security for everyone
 
České weby a Wordpress (Q4/2014)
České weby a Wordpress (Q4/2014)České weby a Wordpress (Q4/2014)
České weby a Wordpress (Q4/2014)
 
Dijskrův algoritmus
Dijskrův algoritmusDijskrův algoritmus
Dijskrův algoritmus
 
Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014
 

Sysops tipy pro lepší WP

  • 1. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Sysops tipy pro lepší WP Náhradní přednáška  Vláďa Smitka vladimir.smitka@lynt.cz @smitka Lynt services s.r.o.
  • 2. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Milujete příkazovou řádku? • Nesnáším = developer • Nutné zlo = devops • Skvělá věc = sysops • Nic jiného nepoužívám = sysadmin 28. 4. 2018 2
  • 3. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Mé testovací prostředí 28. 4. 2018 3
  • 4. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba WP-CLI • wp-cli doctor (třeba doinstalovat) • wp-cli profile (třeba doinstalovat) • wp-cli search-replace • wp db size --tables • wp plugin status • wp db query "SELECT * FROM wp_options" • wp revisions clean 28. 4. 2018 4
  • 5. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba WP-CLI doctor wp doctor list +----------------------------+--------------------------------------------------------------------------------+ | name | description | +----------------------------+--------------------------------------------------------------------------------+ | autoload-options-size | Warns when autoloaded options size exceeds threshold of 900 kb. | | constant-savequeries-falsy | Confirms expected state of the SAVEQUERIES constant. | | constant-wp-debug-falsy | Confirms expected state of the WP_DEBUG constant. | | core-update | Errors when new WordPress minor release is available; warns for major release. | | core-verify-checksums | Verifies WordPress files against published checksums; errors on failure. | | cron-count | Errors when there's an excess of 50 total cron jobs registered. | | cron-duplicates | Errors when there's an excess of 10 duplicate cron jobs registered. | | file-eval | Checks files on the filesystem for regex pattern `eval(.*base64_decode(.*`. | | option-blog-public | Confirms the expected value of the 'blog_public' option. | | plugin-active-count | Warns when there are greater than 80 plugins activated. | | plugin-deactivated | Warns when greater than 40% of plugins are deactivated. | | plugin-update | Warns when there are plugin updates available. | | theme-update | Warns when there are theme updates available. | | cache-flush | Detects the number of occurrences of the `wp_cache_flush()` function. | | php-in-upload | Warns when a PHP file is present in the Uploads folder. | | language-update | Warns when there are language updates available. | +----------------------------+--------------------------------------------------------------------------------+ 28. 4. 2018 5
  • 6. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba WP-CLI profile wp profile stage --fields=stage,time,cache_ratio +------------+---------+-------------+ | stage | time | cache_ratio | +------------+---------+-------------+ | bootstrap | 0.7994s | 93.21% | | main_query | 0.0123s | 94.29% | | template | 0.792s | 91.23% | +------------+---------+-------------+ | total (3) | 1.6037s | 92.91% | +------------+---------+-------------+ 28. 4. 2018 6
  • 7. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba WP-CLI profile wp profile stage bootstrap --fields=hook,time,cache_ratio -- spotlight +--------------------------+---------+-------------+ | hook | time | cache_ratio | +--------------------------+---------+-------------+ | muplugins_loaded:before | 0.2335s | 40% | | muplugins_loaded | 0.0007s | 50% | | plugins_loaded:before | 0.2792s | 77.63% | | plugins_loaded | 0.1502s | 100% | | after_setup_theme:before | 0.068s | 100% | | init | 0.2643s | 96.88% | | wp_loaded:after | 0.0377s | | +--------------------------+---------+-------------+ | total (7) | 1.0335s | 77.42% | +--------------------------+---------+-------------+ 28. 4. 2018 7
  • 8. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba WP-CLI • wp scaffold child-theme NEW-CHILD-SLUG -- parent_theme=SLUG --theme_name=TITLE • wp transient delete --expired • wp post generate --count=10 • wp rewrite list • --prompt • wp shell 28. 4. 2018 8
  • 9. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba WP = Enviroment • Můj osobní pohled, nemusíte souhlasit 28. 4. 2018 9
  • 10. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Na infrastruktuře záleží 28. 4. 2018 10 3 komponenty – HTTP server, DB server a Zdroje dat Každá má úplně jiné nároky… DB Storage WEBLOADBALANCER Cloud × 2
  • 11. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Apache/Nginx/LiteSpeed • https://github.com/lynt-smitka/WP-nginx- config 28. 4. 2018 11
  • 12. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Kde je .htaccess? 28. 4. 2018 12 /wp-content/uploads/revslider/classicslider/bike.jpg Heleď, nemáš tu .htaccess? A co tady?A tady? A nebo tady? A tady už určitě bude! Bez .htaccess s mpm_event je Apache téměř srovnatelný s Nginx
  • 13. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Vlastní server pro DB? • ANO!!! (ale záleží na počtu dotazů) • Škálování 28. 4. 2018 13
  • 14. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Memory_limit • 128MB by mělo stačit každému  • Zpracování feedů spouštět z CLI 28. 4. 2018 14
  • 15. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba SMTP function lynt_phpmailer( PHPMailer $mail ) { $mail->Host = 'smpt.server'; $mail->Port = 465; $mail->SMTPSecure = 'tls'; $mail->Username = 'jmeno'; $mail->Password = 'heslo'; $mail->SMTPAuth = true; $mail->IsSMTP(); } add_action( 'phpmailer_init', 'lynt_phpmailer' ); 28. 4. 2018 15
  • 16. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba CRON • define('DISABLE_WP_CRON', true); • php -q wp-cron.php • https://www.easycron.com/ 28. 4. 2018 16
  • 17. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Fail2Ban • Blokace neúspěšných přihlášení ze strany serveru function lynt_failed_login_401() { status_header( 401 ); } add_action( 'wp_login_failed', 'lynt_failed_login_401' ); • https://github.com/lynt-smitka/WP-nginx- config/tree/master/extras/fail2ban 28. 4. 2018 17
  • 18. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba User Enum • /?author=1 • https://webikon.sk/wp-json/wp/v2/users {"id":3,"name":"Ju00e1n Bou010du00ednec","url":"http://johnnypea.wp.sk/","description":"Inglourious basterd, vu00e1u0161nivu00fd WordPress architekt","link":"https://webikon.sk/author/jan- bocinecwebikon-sk/","slug":"jan-bocinecwebikon- sk","avatar_urls":{"24":"https://secure.gravatar.com/avatar/d33af7ae65a94efd765fde0968e1 c5b9?s=24&d=mm&r=g","48":"https://secure.gravatar.com/avatar/d33af7ae65a94efd765fde 0968e1c5b9?s=48&d=mm&r=g","96":"https://secure.gravatar.com/avatar/d33af7ae65a94efd 765fde0968e1c5b9?s=96&d=mm&r=g"},"meta":[],"_links":{"self":[{"href":"https://webikon.sk/ wp-json/wp/v2/users/3"}],"collection":[{"href":"https://webikon.sk/wp- json/wp/v2/users"}]}},{"id":4,"name":"Marek Dau0148ko","url":"","description":"Koordinu00e1tor projektov a skokan roka","link":"https://webikon.sk/author/marek-dankowebikon-sk/","slug":"marek- dankowebikon- sk","avatar_urls":{"24":"https://secure.gravatar.com/avatar/2e796e6a050c7361afc9e7fae90d 3fb1?s=24&d=mm&r=g","48":"https://secure.gravatar.com/avatar/2e796e6a050c7361afc9e7 fae90d3fb1?s=48&d=mm&r=g","96":"https://secure.gravatar.com/avatar/2e796e6a050c7361 afc9e7fae90d3fb1?s=96&d=mm&r=g"} https://github.com/lynt-smitka/WP-nginx-config/blob/master/extras/mu-plugins/lynt-enhancer.php 28. 4. 2018 18
  • 19. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba //Remove sensitive data from REST API function lynt_remove_sensitive_data_from_rest( $response ) { if(!current_user_can('list_users')){ //get WP_REST_Response $data = $response->get_data(); //unset sensitive fields if(preg_replace('/[W]+/', '',$data['name']) == preg_replace('/[W]+/', '',$data['slug'])) $data['name']="Author"; unset($data['link']); unset($data['slug']); unset($data['avatar_urls']); //set data back $response->set_data($data); } return $response; } add_filter( 'rest_prepare_user', 'lynt_remove_sensitive_data_from_rest'); 28. 4. 2018 19
  • 20. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Maldet • https://www.rfxn.com/projects/linux- malware-detect/ 28. 4. 2018 20
  • 21. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba bcrypt global $wp_hasher; if ( empty($wp_hasher) ) { require_once( ABSPATH . WPINC . '/class- phpass.php'); $wp_hasher = new PasswordHash(10, false); } • https://github.com/lynt-smitka/WP-nginx- config/blob/master/extras/mu-plugins/lynt-enhancer.php • https://roots.io/plugins/bcrypt-password/ 28. 4. 2018 21
  • 22. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Zálohování • RESTIC - https://restic.net/ • Do cloudu a šifrovaně • restic backup /cesta/k/souborum • restic forget --keep-daily 7 --keep-weekly 4 --keep- monthly 12 --keep-yearly 3 • restic prune • https://lynt.cz/blog/zalohovani-serveru-do-cloudu- pomoci-restic 28. 4. 2018 22
  • 23. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Hľadanie pomalého pluginu / šablóny • Query Monitor • Blackfire.io • Xdebug (především pro krokování z IDE) + WebGrind • Nejčastější problémy: – Mnoho dotazů do DB (nemělo by jich být více než 35) – Komunikace s externími službami (např. špatně udělaná kontrola dostupnosti update) - častý problém prémiových šablon a pluginů – „Zacyklené“ shortkódy 28. 4. 2018 23
  • 24. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba28. 4. 2018 24
  • 25. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba28. 4. 2018 25 Cachování OP code cache Transientní cache Stránková cache Cache prohlížeče Objektová cache Disková cache Proxy cache
  • 26. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Cachovánie 28. 4. 2018 26 • Disková cache – Linux využívá volnou RAM pro rychlejší přístup k souborům = je dobré mít hodně RAM • OP code cache – PHP do RAM ukládá zpracovaný PHP kód (PHP 5.6+, starší s rozšířením) • Transientní cache – při použití WP ukládá výsledky složitých operací do DB (https://codex.wordpress.org/Transients_API) • Objektová cache – ukládá výsledky složitých operací do jiného úložiště – lze použít jako úložiště pro transienty – je třeba podpora serveru a drop-in do WP (Memcache, Redis, Xcache, APCu)
  • 27. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Cachovánie 28. 4. 2018 27 • Stránková cache – uloží výsledek pracování skriptu do statického souboru – např. WP SuperCache, W3 Total Cache, WP-Rocket • Proxy – reverzní na straně serveru/„dopředná“ na straně lokální sítě – ukládá statický soubor aby se nemusel znova stahovat/generovat (varnish, nginx microcache/squid) • Cache prohlížeče – řídí se expires hlavičkami, pokud nejsou, snaží se je odvodit (většinou podle stáří souboru)
  • 28. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba Konstanty vs UI • Potřebuje můj plugin uživatelské rozhraní? • Rozhraní = ukládání do wp_options 28. 4. 2018 28
  • 29. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba28. 4. 2018 29 aktualizujte, zálohujte, používejte bezpečnostní plugin, buďte opatrní A to je vše, přátelé. Reklamní vsuvka: Děláte s PPC? Sledujte https://twitter.com/PPCrobot Děláte v Pythonu? PPC Robot hledá vývojáře ;-)

Hinweis der Redaktion

  1. $id = 1; $wpdb->prepare("SELECT * FROM {$wpdb->posts} WHERE ID=%d",$id);