You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Brachet Christophe 9f0515929c First commit 5 months ago
.phalcon First commit 5 months ago
app First commit 5 months ago
cache First commit 5 months ago
public First commit 5 months ago
screeshot First commit 5 months ago
.DS_Store First commit 5 months ago
.gitignore First commit 5 months ago
.htaccess First commit 5 months ago
.htrouter.php First commit 5 months ago
README.md First commit 5 months ago
index.html First commit 5 months ago

README.md

Site DC-Passion : Legends of tomorrow

Vous pouvez accéder à la démo en live en cliquant sur le lien suivant : site de démonstration

utilisateur : dorlene

mot de passe : asperger2244

Synopsis de la série TV du site

Rip Hunter, un agent faisant anciennement partie de la confédération des maîtres du temps désobéit à cette dernière en volant un vaisseau (nommé Waverider) pouvant voyager à travers le temps dans le but de recruter un groupe de super-héros et de super-vilains capable d’affronter une menace planétaire : le criminel Vandal Savage et son armée de super soldats ayant conquis et soumis le futur. Ils ont pris le contrôle de toutes les infrastructures et ont fait des humains des esclaves. Ce groupe est initialement composé de Captain Cold, Heat Wave, Atom, Hawkgirl, Hawkman, White Canary et Firestorm.

Logo de la série TV du site

Installation du site

Pour utiliser le site, il est nécessaire d’installer le Framework PHP Phalcon.

Présentation de Phalcon

Phalcon est un framework open source très populaire parmi les développeurs. C’est une combinaison de PHP et du langage C. Phalcon est développé par Andres Gutierrez et son groupe de collaborateurs. Ce tutoriel présente le framework PHP Phalcon et de son utilisation.

Installation de Phalcon

Pour fonctionner le framework Phalcon à besoin au minimum de PHP 5.5 et des extensions suivantes :

  • curl
  • gettext
  • gd2
  • libpcre3-dev
  • json
  • mbstring
  • pdo_*
  • fileinfo
  • openssl
prodcomputer:~ christophebrachet$ sudo apt-get update
prodcomputer:~ christophebrachet$ sudo apt-get install php7.2-curl
prodcomputer:~ christophebrachet$ sudo apt-get install php7.2-gettext
prodcomputer:~ christophebrachet$ sudo apt-get install php7.2-gd
prodcomputer:~ christophebrachet$ sudo apt-get install libpcre3-dev
prodcomputer:~ christophebrachet$ sudo apt-get install php7.2-json
prodcomputer:~ christophebrachet$ sudo apt-get install php7.2-mbstring
prodcomputer:~ christophebrachet$ sudo apt-get install php7.2-pdo_*
prodcomputer:~ christophebrachet$ sudo apt-get install php7.2-fileinfo
prodcomputer:~ christophebrachet$ sudo apt-get install openssl
Ajouter le dépôt Phalcon à la distribution GNU/Linux Debian
prodcomputer:~ christophebrachet$  sudo apt-get install curl
prodcomputer:~ christophebrachet$  curl -s https://packagecloud.io/install/repositories/phalcon/nightly/script.deb.sh | sudo bash

Le dépôt est installé comme le spécifie le message : The repository is setup! You can now install packages.

Installer les packages Phalcon à l’aide du gestionnaire de paquet apt-get
prodcomputer:~ christophebrachet$  sudo apt-get update
prodcomputer:~ christophebrachet$  sudo apt-get install php7.2-phalcon
Vérifier que l’extension Phalcon est installée
prodcomputer:~ christophebrachet$ php -r 'print_r(get_loaded_extensions());'
Array
(
    [0] => Core
    [1] => date
    [2] => libxml
    [3] => openssl
    [4] => pcre
    [5] => zlib
    [6] => filter
    [7] => hash
    [8] => pcntl
    [9] => Reflection
    [10] => SPL
    [11] => session
    [12] => standard
    [13] => mysqlnd
    [14] => PDO
    [15] => xml
    [16] => apcu
    [17] => apc
    [18] => calendar
    [19] => ctype
    [20] => curl
    [21] => dom
    [22] => mbstring
    [23] => fileinfo
    [24] => ftp
    [25] => gd
    [26] => geoip
    [27] => gettext
    [28] => gmp
    [29] => iconv
    [30] => igbinary
    [31] => imagick
    [32] => imap
    [33] => interbase
    [34] => intl
    [35] => json
    [36] => exif
    [37] => mcrypt
    [38] => memcache
    [39] => msgpack
    [40] => mysqli
    [41] => odbc
    [42] => pdo_dblib
    [43] => PDO_Firebird
    [44] => pdo_mysql
    [45] => PDO_ODBC
    [46] => pdo_pgsql
    [47] => pdo_sqlite
    [48] => pgsql
    [49] => *phalcon*
    [50] => Phar
    [51] => posix
    [52] => pspell
    [53] => readline
    [54] => recode
    [55] => shmop
    [56] => SimpleXML
    [57] => sockets
    [58] => sqlite3
    [59] => sysvmsg
    [60] => sysvsem
    [61] => sysvshm
    [62] => tidy
    [63] => tokenizer
    [64] => wddx
    [65] => xmlreader
    [66] => xmlrpc
    [67] => xmlwriter
    [68] => xsl
    [69] => zip
    [70] => zmq
    [71] => memcached
    [72] => Zend OPcache
)

On peut aussi le faire avec la commande :

prodcomputer:~ christophebrachet$  php -m
Installer les outils de développeur pour Phalcon en utilisant Git (Phalcon Developer Tool)
prodcomputer:~ christophebrachet$ cd /opt
prodcomputer:~ christophebrachet:/opt$ sudo git clone https://github.com/phalcon/phalcon-devtools.git
prodcomputer:~ christophebrachet:/opt$ sudo ln -s /opt/phalcon-devtools/phalcon.php /usr/local/bin/phalcon
prodcomputer:~ christophebrachet:/opt$ sudo chmod +x /usr/local/bin/phalcon

Maintenant la commande Phalcone est accessible depuis le terminal!

Paramétrer service PHP-FPM
prodcomputer:~ christophebrachet:/opt$  sudo nano /etc/php/7.2/fpm/php.ini
Rajouter la ligne suivante pour charger le module Phalcon (.so) depuis le service PHP-FPM
extension=phalcon
Redémarrer Redémarrer PHP-FPM
prodcomputer:~ christophebrachet:/opt$ sudo service php7.2-fpm restart

Créer le sous domain legends pour le domain dc-passion.fr

Nous utilisons sur le serveur de production le serveur de DNS : PowerDNS.

Pour administrer les domaines de façon simple, nous avons installer l’interface web d’administration PDNS Mananager

Se connnecter à PDNS Manager

Choisir le domaine dc-passion.fr

Créer le sous domaine legends

Il faut laisser un certain temps pour que le nom de domaine se propage.

Pour vérifier que le nom de domaine s’est bien propagé, on peut taper la commande suivante dans le terminal:

prodcomputer:~ christophebrachet:/opt$ dig legends.dc-passion.fr

Récupérer le code source depuis ce dépôt gitlab

  • Se déplacer dans le répertoire /var/www/web
prodcomputer:~ christophebrachet:/opt$  cd /var/www/web
  • Récupérer le dépôt à l’aide de la commande git clone
prodcomputer:~ christophebrachet:/var/www/web$ sudo  git clone https://gitlab.brachet-breizh.fr/cbrachet/legends-of-tomorrow.git
  • Se déplacer dans le répertoire du projet (legends-of-tomorrow)
prodcomputer:~ christophebrachet:/var/www/web$ cd legends-of-tomorrow

Donner les droits d’écriture sur le répertoire de cache de Phalcon:

prodcomputer:~ christophebrachet:/var/www/web/legends-of-tomorrow$ sudo chmod 777 -R cache

Créer la base de données et ses données

Créer la base de données depuis le terminal

prodcomputer:~ christophebrachet:/var/www/web/legends-of-tomorrow$ mysql -u root -p
MariaDB [(none)]> create database legends;
MariaDB [(none)]> exit;

Ajouter le fichier de configuration d’accès en base de données au projet

prodcomputer:~ christophebrachet:/var/www/web/legends-of-tomorrow$ sudo nano app/config/config.php
<?php
/*
 * Modified: prepend directory path of current file, because of this file own different ENV under between Apache and command line.
 * NOTE: please remove this comment.
 */
defined('BASE_PATH') || define('BASE_PATH', getenv('BASE_PATH') ?: realpath(dirname(__FILE__) . '/../..'));
defined('APP_PATH') || define('APP_PATH', BASE_PATH . '/app');

return new \Phalcon\Config([
    'database' => [
        'adapter'     => 'Mysql',
        'host'        => 'localhost',
        'username'    => 'christophe',
        'password'    => 'pass',
        'dbname'      => 'legends',
        'charset'     => 'utf8',
    ],
    'application' => [
        'appDir'         => APP_PATH . '/',
        'controllersDir' => APP_PATH . '/controllers/',
        'modelsDir'      => APP_PATH . '/models/',
        'migrationsDir'  => APP_PATH . '/migrations/',
        'viewsDir'       => APP_PATH . '/views/',
        'pluginsDir'     => APP_PATH . '/plugins/',
        'libraryDir'     => APP_PATH . '/library/',
        'cacheDir'       => BASE_PATH . '/cache/',
	'production'     => true,

        // This allows the baseUri to be understand project paths that are not in the root directory
        // of the webpspace.  This will break if the public/index.php entry point is moved or
        // possibly if the web server rewrite rules are changed. This can also be set to a static path.
        'baseUri'        => preg_replace('/public([\/\\\\])index.php$/', '', $_SERVER["PHP_SELF"]),
    ]
]);

Générer les tables et ses données depuis l’outil de migration de Phalcon

prodcomputer:~ christophebrachet:/var/www/web/legends-of-tomorrow$ phalcon migration run

Paramétrage du serveur web (dans notre cas LightHttpd)

Dans notre cas la configuration du serveur est paramétrer depuis la base de données MariaDB. Un script Python est lancé pour récupérer cette configuration.Ce dernier effectue une requête sql.

Voici la configuration du fichier /usr/share/lighttpd/mysql_vhost.py:

#!/usr/bin/env python
import sys
import MySQLdb
from warnings import filterwarnings
filterwarnings('ignore', category = MySQLdb.Warning)
def start_server(ip,servername):
   print "$SERVER[\"socket\"] == \""+ip+":443\"{\n"
   print "ssl.engine  = \"enable\""
   print "ssl.pemfile = \"/etc/letsencrypt/live/"+servername+"/web.pem\""
   print "ssl.ca-file = \"/etc/letsencrypt/live/"+servername+"/chain.pem\"\n"
   return;
# load configuration data from the database
db=MySQLdb.connect(host='localhost', db=sys.argv[1], user=sys.argv[2], passwd=sys.argv[3])
cur = db.cursor()
cur.execute("SELECT vhost_domain_name FROM vhost WHERE vhost_active=1 and vhost_date_deleted=0")
rs=cur.fetchall()
print "$HTTP[\"scheme\"] == \"http\" {"
for vhost  in rs:
       print " \t$HTTP[\"host\"] ==  \""+vhost[0].strip()+"\" {"
       print "\t\turl.redirect  = ("
       print "\t\t\t\"^/(.*)\" => \"https://"+vhost[0].strip()+"/$1\","
       print "\t\t)"
       print "\t}"
print "}"

cur.execute("SELECT vhost_domain_name,vhost_document_root,vhost_configuration,ip_value FROM vhost inner join ip  ON vhost.vhost_ip=ip.ip_id  WHERE vhost_active=1 and vhost_date_deleted=0 order by ip_value")
rs=cur.fetchall()
i=0;
current=""
for vhost  in rs:
        i=i+1
        if i == 1:
                current=vhost[3]
                start_server(current,vhost[0])
        else:
                if current!=vhost[3]:
                        current=vhost[3]
                        print "\n}"
                        start_server(current,vhost[0]) 
        config=vhost[2]
        if vhost[2] is None:
                config=""
        config+="\n"
        config+="\t\tssl.pemfile = \"/etc/letsencrypt/live/"+vhost[0]+"/web.pem\""
        config+="\n"
        config+="\t\tssl.ca-file = \"/etc/letsencrypt/live/"+vhost[0]+"/chain.pem\"\n"
        print "$HTTP[\"host\"] == \"%s\" {\n       server.name = \"%s\"\n       server.document-root = \"%s\"\n%s\n}" % (vho$
print "\n}"
db.close()

Le script effectue 2 choses :

  • Il défini où se trouve les certificats SSL sur le serveur
  • Il charge dynamiquement la configuration des différents hôtes en base de données en effectuant la requêtes suivante : SELECT vhost_domain_name,vhost_document_root,vhost_configuration,ip_value FROM vhost inner join ip ON vhost.vhost_ip=ip.ip_id WHERE vhost_active=1 and vhost_date_deleted=0 order by ip_value

La table des hôtes virtuel du serveur web est reliée à une table d’IP.

MariaDB [lighttpd]> show tables;
+--------------------+
| Tables_in_lighttpd |
+--------------------+
| ip                 |
| vhost              |
+--------------------+

Il faut configurer la base de données avec le contenu suivant: (Notre IP Public dans notre case est 178.32.127.24)

*La table ip doit contenir le suivant:

+-------+----------------+
| ip_id | ip_value       |
+-------+----------------+
|     3 | 178.32.127.24  |
+-------+----------------+

*La table vhost doit contenir le contenu suivant:

| vhost_id | vhost_active | vhost_domain_name            | vhost_document_root                                                   | vhost_date_added    | vhost_date_deleted  | vhost_configuration                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | vhost_ip |
|       36 | 1            | legends.dc-passion.fr        | /var/www/web/legends-of-tomorrow/public                               | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | url.rewrite-if-not-file = ("^/([^.?]*)\?(.*)$" => "/index.php?_url=/$1&$2","^/([^.?]*)$" => "/index.php?_url=/$1")
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd/.htpasswd"
auth.require = ( "/" => ( "method" => "basic", "realm" => "Espace protégé", "require" => "valid-user") )
                                                                                                                                                                           |        3 |

La configuration de notre virtual host est donc la suivante:

champs vhost_domain_name (nom de domain géré par l'hôte virtuel) : legends.dc-passion.fr
vhost_active (l'hôte est activé car valeur 1) : 1
champs vhost_document_root (emplacemnt racine public du site) : /var/www/web/legends-of-tomorrow/public
champs vhost_configuration (contient règle de réécriture pour Phalcon) : url.rewrite-if-not-file = ("^/([^.?]*)\?(.*)$" => "/index.php?_url=/$1&$2","^/([^.?]*)$" => "/index.php?_url=/$1")

Générer les certificats SSL depuis l’autorité de certification Let’s Encrypt

Arrêter le service lighttpd

prodcomputer:~ christophebrachet:/var/www/web/legends-of-tomorrow$ sudo service lighttpd stop

Générer les certificats SSL

prodcomputer:~ christophebrachet:/var/www/web/legends-of-tomorrow$ sudo certbot certonly --standalone -d example.com -d legends.dc-passion.fr
prodcomputer:~ christophebrachet:/var/www/web/legends-of-tomorrow$ sudo chmod 777 -R /etc/letsencrypt/live/legends.dc-passion.fr/
prodcomputer:~ christophebrachet:/var/www/web/legends-of-tomorrow$ cat /etc/letsencrypt/live/legends.dc-passion.fr/cert.pem /etc/letsencrypt/live/legends.dc-passion.fr/privkey.pem > /etc/letsencrypt/live/legends.dc-passion.fr/web.pem 
prodcomputer:~ christophebrachet:/var/www/web/legends-of-tomorrow$ sudo chmod 777 -R /etc/letsencrypt/live/legends.dc-passion.fr/

Démarrer le service lighttpd

prodcomputer:~ christophebrachet:/var/www/web/legends-of-tomorrow$ sudo service lighttpd start

Le site est maintenant accessible depuis le lien suivant : site de démonstration

Licence du site

Le framework Phalcon est sous licence open-source BSD BSD license.

Le code source du site est sous licence creative commons BY-NC-ND

De plus il est formellement interdit d’héberger le code source de ce site sur un autre domaine que (https://legends.dc-passion.fr/)

Copyright concernant la partie technique de la création du site

© Christophe Brachet(https://christophe.brachet-breizh.fr) - Tous droits réservés concernant la création du site.

Mention légale concernant le contenu du site:

DC-Passion: Legends of Tomorrow (https://legends.dc-passion.fr) n’est pas un site officiel.Legends of Tomorrow et les personnages sont sous copyright 2016 Warner Bros et DC Comics. Tous droits réservés pour tous les pays. All rights reserved for all countries.C’est un site géré par des fans bénévoles pour les fans francophones et anglophones de la série “Legends of Tomorrow”. Le site a été conçu dans l’unique but de promouvoir la série dans les pays francophones et anglophones. Il a été développé sous le framework PHP Phalcon afin de démontrer des compétences techniques à de futurs employeurs. Nous n’avons aucun contact avec les acteurs ou les membres de la production de la série.Toutes les photos et vidéos ainsi que les personnages et scénarios appartiennent à leurs auteurs respectifs.Ils peuvent être retirés à tout moment sur simple demande de l’auteur.Le site ne propose aucune vidéo d’épisode sous forme de téléchargement ou de streaming.

Le site DC-Passion: Legends of Tomorrow (https://legends.dc-passion.fr), ses contenus et services, ses logiciels, dessins, modèles, bases de données, marques et logos sont soumis au droit de la Propriété intellectuelle. L’utilisateur s’engage à ne pas : reproduire, copier, diffuser, distribuer, communiquer, céder, représenter sur tout autre site Web, ainsi que sur tout autre support ayant une finalité commerciale ou non.