Bonjour les amis,
je me suis fait un petit mémo en installant mon serveur à la maison, je le mets ici, car j'ai eu du mal à réunir toutes les infos et ça peut peut-être aider d'autres personnes comme moi.
J'ai eu besoin d'un petit serveur de développement à la maison pour mon futur site pro, ça va me permettre de démarrer, de me faire la main, de tester et de cerner mes besoins pour l'hébergement en serveur dédié. Afin de ne pas multiplier les machines à la maison, j'ai installé le serveur su une machine virtuelle sous vmware sur un pc qui me sert de mediabox sous la télé (windows xp, athlon X2 1.9ghz, ram 2Go), J'ai choisi ubuntu-server pour sa communauté et sa facilité d'accès. le serveur est accessible par vmware de mon portable, et les fichiers du site sont accessibles par samba (on les voit dans les favoris réseau et on peut les éditer directement). C'est pour un développement php5/mysql.
Vmware est assez simple d'utilisation et fonctionne bien, la configuration du réseau est automatique qu'en on choisi "bridged", la machine est alors directement sur votre réseau local
Infos / Liens utiles :
- les commandes de base linux
- télécharger VMware server, j'utilise la version 1.08. il faut se crée un compte pour avoir un numéro de licence.
- les commandes fondammentales de linux : http://www.linux-france.org/articl [...] linux.html
- pour l'éditeur nano : Ctrl+W -> recherche de texte, Ctrl+O -> pour enregistrer, Ctrl+X pour quiter
- pour lister le contenu d'un répértoire : "ls -l /monrepertoire", si le contenu du répertoire et trop long pour être lu , faire "ls -l /monrepertoire | less", ça permet de faire défiler comme on veut (taper "q" pour sortir)
- commande "top" pour voir ce qui tourne / "df" pour voir la taille et l'occupation des disques
- Vous pouvez prendre la main sur votre serveur à distance sous windows en installant PUTTY, c'est plus pratique que de bricoler dans la console VMware.
- Pour connaitre les options d'une commande de linux il faut taper man "commande", par exemple :
# man ls
---------------------------------------------------------------------------------------------------------
DEBIAN + LIGHTTPD + PHP5 + MYSQL + phpmyadmin + proftpd + ...
Après m'être fait un peu la main sur le serveur ubuntu ci dessous, j'ai cherché à avoir quelque chose de plus léger (le serveur ubuntu prend 140 mo de ram au démarrage contre 90 mo pour cette installation, sans samba cependant). Dans l'éventualité d'une part de serveur virtuel (256mo) chez Gandi ça compte !
-- Installation de l'OS :
prendre l'iso chez debian, j'ai pris (debian-40r6-i386-businesscard.iso) faire l'installation minimale
puis se logguer en root
-- Installer SSH, pour avoir l'accés sécurisé (crypté) pour PUTTY et le FTP :
# apt-get install ssh openssh-server
avec putty vous pouvez faire des clicks droit pour coller du texte, c'est très pratique.
-- Mettre à jour :
# apt-get update
# apt-get upgrade
-- Francisation :
# apt-get install manpages-fr
# dpkg-reconfigure locales
puis choisir " fr_FR.UTF-8" et "en_US.UTF-8"
ensuite choix de :" fr_FR.UTF-8"
taper :
# export LANGUAGE="fr_FR.UTF-8"
# export LC_ALL="fr_FR.UTF-8"
# export LANG="fr_FR.UTF-8"
# locale-gen
-- Nettoyage :
Enlever les fichiers de langue inutiles :
# apt-get install localepurge
# localepurge
Nettoyage des services inutiles lancés au démarrage
# update-rc.d -f acpid remove (gestion de l'energie)
# update-rc.d -f exim4 remove (c'est pour les mails)
# update-rc.d -f nfs-common remove (partage de fichier)
# update-rc.d -f apache2 remove (remplacer par lighttpd)
et peut -être (pas sur debian4) :
//update-rc.d -f pcmciautils remove
//update-rc.d -f pcmcia remove
//update-rc.d -f bluetooth remove
//update-rc.d -f bluez-utils remove
//update-rc.d -f hotkey-setup remove
//update-rc.d -f laptop-mode remove
//update-rc.d -f hplip remove
//update-rc.d -f dns-clean remove
//update-rc.d -f mdadm remove
//update-rc.d -f mdadm-raid remove
//update-rc.d -f lvm remove
//update-rc.d -f evms remove
//update-rc.d -f fetchmail remove
et desinstaller les paquets correspondants :
# apt-get remove laptop-detect
# apt-get remove --purge acpid
# apt-get remove --purge exim4
# apt-get remove --purge nfs-common
vous pouvez enlever aussi quelques terminaux virtuels dans /etc/inittab en commentant les lignes comme ça :
# Note that on most Debian systems tty7 is used by the X Window System, # so if you want to add more getty's go ahead but skip tty7 if you run X. # 1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 #3:23:respawn:/sbin/getty 38400 tty3 #4:23:respawn:/sbin/getty 38400 tty4 #5:23:respawn:/sbin/getty 38400 tty5 #6:23:respawn:/sbin/getty 38400 tty6 |
##### Installation/configuration de LIGHTTPD #####
-- Je mets un mot de passe pour l'utilisateur "www-data" qui existe déjà et qui est propriétaire du dossier www, pour déposer les fichier par SFTP plus tard :
# passwd -d www-data
# passwd www-data
-- Créer le repertoire pour le fichiers du site :
# mkdir /var/www/monsite
# chown www-data:www-data /var/www/monsite
-- Installation du paquet :
# apt-get install lighttpd
-- Puis configuration :
# nano /etc/lighttpd/lighttpd.conf
définir l'emplacement des fichiers du site
server.document-root = "/var/www/monsite" |
ajouter "mod_fastcgi" dans la liste :
[...] server.modules = ( "mod_access", "mod_alias", "mod_accesslog", "mod_fastcgi", # "mod_rewrite", # "mod_redirect", [...] |
et à la fin :
[...] fastcgi.server = ( ".php" => (( "bin-path" => "/usr/bin/php5-cgi", "socket" => "/tmp/php.socket" ))) |
vous pouvez ajouter les types mimes aussi :
## mimetype mapping #include_shell "/usr/share/lighttpd/create-mime.assign.pl" ##sd mimetype.assign = ( ".rpm" => "application/x-rpm", ".pdf" => "application/pdf", ".sig" => "application/pgp-signature", ".spl" => "application/futuresplash", ".class" => "application/octet-stream", ".ps" => "application/postscript", ".torrent" => "application/x-bittorrent", ".dvi" => "application/x-dvi", ".gz" => "application/x-gzip", ".pac" => "application/x-ns-proxy-autoconfig", ".swf" => "application/x-shockwave-flash", ".tar.gz" => "application/x-tgz", ".tgz" => "application/x-tgz", ".tar" => "application/x-tar", ".zip" => "application/zip", ".mp3" => "audio/mpeg", ".m3u" => "audio/x-mpegurl", ".wma" => "audio/x-ms-wma", ".wax" => "audio/x-ms-wax", ".ogg" => "application/ogg", ".wav" => "audio/x-wav", ".gif" => "image/gif", ".jpg" => "image/jpeg", ".jpeg" => "image/jpeg", ".png" => "image/png", ".svg" => "image/svg+xml", ".xbm" => "image/x-xbitmap", ".xpm" => "image/x-xpixmap", ".xwd" => "image/x-xwindowdump", ".css" => "text/css", ".html" => "text/html", ".htm" => "text/html", ".js" => "text/javascript", ".asc" => "text/plain", ".c" => "text/plain", ".cpp" => "text/plain", ".log" => "text/plain", ".conf" => "text/plain", ".text" => "text/plain", ".txt" => "text/plain", ".dtd" => "text/xml", ".xml" => "text/xml", ".mpeg" => "video/mpeg", ".mpg" => "video/mpeg", ".mov" => "video/quicktime", ".qt" => "video/quicktime", ".avi" => "video/x-msvideo", ".asf" => "video/x-ms-asf", ".asx" => "video/x-ms-asf", ".wmv" => "video/x-ms-wmv", ".bz2" => "application/x-bzip", ".tbz" => "application/x-bzip-compressed-tar", ".tar.bz2" => "application/x-bzip-compressed-tar", # default mime type "" => "application/octet-stream", ) |
##### Installation/configuration de PHP5 #######
-- Installation des paquets :
# apt-get install php5
# apt-get install php-pear php5-cgi
et ajout de modules supplémentaires :
# apt-get install php5-mcrypt php5-gd
-- Créer le repertoire pour les sessions :
# mkdir /var/www/sessions
# chown www-data:www-data /var/www/sessions
-- Puis configuration :
# nano /etc/php5/cgi/php.ini
ajouter "cgi.fix_pathinfo = 1"
augmenter la taille de la memoire --> "memory_limit = 64M"
emplacement sessions --> "session.save_path = /var/www/sessions"
##### Accelerer le PHP avec APC (Alternative PHP Cache)###
voir http://www.howtoforge.com/integrat [...] ebian-etch
-- Installation des paquets :
# apt-get install php5-dev build-essential
# pecl install apc
et repondre non à ->Use apxs to set compile flags (if using APC with Apache)? [yes] :
-- Puis configuration de php:
# nano /etc/php5/cgi/php.ini
ajouter :
[APC] extension=apc.so apc.enabled=1 |
--redémarrer lighttpd:
# /etc/init.d/lighttpd restart
##### Installation/configuration de MYSQL #######
-- Installation des paquets :
# apt-get install mysql-server mysql-client
-- Arreter mysql pour déplacer le répetoire de données, ce n'est pas necessaire, c'est jusque que j'ai voulu centraliser toutes les données dans le répertoire www
# /etc/init.d/mysql stop
# mv -v /var/lib/mysql /var/www/mysql
faire un lien symbolique :
# ln -s /var/www/mysql /var/lib/mysql
-- Sécuriser Mysql :
démarrer Mysql
# /etc/init.d/mysql start
# mysql_secure_installation
mettre un mot de passe root = *******
répondre "yes" aux autres questions
##### Installation de PHPMYADMIN #######
-- Installation du paquet :
apt-get install phpmyadmin
-- Faire un lien symbolique dans le répertoire du site, pour avoir phpmyadmin en tapant l'adresse "http;//www.monsite.com/phpmyadmin".
# ln -s /usr/share/phpmyadmin /var/www/monsite
##### Installation de PROFTPD #######
-- Installation des paquets :
# apt-get install proftpd proftpd-mysql
choisir une installation "indépendement"
puis suivre : http://doc.ubuntu-fr.org/proftpd_et_mysql
au démarrage vous aurez peut-être un message d'erreur "Starting ftp server: proftpd - IPv6 getaddrinfo 'monserveur' error: Name or service not known)
il faut alors editer le fichier :
# nano /etc/hosts
et ajouter le nom de votre serveur à la fin de la ligne...
::1 ip6-localhost ip6-loopback monserveur |
et redémarrer le réseau :
# /etc/init.d/networking restart
##### Monitoring avec MUNIN #######
-- Ajouter l'utilisateur "munin"
# adduser munin
défini le pswd
-- Installation des paquets :
# apt-get install munin munin-node (yes sur les dépendances)
-- Faire un lien symbolique dans le répertoire du site, pour avoir munin en tapant l'adresse "http;//www.monsite.com/munin".
# ln -s /var/www/munin /var/www/monsite
pour la personalisation c'est la :
# nano /etc/munin/munin.conf
# nano /etc/munin/munin-node.conf
##### Mettre à l'heure avec NTP #######
-- Installation des paquets :
# apt-get install ntpdate
-- Mettre à l'heure :
# ntpdate ntp.ubuntu.com
-- Consulter l'heure
# date
##### Planifier des Tâches avec CRON #######
-- Editer le fichier
# nano /etc/crontab
et ajouter vos lignes :
par exemple, lancer un script php toutes les minutes :
* * * * * www-data /usr/bin/php5-cgi -f /var/www/monsite/monfichier.php
par exemple, lancer un script à 5h17 tout les matin :
17 5 * * * root /bin/bash /monchemin/monscript.sh
par exemple, mettre à l'heure tout les heures :
*/15 * * * * root ntpdate ntp.ubuntu.com
(pour avoir le serveur à l'heure car c'est un peu n'importe quoi avec VMware et XP, pas utile sinon, ça surcharge les serveurs de temps inutilement).
remarques :
- Par défaut sur la Debian (etch), le log de cron n'est pas activés. il faut éditer /etc/syslog.conf et decomenter cette ligne : "cron.* -/var/log/cron.log". Sauvez et quittez, puis créez le fichier avec "nano /var/log/cron.log", redémarrez le processus syslog avec "/etc/init.d/sysklogd restart".
- Attention aux droits des fichiers pour executer et pour ecrire dedans (faire un chmod).
##### Sauvegardes avec RSYNC #####
-- Installer du paquet :
# apt-get install rsync
--et créer, par exemple, un scripte de sauvegarde :
# nano /srv/data/backup/sauvegarde.sh
#!/bin/bash #copie des fichier de configuration : rsync /etc/lighttpd/lighttpd.conf /backup/lighttpd.conf rsync /etc/php5/cgi/php.ini /backup/php.ini rsync /etc/hosts /backup/hosts rsync /etc/munin/munin.conf /backup/munin.conf rsync /etc/munin/munin-node.conf /backup/munin-node.conf rsync /etc/crontab /backup/crontab rsync /etc/syslog.conf /backup/syslog.conf #copie des fichiers de données : rsync -a -l -p -o -g -t --delete --force /var/www /backup/ |
---------------------------------------------------------------------------------------------------------
UBUNTU + APACHE2 + PHP5 + MYSQL+ phpmyadmin + proftpd
- Les répertoires /www et /mysql seront déplacer sous /home (ce n'est pas obligatoire, c'est juste par commodité).
- "toto" est l'utilisateur définis à l'installation de Ubuntu.
##### Installation de ubuntuserver 8.04.1 amd64 avec LAMP et Samba
#mettre à jour tous les paquets installés vers les dernières versions.
##### Déplacement www #######
sudo mv /var/www /home/www sudo ln -s /home/www /var/www sudo /etc/init.d/samba stop |
##### changement droit et propriétaire /home/www
sudo chown -R root.toto /home/www sudo chmod -R 775 /home/www |
##### Déplacement mysql #######
# arreter Mysql
sudo /etc/init.d/mysql stop |
# deplacer le repertoire :
sudo mv -v /var/lib/mysql /home/mysql |
# faire un lien symbolique :
sudo ln -s /home/mysql /var/lib/mysql |
# modifier le fichier /etc/apparmor.d/usr.sbin.mysqld
sudo nano /etc/apparmor.d/usr.sbin.mysqld |
# et remplacer
/var/lib/mysql/ r, --> /home/mysql/ r, /var/lib/mysql/** rwk, --> /home/mysql/** rwk, |
# recharger la liste des profils pour apparmor :
sudo invoke-rc.d apparmor reload |
##### Configuration de samba : #####
sudo /etc/init.d/samba stop sudo nano /etc/samba/smb.conf |
----------le fichier smb.conf----------
Code :
- ####### Browsing/Identification #######
- workgroup = nom de votre groupe de travail
- server string = nom du serveur
- dns proxy = no
- host allow = adresses ip des pc qui ont accès aux fichiers
- log file = /var/log/samba/log.%m
- max log size = 1000
- syslog = 0
- ####### Authentication #######
- security = user
- encrypt passwords = true
- invalid users = root
- unix password sync = yes
- passwd program = /usr/bin/passwd %u
- passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
- pam password change = yes
- map to guest = bad user
- ########## Domains ###########
- ########## Printing ##########
- ############ Misc ############
- socket options = TCP_NODELAY
- usershare allow guests = no
- #======================= Share Definitions =======================
- [www]
- comment = dossier www
- path = /home/www
- available = yes
- browseable = yes
- public = no
- writable = yes
- valid users = toto
- create mask = 0775
- directory mask = 0775
- [toto]
- comment = dossier home de l'utilisateur toto
- path = /home/toto
- available = yes
- browseable = yes
- public = no
- writable = yes
- valid users = toto
- create mask = 0770
- directory mask = 0770
|
# redémarrer samba
sudo /etc/init.d/samba start |
-> vous pouvez alors tester votre partage dans windows.
##### Configuration/Sécurisation de Apache2 : #######
sudo nano /etc/apache2/apache2.conf |
ajouter ServerName 127.0.0.1 sous ServerRoot "/etc/apache2"
Modifier "ServerSignature On" en "ServerSignature Off"
Modifier "ServerTokens Full" en "ServerTokens Prod"
##### securiser /var/www #######
sudo nano /etc/apache2/sites-available/default |
----------le fichier default----------,
Code :
- NameVirtualHost *:80
- <VirtualHost *:80>
- ServerAdmin toto@toto.com
- DocumentRoot /var/www/
- <Directory />
- Options FollowSymLinks
- AllowOverride None
- </Directory>
- <Directory /var/www/>
- Options Indexes FollowSymLinks MultiViews
- AllowOverride None
- Order Allow,Deny
- Allow from all
- </Directory>
- ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
- <Directory "/usr/lib/cgi-bin">
- AllowOverride None
- Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
- Order allow,deny
- Allow from all
- </Directory>
- ErrorLog /var/log/apache2/error.log
- # Possible values include: debug, info, notice, warn, error, crit,
- # alert, emerg.
- LogLevel warn
- CustomLog /var/log/apache2/access.log combined
- ServerSignature Off
- Alias /doc/ "/usr/share/doc/"
- <Directory "/usr/share/doc/">
- Options Indexes MultiViews FollowSymLinks
- AllowOverride None
- Order Deny,Allow
- Deny from all
- Allow from 127.0.0.0/255.0.0.0 ::1/128
- </Directory>
- </VirtualHost>
|
Enlever ":80" pour que le site ne soit pas accessible de l'extérieur,
#redémarrer apache2
sudo /etc/init.d/apache2 start |
vous pouvez alors tester votre serveur http en local avec w3m (commande = "w3m http://localhost", sortir du naviqateur avec "q" )
##### securiser mysql #######
# démarrer Mysql
sudo /etc/init.d/mysql start sudo mysql_secure_installation |
Si ce n'est pas fait, mettre un mot de passe root, puis répondre valider les choix proposés.
##### Installation phpmyadmin #######
sudo apt-get install phpmyadmin |
Attention un bug avec OS 64bit (ça empêche l'importation de bases zipées dans phpmyadmin, voir ici http://www.phenix.gapi.fr/forum/vi [...] 22&t=1452), :
sudo nano /usr/share/phpmyadmin/libraries/unzip.lib.php |
et remplacer
if(crc32($vZ) != $aP['CRC']) { |
par
// crc calc for both 32 and 64 bits systems $crc = crc32($vZ); if($crc & 0x80000000) { $crc ^= 0xffffffff; $crc += 1; $crc = -$crc; } if($crc != $aP['CRC']) {
|
phpmyadmin sera accessible à la racine de votre site, par exemple http:\\192.168.1.xxx\phpmyadmin\, il faut se logger avec "root" et le mot de passe défini pour mysql (faire "ifconfig", pour connaitre l'ip du serveur sur votre réseau local).
Si besoin et capacités, ajouter de la mémoire pour l'execution du php :
sudo nano /etc/php5/apache2/php.ini |
à la ligne 270 mettre :
memory_limite = 64M (16M par defaut)
##### Tache cron ####### (j'ai besoin d'écrire régulièrement dans un fichier par un script php, c'est les 2 dernières lignes, je le fais en local et sur un serveur distant)
---------- début fichier crontab ----------
Code :
- # /etc/crontab: system-wide crontab
- # Unlike any other crontab you don't have to run the `crontab'
- # command to install the new version when you edit this file
- # and files in /etc/cron.d. These files also have username fields,
- # that none of the other crontabs do.
- SHELL=/bin/sh
- PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
- # m h dom mon dow user command
- 17 * * * * root cd / && run-parts --report /etc/cron.hourly
- 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
- 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
- 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
- * * * * * root php -f /home/www/...........................php
- * * * * * root wget http://www...................................php
- #
|
Attention aux droits des fichiers 755 pour executer, 666 pour ecrire dedans (faire un chmod).
##### Temps ntp ####### (pour avoir le serveur à l'heure, car c'est un peu n'importe quoi avec VMware et XP, voir plus loin car ce n'est pas si simple !)
sudo apt-get install ntpdate |
et ajouter dans la crontab une demande de mise à l'heure tout les 15 min
*/15 * * * * root ntpdate ntp.ubuntu.com |
##### Installation des modules supplémentaires php5 ####### ( j'ai mis que la librairie gd et le client php pour l'instant)
sudo apt-get install php5-gd php5-cli |
##### Installer les vmware tools ####### (je ne sais pas si c'est bien utile en mode console, mais bon...) http://blog-perso.onzeweb.info/200 [...] ls-ubuntu/
Demander l’installation de VMWare Tools via le menu d’administration de VMWare : VM -> Install VMWare Tools…
sudo apt-get update apt-get install make gcc apt-get build-essential apt-get install linux-headers-$(uname -r) mount /media/cdrom0 cd /tmp tar xzvf /media/cdrom/VM*.tar.gz cd vmware-tools-distrib ./vmware-install.pl |
# Répondre aux questions. Normalement toutes les propositions par défaut sont les bonnes, et une simple validation fera l’affaire.
sauf le chemin des C headers qui est : "/lib/modules/<kernel>/build/include" avec uname -r pour connaitre le kernel
puis nettoyer avec :
sudo umount /media/cdrom sudo rm -Rf /tmp/vmware-tools-distrib |
Si possible, redémarrer le système :
Voilà, ce n'est peut-être pas top niveau sécurité, mais ça fonctionne.
Si vous voulez que le site soit visible de l'extérieur, dans votre routeur (freebox pour moi) rediriger le port 80 sur l'ip de votre machine virtuelle (faire "ifconfig", pour connaitre l'ip et l'adresse mac du serveur).
Message édité par berlo le 26-02-2009 à 17:09:31