nginx vernik ve php-apc kullanarak WordPress optimizasyonu
Artık VPS, kişisel ve profesyonel web sitesi barındırma için geliştiriciler arasında popüler hale geldiğinden, herkes web sitesini hızlı ve güvenilir bir vps'de barındırmak istiyor. Hiç şüphe yok ki, daha hızlı ve tamamen özelleştirilebilir bir vps destekli web sitesine sahip olmayı düşündünüz. Ancak sunucu yönetimi ve yazılım yapılandırmaları hakkında bilgi eksikliği, bazı insanlar için en büyük engeldir. Bu gönderi, bir wordpress sitesini barındırmak için vps yapılandırması ve yönetimi için bir kılavuz sağlama çabasıdır. İçeriğin çoğu geneldir ve vps'de barındırılan herhangi bir web sitesinin optimizasyonu için kullanılabilir. ssh üzerinden root girişli ubuntu sunucusu için komutlar sağlayacağız.
Bir web sitesi barındırmak için ihtiyacınız olan şeyler –
- Barındırma sunucusu
- Alan adı
- sunucu yazılımı
- Web sitesi uygulaması
- Veritabanı yazılımı
Farklı türde sunuculara sahip birkaç barındırma sağlayıcısı vardır. En popüler barındırma türü, paylaşılan barındırma, özel barındırma, bulut barındırma ve vps barındırmadır. Bu kılavuz için vps barındırma kullanacağız, çünkü vps bize sunucu üzerinde maksimum kontrol sağlar ve özel barındırmadan daha ekonomiktir. Herhangi bir vps barındırma sağlayıcısından vps alabilirsiniz, şahsen ben linode'u tercih ederim.
Alan adı, sitenizin url'sidir ve bir alan adı kayıt şirketinden kaydettirmeniz gerekir. Her ikisine de sahip olduğunuzda, alan adınızı vps'nize yönlendirmeniz gerekecektir. Bunu yapmanın iki yolu var. Birincisi, alan adı kayıt şirketi kontrol panelinin ad sunucusu yapılandırma bölümüne vps sağlayıcınızın ad sunucularını eklemektir. İkincisi, alan adı kayıt şirketi kontrol panelinin (A ve CNAME kayıtları) DNS yapılandırma bölümünde vps IP adresinizi yapılandırmak içindir. Bu kılavuzda ad sunucularının yapılandırılmasından ve DNS kayıtlarından bahsetmeyeceğiz. Genelde vps sağlayıcıların bu yapılandırmalar için belgeleri vardır ve uygun bir rehber bulamazsanız her zaman buradan bize sorabilirsiniz.
Şimdi, wordpress dağıtımı için sunucu yazılımını yükleme ve yapılandırmanın gerçek işine başlıyor. Web sunucumuz olarak nginx'i ve php betiklerini yürütmek için php-fpm'yi kullanacağız. Sunucunuzun terminaline aşağıdaki komutları yazın –
|
1
2
3
4
5
6
|
aptitude install python – software – properties
apt – add – repository ppa : nginx / stable
curl http : // repo .varnish – cache .org / debian / GPG – key .txt | apt – key add –
echo “deb http://repo.varnish-cache.org/ubuntu/ precise varnish-3.0” > > / etc / apt / sources .list
apt – get update
apt – get install nginx php5 – fpm php5 – cgi php5 – cli php – apc php5 – common php5 – mysql php5 – dev php5 – gd php5 – imagick php5 – mcrypt php5 – snmp php5 – curl libssh2 – 1 – dev libssh2 – php mysql – server mysql – client varnish
|
Yukarıdaki komutlar, nginx, php, mysql ve vernik dahil olmak üzere gerekli tüm yazılımları yükleyecektir. Şimdi aşağıdaki komutlarla wordpress kurulumu ve sunucu günlükleri için klasör oluşturun
/srv, /srv/www, /srv/www/public_html ve /srv/www/logs dizinleri oluşturun. WordPress'i indirin ve dosyaları public_html klasörüne kopyalayın
|
1
2
3
4
5
6
|
mkdir – p / srv / www / public_html
mkdir / srv / www / logs
wget http : // wordpress .org / latest .tar .gz
tar – xzf latest .tar .gz
cp – R wordpress /* / srv / www / public_html /
chmod – R a + w / srv / www / public_html
|
Şimdi mysql kök kullanıcısını kullanarak wordpress için bir veritabanı oluşturun. Kurulumunuza göre “password”, “mysite”, “user” ve “userpassword” kelimelerini değiştirin. Bu kelimeleri hatırla, çünkü wordpress kurulumu sırasında onlara ihtiyacımız olacak.
|
1
2
|
mysql – u root – p “password” – e “create database mysite”
mysql – u root – p “password” – e “grant all on mysite.* to [email protected] identified by ‘userpassword'”
|
Artık her şey hazır olduğuna göre, wordpress sitemizi çalıştırmak için nginx ve php'yi yapılandıracağız. Nginx'i yapılandırmak için /etc/nginx/sites-available/ dizininde bir mysite dosyası oluşturmamız gerekecek. Bu dosyayı oluşturmak ve düzenlemek için aşağıdaki komutu kullanın
|
1
|
nano / etc / nginx / sites – available / mysite
|
Bu komutu verdikten sonra terminalde bir editör göreceksiniz. Bu dosyayı düzenlemek için nano kullanıyoruz. Aşağıdaki içeriği kopyalayın ve terminalde tıklayın, ardından yeni oluşturulan dosyamıza kopyalamak için Ctrl+Shift+v tuşlarına basın
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
server {
listen 80 ;
# Redirect www.yoursite.com to yoursite.com
server_name www . { domain_name } ;
port_in_redirect off ;
rewrite ^ ( . * ) http : //{domain_name}$1 permanent;
}
server {
listen 80 ;
server_name { domain_name } ;
index index . php index . html index . htm ;
root / srv / www / public_html ;
access_log / srv / www / logs / access . log ;
error_log / srv / www / logs / error . log ;
port_in_redirect off ;
# Use gzip compression
# gzip_static on; # Uncomment if you compiled Nginx using –with-http_gzip_static_module
gzip on ;
gzip_disable “msie6” ;
gzip_vary on ;
gzip_proxied any ;
gzip_comp_level 5 ;
gzip_buffers 16 8k ;
gzip_http_version 1.0 ;
gzip_types text / plain text / css application / json application / x – javascript text / xml application / xml application / xml + rss text / javascript image / png image / gif image / jpeg ;
# Use cached or actual file if they exists, otherwise pass request to WordPress
location / {
try_files $ uri $ uri / / index . php ? q = $ uri &$args;
}
# Cache static files for as long as possible – removed xml as an extension to avoid problems with Yoast WordPress SEO plugin which uses WP rewrite API.
location ~ * \ . ( ogg | ogv | svg | svgz | eot | otf | woff | mp4 | ttf | css | rss | atom | js | jpg | jpeg | gif | png | ico | zip | tgz | gz | rar | bz2 | doc | xls | exe | ppt | tar | mid | midi | wav | bmp | rtf ) $ {
try_files $ uri = 404 ;
expires max ;
access_log off ;
}
# Deny access to hidden files
location ~ * / \ . ht {
deny all ;
access_log off ;
log_not_found off ;
}
# Pass PHP scripts on to PHP-FPM
location ~ * \ . php $ {
try_files $ uri / index . php ;
fastcgi_index index . php ;
fastcgi_pass 127.0.0.1 : 9000 ;
include fastcgi_params ;
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name ;
fastcgi_param SCRIPT_NAME $ fastcgi_script_name ;
}
}
|
Yukarıdaki içeriği mysite dosyasına kopyaladıktan sonra, dosyayı kaydetmenizi isteyecek olan Ctrl+x tuşlarına basın, y tuşuna basın ve ardından girin. Şimdi sitelerin etkin olduğu klasörde dosyaya bağlantı oluşturun ve aşağıdaki komutları kullanarak nginx'i yeniden başlatın
|
1
2
|
ln – s / etc / nginx / sites – available / mysite / etc / nginx / sites – enabled
service nginx restart
|
y0! web tarayıcınız üzerinden wordpress yüklemeye hazırsınız. Şimdi site url'nizi web tarayıcısında açın. Karşınıza wordpress kurulum sayfası çıkacak. Bu sayfadaki talimatları izleyin ve yükleme işlemini tamamlayın. WordPress kurulum sayfasını göremiyorsanız, alan adınızın VPS'nizi gösterecek şekilde yapılandırıldığından emin olun ve günlük dosyalarında /var/log/nginx klasöründe herhangi bir hata olup olmadığını kontrol edin.
Şimdi wordpress kurulumunuzu optimize etmek için doğru araçları seçmeden önce göz önünde bulundurmanız gereken birkaç faktör var. Önbelleğe alınmış içeriği önbelleğe almak ve ziyaretçilere sunmak için kullanılabilecek farklı türde teknikler vardır. En etkili teknik, wordpress tarafından oluşturulan tüm html sayfasının statik bir dosya olarak önbelleğe alındığı tam sayfa önbelleği kullanmaktır. Diğer bir önbellek türü, işlem kodu önbelleği, veritabanı sorgu önbelleği ve nesne önbelleğini içerir. Opcode, bilgisayarda çalıştırılmak üzere php yorumlayıcı tarafından oluşturulan koddur, bir php betiğini her çalıştırdığımızda, yorumlayıcı bu opcode'u php kaynağından oluşturur ve çalıştırır. Bu işlem kodunu bilgisayarın RAM'inde önbelleğe alırsak, çok fazla CPU kullanımından tasarruf edebiliriz. Bu işlem kodunu önbelleğe almak için APC (alternatif php önbelleği) kullanıyoruz. Daha önce kurduk ve sadece çoğunu alacak şekilde yapılandırmamız gerekiyor. /etc/php5/conf.d adresine gidin ve aşağıdaki komutu kullanarak apc.ini adlı bir dosyayı düzenleyin ve aşağıdaki içeriği kopyalayıp dosyaya yapıştırın.
|
1
|
nano / etc / php5 / conf .d / apc .ini
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
extension = apc . so
apc . enabled = 1
apc . shm_segments = 1
apc . shm_size = 40M
apc . optimization = 0
apc . num_files_hint = 4096
apc . ttl = 7200
apc . user_ttl = 7200
apc . gc_ttl = 0
apc . cache_by_default = 1
apc . filters = “”
apc . mmap_file_mask = “/tmp/apc.XXXXXX”
apc . slam_defense = 0
apc . file_update_protection = 2
apc . enable_cli = 0
apc . max_file_size = 10M
apc . stat = 1
apc . write_lock = 1
apc . report_autofilter = 0
apc . include_once_override = 0
; apc . rfc1867 = 0
; apc . rfc1867_prefix = “upload_”
; apc . rfc1867_name = “APC_UPLOAD_PROGRESS”
; apc . rfc1867_freq = 0
apc . localcache = 0
apc . localcache . size = 512
apc . coredump_unmap = 0
apc . stat_ctime = 0
|
Kullanarak bu yapılandırmayı uygulamak için php'nizi yeniden başlatın
|
1
|
service php5 – fpm restart
|
WordPress tarafından yapılan veritabanı sorgularını önbelleğe almak için kullanılabilen birkaç ücretsiz ve premium eklenti vardır. Bunun için db-cache-reloaded-fix kullanacağız. Bağlantıda verilen kurulum talimatını izleyin. Nginx sunucusunda wordpress'in kalıcı bağlantı özelliğini kullanmak için nginx uyumluluğu adlı başka bir wordpress eklentisi yüklemeniz gerekecektir. apc.ini dosyasında apc.shm_size'ı 40M olacak şekilde kullandık, bu da apc'nin wordpress php dosyalarının işlem kodunu önbelleğe almak için 40MB RAM kullanacağı anlamına geliyor. Tek bir wordpress kurulumu için yeterli olan. Aynı VPS'de birden fazla wordpress kuruluysa, buna göre artırabilirsiniz. VPS'nizde 1 GB'den fazla ram varsa, APC kullanarak wordpress nesnelerini önbelleğe almak için APC-nesne-önbellek-arka uç wordpress eklentisini kullanabilirsiniz. Ancak bunu yaparsanız, apc.ini dosyasındaki apc.shm_size değerini artırmayı unutmayın, değer artışı sitenin içerik boyutuna ve web sitesinin trafik davranışına bağlıdır, ancak genellikle başlangıç için bu değeri 16 MB artırabilirsiniz. ve sonra buna göre optimize edebilirsiniz. Lütfen unutmayın, web sitenizin hata günlük dosyası /srv/www/logs/error.log'da “bellek tahsis edemiyor…” hatası görürseniz, bu, gerekirse apc.shm_size ve RAM boyutunuzu artırmanız gerektiği anlamına gelir. Ne yaptığınızı bilmiyorsanız bu eklentiyi kullanmamanızı öneririz.
Artık opcode ve veritabanı önbelleği etkinleştirilmiş çalışan bir wordpress kurulumumuz olduğuna göre, vernik kullanarak sitemiz için tam sayfa önbelleğini etkinleştireceğiz. Varnish, HTML sayfalarının tamamını bilgisayarın RAM'inde önbelleğe alan ve istek üzerine ziyaretçilere sunan bir proxy sunucu yazılımıdır. Vernik yaptığı işte çok iyidir ve sitenizin hızını 400 kat ve daha fazla artırabilir. Ancak, belirli amaçlar için verniği yapılandırmak ve tam sayfa önbelleğin istenen davranışını sürdürmek kolay değildir. Zaten kurduk ve sunucumuzda çalışıyor, web sayfalarını getirmek için nginx'imizi arka uç sunucusu olarak kullanacak şekilde yapılandırmamız gerekiyor. /etc/default/vernish dosyasını düzenleyin ve aşağıdaki içeriği "Alternatif 2, VCL ile konfigürasyon" bölümünün altındaki dosyaya kopyalayın
|
1
2
3
4
5
|
DAEMON_OPTS = “-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,96m”
|
Bu dosyadaki yorumları dikkatlice okursanız, bu adımda ne yaptığımızı anlayacaksınız. Vernish'i sunucumuzun 80 portunu dinleyecek ve /etc/varnish/default.vcl dosyasını VCL olarak kullanacak ve wordpress tarafından oluşturulan HTML sayfalarını önbelleğe almak için 96MB RAM kullanacak şekilde yapılandırıyoruz. Yine 1GB'tan fazla RAM'iniz varsa veya sitenizde çok sayıda sayfa varsa, ihtiyacınıza göre bu değeri 96'dan artırabilirsiniz. Bu dosyayı kaydedin ve başka bir dosyayı düzenlemek için terminalde aşağıdaki komutu verin /etc/varnish/default.vcl
|
1
|
nano / etc / varnish / default .vcl
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
backend default {
. host = “127.0.0.1” ;
. port = “8080” ;
}
acl purge {
“127.0.0.1” ;
}
sub vcl_recv {
# Allow purge requests
if ( req . request == “PURGE” ) {
if ( ! client . ip ~ purge ) {
error 405 “Not allowed.” ;
}
ban ( “req.url ~ ^” + req . url + ” && req.http.host == “ + req . http . host ) ;
return ( lookup ) ;
}
# Add header for sending client ip to backend
set req . http . X – Forwarded – For = client . ip ;
# Normalize content-encoding
if ( req . http . Accept – Encoding ) {
if ( req . url ~ “\.(jpg|png|gif|gz|tgz|bz2|lzma|tbz)(\?.*|)$” ) {
remove req . http . Accept – Encoding ;
} elsif ( req . http . Accept – Encoding ~ “gzip” ) {
set req . http . Accept – Encoding = “gzip” ;
} elsif ( req . http . Accept – Encoding ~ “deflate” ) {
set req . http . Accept – Encoding = “deflate” ;
} else {
remove req . http . Accept – Encoding ;
}
}
# Remove cookies and query string for real static files
if ( req . url ~ “^/[^?]+\.(gif|jpg|jpeg|swf|css|js|txt|flv|mp3|mp4|pdf|ico|png|gz|zip|lzma|bz2|tgz|tbz)(\?.*|)$” ) {
unset req . http . cookie ;
set req . url = regsub ( req . url , “\?.*$” , “” ) ;
}
# Don’t cache admin
if ( req . url ~ “((wp-(login|admin|comments-post.php|cron.php))|login)” | | req . url ~ “preview=true” | | req . url ~ “xmlrpc.php” ) {
return ( pass ) ;
} else {
unset req . http . cookie ;
}
}
sub vcl_hit {
# purge cached objects from memory
if ( req . request == “PURGE” ) {
purge ;
error 200 “Purged” ;
}
}
sub vcl_miss {
# purge cached objects varients from memory
if ( req . request == “PURGE” ) {
purge ;
error 404 “Purged varients” ;
}
}
sub vcl_fetch {
# Dont cache admin
if ( req . url ~ “(wp-(login|admin|comments-post.php|cron.php))|login” | | req . url ~ “preview=true” | | req . url ~ “xmlrpc.php” ) {
return ( deliver ) ;
} else {
if ( beresp . ttl > 0s ) {
unset beresp . http . set – cookie ;
}
}
}
sub vcl_deliver {
# Remove unwanted headers
}
|
Bu konfigürasyonda her şeyi anlatamayacağız. Bu içerik, verniği arka uç sunucusu için 8080 numaralı bağlantı noktasını kullanacak şekilde yapılandırır ve varsayılan olarak vernik istekleri çerezlerle önbelleğe almadığından, istenmeyen tüm çerezleri istekten kaldırır. Arka uç sunucusu için 8080 numaralı bağlantı noktasını kullanacak şekilde yapılandırdığımızı unutmayın, bu nedenle nginx sunucusunun bağlantı noktasını 8080 olarak değiştirmemiz gerekiyor, böylece vernik kullanabilir ve vernik ile nginx çakışmaz. Nginx bağlantı noktasını değiştirmek için aşağıdaki komutu verin
|
1
|
nano / etc / nginx / sites – available / mysite
|
Ve “listen 80” olan iki satırı düzenleyin; "8080'i dinle". Bu yapılandırma dosyasında iki kez yazılmadığından, satırın her iki örneğini de değiştirmeniz gerekir. Şimdi Ctrl+x ve ardından y tuşlarına basarak dosyayı kaydedip kapatın ve girin. Şimdi nginx'i yeniden başlatın ve cilalayın
|
1
2
|
service restart nginx
service restart varnish
|
Artık vps'nizde tamamen optimize edilmiş wordpress kurulumuna sahipsiniz. Konfigürasyon dosyalarında belirtilen tüm konfigürasyonlar ve değerler genel siteler içindir, Bu konfigürasyon 1GB RAM ve 2GHz işlemci VPS ile günde yaklaşık 100.000 ziyaretçiyi işleyebilir ancak testler ideal koşullarda yapılır). Sitenizi wordpress kontrol panelinden düzenlemenin keyfini çıkarın. Web sitenizi daha da optimize etmek için wordpress için herhangi bir html, css ve js minify eklentisi yükleyebilir ve statik içerikler için CDN kullanabilirsiniz. Zaman ayırdığınız için teşekkür ederiz, lütfen önerilerinizi ve şüphelerinizi aşağıya yorumlayın.
ev borcu WordPress sitesi