Mista

Mise en place d'un Serveur Web + Ftp sous Ubuntu en moins de 15 minutes:

A force de monter/casser des VM de test, je me suis fait une petite procédure histoire de gagner du temps.
On part sur une install de base où seul un serveur SSH est installé, le reste se fera manuellement


Configuration d'un serveur Web (Apache Php Mysql) + ftp (Pure Ftpd) Sur une Distribution Linux Ubuntu Server 14.4.xx x64

INTERFACE

Edition des sources => Décommenter les adresses des dépôts (en général les 4 derniers)

sudo nano /etc/apt/sources.list


Mise à jour des dépôts

sudo apt-get update


si erreur GPG taper la commande suivantes

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 16126D3A3E5C1192
sudo apt-get update


Mises à jour

sudo apt-get upgrade



Configuration réseau en IP fixe

sudo nano /etc/network/interfaces


Editer le fichier comme ceci avec les données de l'interface réseau locale, en tenant compte du fait que les valeurs netmask, gateway et broadcast sont susceptible de varier en fonction de votre configuration: Si vous n'êtes pas sûr vous pouvez toujours faire un ifconfig
Les DNS sont celles de google, libre à vous d'en mettre d'autres.

# The loopback network interface
	auto lo
	iface lo inet loopback

# The primary network interface
	auto eth0
	iface eth0 inet static
        address 192.168.1.XXX
       	netmask 255.255.255.0
       	gateway 192.168.1.254
       	broadcast 192.168.1.255
       	dns-nameservers 8.8.8.8


relancer l'interface réseau

sudo /etc/init.d/networking restart


il arrive qq fois que cette commande ne reboot pas correctement l'interface réseau:
il faut alors carrément rebooter le serveur

sudo reboot


SERVEUR WEB

Installation du serveur web

sudo apt-get install apache2 php5 mysql-server libapache2-mod-php5 php5-mysql


Chargez le module rewrite :

sudo a2enmod rewrite


Edition du fichier de configuration Apache

sudo nano /etc/apache2/apache2.conf


rajouter en fin de ficher les lignes suivantes:

 Options +FollowSymlinks
RewriteEngine on


Configuration du VirtualHost

sudo nano /etc/apache2/sites-available/000-default.conf


Editer le fichier comme ceci (en remplacant XXX.XXX.XXX.XXX par l'ip ou l'url de votre site)

<VirtualHost XXX.XXX.XXX.XXX:80>
        ServerName 127.0.0.1
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/mon_projet/web

        <Directory /var/www/html/mon_projet/web>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        <Location />
                RewriteEngine On
                RewriteCond %{REQUEST_FILENAME} -s [OR]
                RewriteCond %{REQUEST_FILENAME} -l [OR]
                RewriteCond %{REQUEST_FILENAME} -d
                RewriteRule ^.*$ - [NC,L]
                RewriteRule ^.*$ /index.php [NC,L]
        </Location>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


Installation de PHP5

sudo add-apt-respository ppa:ondrej/php5
sudo apt-get update
sudo apt-get install php5 php5-mcrypt php5-gd
sudo php5enmod mcrypt


Installation de Apache

sudo apt-get install apache2 libapache2-mod-php5


Installation de Laravel

sudo curl -sS https://getcomposer.org/installer | sudo php
sudo mv composer.phar /usr/local/bin/composer


Création de notre nouveau projet:

cd /var/www/html
sudo composer create-project laravel/laravel mon_projet --prefer-dist


Configuration Apache

sudo chgrp -R www-data /var/www/html/project
sudo chmod -R 775 /var/www/html/project/storage


Aller maintenant dans le répertoire /etc/apache2/sites-available, utiliser la commande suivante pour créer un fichier de configuration pour notre projet Laravel:

cd /etc/apache2/sites-available
sudo nano laravel.conf


entrer les données suivantes

<VirtualHost *:80>
    ServerName localhost

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/project/public

    <Directory /var/www/html/project>
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


on renseigne/active le nouveau fichier de configuration:

sudo a2dissite 000-default.conf
sudo a2ensite laravel.conf
sudo a2enmod rewrite
sudo service apache2 restart


sudo apt-get install phpmyadmin


Essayer d'y accéder à l'adresse http://localhost/phpmyadmin. Si la page n'est pas accessible, il faut lier phpmyadmin et votre serveur apache. Essayer de lancer :

sudo ln -s /usr/share/phpmyadmin/ /var/www/html/phpmyadmin

Dans l'éditeur SQL de phpmyadmin, créer également un utilisateur mon_user avec tout les droits sur la base sans mot de passe

CREATE USER 'mon_user'@'127.0.0.1';
GRANT ALL PRIVILEGES ON * . * TO 'mon_user'@'127.0.0.1' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT ALL PRIVILEGES ON `mon_user\_%` . * TO 'mon_user'@'127.0.0.1';
GRANT ALL PRIVILEGES ON *.* TO 'mon_user'@'%' WITH GRANT OPTION;

Note pour le projet Zend : Ne pas oublier de mettre à jour le fichier application.ini concernant le nom d'utilisateur sur les bases


Configuration du php.ini afin de modifier la taille minimale d'import de fichier : cela sera utile en cas d'import de BDD d'un projet existant:

sudo nano /etc/php5/apache2/php.ini

Dans nano, rechercher (ctrl + W) et modifier les valeurs suivantes:

upload_max_filesize = 100M
memory_limit= 1024M
post_max_size = 100M


SERVEUR FTP

Installation de Pure-ftpd

sudo apt-get install pure-ftpd pure-ftpd-common


créer l'utilisateur/groupe système avec lequel le serveur FTP sera lancé:

sudo groupadd ftpgroup
sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser


configuration du serveur ftp

sudo nano /etc/pure-ftpd/conf/PAMAuthentication
# => passer la valeur à no

sudo nano /etc/pure-ftpd/conf/DontResolve
# => passer la valeur à yes


Créer un lien symbolique pour activer l'authentification des utilisateurs virtuels :

cd /etc/pure-ftpd/auth/
sudo ln -s ../conf/PureDB 50puredb


Création d'un utilisateur ftp:

Si on est pas dans le cas d'un projet web mais simplement d'un espace de stockage, on commence par lui créer un répertoire

sudo mkdir /home/mon/user/folder


... Sinon, on est evidemment dans le cas de notre répertoire racine de notre projet Web :

sudo chown -R ftpuser:ftpgroup /var/www/html/mon_user_name
sudo pure-pw useradd mon_user_name -u ftpuser -g ftpgroup -d /var/www/html/mon_projet


Ces commandes vont avoir comme buts de créer un répertoire local puis de renseigner le fichier de configuration de Pure-ftp: /etc/pure-ftpd/pureftpd.passwd:

sudo cat /etc/pure-ftpd/pureftpd.passwd


On transforme ce fichier dans un format sécurisé et lisible par le serveur FTP (/etc/pure-ftpd/pureftpd.pdb):

sudo pure-pw mkdb


Configurer le message affiché lors de la connexion des utilisateurs

sudo nano /etc/motd.pure-ftpd
=> Bienvenue sur mon serveur FTP!!!


Ajouter le chemin de ce fichier dans le fichier /etc/pure-ftpd/conf/FortunesFile:

sudo nano /etc/pure-ftpd/conf/FortunesFile
/etc/motd.pure-ftpd


Enfin on relance le serveur pour que la configuration soit prise en compte:

sudo /etc/init.d/pure-ftpd restart


CONFIGURATIONS OPTIONNEL (mais recommandées :) )

Installation de l'interface cURL permettant par exemple de créer ou modifier une ressource (contrairement à wget), il peut ainsi être utilisé en tant que client REST pour faire du WebService

sudo apt-get install php5-curl


Installation de FreeTDS et de PHP MS SQL extension afin de pouvoir connecter une BDD M$SQL
Plus d'infos sur https://davejamesmiller.com/blog/connecting-php-to-microsoft-sql-server-on-linux

sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase


Fix afin de régler le soucis des types de variables ntext répondant au message d'erreur:
"Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier"

Dans le fichier de configuration freetds.conf

sudo nano /etc/freetds/freetds.conf

rajouter tout en fin de fichier:

[192.168.x.xxx]
host = 192.168.x.xxx
port = 1433
tds version = 8.0


relancer le serveur web

sudo /etc/init.d/apache2 restart


Utilitaire lftp qui nous permettra facilement d'uploader des fichiers sur un ftp distant via par exemple un crontab

sudo apt-get install lftp


Lancement de l'edition de notre cron :

sudo crontab -e


si premier lancement, choix 2 (nano) de l'éditeur
ensuite déterminer les tâches planifiées:

#----- sauvegarde des donnees de la base, tout les jours a 3h00 du matin	-----------------
00 3 * * * mysqldump -uroot -pMotDePasse --opt ma_bdd > /var/www/html/mon_projet/dump/ma_bdd.sql

# ------ envoi sur le ftp distant 15 minutes plus tard: -------------------------
15 3 * * * lftp ftp://UserFtp:MotDePasse@XXX.XXX.XXX.XXX -e "put -O /dossier_de_sauvegarde/ /var/www/html/mon_projet/dump/ma_bdd.sql; quit"
#-----------------------------------------------------------------------------------------------------------------------------------------------

Pour consulter le crontab en mode lecture uniquement

sudo crontab -l


  • 1. import de la clé sur le depot de mariadb

    sudo apt-get install software-properties-common
    sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
    sudo add-apt-repository 'deb http://ftp.osuosl.org/pub/mariadb/repo/10.0/ubuntu trusty main'

  • 2. rajout des entrees a la configuration

    sudo nano /etc/apt/sources.list

  • 3. Ecrire à la fin du fichier

    deb http://ftp.osuosl.org/pub/mariadb/repo/10.0/ubuntu precise main
    deb-src http://ftp.osuosl.org/pub/mariadb/repo/10.0/ubuntu precise main

  • 4. essayer de commencer le telechargement

    sudo apt-get update

  • 5. si NO PUBKEY

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3E5C1192

  • 6. installation

    sudo apt-get update
    sudo apt-get install mariadb-server

  • 7. lancement

    mysql -u root -p