Skip to content

Installation d'un environnement de développement

Aurélien Labate edited this page Apr 13, 2016 · 32 revisions

La première chose à faire avant de pouvoir développer sur le site étudiant est d'installer un environnement propre et pratique. Attention, cette page décris un environnement de développement et non un environnement de production. Merci donc de ne pas l'utiliser lors du déploiement du site, car cette installation ,'est ni sécurisée, ni optimisée.

Nous documentons deux types d'installations sur linux :

On espère que vous trouverez votre bonheur peu importe votre installation (Oui, vous avez le droit d'utiliser Nginx sur Debian 😉). Si vous faites une installation sur Windows ou mac, nous vous encourageons à compléter cette documentation pour présenter la façon dont vous installer le site etu.

Linux, Debian, Apache, Php7, MySQL

Système

Afin de faciliter le développement, nous conseillons l'ajout d'un nom de domaine locale, pour rendre accessible votre version de développement du site etu via une url du type http://etuutt/. Cela permettra de travailler sur ce projet, sans monopoliser le domaine localhost.

Pour cela, modifiez le fichier /etc/hosts, et ajoutez y la ligne suivante

127.0.0.1  etuutt
127.0.0.1  phpmyadmin

Nous avons aussi ajouté une ligne pour PhpMyAdmin, si vous ne souhaitez pas l'installer, vous pouvez ne pas la mettre.

Ajoutez aussi l'utilisateur qui va coder au groupe www-data. Cela vous permettra de modifier les sources du site sans avoir de problèmes de droits.

sudo usermod -aG www-data [USERNAME] # Remplacez [USERNAME] par votre username

Apache, le seveur web

sudo apt-get install apache2
sudo systemctl enable apache2
sudo systemctl start apache2

Créez le fichier /etc/apache2/sites-available/010-etuutt.conf avec le contenu suivant

<VirtualHost *:80>
  ServerName etuutt
  ServerAlias etuutt

  DocumentRoot /var/www/etuutt/web

  <Directory /var/www/etuutt/web>
    AllowOverride None
    Order Allow,Deny
    Allow from All

    <IfModule mod_rewrite.c>
      Options -MultiViews
      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*)$ app.php [QSA,L]
    </IfModule>
  </Directory>


  <IfModule mod_php7.0.c>
    <FilesMatch "\.php$">
      SetHandler application/x-httpd-php
      Require all granted
    </FilesMatch>
   </IfModule>

    ErrorLog /var/log/apache2/etuutt_error.log
    CustomLog /var/log/apache2/etuutt_access.log combined
    
</VirtualHost>

Activation du Vhost

sudo a2ensite 010-etuutt
sudo systemctl reload apache2

S'il n'y a pas d'erreurs lors du redémarrage d'Apache, alors nous pouvons passer à la suite !

PHP7-FPM

Php7 n'est pas dispo sur debian par défaut, il faut donc un peut bidouiller.

# Passage en root
su

# Suppression de Php 5 s'il y a
systemctl stop php5-fpm
apt-get autoremove --purge php5*

# Ajout du dépot
echo "deb http://packages.dotdeb.org jessie all" > /etc/apt/sources.list.d/dotdeb.list
wget -O- https://www.dotdeb.org/dotdeb.gpg | apt-key add -
apt update

# installation
apt install php7.0 libapache2-mod-php7.0 php7.0-mysql php7.0-gd php7.0-mcrypt php7.0-ldap php7.0-curl

# Lancement de php-fpm
systemctl enable php7.0-fpm
systemctl start php7.0-fpm

Les modules installés s'active automatiqument. Il reste cependant un module à activer :

echo "; configuration for php iconv module
; priority=20
extension=iconv.so" > /etc/php/7.0/fpm/conf.d/20-iconv.ini

Redémarrez ensuite PHP-FPM

systemctl restart php7.0-fpm

S'il n'y a pas d'erreurs lors du redémarrage de php-fpm, alors nous pouvons passer à la suite !

MySQL

apt install mysql-server # Vous pouvez ne pas mettre de mot de passe root
systemctl enable
systemctl start

PhpMyAdmin (facultatif)

PhpMyAdmin permet de modifier directement votre base de donnée depuis une interface web. Ce n'est pas nécessaire pour développer sur le site etu, mais c'est très utile d'avoir un client comme celui là.

apt install phpmyadmin

Créez le fichier de conf Apache2 suivant : /etc/apache2/sites-available/010-phpmyadmin.conf

<VirtualHost *:80>
  ServerName phpmyadmin
  ServerAlias phpmyadmin

  <IfModule mod_php7.0.c>
    <FilesMatch "\.php$">
      SetHandler application/x-httpd-php
      Require all granted
    </FilesMatch>
  </IfModule>

  DocumentRoot /usr/share/phpmyadmin

</VirtualHost>

Modifiez ensuite /etc/phpmyadmin/config.inc.php afin d'autoriser la connexion sans mot de passe en remplaçant

# décomentez
$cfg['Servers'][$i]['AllowNoPassword'] = TRUE;

Activez le vhost et redémarrez apache2

a2ensite 010-phpmyadmin
systemctl restart apache2

Vous pouvez enfin accéder à PhpMyAdmin avec l'identifiant root en cliquant ici.

Git, Compser, Bower

  • Git : Permet de partager facilement les modifications du code d'EtuUTT
  • Composer : Permet de gérer les dépendances d'EtuUTT et de les télécharger automatiquement
  • Bower : Permet de gèrer les assets comme les scripts javascript qui seront envoyés au client et de les télécharger automatiquement. Pour installer bower, il faut cependant installer npm
# Git
apt install git

# Composer
apt install curl
curl -s https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

# Bower
apt install npm
npm install -g bower

EtuUTT

Tout d'abord nous allons récupérer le code source d'EtuUTT. Assurez vous de ne plus être en root.

sudo mkdir -p /var/www
cd /var/www
sudo git clone https://github.com/ungdev/EtuUTT.git etuutt
sudo chown -R www-data:www-data /var/www
sudo chmod g+rw -R /var/www

Installation des dépendances

cd /var/www/etuutt
composer install
nodejs /usr/local/bin/bower install

Si vous avez des problèmes de droits, redémarrez puis vérifiez à l'aide de la commande groups que vous faites bien partie du groupe www-data. Si ce n'est pas le cas, regardez la partie Système de cette doc.

Certains fichiers seront propres à toute configuration, ils ne sont donc pas sur Github, et donc pas dans le code source que vous avez téléchargé. Mais pas d'inquiétude, il y a des exemples que nous allons copier.

cd /var/www/etuutt
cp web/app.php.dev web/app.php # Porte d'entrée du site etu, en configuration développement (barre de debug symfony, etc.)
cp -R web/uploads.dist web/uploads/ # Dossier où sont uploadé tous les fichiers des utilisateurs
cp app/config/version.yml.dist app/config/version.yml # Fichier utilisé pour la prod, nous n'y toucherons pas.
cp app/config/parameters.yml.dist app/config/parameters.yml

Pour la configuration d'EtuUTT, modifiez le fichier app/config/parameters.yml. Vous y trouverez vos paramètres de base de donnée, mais si vous avez suivis cette doc, vous n'avez pas à les modifier. Vous devez par contre remplacer

    domain:            etu.utt.fr
#par
    domain:            etuutt

Pour créer la base de donnée et sa structure, exécutez les commandes suivantes.

# Note: on peu pas utiliser doctrine:schema:create car https://github.com/doctrine/DoctrineBundle/issues/351
mysql --user=root --execute="CREATE DATABASE etuutt;"
php app/console doctrine:schema:update --force

Il faut maintenant générer et installer les assets.

php app/console assets:install
php app/console assetic:dump

Il ne nous reste plus qu'à remplir la base de donnée.

php app/console doctrine:fixtures:load # Ajoute en base des lignes d'exemple
php app/console etu:badges:import # Charge la liste des badges actuelle
php app/console etu:cities:import # Charge la liste des villes en france

# Charge la liste des UV depuis le guide des UVs
sudo apt install poppler-utils
php app/console etu:uv:import http://www.utt.fr/_resources/GuideUV2015-16_ebook.pdf?download=true
php app/console etu:uv:sync

# Uniquement sur le réseau local de l'UTT, vous pouvez charger la liste des etudiants
php app/console etu:users:sync

C'est parti !

Ca y est, vous avec un EtuUTT qui fonctionne sur http://etuutt/ . Et vous pouvez normalement vous connecter avec des comptes extérieurs :

Compte administrateur
   username: admin
   mot de passe: admin

Compte utilisateur
   username: user
   mot de passe: user

Si ça ne marche pas, sachez que vous pouvez toujours créer un compte et lui donner des droits admin depuis la console.

En cas de soucis

Les logs de nginx et les erreurs PHP qui empêcheraient Symfony de fonctionner, sont disponible dans les journaux système. Pour les suivre (laissez un terminal de coté avec cette commande qui tourne) :

sudo journalctl -fu nginx # Le 'f' pour follow (suivre) et le 'u' pour filtrer juste ce qu'on veut

Linux, Archlinux, Nginx, PHP7-FPM, MariaDB

Système

Afin de faciliter le développement, nous conseillons l'ajout d'un nom de domaine locale, pour rendre accessible votre version de développement du site etu via une url du type http://etuutt/. Cela permettra de travailler sur ce projet, sans monopoliser le domaine localhost.

Pour cela, modifiez le fichier /etc/hosts, et ajoutez y la ligne suivante

127.0.0.1       localhost.localdomain   etuutt
127.0.0.1       localhost.localdomain   phpmyadmin

Nous avons aussi ajouté une ligne pour PhpMyAdmin, si vous ne souhaitez pas l'installer, vous pouvez ne pas la mettre.

Ajoutez aussi l'utilisateur qui va coder au groupe http. Cela vous permettra de modifier les sources du site sans avoir de problèmes de droits.

sudo usermod -aG http [USERNAME] # Remplacez [USERNAME] par votre username

Nginx, le seveur web

sudo pacman -S nginx
sudo systemctl enable nginx
sudo systemctl start nginx

Afin d'avoir une installation plus propre, nous allons séparer les fichiers de conf de nginx dans un dossier. Nous allons donc ajouter le dossier /etc/nginx/conf.d aux fichiers de conf de nginx.

sudo mkdir /etc/nginx/conf.d

Modifiez le fichier /etc/nginx/nginx.conf et ajoutez la ligne suivante à la fin du bloc http{}

include conf.d/*.conf;` 

Créez le fichier /etc/nginx/conf.d/etuutt.conf avec le contenu suivant

server {
    listen 80;
    server_name etuutt;
    root /var/www/etuutt/web;

    location / {
        try_files $uri /app.php$is_args$args;
    }

    location ~ ^/(app|config)\.php(/|$) {
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }
}

Relancez Nginx

sudo systemctl restart nginx

S'il n'y a pas d'erreurs lors du redémarrage d'Nginx, alors nous pouvons passer à la suite !

PHP7

sudo pacman -S php-fpm php php-mcrypt php-gd
suod systemctl enable php-fpm
sudo systemctl start php-fpm

Pour activer les modules nécéssaire au site etu, modifiez le fichier /etc/php/php.ini. Décommettez-y les lignes suviantes :

extension=mcrypt.so
extension=mysqli.so
extension=pdo_mysql.so
extension=iconv.so
extension=ldap.so
extension=gd.so

Redémarrez ensuite PHP-FPM

sudo systemctl restart php-fpm

S'il n'y a pas d'erreurs lors du redémarrage de php-fpm, alors nous pouvons passer à la suite !

MariaDB

sudo pacman -S mariadb
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo systemctl enable mysqld
sudo systemctl start mysqld

PhpMyAdmin (facultatif)

PhpMyAdmin permet de modifier directement votre base de donnée depuis une interface web. Ce n'est pas nécessaire pour développer sur le site etu, mais c'est très utile d'avoir un client comme celui là.

sudo pacman -S phpmyadmin

Créez le fichier de conf nginx suivant : /etc/nginx/conf.d/phpmyadmin.conf

server {
    listen 80;
    server_name phpmyadmin;
    root /usr/share/webapps/phpMyAdmin;
    index index.php;

    location ~* \.php$
    {
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;
    }
}

Modifiez ensuite /etc/webapps/phpmyadmin/config.inc.php afin d'autoriser la connexion sans mot de passe en remplaçant

$cfg['Servers'][$i]['AllowNoPassword'] = false;
// par
$cfg['Servers'][$i]['AllowNoPassword'] = true;

Redémarrez enfin nginx

sudo systemctl restart nginx

Vous pouvez enfin accéder à PhpMyAdmin avec l'identifiant root sans mot de passe en cliquant ici.

Git, Compser, Bower

  • Git : Permet de partager facilement les modifications du code d'EtuUTT
  • Composer : Permet de gérer les dépendances d'EtuUTT et de les télécharger automatiquement
  • Bower : Permet de gèrer les assets comme les scripts javascript qui seront envoyés au client et de les télécharger automatiquement
sudo pacman -S git bower php-composer

EtuUTT

Tout d'abord nous allons récupérer le code source d'EtuUTT

sudo mkdir -p /var/www
cd /var/www
sudo git clone https://github.com/ungdev/EtuUTT.git etuutt
sudo chown -R http:http /var/www
sudo chmod g+rw -R /var/www

Installation des dépendances

cd /var/www/etuutt
composer install
bower install

Si vous avez des problèmes de droits, redémarrez puis vérifiez à l'aide de la commande groups que vous faites bien partie du groupe http. Si ce n'est pas le cas, regardez la partie Système de cette doc.

Certains fichiers seront propres à toute configuration, ils ne sont donc pas sur Github, et donc pas dans le code source que vous avez téléchargé. Mais pas d'inquiétude, il y a des exemples que nous allons copier.

cd /var/www/etuutt
cp web/app.php.dev web/app.php # Porte d'entrée du site etu, en configuration développement (barre de debug symfony, etc.)
cp -R web/uploads.dist web/uploads/ # Dossier où sont uploadé tous les fichiers des utilisateurs
cp app/config/version.yml.dist app/config/version.yml # Fichier utilisé pour la prod, nous n'y toucherons pas.
cp app/config/parameters.yml.dist app/config/parameters.yml

Pour la configuration d'EtuUTT, modifiez le fichier app/config/parameters.yml. Vous y trouverez vos paramètres de base de donnée, mais si vous avez suivis cette doc, vous n'avez pas à les modifier. Vous devez par contre remplacer

    domain:            etu.utt.fr
#par
    domain:            etuutt

Pour créer la base de donnée et sa structure, exécutez les commandes suivantes.

# Note: on peu pas utiliser doctrine:schema:create car https://github.com/doctrine/DoctrineBundle/issues/351
mysql --user=root --execute="CREATE DATABASE etuutt;"
php app/console doctrine:schema:update --force

Il faut maintenant générer et installer les assets.

php app/console assets:install
php app/console assetic:dump

Il ne nous reste plus qu'à remplir la base de donnée.

php app/console doctrine:fixtures:load # Ajoute en base des lignes d'exemple
php app/console etu:badges:import # Charge la liste des badges actuelle
php app/console etu:cities:import # Charge la liste des villes en france

# Charge la liste des UV depuis le guide des UVs
sudo pacman -S poppler
php app/console etu:uv:import http://www.utt.fr/_resources/GuideUV2015-16_ebook.pdf?download=true
php app/console etu:uv:sync

# Uniquement sur le réseau local de l'UTT, vous pouvez charger la liste des etudiants
php app/console etu:users:sync

C'est parti !

Ca y est, vous avec un EtuUTT qui fonctionne sur http://etuutt/ . Et vous pouvez normalement vous connecter avec des comptes extérieurs :

Compte administrateur
   username: admin
   mot de passe: admin

Compte utilisateur
   username: user
   mot de passe: user

Si ça ne marche pas, sachez que vous pouvez toujours créer un compte et lui donner des droits admin depuis la console.

En cas de soucis

Les logs de nginx et les erreurs PHP qui empêcheraient Symfony de fonctionner, sont disponible dans les journaux système. Pour les suivre (laissez un terminal de coté avec cette commande qui tourne) :

sudo journalctl -fu nginx # Le 'f' pour follow (suivre) et le 'u' pour filtrer juste ce qu'on veut