L’erreur « suexec policy violation » avec symfony (chez OVH…)

Bonjour, je laisse ici un petit rappel pour avoir lutté quelques heures avec une erreur 500, au début incompréhensible… Il s’agit de l’erreur :

suexec policy violation: see suexec log for more details

Cette erreur engendre une erreur 500. C’est un peu dommage… Il s’agit simplement d’un problème de droits sur les fichiers mais aussi sur les dossiers.

Les fichiers doivent posséder les droits 644 (-rw-r–r–) et les dossiers les droits 705 (drwx—r-x). Pour les fichiers, ces droits sont classiques, pour les dossiers on peut surement faire mieux mais là, ça marche, c’est testé. Pour faire ça vite :

find * -type f -exec chmod 644 {} \;
find * -type d -exec chmod 705 {} \;

Ensuite, on passe un coup de project:permissions et le tour est joué. On notera que la seule commande :

php symfony project:permissions

ne suffit pas à résoudre les problèmes de droits.

On fixera les droits du .htaccess à 604. Voilà :-)

  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Twitter
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • MySpace
  • Netvibes
  • PDF
  • Ping.fm
  • RSS
  • Technorati
  • viadeo FR
  • Wikio
  • Yahoo! Buzz
Publié dans Serveur, symfony | Mots-clefs : , | Laisser un commentaire

Dédibox v3 : Nginx + PHP-FPM + Apache2 + APC + Memcached + MySQL

Bonjour :-)

J’ai récemment pris une Dédibox v3 et pour le moment j’en suis très satisfait. On m’a pas mal sollicité ces derniers temps pour que j’explique comment j’ai configuré ce serveur ainsi que les services que j’ai pu mettre en place. C’est l’objet de cet article.

Premièrement, j’utilise Debian depuis toujours et c’est logiquement ce qui tourne sur la Dédibox (en version 64 bits).

Le serveur HTTP frontal n’est pas Apache2 mais Nginx (wiki) que j’ai appréhendé seulement depuis l’obtention de ce serveur. Et je dois avouer que j’en suis très satisfait, terriblement surpris d’ailleurs. Apache2 est bien en place mais sert de proxy à Nginx.

Nginx est couplé à php-fpm. La paire formée est excellente et permet l’utilisation de Memcached ou APC sans soucis. Notons que l’excellent repository Dotdeb fournit un package .deb de php-fpm. Ce repository est certainement un must-have puisque Debian n’est pas forcément très en avance sur les versions de PHP. Pour ma part, j’ai installé, via ce repository, PHP 5.3.2 ainsi que la dernière version d’APC (3.1.2 via pecl). Comme je l’ai dit plus haut j’ai installé Memcached avec l’extension PHP qui va bien. Passons à la configuration.

Nginx

user www-data;
worker_processes 1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;

client_max_body_size 8M;

sendfile            on;
keepalive_timeout   15;
tcp_nodelay         on;

# Enable Gzip compression
gzip on;
gzip_disable "MSIE [1-6].(?!.*SV1)";
gzip_vary on;
gzip_comp_level 3;
gzip_proxied any;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_buffers 16 8k;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

Le paramètre worker_processes dépend de votre processeur (multi-coeurs ou non). Dans le cas d’une Dédibox, on ne dispose que d’un processeur mono-coeur donc on fixe ce paramètre à 1. Ensuite j’active la compression gzip, ce qui permettra de gagner un peu en performances (moins de données à envoyer d’un coup = plus de données envoyées en même temps).

Nginx va servir tous les fichiers statiques, les « assets » mais également les pages en cache. Il s’interface très bien avec Memcached. Il est aussi capable de servir n’importe quel fichier sur disque.

Voici les deux autres fichiers de configuration de Nginx : proxy.conf pour configurer Apache2 en proxy et fastcgi_params pour php-fpm.

# /etc/nginx/proxy.conf
proxy_redirect                  off;
proxy_set_header                Host                    $host;
proxy_set_header                X-Real-IP               $remote_addr;
proxy_set_header                X-Forwarded-For         $proxy_add_x_forwarded_for;
client_max_body_size            10m;
client_body_buffer_size         128k;
proxy_connect_timeout           90;
proxy_send_timeout              90;
proxy_read_timeout              90;
proxy_buffer_size               4k;
proxy_buffers                   4 32k;
proxy_busy_buffers_size         64k;
proxy_temp_file_write_size      64k;
# /etc/nginx/factcgi_params
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

# Custom settings
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;

Pour utiliser Apache2 en proxy ou php-fpm, il suffit d’insérer quelques lignes dans vos configurations de vhosts. C’est suffisamment détaillé ailleurs, je n’y reviendrai donc pas.

APC

Voilà ma configuration APC, fonctionne bien pour Symfony. Pour certaines applis dont le code laisse à désirer, je suggère de passer le paramètre include_once_override à 0. Cette config provient en grande partie de chez Romain Cambien.

[apc]
apc.enabled=1

; 1 segments of 256Mo
apc.shm_segments=1
apc.shm_size=256

; No optimization
apc.optimization=0

; Never expire
apc.ttl=0
apc.user_ttl=0

; workaround for CLI
apc.enable_cli=1

; Symfony make lot of path lookups, try to optimize
apc.include_once_override=1
apc.canonicalize=1

; Wait 2 seconds to rebuild cache
apc.file_update_protection=2

PHP

La configuration de PHP est celle par défaut aux best practices près (short_tags off, magic quote gpc off, …). J’ai surtout calqué sur les « requirements » de Diem. A noter que l’on gère 3 fichiers php.ini : pour Apache2, pour php-fpm et pour cli.

Memcached

Aucun besoin de modifier la configuration par défaut. Par contre, on peut modifier la taille (64Mo par défaut) si besoin.

Apache2

Pour utiliser Apache2 en proxy, on doit nécessairement lui attribuer un port différent du port par défaut (80). Pour cela, on modifie le fichier /etc/apache2/ports.conf :

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

Listen 9999
NameVirtualHost *:9999
# SSL name based virtual hosts are not yet supported, therefore no
# NameVirtualHost statement here
Listen 443

J’ai choisi le prefork MPM d’Apache2, la directive KeepAlive est désactivé car Apache2 ne sert que du PHP. Après quelques tests, voici la configuration retenue :

# Timeout: The number of seconds before receives and sends time out.
Timeout 10

# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
KeepAlive Off

# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
MaxKeepAliveRequests 100

# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
KeepAliveTimeout 2

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
StartServers          8
MinSpareServers       5
MaxSpareServers      15
MaxClients           80
MaxRequestsPerChild   0

MySQL

En SGBD, j’ai installé MySQL et PostgreSQL qui ne sert pas pour le moment. La configuration MySQL est d’origine à l’exception d’un Ramdisk pour le répertoire temporaire. L’explication pour la création d’un Ramdisk est expliqué ici : http://www.willdurand.fr/optimiser-son-application-web-en-jouant-sur-php-mysql-et-apache2/. MySQL est également protégé par une couche Memcached, ce qui permet de faire tenir une charge correcte sans envoyer MySQL dans les choux.

Postfix

Configuré en « Site Internet », rien n’a été touché et les mails transitent bien. Je n’ai pas besoin de faire de gestion de mail autre.

Getmail

Dernière petite chose qui n’avait pas été relevé dans l’article précédent : http://www.willdurand.fr/sauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql/, la sauvegarde de mes emails. Tout est dit ici. J’envoie toutes mes sauvegardes sur un autre serveur privé et inaccessible excepté le temps du transfert.

Voilà.

  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Twitter
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • MySpace
  • Netvibes
  • PDF
  • Ping.fm
  • RSS
  • Technorati
  • viadeo FR
  • Wikio
  • Yahoo! Buzz
Publié dans Serveur, Sysadmin | Mots-clefs : , , , , , , , , | Laisser un commentaire

Sauvegarde incrémentale avec rsync : fichiers et base de données MySQL

Bonjour, suite à mon passage en dédié (Dédibox v3) et à sa configuration aujourd’hui terminée, j’ai trouvé nécessaire de m’occuper de la sauvegarde des données. Pour cela, je me suis aidé de plusieurs sources :

Sauvegarde des bases MySQL

Je sauvegarde toutes les bases de données sur une durée d’une semaine. Voici le script, il est possible de le coupler à un envoi de la sauvegarde via FTP. Je conserve ainsi toutes mes sauvegardes sur un serveur distant et complètement déconnecté de ce dont je vais vous parler ensuite.

#!/bin/bash

#---------------------------------------------------------------#
# Paramétrage de la connection MySQL                            #
#---------------------------------------------------------------#

#Nom de l'utilisateur qui lance le backup
user=<user>
#Machine sur laquelle on se connecte
host=<host>
#Mot de passe de l'utilisateur de backup
pass=<password>

# Outil de dump
MYSQLDUMP=mysqldump
#Outil de check
MYSQLCHECK=mysqlcheck
# Options passées à MYSQLDUMP
OPTIONS="--add-drop-database  --add-drop-table --complete-insert --routines --triggers --max_allowed_packet=250M --force"

#---------------------------------------------------------------#
# Paramétrage de la sauvegarde                                  #
#---------------------------------------------------------------#

# Répertoire temporaire pour stocker les backups
TEMPORAIRE="/tmp/bkp_mysql"

# Nom du serveur
MACHINE="$(hostname)"

# Date courante
DATE="$(date +"%d-%m-%Y")"
# Date de conservation maximum
DATE2=`date --date '1 week ago' "+%d-%m-%Y"`

# Nom des fichiers de backup
# Répertoire de destination du backup
DESTINATION="/home/backuper/mysql"
FICHIER_BACKUP=$MACHINE"_BACKUP_MYSQL_"$DATE".tar.gz"
FICHIER_EFFACER=$MACHINE"_BACKUP_MYSQL_"$DATE2".tar.gz"

#Informations FTP
LOGIN_FTP=<user_ftp>
PASS_FTP=<pass_ftp>
HOST_FTP=<host_ftp>

#---------------------------------------------------------------#
# Process de sauvegarde                                         #
#---------------------------------------------------------------#

# Création du répertoire temporaire
if [ -d $TEMPORAIRE ];
then
  echo "Le repertoire temporaire existe.";
else
  mkdir $TEMPORAIRE;
fi

# On construit la liste des bases de données
BASES="$(mysql -u $user -h $host -p$pass -Bse 'show databases')"

# On lance le dump des bases
for db in $BASES
do
  #On lance un check et une analyse pour chaque base de données
  $MYSQLCHECK -u $user -h $host -p$pass -c -a $db
  # On lance un mysqldump pour chaque base de données
  $MYSQLDUMP -u $user -h $host -p$pass $OPTIONS $db -R > $TEMPORAIRE"/"$MACHINE"-"$db"-"$DATE".sql";
done

# Création de l'archive contenant tout les dump
#Cette archive est stockée dans le dossier défini pour la sauvegarde
if [ -d $DESTINATION ];
then
    cd $TEMPORAIRE
    tar -cvzf $DESTINATION"/"$FICHIER_BACKUP *
fi

# On transfere l'archive par FTP
cd $DESTINATION
ftp -v -n $HOST_FTP < <SCRIPT
user $LOGIN_FTP $PASS_FTP
bin
put $FICHIER_BACKUP
bye
SCRIPT

# On supprime le fichier de plus de x jours
if [ -f $DESTINATION"/"$FICHIER_EFFACER ]; then
    rm $DESTINATION"/"$FICHIER_EFFACER
fi

# On suprime le répertoire temporaire
if [ -d fichier ]; then
  rm -Rf $TEMPORAIRE
fi

Sauvegarde incrémentale des fichiers avec rsync

Je sauvegarde mes fichiers à la semaine de la façon suivante :

  • sauvegarde dans un répertoire nommé : <Année>-<Numéro de semaine>
  • dans ce répertoire j’ai un dossier main qui contient l’intégralité des fichiers. Cette sauvegarde est faite le lundi.
  • j’ai 6 répertoires nommés : <jour>_<date au format jj-mm-aaaa> contenant les sauvegardes incrémentales de la semaine.

J’ai modifié le script pour ajouter une conservation des sauvegardes de 4 semaines.

#!/bin/bash

# - By default, the full backup is made monday, you can specify another day
#   by entering a number from 1 to 7 (1 is monday, 2 is tuesday ...)
#FULL_DAY=1

# - BACKUP_LIST is a text file where you specify files/directories you
#   want to backup (one per line), the paths on this file must be relative
#   to the path set in BACKUP_ROOT
BACKUP_ROOT=/
BACKUP_LIST="/home/backuper/scripts/backup_list_files"

# Excludes file
# - Contains one wildcard pattern per line of files to exclude
# - This is a rsync exclude file. See the rsync man page.  
EXCLUDES_LIST="/home/backuper/scripts/backup_exclude_files"

# Hostname or IP adress of the remote backup server
BACKUP_SRV=

# Port SSH
SSH_PORT=

# Root directory that stores backups on the remote server
ARCHIVE_ROOT=~/files

# Remote user. Used by ssh. This is the user who connects to the remote backup server
# Must have write access on $ARCHIVE_ROOT
REMOTE_USER=

# Mail address for status updates
#  - This is used to email you a status report
#  - Comment it if you don't want to mail the report
MAILADDR=

# Log file
LOGFILE="/home/backuper/backup-files.log"

# HOSTNAME
#  This is used for creating a directory specific to this host on the remote host
HOSTNAME="$(hostname)"

#########################################
# From here on out, you probably don't  #
#   want to change anything unless you  #
#   know what you're doing.             #
#########################################

if [ -f $LOGFILE ]
then
  rm $LOGFILE
  touch $LOGFILE
fi

# Calculate WEEK_NUM
# - This is the week number of year, it depends on the variable FULL_DAY
#  the value of FULL_DAY is considered as the first day of week
# - By default the command `date +%W` considers monday as first day of week, so if the day of
#  the full backup is different from monday then we must make additional operations
if [ $FULL_DAY ] && [ $FULL_DAY -le 7 ] && [ `date +%u` -ge $FULL_DAY ] ; then
  WEEK_NUM=`expr $(date +%W) + 1`
else
  WEEK_NUM=`date +%W`
fi

# ARCHIVE_DIR
#  This is the directory (full path) of the current week backups (on the remote host)
#  The name of directory indicates the number of the week in the year (e.g 2007-32)
ARCHIVE_DIR="$ARCHIVE_ROOT/$HOSTNAME/`date +%Y`-$WEEK_NUM"

# Directory which holds our current datastore
CURRENT=main

# Directory which we save incremental changes to (e.g monday_06-08-2007)
INCREMENTDIR=`date +%A_%d-%m-%Y`

# Options to pass to rsync
# -r for recursivity must be explicite in spite of -a because --files-from (see man rsync)
OPTIONS="--force --ignore-errors --delete --delete-excluded \
--exclude-from=$EXCLUDES_LIST --backup --backup-dir=$ARCHIVE_DIR/$INCREMENTDIR \
-arhv --files-from=$BACKUP_LIST"


# Our actual rsyncing function
do_rsync()
{
   if [ $SSH_PORT ] ; then
    rsync -e "ssh -p $SSH_PORT" $OPTIONS $BACKUP_ROOT $REMOTE_USER@$BACKUP_SRV:$ARCHIVE_DIR/$CURRENT >> $LOGFILE 2>&1
   else
    rsync $OPTIONS $BACKUP_ROOT $REMOTE_USER@$BACKUP_SRV:$ARCHIVE_DIR/$CURRENT >> $LOGFILE 2>&1
   fi
   return
}

# Our post rsync accounting function
do_accounting()
{
  if [ $1 ] ; then
    echo "Backup accounting for day $INCREMENTDIR on $HOSTNAME:" > /tmp/rsync_script_tmpfile
    echo >> /tmp/rsync_script_tmpfile

    if [ $SSH_PORT ] ; then
      ssh -p $SSH_PORT $REMOTE_USER@$BACKUP_SRV du -s $ARCHIVE_DIR/* >> /tmp/rsync_script_tmpfile
    else
      ssh $REMOTE_USER@$BACKUP_SRV du -s $ARCHIVE_DIR/* >> /tmp/rsync_script_tmpfile
    fi

    echo >> /tmp/rsync_script_tmpfile
    cat $LOGFILE | grep "rsync: " >> /tmp/rsync_script_tmpfile

    echo "Mail $1 -s "$HOSTNAME Backup Report" < /tmp/rsync_script_tmpfile"
    mail $1 -s "$HOSTNAME Backup Report" < /tmp/rsync_script_tmpfile

    echo "rm /tmp/rsync_script_tmpfile"
    rm /tmp/rsync_script_tmpfile
  fi
}

# Clean old backups
do_clean()
{
    # Nb weeks
    NB_WEEKS_MAX=4
    LIMIT=`expr $WEEK_NUM - $NB_WEEKS_MAX`

    if [ $LIMIT -le 0 ]
    then
        NB=`expr $NB_WEEKS_MAX - $WEEK_NUM`
        NB=`expr 52 - $NB`
        LAST_YEAR=`expr $(date +%Y) - 1`
        TO_DELETE_DIR="$ARCHIVE_ROOT/$HOSTNAME/$LAST_YEAR-$NB"

        if [ -d $TO_DELETE_DIR ] ; then
          echo "rm -rf $TO_DELETE_DIR"  
    rm -rf $TO_DELETE_DIR
        fi
    else
        TO_DELETE_DIR="$ARCHIVE_ROOT/$HOSTNAME/`date +%Y`-$LIMIT"

        if [ -d $TO_DELETE_DIR ] ; then
          echo "rm -rf $TO_DELETE_DIR"  
    rm -rf $TO_DELETE_DIR
        fi
    fi
}

# Some error handling and/or run our backup and accounting
if [ $BACKUP_LIST ]; then
  if [ $EXCLUDES_LIST ]; then
    if [ -f $BACKUP_LIST ]; then
      if [ -f $EXCLUDES_LIST ] ; then
        # make sure our backup tree exists
        if [ $SSH_PORT ] ; then
    ssh -p $SSH_PORT $REMOTE_USER@$BACKUP_SRV install -d $ARCHIVE_DIR/$CURRENT
  else
    ssh $REMOTE_USER@$BACKUP_SRV install -d $ARCHIVE_DIR/$CURRENT
  fi
        echo >> $LOGFILE
  echo "=========================================================" >> $LOGFILE
        echo "`date` : Backup started." >> $LOGFILE
        do_rsync
  if [ $? -eq 0 ] ; then
    echo "OK. Backup succeeded" | tee -a $LOGFILE
          do_clean
    do_accounting $MAILADDR
    exit 0
  else
    echo "Backup failed. See $LOGFILE for debug info." | tee -a $LOGFILE
    do_accounting $MAILADDR
    exit 1
  fi
      else
        echo "$EXCLUDES_LIST: File not found or not a regular file. Backup aborted" | tee -a $LOGFILE;
  exit 1
      fi
    else
      echo "$BACKUP_LIST: File not found or not a regular file. Backup aborted" | tee -a $LOGFILE
      exit 1
    fi
  else
    echo "You must edit the script file and set the variable EXCLUDES_LIST" | tee -a $LOGFILE
    exit 1
  fi
else
  echo "You must edit the script file and set the variable BACKUP_LIST" | tee -a $LOGFILE
  exit 1
fi

exit 2

Je sauvegarde ces fichiers :

var/www
var/log
etc/apache2
etc/apt/sources.list
etc/fstab
etc/crontab
etc/hostname
etc/hosts
etc/group
etc/memcached.conf
etc/mysql
etc/nginx
etc/php5
etc/phpmyadmin
etc/postfix
etc/ssh
etc/fail2ban
home

Et j’exclue ceux-là :

home/backuper/backup-files.log
home/backuper/files
etc/mysql/debian.cnf
etc/ssh/ssh_host*
etc/phpmyadmin/htpasswd.setup
.*_history
.Xauthority
.lesshst
.ssh

Automatisation

J’ai rajouté dans mon crontab, deux lignes pour lancer les sauvegardes différées de 2h :

0 1 * * * /home/backuper/scripts/backup_mysql.sh
0 3 * * * /home/backuper/scripts/backup_files.sh

  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Twitter
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • MySpace
  • Netvibes
  • PDF
  • Ping.fm
  • RSS
  • Technorati
  • viadeo FR
  • Wikio
  • Yahoo! Buzz
Publié dans Serveur, Sysadmin | Mots-clefs : , , , | 7 commentaires

Intégrer un gestionnaire de fichiers dans dmCkEditorPlugin

Bonjour,

je laisse ici une petite astuce pour intégrer KFM (http://kfm.verens.com/), un excellent gestionnaire de fichiers en AJAX, au plugin Diem nommé dmCkEditorPlugin. Ce plugin offre un nouveau widget contenant, comme son nom l’indique, l’éditeur WYSIWYG CkEditor.

Pour installer KFM, on télécharge la dernière version que l’on place dans dmCkEditorPlugin/js/kfm.

Ensuite on ouvre dmCkEditorPlugin/config/dm/config.yml et on ajoute cette ligne :

default:
  ckeditor:
    config:
      ...
      filebrowserBrowseUrl: /dmCkEditorPlugin/js/kfm/index.php

 

KFM utilise une base de données, il faut donc la configurer. Le choix que j’ai fait est de parser le fichier databases.yml afin de récupérer les paramètres de connexion directement. Il faut donc modifier le fichier de configuration de KFM (dmCkEditorPlugin/js/kfm/configuration.php). J’ai placé ce code tout en haut en remplaçant les variables en rapport avec la base de données :

require_once(dirname(__FILE__).'/../../../../lib/vendor/diem/symfony/lib/yaml/sfYaml.php');

$config = sfYaml::load(dirname(__FILE__).'/../../../../config/databases.yml');

$dsn  = $config['all']['doctrine']['param']['dsn'];
preg_match('#(?P\w+):host=(?P\w+);dbname=(?P\w+);#', $dsn, $matches);

// what type of database to use
// values allowed: mysql, pgsql, sqlite, sqlitepdo
$kfm_db_type = $matches['type'];
// the following options should only be filled if you are not using sqlite/sqlitepdo as the database
$kfm_db_prefix   = 'kfm_';
$kfm_db_host     = $matches['host'];
$kfm_db_name     = $matches['dbname'];
$kfm_db_username = $config['all']['doctrine']['param']['username'];
$kfm_db_password = $config['all']['doctrine']['param']['password'];
$kfm_db_port     = '';

C’est une manière simple et efficace d’intégrer ce gestionnaire de fichiers. Ce n’est pas parfait mais fonctionnel :)

  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Twitter
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • MySpace
  • Netvibes
  • PDF
  • Ping.fm
  • RSS
  • Technorati
  • viadeo FR
  • Wikio
  • Yahoo! Buzz
Publié dans Diem Project, Tips | Mots-clefs : , , , | Laisser un commentaire

Place au changement !

Bonjour !

Non, vous ne vous êtes pas trompés. J’ai effectivement changé de moteur de blog, passant de mon propre moteur (wMVC) à WordPress.

Pourquoi ?

Ceux qui me connaissent savent ce que je pense de WordPress (via mister @palleas) mais j’ai franchi le pas pour ce blog personnel. Pourquoi donc ? Pour des raisons pratiques uniquement. Le nombre de plugins, le nombre de fonctionnalités, … en fait un bon produit pour faire un blog « Ikéa », je décompresse, je configure, ça marche, point.

J’ai donc repris l’ensemble des fonctionnalités de mon ancien blog (toutes écrites par mes soins), j’ai importé les articles et j’en ai profité pour changer de thème. Fini le paysage campagnard, je passe sur un thème plus « clean », plus sobre et qui privilégie le contenu au reste.

Autre raison ?

En fait, oui. Ce n’était pas nécessaire pour moi mais j’ai fait cette manip’ pour une autre raison. J’ai récemment pris une Dédibox v3, ce blog tourne dessus entre autres.

Le serveur web est Nginx (« engine X »), j’y reviendrai dans de prochains articles. J’ai voulu tester les performances de cette Dédibox et avec un WordPress + Nginx + APC bien configuré, j’ai été bluffé. Voilà le résultat, ce blog passe en prod :-)

Et sinon ?

Fin d’année, je change de statut juridique avec un associé et des financiers : Bazinga, l’agence web de développement web (Symfony, Diem) et mobile (iPhone, Android) va naître. (Enfin !). J’y reviendrai également dans un prochain article.

J’ai pas mal d’articles en préparation depuis un petit moment sur du Git, Capistrano, Symfony, Diem, Nginx, et autres. J’espère pouvoir les écrire au plus vite.

N’hésitez pas à me donner vos avis, impressions, … sur ces changements :-)

  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Twitter
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • MySpace
  • Netvibes
  • PDF
  • Ping.fm
  • RSS
  • Technorati
  • viadeo FR
  • Wikio
  • Yahoo! Buzz
Publié dans Ma vie | 4 commentaires