03 07 | 2012

Un serveur web "light" sur microVKS : lighttpd + php

Rédigé par Sorrodje

Classé dans : Informatique, Tutos

En ce moment, OVH met en production ses nouvelles installations au Canada!

Histoire de bien tester la montée en charge du binz, l'Hébergeur hexagonal réalise des opérations de "lâcher" de microVKS un peu comme les truites ou les faisans d'élevage au moment de l'ouverture de la pêche ou de la chasse.

J'ai donc sauté sur l'occasion pour dégotter une petite bestiole gratos pour l'ajouter à mon cheptel personnel: 128 Mo de RAM , 1vCPU , 5Go de disque , y'a pas de quoi rêver piloter le décollage de la fusée Ariane mais ça laisse tout de même de quoi s'amuser. 






Comme c'est indiqué, pas de port 25 = pas de serveur de courrier et par défaut les vKS ne permettent pas d'installer de VPN donc du coup, je sors de mes habitudes de mes LAMP ( Linux, Apache , Mysql, PHP) pour tenter l'install de lighttpd et php , histoire de se monter un micro serveur web.


Préparation de base du microVKS


Au départ, je suis donc pas à pas mon mémo décrit ici .

J'ai juste laissé finalement dans l'exemple qui nous occupe le port 22 pour le ssh (au lieu d'adopter un port spécifique). Sinon le processus de préparation est le même ( config ssh, firewall , fail2ban , portsentry , ...)

Par rapport à cette installation de base, je rajoute une installation de Munin avec l'installation de munin-node sur ce petit vKS et la configuration de munin sur le grapheur distant. Voir pour les manips détaillées.  Il faut alors penser à rajouter les règles iptables nécessaires dans notre script pare-feu. Du coup pour exemple, avec les règles iptables à rajouter quant à Munin et une adaptation à nos besoin du moment ça donne ça:

#!/bin/sh
### BEGIN INIT INFO
# Provides: iptables
# Required-Start:
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-description: iptables
# Description: Firewall
### END INIT INFO

### RAZ
iptables -t filter -F
iptables -t filter -X

### FERMETURE TOTALE PAR DEFAUT
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

### MAINTIEN DES CONNEXIONS EXISTANTES
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

### AUTORISATION DU LOOPBACK
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

### AUTORISATION DU PING
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

### AUTORISATIONS LIEES AUX SERVICES

# SSH port 22
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT

# DNS
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
#iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
#iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# HTTP
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

# HTTPS
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
#iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

# Munin
#iptables -t filter -A OUTPUT -p tcp --dport 4949 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 4949 -j ACCEPT

Port 22 et règles assorties, autorisation des trafics sortant de base ( http , https , dns , ftp ) et autorisation du trafic entrant pour les services qu'on souhaite ouvrir: noeud Munin et serveur web sur le port 80.

Avec tout ça on a une bonne base préalable pour l'installation du serveur web.

J'ai tendance à rajouter aussi logwatch pour avoir un mail régulier de suivi de log. Sur un micro VKS avec port 25 bolqué et donc pas de possibilité d'utiliser postfix, ça demande une configuration un peu particulière : logwatch avec ssmtp .


Installation du serveur web lighttpd



Compte tenu des ressources limitées de ce micro vKS, je me suis dit qu'il fallait viser light et que c'était donc l'occasion de tester ce serveur web alternatif à Apache2. Pour en savoir plus sur lighttpd voir  ici ou . Voire directement sur le site officiel.

Pour l'installation sur Debian, comme d'hab' rien de compliqué. On passe en root et :

#apt-get install lighttpd

et c'est installé et démarré. La configuration se situe dans le fichier /etc/lighttpd/lighttpd.conf qu'on va donc directement aller vérifier pour modif éventuelle selon besoins.

#nano /etc/lightppd/lightppd.conf

et voilà le contenu :

server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
# "mod_rewrite",
)

server.document-root = "/var/www"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"

index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm",
" index.lighttpd.html" )

url.access-deny = ( "~", ".inc" )

static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

include_shell "/usr/share/lighttpd/use-ipv6.pl"

dir-listing.encoding = "utf-8"
server.dir-listing = "enable"

compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/x-javascript", "text/css", "text/html", "text/plain" )

include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

A priori tout nous va bien. Quand on est habitué à un serveur web, on repère vite les quelques données fondamentales: répertoire www de base ( ici /var/www ) , user du serveur web ( ici www-data) etc ...

On note directement la présence de la définition d'un chemin de log error.log mais à contrario, n configuration de base lightppd ne produit pas de log "access.log" avec un enregistement complet de son activité... Personnellement je préfère avoir ce log donc j'ai activé le log access.log. Pour cela, il faut activer un "module" avec une commande spécifique. Comme souvent dans ce genre de procédé la commande lighttpd-enable-mod crée un lien entre le bon fichier de /etc/lighttpd/conf-available et /etc/lighttpd/conf-enabled . Pas besoin de toucher à la configuration principale donc.

En l'occurence ça donne:

#lighttpd-enable-mod accesslog
suivi d'un

#service lighttpd force-reload

puis d'une vérification dans /var/log/lighttpd/error.log qu'il n'y pas d'erreur après ce changement de config.  Une fois le bon module activé, on a un /var/log/lighttpd/access.log qui va se créer dès qu'on accède au serveur web.

Et c'est tout pour le moment. Lighttpd est en place et tourne . Vérification en appelant http://ip_du-serveur dans un navigateur:



It works comme dirait l'autre ...

On voit directement l'appel par l'IP n'ouvre pas de page par défaut . Il faut pour cela créer un  index.html dans /var/www le répertoire racine par défaut :

#nano /var/www/index.html

En mettant un truc du style, pompé sur la page par défaut d'Apache2 (le célèbre "It works")

<html><body><h1>Welcome</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running well but it seems you try a wrong way to access his content. Sorry, try again!</p>
</body></html>
et en appelant http://ip_du_serveur comme tout à l'heure on obtient alors ça :




Dans un bon anglais bien perrave qui fait plaisir à voir (Essayez de faire mieux quand même!)

Maintenant qu'on a un zouli serveur web tout neuf, autant essayer de diffuser autre chose qu'une page web en pur html et écrite dans un anglais approximatif.  Or bien souvent, un site internet "dynamique" est souvent basé sur le langage php. Il faut donc ajouter et configurer les éléments nécessaires aux sites en php.

Installation et configuration de php pour lighttpd.


C'est en l'occurence différent de ce qu'on a l'habitude de faire machinalement pour Apache2 et le fonctionnement de php avec lightppd passe par l'utilisation en mode cgi. Du coup, l'installation de php se fait par :

#apt-get install php5-cgi

Il faut ensuite activer la prise en charge de php par lighttpd en activant les modules nécessaires comme expliqué plus haut . ici il s'agit d'activer fastcgi et fastcgi-php donc :

#lighttpd-enable-mod fastcgi
#lighttpd-enable-mod fastcgi-php
#service lighttpd force-reload

On créée un fichier de test dans /var/www :

#nano /var/www/info.php

avec ce contenu:

<?php phpinfo(); ?>

et on teste :



Tout est OK , on a donc un serveur Linux Lighttpd php  LLP en lieu d'un LAMP .

A ce stade voilà un état de conso des ressources sur notre micro vKS:



Il nous reste donc les 2/3 de nos 128 Mo pour faire tourner le serveur. 

Et avec ça on peut faire tourner plein de trucs nécessitant un serveur web et php mais pas de Base de donnée comme MySQL.  Cas pratique avec un petit blog Pluxml qui me sert en particulier pour valoriser mon égo en partageant ces quelques bribes de connaissances.


Outre ce petit serveur web , on peut aussi monter une seedbox sur ce micro vKS : seedbox avec transmission sur micro vKS.

;)
Mots clés : lighttpd, Debian, vKS, OVH, serveur

11 commentaires

mercredi 04 juillet 2012 à 20:26 jdrien a dit : #1

Pour l'installation de logwatch et l'envoi par mail du rapport, le fait de ne pas pouvoir faire du port 25 sortant sera doute problématique ?

mercredi 04 juillet 2012 à 22:42 sorrodje a dit : #2

Je vais tenter l'affaire et je te tiens au courant ;)

jeudi 05 juillet 2012 à 11:45 Sorrodje a dit : #3

@jdrien : http://sorrodje.alter-it.org/index.php?article28/installation-logwatch-avec-ssmtp-sur-debian-6-0 ;)

dimanche 08 juillet 2012 à 17:17 bobi a dit : #4

super le tutos , j'y connais rien mais j'ai reussi a le faire fonctionner alors c'est cool :) merci encore et vivement la suite

mercredi 11 juillet 2012 à 11:28 Sorrodje a dit : #5

Dans la prolongation de ce tuto et toujours pour mettre à profit un petit vKS comme celui-ci :

http://sorrodje.alter-it.org/index.php?article29/seedbox-sur-micro-vks-avec-transmission

;)

samedi 14 juillet 2012 à 12:56 bobi a dit : #6

J4ai un petit problème, j'avais un script a installer et qui utilise un .htaccess et je viens de découvrir que lighttpd ne les supporter apparement pas, alors je me retrouve dans l'impasse avec un script qui fonctionne mais qui me retourne des tentatives de hack a foisons. :] snif dois-je me résigner a installé apache a la place :/ ou y'a t'il une solution + simple merci d'avance

samedi 14 juillet 2012 à 14:00 Sorrodje a dit : #7

@bobi : Oui les .htaccess sont spécifiques à apache2.

Il te faut donc soit utiliser apache2 soit faire en sorte que le contenu du .htaccess soit reporté dans la conf lighttpd via un virtualhost et que le script en question utilise la cong générale en lieu et place du .htaccess.

Si tu peux me dire ce que tu veux installer, je peux essayer de mon côté et voir comment si je trouve une solution à ton problème ;)

samedi 14 juillet 2012 à 18:45 bobi a dit : #8

alors c'est un script d'autosurf, comme j'ai pas ton mail je t'envoi le contenu du .htaccess ici j'ai cru comprendre qu'on pouvez le mettre dans le fichier de config de lighttpd mais sa m'as l'air bien compliqué donc bon sinon je vais laisser tomber. au pire tu pourra supprimé ce com. apres. merci en tout cas.Contenu:

SetEnv PHP_VER 5
RewriteEngine On
RewriteBase /tonfilleul/

RewriteRule ^index\.html$ index.php [L]
RewriteRule ^inscription\.html$ index.php?page=inscription [L]
RewriteRule ^mdpperdu\.html$ index.php?page=mdpperdu [L]
RewriteRule ^faq\.html$ index.php?page=faq [L]
RewriteRule ^contact\.html$ index.php?page=contact [L]
RewriteRule ^espace-membre\.html$ espace_membre.php [L]
RewriteRule ^informations\.html$ espace_membre.php?page=informations [L]
RewriteRule ^gerer-mes-liens\.html$ espace_membre.php?page=sites [L]
RewriteRule ^visionneuse-frame-([0-9]+)\.html$ espace_membre.php?page=surf&id=$1 [L]
RewriteRule ^visionneuse-sans-frame-([0-9]+)\.html$ espace_membre.php?page=surf2&id=$1 [L]
RewriteRule ^signaler-un-abus\.html$ espace_membre.php?page=abus [L]
RewriteRule ^parrainage\.html$ espace_membre.php?page=parrainage [L]
RewriteRule ^mes-filleuls\.html$ espace_membre.php?page=filleuls [L]
RewriteRule ^concours-surf\.html$ espace_membre.php?page=concours_surf [L]
RewriteRule ^concours-parrains\.html$ espace_membre.php?page=concours_parrain [L]
RewriteRule ^boutique\.html$ espace_membre.php?page=boutique [L]
RewriteRule ^deconnexion\.html$ index.php?page=deconnexion [L]
RewriteRule ^desinscription\.html$ espace_membre.php?page=desinscription [L]
RewriteRule ^inscription-([0-9]+)\.html$ /?inscription&ref=$1 [L]

samedi 14 juillet 2012 à 21:42 Sorrodje a dit : #9

@bobi .. En fait il s'agit bien du coup de "traduire" ces règles de rewrite de ton .htaccess dans la conf générale de lighttpd ( Probablement dans un virtualhost dédié à ce que tu veux diffuser si lighttpd n'est pas uniquement dédié à ce contenu) en ayant préalablement activé le module rewrite.

Voir par exemple ici : http://www.webhostingtalk.com/showthread.php?t=701164 qui aborde pratiquement exactement ton problème.

Ca ne doit pas être extrèmement difficile mais doit demander un peu de soin , de temps et des tests pour valider que ça fonctionne ;)

samedi 14 juillet 2012 à 23:11 bobi a dit : #10

merci oui c'est ce que j'avais v qu'il fallait tout retraduire et franchement c'est trop hard pour moi, dommage qu'il n'y ai pas un script automatique de codage pour sa ou un module a installer qui ferait marcher le htaccess avec directement je pense que j'aurais plus vite fais d'installer apache du coup. merci quand même en tout cas. au fait j'ai installé un server teamspeak3 aussi sur mon server et sa marche impec juste pour info ^^

dimanche 19 août 2012 à 13:56 Le débutant a dit : #11

C'est clair et pas de problème pour suivre ce tutoriel à la lettre. Merci pour toutes les informations. Très utile pour les débutants.

Écrire un commentaire

Quelle est la deuxième lettre du mot llni ? : 

Archives

Contrat Creative Commons
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Partage à l'Identique 2.0 France
.