Webkiszolgáló kevés erőforrással rendelkező VPS-ben
A minap kellett egy weboldalt elhelyeznem, azonban pár egyedi dolog miatta szokásos tárhely ajánlatok nem megfelelőek. Így szereztem egy Mini VPS a vpspro.hu oldalon, melyben 256 MiB RAM, ugyanennyi SWAP és 10 GiBájt tárhely található.
Természetesen a csomagokat nem a VPS-en forgattam le, hanem saját gépen, amit aztán összetömörítettem és ebből lett a VPS. A frissítéseket is érdemes binhost használatával (ami pl. a saját gépünkön futó virtuális gép) telepíteni, mivel egy ekkora VPS-ben nagyon sokáig tártana leforgatni a csomagokat.
Webkiszolgálónak a szokásos Apace helyett a sokkal „könnyebb” Lighttpd-t fogom használni, és a PHP-t FastCGI-vel futtatom.
Kezdésnek fogtam és feltelepítettem egy alap gentoot,majd megfrissítettem. Most, hogy kész az alap rendszer, jöhetnek a webkiszolgáló dolgai.
Lighttpd+PHP telepítése
Elsőként állítsuk be a szükséges USE flageket a Lighttpd csomagnak. A USE Flagek mondják meg a csomagnak, hogy milyen opciókkal, featurokkal forduljon le.
A Lighttpd-nek egyedül a fastcgi opciót adom, meg, mivel a PHP-t majd ezen keresztül szeretném használni. Lehetséges opciók még:
- bzip2 – bzip2 támogatás a mod_compress modulhou
- fastcgi – FastCGI támogatás
- gdbm – GNU database libraryk támogatása
- ipv6 – IPv6 támogatás
- lua – Lua szkriptnyelv engedélyezése, pl. mod_cml modulhoz
- memcache – Memcache támogatás, szintén a mod_cml modulnak
- mysql – MySQL támogatás VHOST-oknak (VHOST-ok adati MySQL adatbázisból jönnek), mod_mysql_vhost
- pcre – PCRE támogatás, regex használatához konfigurációs fájlokban
- php – mod_fastcgi/php alapértelmezett beállítások
- rrdtool – RRDtool támogatás
- ssl – OpenSSL, HTTPS használatához
- doc – Dokumentáció telepítése
- fam – Enables fam/gamin for reducing number of stat() calls
- ldap – Ldap támogatás
- minimal – Minimális telepítés, dokumentáció nélkül, csak a legszükségesebb modulokkal.
- webdav – WebDAV támogatás, pl. SVN-hez
- xattr – Kiterjesztett attribútumok támogatása
Nekem alapvetően csak a fastcgi USE flag kellett, így ez került csak be a package.use fájlba.
echo www-servers/lighttpd fastcgi>>/etc/portage/package.use
A php már jóval több modullal rendelkezik, így ott engedélyezzük azt, amire szükségünk van. Én a következőket engedélyeztem, ez általában elég is – a cgi opciót azonban mindenképp engedélyezzük, különben nem tudjuk FastCGI-vel használni a PHP-t:
dev-lang/php cgi force-cgi-redirect bcmath calendar ctype curl curlwrappers exif filter flatfile ftp gd gmp hash imap inifile json mysql mysqli simplexml soap sockets ssl tidy tokenizer truetype wddx xml xmlreader xmlrpc xmlwriter xpm xsl zip>>/etc/portage/package.use
Gentoon (amd64-es rendszeren), alapból az 5.2.14-es PHP érhető el, azonban unstabled formában elérhető az 5.3.3-as verzió is. Ha ezt szeretnénk használni, akkor csak unmaskolni kell:
echo "dev-lang/php ~amd64">>/etc/portage/package.keywords
Akkor itt az ideje leforgatni a PHP-t, és a Lighttpd-t:
emerge dev-lang/php www-servers/lighttpd
Gépünk sebességétől függően hamarosan lefordul a Lighttpd és a PHP.
Lighttpd beállítása
Most, hogy lefordultak a csomagok, be kell állítani őket.
A szerveren két VHOST-ot szeretnék kiszolgálni, egyet melyben az oldal fut, php támogatással és egy static vhost, ahol a fájlok kiszolgálása történik, php nélkül.
Nézzük előbb a mod_fastcgi.conf fájlt, melybe a PHP FastCGI beállításait írom, magyarázatok a fájlban:
#Engedélyezzük a mod_fastcgi modult
server.modules += ("mod_fastcgi")
fastcgi.server = (
# .php kiterjesztésű fájlokra vonatkozó beállítások
".php" =>
((
#php-cgi bináris helye
"bin-path" => "/usr/bin/php-cgi",
#FastCGI socket fájl helye
"socket" => "/var/run/lighttpd/lighttpd-fastcgi-php-" + PID + ".socket",
#Hány PHP process legyen minimun
"min-procs" => 1,
#Hány PHP process legyen maximum
"max-procs" => 1, # Direkt van itt 1, magyarázat később!
"idle-timeout" => 30,
"bin-environment" => (
#Egy PHP processznek hány gyermek folyamata lehet
"PHP_FCGI_CHILDREN" => "8",
#Azt adja meg, hogy hány kérés teljesítése után felyeződjön be a PHP processz.
"PHP_FCGI_MAX_REQUESTS" => "100000"
),
#Csak ezeket a környezeti változókat adja át a PHP-nak
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
#Ha használni akarjuk a PATH_INFO és PHP_SELF változókat
"broken-scriptfilename" => "enable"
))
)
A lighttpd.conf:
#Log fájlok helye
var.logdir = "/var/log/lighttpd"
#Alapértelmezett document root
server.document-root = "/var/www/domainem.tld/htdocs"
server.event-handler = "linux-sysepoll"
server.network-backend = "linux-sendfile"
#Log fájl formátuma és neve
accesslog.format = "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
accesslog.filename = var.logdir + "/access.log"
#index fájlok
index-file.names = ( "index.php", "index.html" )
#Az ilyen fájlokat nem lehet elérni
url.access-deny = ( "~", ".inc", ".htaccess")
#Soha ne szolgálja ki az ilyen kiterjesztésű fájlokat statikus fájlokként
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#Milyen IP címen figyeljen a Lighttpd; 0.0.0.0 minden ip cím
server.bind = "0.0.0.0"
server.pid-file = "/var/run/lighttpd.pid"
#Hibaoldalak elérési helye. A hibaoldalak a status-HIBAKOD.html fájlnevet kell viselniük.
server.errorfile-prefix = "/var/www/static.domainem.tld/htdocs/error/"
server.tag = "Lighttpd"
dir-listing.encoding = "utf-8"
#Mappalistázás, ha nincs index fájl
server.dir-listing = "disable"
#Milyen felhasználóval és csoporttal fusson a Lighty
server.username = "lighttpd"
server.groupname = "lighttpd"
#Cache mappa
compress.cache-dir = "/var/cache/lighttpd/compress/"
include "mime-types.conf"
#Böngésző függő beállítások
$HTTP["useragent"] =~ "(MSIE [7-9]|Mozilla/[5-9])" {
compress.filetype = ( "text/plain", "text/html", "text/css", "text/xml", "text/javascript", "application/x-javascript" )
}
$HTTP["useragent"] !~ "(MSIE [7-9]|Mozilla/[5-9])" {
compress.filetype = ( "text/plain", "text/html" )
}
#Alapértelmezett szerver név
server.name = "web.domainem.tld"
#Helyi gépről elérhető server-status
$HTTP["remoteip"] == "127.0.0.1" {
status.status-url = "/server-status"
status.config-url = "/server-config"
}
#Ha a domain nem static.domain.tld...
$HTTP["host"] != static.domainem.tld" {
#Minden más aldomainre a fődomain beállításai jönnek be (www.domainem.tld, akármi.domainem.tld, stb.)
$HTTP["host"] =~ "(^|\.)domainem\.tld$" {
server.name = "domainem.tld"
#documentroot
server.document-root ="/var/www/domainem.tld/htdocs"
compress.cache-dir = "/var/cache/lighttpd/compress/" + server.name
#Olvassa be a mod_fastcgi.conf tartalmát, ezáltal lesz PHP támogatás
include "mod_fastcgi.conf"
}
}
#static.domainem.tld virtualhost beállításai, PHP nélkül
$HTTP["host"] == "static.domainem.tld" {
server.name = "static.domainem.tld"
#documentroot
server.document-root ="/var/www/static.domainem.tld/htdocs"
compress.cache-dir = "/var/cache/lighttpd/compress/" + server.name
}
PHP beállítása
A php.ini-t az /etc/php/cgi-php5 mappában találjuk.
Ha használni akarjuk a PATH_INFO és PHP_SELF változókat, akkor mindenképpen legyen bent a php.ini fájlban – és legyen is engedélyezve – a következő opció:
cgi.fix_pathinfo = 1
A többi opciót ízlésünk és igényeink szerint állítsuk be.
Lighttpd+PHP kipróbálása
Most már minden beállítás a helyén van, indítsuk a Lightyt:
/etc/init.d/lighttpd start
MySQL telepítése, beállítása
Forgassuk le a MySQL-t:
emerge dev-db/mysql
Majd telepítés után hozzuk létre az alapértelmezett adatbázisokat:
emerge --config dev-db/mysql
Majd indítsuk el:
/etc/init.d/mysql start
Ezután állítsuk be a mysql root felhasználó jelszavát:
/usr/bin/mysqladmin -u root password 'jelszo'
Érdemes pár módosítást eszközölni az /etc/mysql/my.cnf fájl, [mysqld] részébe – ami nem szerepel a my.cnf-be azt írjuk be, ami szerepel, annak csak az értékét írjuk át:
[mysqld]
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
skip-bdb
skip-innodb
Ne felejtsük el újraindítani a mysql-t a módosítás után!
SMTP szerver
Szükségünk lesz még egy SMTP szerverre a saját gépünkön, amin keresztül az operációs rendszer üzenhet nekünk, valamint a PHP-s alkalmazások kifele a világba.
Célszerű erre pl. egy Exim-et forgatni, a következő USE flagekkel:
echo mail-mta/exim spf syslog exiscan-acl>>/etc/portage/package.use
ÉS akkor forgassuk le:
emerge mail-mta/exim
Valamint példának egy alap konfigurációs fájl:
primary_hostname = web.domainem.tld
domainlist local_domains = @
domainlist relay_to_domains =
smtp_banner = "$primary_hostname"
hostlist relay_from_hosts = 127.0.0.1
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
daemon_smtp_ports = 25
local_interfaces=127.0.0.1
never_users =
host_lookup = *
rfc1413_hosts = *
rfc1413_query_timeout = 5s
ignore_bounce_errors_after = 2d
timeout_frozen_after = 7d
begin acl
acl_check_rcpt:
accept hosts = :
deny message = Restricted characters in address
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
deny message = Restricted characters in address
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
accept local_parts = postmaster
domains = +local_domains
accept hosts = +relay_from_hosts
control = submission
accept authenticated = *
control = submission
require message = relay not permitted
domains = +local_domains : +relay_to_domains
require verify = recipient
accept
acl_check_data:
accept
begin routers
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
begin transports
remote_smtp:
driver = smtp
begin retry
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
begin rewrite
begin authenticators
Indítsuk is el:
/etc/init.d/exim start
Utolsó simítésok
Teszteljünk le mindent, majd állítsuk be, hogy a VPS indításakor automatikusan induljon minden szolgáltatás:
rc-update add exim default
rc-update add lighttpd default
rc-update add mysql default
Kicsit offolnék elnézést előre is.
Off:Adott 1 Debian Lenny Squeeze AMD64 + VMWare Server 2+router
Kérdés:Mit kell beállítani hogy menjen az internet a gazda gépen és a virtuális gépeken.Mind Debiantba Networking Server2 *.conf mind a programban magában.Ha tudtok adni 1 működő combót az is jó értem itt./etc/network/interfaces meg a netmap.conf vagy ehhez kapcsolódó fájlok azért nem vagyok egy guru és sajnos neten nem találtam workoroundot viszont ha lelövöm a server network részét akkor volt és ifconfig up eth0 akkor volt netem.
192.168.1.84 ip
255.255.255.0 mask
192.168.1.254 gw
192.168.1.254 dns
Szia!
Megtetszett a leírásod, mert már egy ideje gondolkodom VPS-ben, de linuxhoz még eléggé kezdő vagyok. Egy ubuntuval és a fórummal tudok böngészni…
Itt azért is kérdezném meg, hogy érted azt, mit értesz azon, hogy „lefordítani”?
Azaz:
„Természetesen a csomagokat nem a VPS-en forgattam le, hanem saját gépen, amit aztán összetömörítettem és ebből lett a VPS. A frissítéseket is érdemes binhost használatával (ami pl. a saját gépünkön futó virtuális gép) telepíteni, mivel egy ekkora VPS-ben nagyon sokáig tártana leforgatni a csomagokat.”
Na, ezt a részt kifejthetné valaki, mert előbb tanulom meg a kínait…
Köszönöm előre is!