Installation de Zend Server 8.5 sous debian 7

26 septembre 2016 | Posted in Logiciel, php | By

Bien qu’étant administrateur système depuis quelques années, mon premier amour a été le code php. Et comme on dit souvent, on revient souvent à ses premiers amours. Ainsi, aujourd’hui, on va installer et utiliser la dernière version de Zend Server.

Alors pourquoi Zend server. Tout simplement parce que j’aime coder avec Zend Studio et que les deux forment une plate-forme de développement très efficace. De plus, avec le Z-ray, nous avons une veritable analyse de notre code. Plusieurs Framework et CMS sont en plus pleinement intégrés dans Z-ray :

  • Magento
  • Drupal
  • ZF
  • WordPress
  • Symfony

Et franchement c’est un gros plus. Certains me diront « oui mais pour symfony on a la même chose ». Oui certes, mais que pour symphony, là, on l’a pour plusieurs types de framework.

Pré-requis :

Une debian 7 64 bits from scratch

Pour commencer, nous allons installer mysql car il n’est pas installé automatiquement. On en profitera pour rajouter quelques paquets.

apt-get install htop screen rsync wget less sudo psmisc ntp ntpdate bind9 bzip2 vim w3m zip iftop git joe iotop tmux fail2ban rkhunter mysql-server

et un peu de couleur pour vim

echo "syntax on
set hlsearch
set number" >> /etc/vim/vimrc

Editez le fichier /etc/apt/source.list et ajoutez

deb http://repos.zend.com/zend-server/8.5/deb_ssl1.0 server non-free

Puis récupérez la clé

wget http://repos.zend.com/zend.key -O- | apt-key add -

on met à jour notre liste

apt-get update

on installe notre zend server avec la version du php que l’on désire.

apt-get install zend-server-php-5.5

Configuration de Zend

Pour finir l’installation, il faut vous rendre sur l’interface web d’administration de votre serveur

http://VOTRE_IP:10081/ZendServer

Sélection_001_17_12:23:40Il suffit d’accepter en cochant la case puis next

Sélection_001_17_12:24:03On sélectionne le type de serveur que l’on veut, personnellement c’est pour du développement ce qui me permet d’avoir Z-ray d’activé.

Sélection_001_17_12:25:31On définit les mots de passe administrateur et développeur pour le zend server.

Sélection_001_17_12:25:42

Le zend server déploie ses librairies :

Sélection_001_17_12:26:23Il reste plus qu’a cliquer sur launch pour finir l’installation

Sélection_001_17_12:26:39Zend server travaille quelques intants

et vous arrivez sur votre administration :

Sélection_001_17_12:27:19

On va maintenant déployer phpmyadmin depuis l’interface de zend. Pour cela, c’est très simple, sur la page d’accueil, cliquez sur le logo phpmyadmin

Sélection_001_17_13:31:13

Sélection_001_17_13:31:50Zend server télécharge son paquet d’installation de phpmyadminSélection_001_17_13:32:21 Il faut rentrer le nom du répertoire pour la configuration d’apache

Sélection_001_17_13:42:55Zend Server valide que les pré-requis sont installés.

Sélection_001_17_13:50:40Il vous demande de rentrer les paramètres de la base de données que nous avons installé précédemment.
Normalement vous n’avez qu’a mettre le mot de passe.

Sélection_001_17_13:50:59Le dernier écran qui récapitule les informations et on clique sur déployer

Sélection_001_17_13:51:10Zend installe phpmyadmin.

Comme vous pouvez le constater, il est très simple de déployer une application sur zend server.

 

Conclusion

On a vu ensemble l’installation via le dépot de zend de zend server 8.5 sous debian 7. Mais pourquoi ne pas l’avoir fait sous debian 8 ?

En fait sous debian 8, on a un souci avec le module php5 de zend et apache 2.4. Ce n’est pour l instant pas compatible.

Read More...

Script de backup serveur Web Mysql APP

10 octobre 2014 | Posted in bash, Programmation | By

Aujourd’hui pas de tutorial mais une ébauche de script de sauvegarde pour serveur débian 7.

Attention se script est en cours d’amélioration mais les bases sont la, vous pouvez donc déjà l adapter à vos besoins.

Que fait ce script?

  • Backup vos sites internets, chaque site a sa propre archive
  • Backup vos bases de données Mysql, chaque base à sa propre archive
  • Backup votre répertoire de configuration /etc
  • Peut backuper une liste de répertoire
  • Roulement sur 5 jours

 

Note du 11/03/2015 : rajout de -c -Q –extended-insert dans le mysqldump afin de réduire le dump de la base mais surtout d augmenter la vitesse d import.


#!/bin/bash -

########################################################################
# Auteur:	BERTHELOT Ivan
# GitHub:	https://github.com/yuharla
# Date :	10/10/2014
# Descriptif :	Script backup avec X jours de rétentions pour MySql, Web et Application pour Débian

#Pre Requis : montage vers un nas 

# Commande :
########################################################################

####     ####
# Constante #
####     ####

#Nom du script utiliser pour log et tmp
SCRIPTNAME="backup_server.sh"
# Verification que le script est lance par root (1=oui 2=non)
ENABLE_VERIF_ROOT=0

# Vérification que notre script n est pas deja (1=oui 2=nom)
ENABLE_SCRIPT_RUN=0

HOSTMYSQL="localhost"
MDPMYSQL="motdepasse"
USERMYSQL="root"

APACHE_FOLDER='/data/www'

FOLDER_APP="/home/minecraft /home/teamspeak"

# Envoi d un mail a la fin (1=oui 2=nom)
ENABLE_MAIL=0
EMAIL="tonemail@atoi.com"

DATE=`date +"%Y-%m-%d"`

MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"
TAR="$(which tar)"
DBS="$(mysql -u $USERMYSQL -h $HOSTMYSQL -p$MDPMYSQL -Bse 'SHOW DATABASES')"
SITES="$(ls -I '*.html' -I 'log' -I '*.php' $APACHE_FOLDER)"
YEAR=$(date '+%Y')
MONTH=$(date '+%m')
DAY=$(date '+%d')

TEMP_FOLDER="/tmp/$SCRIPTNAME.$DATE"
BACKUP_FOLDER="/home/backup"
LOG_FOLDER="/var/log/"

BACKUP_FILE="$BACKUP_FOLDER$SCRIPTNAME-$DATE.tgz"
LOG_FILE="$LOG_FOLDER$SCRIPTNAME-$DATE.log"

DIRSAVESITES="$BACKUP_FOLDER/web"
DIRSAVESQL="$BACKUP_FOLDER/bdd"
DIRSAVEAPP="$BACKUP_FOLDER/app"

DEST_BKP="/mnt/googledrive"
DESTWEB="$DEST_BKP/WEB/$YEAR/$MONTH/$DAY"
DESTBDD="$DEST_BKP/BDD/$YEAR/$MONTH/$DAY"
DESTAPP="$DEST_BKP/APP/$YEAR/$MONTH/$DAY"



MAXNBRBKP="5"




# On check les repertoires
 if [ ! -d $BACKUP_FOLDER ]; then
   mkdir -p $BACKUP_FOLDER
 else
  :
 fi
 if [ ! -d $DIRSAVESITES ]; then
   mkdir -p $DIRSAVESITES
 else
  :
 fi
 if [ ! -d $DIRSAVESQL ]; then
   mkdir -p $DIRSAVESQL
 else
  :
 fi
 if [ ! -d $DIRSAVEAPP ]; then
   mkdir -p $DIRSAVEAPP
 else
  :
 fi
if [ ! -d $DESTWEB ]; then
   mkdir -p $DESTWEB
 else
  :
 fi
if [ ! -d $DESTBDD ]; then
   mkdir -p $DESTBDD
 else
  :
 fi
if [ ! -d $DESTAPP ]; then
   mkdir -p $DESTAPP
 else
  :
 fi


####     ####
# Fonctions #
####     ####

displaymessage() {
  echo "$*"
}

displaytitle() {
  displaymessage "------------------------------------------------------------------------------"
  displaymessage "$*"
  displaymessage "------------------------------------------------------------------------------"

}

displayerror() {
  echo -e "\r\e[0;31m   [ERROR]\e[0m $*"

}

# First parameter: ERROR CODE
# Second parameter: MESSAGE
displayerrorandexit() {
  local exitcode=$1
  shift
  displayerror "$*"
  exit $exitcode
}

# First parameter: MESSAGE
# Others parameters: COMMAND (! not |)
displayandexec() {
  local message=$1
  echo -n "[En cours] $message"
  shift
  $* >> $LOG_FILE 2>&1
  local ret=$?
  if [ $ret -ne 0 ]; then
    echo -e "\r\e[0;31m   [ERROR]\e[0m $message"
    # echo -e "\r   [ERROR] $message"
  else
    echo -e "\r\e[0;32m      [OK]\e[0m $message"
    # echo -e "\r      [OK] $message"
  fi
  return $ret
}


####       ####
# Preparation #
####       ####

if [ $ENABLE_VERIF_ROOT = 1 ];then
	if [ $EUID -ne 0 ]; then
	  	displayerror "Le script doit être lancé en root"
	  	exit 1
	fi
fi

if [ $ENABLE_SCRIPT_RUN = 1 ];then
	nb_occurence=$(ps -C $SCRIPTNAME | wc -l)
	if [ $nb_occurence = 4 ];then
		displayerror "Le script est deja lance"
                exit 1
        fi
fi


####       ####
# Code Source #
####       ####

## Backup des bases de données
for db in $DBS
do
    if [ "$db" != "information_schema" ]; then
      FILE=$DIRSAVESQL/bdd-$db-$DATE.gz
      mysqldump -c -Q --extended-insert -u $USERMYSQL -h $HOSTMYSQL -p$MDPMYSQL $db | $GZIP -9 > $FILE
      mv $FILE $DESTBDD/bdd-$db-$DATE.gz
    fi
done

## Backup des sites internets

for site in $SITES
do
      FILE=$DIRSAVESITES/web-$site-$DATE.gz
      tar cvfz $FILE $APACHE_FOLDER/$site
      mv $FILE $DESTWEB/web-$site-$DATE.gz
done

##  Backup des application

     FILE=$DIRSAVEAPP/bdd-$db-$DATE.gz
     tar cvfz $FILE /etc/ $FOLDER_APP
     mv $FILE $DESTAPP/app-$DATE.gz

## Nettoyages des backups trop vieilles

OLDYEAR=$(date '+%Y' --date="$MAXNBRBKP days ago")
OLDMONTH=$(date '+%m' --date="$MAXNBRBKP days ago")
OLDDAY=$(date '+%d' --date="$MAXNBRBKP days ago")

rm -Rf $DEST_BKP/WEB/$OLDYEAR/$OLDMONTH/$OLDDAY
rm -Rf $DEST_BKP/BDD/$OLDYEAR/$OLDMONTH/$OLDDAY
rm -Rf $DEST_BKP/APP/$OLDYEAR/$OLDMONTH/$OLDDAY
rm -Rf $BACKUP_FOLDER/*

displaytitle "Fin"

####          ####
# Gestion retour #
####          ####

if [ $ENABLE_MAIL = 1 ];then
	if [ -z "$LOG" ];then
		echo "Backup de votre serveur ok" | mail -s "$MACHINE - Backup" $EMAIL
        else
        	echo $LOG | mail -s "[ERRREUR] $MACHINE - Backup" $EMAIL
	fi
fi

Read More...

Installer une clé ssh sur ses serveurs

5 février 2014 | Posted in bash, planet-libre, Système d exploitation | By

Lorsque l’on possède un seul serveur, on peut facilement retenir le mot de passe root, ou pas si on s’appelle Dori la pote de Némo… Mais lorsque comme moi vous devez jongler entre le travail et la maison avec environ 200 machines, là retenir 200 mots de passe différents ça devient plus compliqué.
Alors pour se simplifier la tâche, nous allons mettre en place une clé ssh, reconfigurer le serveur openssh et nous créer des alias sur notre machine histoire de nous faciliter la connexion au machine.

Création de la clé ssh

La clé ssh marche avec la combinaison de deux fichiers. Une partie publique que l’on déploie sur les serveurs et la partie privée que l’on conserve précieusement sur votre $HOME

Nous allons donc générer ces deux fichiers.
Pour cela il faut commencer par installer notre client SSH :

apt-get update && apt-get install openssh-client

Ps : Notez l’utilisation de l’opérateur && à la place de &
le && ne lance la suite que lorsque la première partie est entièrement finie.

Nous générons ensuite la clé

ssh-keygen -t rsa -b 2048

ssh-keygen prend ici deux paramètres :
-t : Permet de spécifier le type de clé. je vous invite à lire le man pour voir les 4 possibilités suivant le protocole (à noter que le dsa est limité à un encryptage de 1024bits, c’est pour cela que je préfère le rsa).
-b : 2048 représente le niveau d’encryptage de la clé, ici j ai mis 2048 bits.

Il vous faut répondre maintenant à une série de questions, dont celle ci, qui permet surtout de nommer votre clé !!
Enter file in which to save the key (/home/ivanb/.ssh/id_rsa) :
Entrez le chemin complet en modifiant le id_rsa par cle_perso_serv, enfin ce que vous voulez.

Enter passphrase (empty for no passphrase):
Si vous laissez vide pas besoin de mot de passe, par contre si vous saisissez un mot de passe, il faudra le saisir pour que la clé fonctionne. Bon certain rabat-joie vont me dire « je ne vois pas l’intérêt de faire une clé pour mettre un mot de passe dessus! ».
On parle d’une clé root ici, on est jamais trop parano. De plus, la saisie du mot de passe en passant par votre bureau ne se fera qu’une fois puisque l’agent ssh va stocker. C’est un peu comme si vous déverrouillez votre coffre fort. Pour toutes les autres connexions sur les serveurs utilisant cette clé, il n’y aura plus besoin de la ressaisir.

Maintenant vous avez deux fichiers : cle_perso_serv et cle_perso_serv.pub

Installation de la clé

Il ne reste plus qu’à installer votre clé publique sur votre serveur.

En premier lieu il faut que sur le serveur vous ayez déjà défini un compte avec le login et le mot de passe.

ssh-copy-id -i ~/.ssh/cle_perso_serv.pub user@monserveur.com

user : le nom d’utilisateur pour qui la clé sera disponible
monserveur.com : soit l’ip soit le nom de domaine rattaché au serveur.

Saisissez le mot de passe. Le tour est joué.

Testez votre connexion :

ssh user@monserveur.com

Pour aller plus loin

Sécurisation

L’intérêt de la clé ssh est bien sur de nous faciliter la vie mais aussi de sécuriser la connexion à des comptes comme root.
Voici quelques petits réglages supplémentaires :

éditez le fichier /etc/ssh/sshd_config

Modifiez la ligne

PermitRootLogin Yes

en

PermitRootLogin without-password

Modifiez le port d’ecoute ssh

Port 22

en

Port 222

On restart le serveur ssh

/etc/init.d/ssh restart

Facilité d’utilisation

Si vous avez beaucoup de serveurs a gérer il est intéressant de se créer des alias.

Au lieu de taper :

ssh user@monserveur.com

vous aurez à faire

sshserveur

Pour cela éditez votre fichier .bashrc

vim ~/.bashrc

rajoutez la ligne :

alias sshserveur='ssh user@monserveur.com'

si vous avez modifié le port cela sera

alias sshserveur='ssh -p 222 user@monserveur.com'

Debug

Il m’est arrivé récemment une drôle d erreur en essayant de me connecter en ssh à un serveur n’ayant pas de clé.

Received disconnect from XXX.XXX.XXX.XXX: 2: Too many authentication failures for user

Cela vient en fait de notre ssh-agent qui tente de lancer notre clé pour s’authentifier. Au bout d’un moment le serveur en face de nous nous bloque sans nous laisser la possibilité de taper notre mot de passe.

Pour cela il faut faire une connexion ssh de ce type :

ssh -o PubkeyAuthentication=no user@monserveur.com

De plus si comme moi vous avez beaucoup de clés, vous pouvez modifier vos alias en spécifiant la clé à utiliser pour le serveur. Cela donnera

alias sshserveur='ssh -p 222 -i ~/.ssh/cle_perso_serv user@monserveur.com'

Read More...

Géolocalisation de vos visiteurs grâce à leur ip et a php

15 novembre 2011 | Posted in php, planet-libre, Programmation | By

Introduction

Lorsque l on possède un site, il est bien sur ouvert au monde entier, il peut être interessant de savoir de quels pays viennent les internautes pour par exemple :

  • leur fournir un contenu différent
  • afficher le site dans la bonne langue…

Il existe de multiples solutions, gratuites ou payantes.

On peut acheter une base de donnée ou passer par des webservices.

Les webservices

Le probleme majeur dans ce type de solution reste le temps de latence entre la demande et le resultat ce qui peut donc ralentir grandement votre site. De plus vous êtes tributaire d’un prestataire qui peut très bien avoir une coupure de service ou meme carrément tout arréter du jour au lendemain.

Les bases de donnée.

Solution bien souvent payante mais qui a l avantage d être plus rapide. elle peut néanmoins consommer pas mal de ressources suivant sur votre site.

La solution !!!

A force de recherche j ai fini par trouver une vrai solution efficace qui merite d être connue!!
Il existe une bibliothèque native dans php qui fait ce travail : geoip !!!

Je vais donc vous montrer comment la mettre sous php5 sur une debian et l accoupler avec une banque de donnée gratuite de maxmind que nous mettrons a jour grâce à un cron.

Installation

Allez c est parti pour un tour, on va commencer par récupérer la base de donnée d ip par pays disponible via maxmind

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz
mkdir  /usr/share/GeoIP
mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat

Maintenant on installe la librerie qu il nous faut

apt-get update
apt-get install php5-geoip

Il nous reste plus qu a faire une petite configuration dans le fichier .ini de geoip

echo "geoip.custom_directory = /usr/share/GeoIP" >> /etc/php5/conf.d/geoip.ini

On reload apache

/etc/init.d/apache2 restart

On verifie avec un phpinfo qui devrait vous donnez cela :
phpinfo avec geoip

Utilisation

L utilisation de la bibliotheque est très très simple je vous renvoie à la doc sur le site php pour plus d info :

http://www.php.net/manual/fr/book.geoip.php

Voici un exemple très simple pour tester :

echo "<pre>";
print_r(geoip_record_by_name($_SERVER['REMOTE_ADDR']));
echo "</pre>";

Qui donne le résultat suivant :
Array
(
[continent_code] => EU
[country_code] => FR
[country_code3] => FRA
[country_name] => France
[region] =>
[city] =>
[postal_code] =>
[latitude] => 46
[longitude] => 2
[dma_code] => 0
[area_code] => 0
)

Et le tour est joué. Cette base est gratuite et ne possède pas beaucoup de donnée mais vous pouvez très bien avoir plus d information avec une base payante.

Mise à jour

Maintenant que tout cela marche bien il est temps de mettre tout cela à jour de manière automatique grâce a un cron

Perso moi je veux faire la mise a jour une fois par semaine

touch /etc/cron.weekly/geoip_update.sh
chmod a+x  /etc/cron.weekly/geoip_update.sh

Editez le fichier et coller les lignes suivantes

cd ~
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz
mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat

Voila le tour est joué

 

Read More...

Autoriser le copier-coller dans un applet java sous debian et ubuntu

2 novembre 2011 | Posted in java, planet-libre, Système d exploitation | By

Lors du passage sous ubuntu 11.10 j ai eu vraiment un clash avec la distribution. J ai donc décidé de revenir à mes premiers amours, une bonne vieille debian.

Travaillant avec des applet pour l administration sous webmin (bien pratique quoi que l on en dise) j ai eu de nouveau le problème du copier coller dans un applet.

Voici donc la méthode pour pouvoir activer facilement cette fonction bien pratique.

Préambule.

Tout d abord il faut savoir que l on a plusieurs version de la MV de java :

  • openjdk
  • sun

Moi perso j utilise ma version de sun pour une bonne compatibilité avec aptana.

Cherchons le fichier java.policy

locate java.policy

La reponse devrait donné ceci sous une debian

/etc/java-6-openjdk/security/java.policy
/etc/java-6-sun/security/java.policy

editez le fichier pour java-6-sun si vous utilisez sun et l autre si vous etes sous openjdk

Rajoutez ensuite cette ligne entre les balises

Grant {

...

}
permission java.awt.AWTPermission "accessClipboard";

Voila le tour est joué

Read More...

Supprimer les .svn dans les répertoires

29 août 2011 | Posted in bash, Programmation | By

Lorsque l on utilise un svn, il peut etre de temps en temps util de supprimer toutes les extensions .svn bien cachés dans tous les répertoires et sous-répertoire. Il deviens trés fastidieux de les supprimer à la main.

Voici donc une ligne de commande qui va faire cela pour vous dans le répertoire où vous vous situez lorsque vous lancez cette commande

find . -name .svn -print0 | xargs -0 rm -rf

Enjoy it

Read More...

Petite astuce pour créer plusieurs répertoires en une ligne

20 janvier 2011 | Posted in bash, Programmation | By

astuce bash

Il arrive que des fois nous devions créer une arborescence de dossier afin de tout ranger.

Voici l arborescence que je désire créer

essai/
essai/dossier/1/
essai/dossier/2/
essai/mail/recu/
essai/mail/envoyer/

Voici une manière simple de faire tout cela en une ligne

mkdir -p {essai/dossier/1,essai/dossier/2,essai/mail/recu,essai/mail/envoyer}

Et pour effacer tout cela

rm -Rf essai

Et voila le tour est joué

Read More...

Comment intégrer une font non standard sur un site web

2 septembre 2010 | Posted in Programmation | By

Le web ne nous propose que peu de polices (ou font) standard et reconnues de tous.
Je citerais par exemple les plus utilisées comme le verdana ou l’arial. Mis à part ça, si la police n’est pas installée sur la machine du visiteur, on court à la catastrophe !!!

Alors pourquoi prendre un tel risque et comment le résoudre ?

Tout d’abord, l’intérêt pour sortir du lot avec son site est de pouvoir justement améliorer l’impact visuel d’un texte commercial ou non.
Alors la solution de facilité pour le plus grand nombre était tout simplement de coller une image du titre avec la police souhaitée. Mais cette méthode est extrêmement lourde et de plus, elle n’est pas du tout adaptée à des articles dont le texte est dynamique !!!
De plus, si l’internaute change la taille de la police, cela risque fortement de créer un décalage et donc d’avoir un rendu très très moche!

Avec l’arrivée de plus en plus croissante des smart-phones allant sur internet, cette méthode est de plus bien trop lourde pour afficher des pages sur ce type de téléphones.

Après plusieurs heures de recherches et de tests sur différents navigateurs (firefox, internet explorer, opera, safari …), voici une solution qui permet d’injecter directement une police chez le client alors qu’elle n’est pas installée sur son pc.
Nous allons pour cela utiliser du CSS v3 donc à mettre dans votre feuille de style :

@font-face {
font-family: 'MagistralCBold';
src: url('../images/font/magistralc-bold-webfont.eot');
src: local('?'), url('../images/font/magistralc-bold-webfont.woff') format('woff'), url('../images/font/magistralc-bold-webfont.ttf') format('truetype'), url('../images/font/magistralc-bold-webfont.svg#webfontimZJCihR') format('svg');
font-weight: normal;
font-style: normal;
}


Le tag font-family permet de définir le nom de la police; vous l’appellerez ainsi sur le reste de votre feuille de style.
Le reste consiste en des liens vers différents formats de la police afin qu’elle soit lue par tout type de système d’exploitation.

Voici quelques liens pour vous aider à la conversion de votre police au format ttf aux autres formats:

Maintenant vous allez pouvoir améliorer l’aspect graphique de votre site.

Read More...