Hello,
Voila un petit guide d'installation d'un serveur lighttpd+PHP+MySQL+XCache.
C'est en fait le premier pas pour une installation de owncloud sur votre NAS.
Attention, certaine configuration sont surement propre à mon NAS (un DNS320) et il faudra surtout adapter certain path à votre config.
De plus, il me manque encore un moyen propre pour reconfigurer le serveur d'orgine du NAS. Mais sinon les 2 serveurs peuvent parfaitement coexister.
Pré-requis:
- avoir une install de fun_plug 0.7 (et pas une debian).
- avoir l'ensemble des dépôts pour FFP 0.7 depuis le site d'uli.
- savoir se débrouiller avec slacker: il ne gère pas les dépendances et donc quand il manque une librairie savoir se débrouiller (mon truc & astuce: utiliser la recherche de package de debian pour avoir une idée du nom de package slacker à installer).
- savoir ce qu'est un port (non, pas celui d'Amsterdam, l'autre port).
- (facultatif) pour XCache: avoir une installation de gcc fonctionnelle (slacker -a gcc).
Je reviens juste sur la gestion des packages: je ne compte pas donner la liste complète des packages à installer car à vrai dire je n'en ai aucune idée. En fait si jamais un programme ne fonctionne pas, c'est souvent parce qu'il manque la librairie libTartenFion.6.6.6.so ou libKeskeC.13.0.so. Dans ces cas, j'utilise souvent google ou debian pour trouver un nom de package, et une fois le package identifié je regarde avec slacker -a si un package du même nom existe, et je l'installe. Ce qui fait que j'ai une myriade de librairies déjà installées et concrètement quand j'installe un nouveau truc, et bien il me manque très peu de chose. Donc acte, faites vos recherches par vous même. Vous verrez, ce n'est pas trop dure.
1. Qu'est ce qu'on va donc faire dans ce tuto ?
Bon, nous allons installer un serveur web: lighttpd. Conçue pour être rapide et léger en ressource </pub> A vrai dire je ne suis pas convaincu mais passons.
Avec le serveur web, nous allons ajouter PHP, ce qui est bien pratique pour les sites web, les vrais bien costauds avec des poils (et une moustache).
Avec tout ça, pour ajouter un peu de base de donnée qui ne rame pas quand il y a plus de 3 photos à gérer, nous allons installer mySQL. C'est plus gourmand en ressource, mais quand il y a toute une vie en photo à gérer, c'est quand même mieux.
Et enfin, parce que les trucs avec des poils et une moustache ça met à genoux le NAS qui est petit et faible, nous allons installer en option XCache qui soit disant permet de gros gains en performance avec PHP. Mais là c'est en option et ça necessite que vous ayez déjà un compilateur d'installé (gcc).
Il faut dire que la finalité du tuto, c'est de pouvoir installer ownCloud qui est un serveur cloud personnel garantie 100% sans morceau de NSA dedans car tout se passe sur VOTRE NAS (et pas sur le disque de ces affreux pirates chinois de la NSA).
Bon, commençons par l'installation des packages.
C'est evidemment la partie la plus courte car j'ai bien expliqué au début: débrouillez vous pour les librairies manquantes. J'ai aussi ajouté sqlite car c'est quand même bien pratique pour les cas ou l'on ne souhaite pas sortir le grand jeu pour 3 pauvres données.
L'installation:
slacker -a lighttpd php mysql sqlite |
Pour ma part, j'ai à l'heure d'aujourd'hui installé:
memiks:php-5.4.14-arm-1.txz
uli:lighttpd-1.4.32-arm-1.txz
uli:mysql-5.5.28-arm-2.txz
mz:sqlite-3.7.10-arm-0.txz
|
Evidemment, chaque package vient avec son lot de dépendances.
Un autre truc pour VERIFIER qu'il ne manque pas une dépendance quelque part: utiliser la commande magique ldd. Elle est disponible avec le package uClibc-0.9.33. Si toute les librairies sont là la commande ldd donne un truc du genre:
ldd /ffp/sbin/lighttpd
libpcre.so.0 => /ffp/lib/libpcre.so.0 (0x40005000)
libdl.so.0 => /ffp/lib/libdl.so.0 (0x40045000)
libssl.so.1.0.0 => /ffp/lib/libssl.so.1.0.0 (0x40050000)
libcrypto.so.1.0.0 => /ffp/lib/libcrypto.so.1.0.0 (0x400a0000)
libgcc_s.so.1 => /ffp/lib/libgcc_s.so.1 (0x401f9000)
libc.so.0 => /ffp/lib/libc.so.0 (0x4020c000)
ld-uClibc.so.0 => /ffp/lib/ld-uClibc.so.0 (0x2a000000)
|
2. Aller, maintenant on configure le serveur web !
Bon, ce qui est bien avec mon package, c'est qu'il y a déjà un exemple de configuration qui ne marche pas mais qui inclus ce qu'il faut pour PHP:
cp /ffp/etc/examples/lighttpd.conf-with-php /ffp/etc/lighttpd.conf
|
Voila, l'essentiel du job est fait....
Il reste:
- à bien mettre les paths
- à configurer les ports à utiliser
- à ajouter le SSL et un peu de sécurité
- à optimiser un peu
- à faire que ça démarre
Tout ça se passe dans le fichier /ffp/etc/lighttpd.conf
Pour les paths, le répertoire / de votre serveur http est défini par la variable:
server.document-root = "/mnt/HD/HD_a2/www/c_est_ma_racine_sur_le_disque_1"
|
Il est bien pratique aussi d'avoir cette variable d'initialisée.
server.upload-dirs = ( "/mnt/HD/HD_a2/www/tmp" )
|
Les logs aussi (très important):
server.errorlog = "/mnt/HD/HD_a2/www/logs/error.log"
accesslog.filename = "/mnt/HD/HD_a2/www/logs/access.log"
|
Pour les ports, je vais faire simple dans ce tuto. On ne va pas utiliser les ports du serveur de base du NAS, car cela risque d'entrer en conflit et sur mon NAS, s'il y a conflit, un des 2 serveurs ne se lance plus.
Du coup, pour le serveur de base j'utilise le port 8080:
Il y a aussi le port du SSL. Mais dans la config par défaut il n'y a pas du tout de SSL. Pour ajouter cela, il faut ajouter les lignes suivantes:
$SERVER["socket"] == ":448" {
server.document-root = "/mnt/HD/HD_a2/www/dossier_racine_n_2_securise"
ssl.engine = "enable"
ssl.pemfile = "/etc/server.pem"
}
|
Ce qui fait que dans mon exemple pour le SSL j'utilise le fichier PEM (pour le chiffrement) qui est le même que celui du NAS par défaut (pourquoi se prendre la tête ?).
Le SSL fonctionne sur le port 448 (choisisez votre port, mais pas le 443 qui est déjà pris). Ce qui veut dire que pour accéder au site SSL il faut taper: https://monnas:448/
Et j'ai aussi ajouté une option (qui n'est pas obligatoire) qui fait que le serveur web prend un autre répertoire comme répertoire racine que celui sur le port 8080. Si vous ne mettez pas cette option, on garde la même racine. Dans mon cas je l'utilise pour pouvoir accéder à owncloud uniquement en SSL et dans un autre répertoire que celui par défaut.
Concernant la sécurité, je vous recommande au minimum de mettre ces options:
dir-listing.activate = "disable"
dir-listing.show-readme = "disable"
server.username = "unnomduser"
server.groupname = "unnomdegroupe"
|
Cela évite que quelqu'un qui tape http://monnas/un_repertoire_qui_existe/ liste tout les fichiers.
Et puis pour owncloud, je vous déconseille de l'installer à la racine, mais plutôt dans un répertoire accessible uniquement si on connait son nom, genre:
https://monnas/un_nom_de_repertoire [...] _connait/.
Pour la sécurité du serveur aussi, les options username/groupname sont importants. Autant mettre le login/group d'un utilisateur avec peu de droit. Pensez à autoriser à cet utilisateur l’accès aux répertoires www (
chown -R unnomduser.unnomdegroupe www |
).
Après, les optimisations (que j'ai honteusement trouvé sur le site de lighttpd):
##### Optimization part
## set the event-handler (read the performance section in the manual)
# server.event-handler = "freebsd-kqueue" # needed on OS X
server.event-handler = "linux-sysepoll"
server.max-keep-alive-requests = 4
server.max-keep-alive-idle = 4
server.network-backend = "linux-sendfile"
server.stat-cache-engine = "simple" # either fam, simple or disabled
|
A priori je doute que l'on puisse vraiment mieux faire.
Pour démarrer manuellement le serveur web:
sh /ffp/start/lighttpd.sh start
|
Et pour que ça redémarre à chaque fois:
chmod +x /ffp/start/lighttpd.sh
|
3. Installer PHP
Bon, pas trop compliqué. Après avoir installé le package via slacker (et vérifié que les dépendances sont aussi installés), on fait:
cp /ffp/etc/examples/php.ini-development /ffp/etc/php.ini
|
ou
cp /ffp/etc/examples/php.ini-production /ffp/etc/php.ini
|
Il faut ensuite éditer php.ini et aller à la section "Extension" (là ou il y a plein de ";extension=" commentés).
On ajoute les extensions qui faut. Chez moi par exemple pour ownCloud:
extension=pdo_sqlite.so
extension=sqlite3.so
extension=mbstring.so
extension=zlib.so
extension=ctype.so
extension=gd.so
extension=pdo.so
|
On ajoutera d'autres extensions et configurations par la suite.
Juste une astuce: pour que PHP fonctionne il faut que toutes les extensions inclus fonctionnent. Pour ça il faut vérifier que toutes les librairies sont bien là. Les librairies php sont là:
/ffp/lib/php/extensions/no-debug-non-zts-20100525
Si ça marche, ldd doit être content si on le fait sur le fichier .so (par exemple pour sqlite3):
ldd /ffp/lib/php/extensions/no-debug-non-zts-20100525/sqlite3.so
checking sub-depends for '/ffp/lib/libpthread.so.0'
ld-uClibc.so.0 => /ffp/lib/ld-uClibc.so.0 (0x2a000000)
libdl.so.0 => /ffp/lib/libdl.so.0 (0x40021000)
libc.so.0 => /ffp/lib/libc.so.0 (0x4002c000)
checking sub-depends for '/ffp/lib/libgcc_s.so.1'
checking sub-depends for '/ffp/lib/libc.so.0'
ld-uClibc.so.0 => /ffp/lib/ld-uClibc.so.0 (0x2a000000)
libpthread.so.0 => /ffp/lib/libpthread.so.0 (0x00000000)
libgcc_s.so.1 => /ffp/lib/libgcc_s.so.1 (0x00000000)
libc.so.0 => /ffp/lib/libc.so.0 (0x00000000)
/ffp/lib/ld-uClibc.so.0 => /ffp/lib/ld-uClibc.so.0 (0x00000000) |
Ou pour gd:
ldd /ffp/lib/php/extensions/no-debug-non-zts-20100525/gd.so
checking sub-depends for '/ffp/lib/libpthread.so.0'
ld-uClibc.so.0 => /ffp/lib/ld-uClibc.so.0 (0x2a000000)
libdl.so.0 => /ffp/lib/libdl.so.0 (0x40021000)
libc.so.0 => /ffp/lib/libc.so.0 (0x4002c000)
checking sub-depends for '/ffp/lib/libpng15.so.15'
checking sub-depends for '/ffp/lib/libz.so.1'
checking sub-depends for '/ffp/lib/libjpeg.so.62'
checking sub-depends for '/ffp/lib/libc.so.0'
ld-uClibc.so.0 => /ffp/lib/ld-uClibc.so.0 (0x2a000000)
checking sub-depends for '/ffp/lib/libm.so.0'
libc.so.0 => /ffp/lib/libc.so.0 (0x4001f000)
ld-uClibc.so.0 => /ffp/lib/ld-uClibc.so.0 (0x2a000000)
checking sub-depends for '/ffp/lib/libgcc_s.so.1'
libpthread.so.0 => /ffp/lib/libpthread.so.0 (0x00000000)
libpng15.so.15 => /ffp/lib/libpng15.so.15 (0x00000000)
libz.so.1 => /ffp/lib/libz.so.1 (0x00000000)
libjpeg.so.62 => /ffp/lib/libjpeg.so.62 (0x00000000)
libc.so.0 => /ffp/lib/libc.so.0 (0x00000000)
libm.so.0 => /ffp/lib/libm.so.0 (0x00000000)
libgcc_s.so.1 => /ffp/lib/libgcc_s.so.1 (0x00000000)
not a dynamic executable
|
Enfin, pour vérifier que l'extension fonctionne, elle doit apparaitre dans la liste suivante après un php -m:
#php -m
[PHP Modules]
bz2
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
openssl
pcntl
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
xml
xmlreader
xmlwriter
zip
zlib
[Zend Modules]
|
Possiblement, vous avez aussi une toute petite modif:
remplacez
par:
date.timezone = "Europe/Paris" |
Voila.
4. Manque plus que mySQL.
Pour commencer:
Puis:
cp /ffp/etc/examples/mysql/my.cnf /ffp/etc/my.cnf
|
Et enfin:
mysql_secure_installation |
Je ne me souviens plus des réponses que j'ai donné, mais au final c'est assez simple à suivre.
Pour démarrer automatiquement mysql:
chmod +x /ffp/start/mysqld.sh
|
Enfin, modifions php.ini pour intégrer mySQL:
Ajouter:
Modifier:
mysql.default_port = 3306 ; Reprendre la configuration de l'option port dans my.cnf
mysql.default_socket = /ffp/var/run/mysql/mysql.sock ; Reprendre la configuration de l'option socket dans my.cnf
|
Voila !
Evidemment, un php -m pour vérifier et c'est bon.
5. En extra: XCache
Cencé rendre le code PHP plus rapide, ça fonctionne pas si mal que ça même si j'ai l'impression que s'il n'y a plus de RAM, ça peut poser des souçis.
Pour commencer: récupérer puis détarrer les sources depuis http://xcache.lighttpd.net/
Puis:
cd xcache-3.0.3
phpize
./configure --enable-xcache --prefix=/ffp
make
make install
cat xcache.ini >> /ffp/etc/php.ini
|
(attention: c'est bien 2 '>', et pas un seul)
Enfin, on réedite /ffp/etc/php.ini pour modifier les valeurs suivantes:
xcache.size = 30M ; 60M par defaut, mais avec 128Mb de RAM, autant réduire
xcache.mmap_path = "/ffp/tmp/xcache" ; "/dev/null" ne fonctionne pas
xcache.optimizer = On ; à Off par defaut
|
Normalement maintenant, un php -m doit donner la liste suivante:
php -m
[PHP Modules]
bz2
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
mysql
openssl
pcntl
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
XCache
XCache Cacher
xml
xmlreader
xmlwriter
zip
zlib
[Zend Modules]
XCache
XCache Cacher
|
Enjoy
Message édité par Fuli10 le 11-07-2013 à 10:15:10