Hosting backend, application tablette ou mobile
Ce document présente un ensemble de recommandations techniques pour l'hébergement d'un backend d'une application mobile, tablette ou objet connecté.
05/04/2016 - Version 1.1 – A. Munoz
1. Environnement
Un environnement Linux est fortement recommandé pour l'installation de nos solutions (Debian 7+, Ubuntu 14+, CentOS ...)
Nous pouvons également travailler avec les systèmes Mac OS X Server, BSD et dérivés. Une connectivité de bonne qualité est nécessaire, tant sur le débit que la latence (Serveur hébergé sur une connexion ADSL à proscrire). Nous pouvons également travailler avec les grandes plates-formes d'hébergement virtualisé : Amazon EC2, Google Compute Engine, RunAbove (OVH), les environnements compatibles Docker …).
2. Logiciels
- Serveur Web Apache 2.2 ou supérieur (2.4 recommandé). Nginx ou lighttpd à étudier. Port 80
- PHP 5.4 ou supérieur (PHP 7 conseillé), compilé en module ou PHP-FPM, sans distinction.
Nous utilisons fréquemment les modules PHP suivants : MySqli, PDO, MCrypt, GD, CURL, Pear/PECL, LibXML
- MySQL 5.5 ou supérieur. Merci de nous fournir une base de données avec des identifiants spécifiques. Nous utilisons MyISAM ou InnoDB selon la situation, en utf8_general_ci ou utf8mb4_general_ci si disponible.
- Selon les projets, nous pouvons être amenés à utiliser MongoDB (GridFS).
- Il peut également être nécessaire d'ajouter des tâches planifiées via crontab
3. HTTP/S
- Nous recommandons l'utilisation d'un certificat SSL pour tout le trafic HTTP (utilisation de certificat self-signed à proscrire). TLS 1.2 recommandé, mod_ssl ou mod_gnutls. Port 443
- Une VHOST distincte si possible.
Nous pouvons être amené à modifier certaines options de configuration d'Apache via un fichier HTACCESS : voir une configuration que nous utilisons fréquemment en Annexe. Tous les flux HTTP sont compressés via Deflate, les techniques de mises en cache sont utilisées partout où cela est possible.
4. Accès distant
Nous pouvons mettre en place nos solutions via SSH, SFTP, FTP ou SCP Un accès à la base de données est également nécessaire par des outils tels que PHPMyAdmin ou le client mysql en ligne de commande. Un accès SSH/Shell peut nous permettre de gagner du temps, et facilite l'installation lors de la mise en production.
5. Websockets
Selon les projets, il peut être nécessaire de mettre en place des websockets. Nous utilisons pour cela un utilitaire nommé websocketd à installer sur votre environnement. Si le port TCP/9000 n'est pas disponible, merci de nous contacter. Voir l'annexe pour le script d'init (Debian / Ubuntu).
6. Sauvegarde
La sauvegarde des données hébergés chez vous reste à votre charge (fichiers et base de données). Boreal Business n'effectue pas de backup ou réplication des données stockées sur vos serveurs. Pour toute question, n’hésitez pas à contacter notre service technique au 01.75.43.87.24
Annexe: HTACCESS
Options -Indexes
php_flag magic_quotes_gpc off
php_flag magic_quotes_sybase off
php_flag register_globals off
php_flag session.auto_start off
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_flag mbstring.encoding_translation off
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript image/jpeg image/png image/gif
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\.(ico|jpe?g|png|gif|swf|gz|ttf|mp3|ogg|mp4)$">>
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
<FilesMatch "\.(css)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
<FilesMatch "\.(js)$">
Header set Cache-Control "max-age=2592000, private"
</FilesMatch>
<FilesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=7200, public"
</FilesMatch>
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>
Annexe : Script init.d (Debian/Ubuntu)
#! /bin/sh
### BEGIN INIT INFO
# Provides: WebSocket Service
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Webservices via websocket
# Description: WS via Websocket sur port 9000
### END INIT INFO
PIDF=/var/run/websocket
DAEMON=/bin/websocketd
ARGS="--port 9000 /var/www/mobileapp/socketserver.php"
case "$1" in
start)
echo "Start ws"
start-stop-daemon --make-pidfile --start -b --pidfile $PIDF --quiet -c 1000 --exec $DAEMON -- $ARGS
;;
stop)
echo "Stop ws"
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDF
;;
restart)
echo "Restart ws"
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDF
start-stop-daemon --make-pidfile --start -b --pidfile $PIDF --quiet -c 1000 --exec $DAEMON -- $ARGS
;;
*)
echo "Usage: /etc/init.d/socketservice {start|stop|restart}"
exit 1
;;
esac
exit 0