Web sites hosting (scripts)
Scripts for
WebSite.

: This is a pre-alpha version, which does not use
PostgreSQL yet.
New hosted domain
NB : a
new hosted domain is for example
bidule.com ; a new site called
bla for the
bidule.com domain (i.e.
http://bla.bidule.com), is not a
new hosted domain in frangipane's language.
Directories initialization
-
mkdir /var/www/$DOMAIN
-
chmod 0755 /var/www/$DOMAIN
- set the default ACL for newly created files :
-
setfacl -m d:user:www-data:rX /var/www/$DOMAIN
-
setfacl -m d:group::0000 /var/www/$DOMAIN
-
setfacl -m d:other:0000 /var/www/$DOMAIN
Etc.
Hosting a new domain
bidule.com implies to :
- host a new website as well : the root website for this domain, that has to be created as explained next
- set up some non-www-related stuff, see DnsScripts
Web site creation
DNS and email
A new website means a new sub-domain, for example
site.domain.tld, which has to be created first :
- add a DNS A record for SITE.DOMAINE.TLD, pointing to the web VServer's IP ;
- add a DNS MX record, pointing to the domain managing email for hosted domains ;
- set up some non-www-related stuff, as explained on DnsScripts.
Unix user and group
Chaque site va correspondre à un user et un groupe Unix, portant le même nom, qu'il faut donc créer avant toute chose. Le nom de l'user (USER) se construit sur la base DOMAINE.SITE en remplacant tout les . par des _, ex : infokiosques_net, infokiosques_net_dev, gendertrouble_org_motenai, etc.
Cet utilisateur doit etre crée en double, un sur le serveur web pour le site, et l'autre sur le vserver d'accès sftp des webmasters, et évidemment avec les memes valeurs de UID/GID. Les seules différences entre les 2 sont juste:
- le chemin du $home des users, puisque sur le vserver web, home=/var/www/DOMAIN.TLD/SITE, et sur le vserver webmaster,
/home/webmasters/DOMAIN.TLD/SITE
- Sur le vserver web qui fait tourner apache/mysql/php, les users n'ont pas de shell, alors que si on veut leur donner un accés au serveur webmaster faut bien qu'on leur en mette un...
Donc pour mettre tout ca en place:
- choisir un UID=GID : prendre le plus petit nombre dispo au dessus de 10000
- créer l'user sur le vserver web :
-
addgroup --gid GID --force-badname USER
-
adduser --home /var/www/DOMAIN/SITE --shell /bin/false --uid UID --gid GID --force-badname --disabled-password USER
- effacer, dans
/var/www/DOMAIN/SITE, les fichiers que adduser a copiés de /etc/skel/
- créer l'user sur le vserver webmaster :
-
addgroup --gid GID --force-badname USER
-
adduser --home /home/webmasters/DOMAIN.TLD/SITE --shell /usr/lib/openssh/sftp-server --uid UID --gid GID --force-badname USER
- Vérifier/corriger si on est pas sûrE dans les /etc/passwd de chaque vserver que l'user a bien les meme UID/GID
- créer ses aliases mail
USER@web.boum.org et USER@webmasters.boum.org, pointant vers webmaster@SITE.DOMAINE.TLD , dans /etc/postfix/valias, tout à la fin du fichier, dans la section "UIDs créés par le groupe Apache" ; puis lancer sudo postmap /etc/postfix/valias pour que les modifications soient prises en compte.
Répertoire du site
Situé sur le vserver web.
Les sites ouèbes sont rangés dans un répertoire de la forme
/var/www/DOMAINE/SITE avec SITE='root' pour la racine du domaine. Par exemple
/var/www/gendertrouble.org/root/ pour le site
http://gendertrouble.org/ et
/var/www/gendertrouble.org/motenai/ pour
http://motenai.gendertrouble.org.
Ce répertoire est créé automatiquement à l'étape précédente par la commande
adduser, avec le bon propriétaire, le bon groupe propriétaire.
Set the correct Unix permissions :
-
find /var/www/$DOMAIN/$SITE -type d -exec chmod 700 {} \;
-
find /var/www/$DOMAIN/$SITE -type f -exec chmod 600 {} \;
Set the ACL :
-
setfacl -R -m user:www-data:rX /var/www/$DOMAIN/$SITE
-
setfacl -R -m d:user:www-data:rX /var/www/$DOMAIN/$SITE
Les confs php sont faites en sorte que chaque site met ses fichiers temporaires d'upload et de sessions dans des répertoires qui lui sont propres, il faut donc les créer, sur web:
mkdir -p /var/tmp/frangipane/$UID_DU_DOMAINE_PARENT/$SITE/php/{upload,sessions}
chmod -R 700 /var/tmp/frangipane/$UID_DU_DOMAINE_PARENT/$SITE
chown -R UID GID /var/tmp/frangipane/$UID_DU_DOMAINE_PARENT/$SITE (cf plus haut pour ce qui est des noms d'utilisateurices)
Last but not least, il faut créer un joli lien symbolique dans le home du user sur le vserver webmaster vers le /var/www/DOMAIN/SITE de ce vserver (puisqu'on y a monté le /var/www du vserver web)
-
ln -s /var/www/DOMAIN/SITE /home/webmasters/DOMAIN/SITE/www
Fichier de configuration Apache
Sur le vserver web bien sûr :]
Le fichier de configuration Apache de chaque site se trouve dans
/etc/apache2/sites-available/SITE.DOMAINE.TLD. Pour en créer un nouveau il faut partir de celui de lorgnette.boum.org, qui est bien fignolé et a le SSL activé, et y remplacer :
- 'boum.org' par le nom de domaine du site
- 'lorgnette' par le nom du site
C'est pas franchement plus compliqué pour l'instant...
TODO : trouver comment n'activer PHP que si le site en a besoin... cf
WebSite et
WebSiteDiscussion, c'est là bas qu'on y réfléchit.
PHP configuration
On the
web VServer...
- create
/etc/php5/suphp/DOMAIN/SITE/php.ini, by copying /etc/php5/suphp/gendertrouble.org/root/php.ini, and adapting (at least open_basedir, session.save_path and upload_tmp_dir) ; searching 'gendertrouble' in the copied file can help.
MySQL
On the
web VServer, create :
Example :
mysql> create database ea82d45e016c7e19;
mysql> GRANT ALL ON ea82d45e016c7e19.* TO 'ea82d45e016c7e19'@'localhost' IDENTIFIED BY 'MOT_DE_PASSE' ;
mysql> GRANT ALL ON ea82d45e016c7e19.* TO 'ea82d45e016c7e19'@'web.boum.org' IDENTIFIED BY 'MOT_DE_PASSE' ;
Service d'upload des sites
Ben ça se fait grâce à l'accés au vserver webmaster où tous les fichiers nécessaires sont montés (cf
WebSite et
WebSiteDiscussion).
L'aide utilisateurice à ce sujet est sur
https://wiki.boum.org/Boum/AutoAideWeb.
Activer le site
sudo a2ensite SITE.DOMAIN.TLD ; sudo /etc/init.d/apache2 reload sur le vserver web
Logs
Apache
Apache envoie ses logs à syslog-ng, qui écrit deux fichiers de logs :
- un fichier qui logue les erreurs sur le site :
/var/log/frangipane/web/SITE.DOMAIN.TLD/apache/error.log
- un fichier qui logue les accès au site
/var/log/frangipane/web/SITE.DOMAIN.TLD/apache/access.log
syslog-ng se charge tout seul de créer le répertoire
/var/log/frangipane/web/SITE.DOMAIN.TLD/apache/ sur l'hôte, à la première visite.
Le répertoire de logs du site est monté dans le home du webmaster correspondant dans le vserver webmaster ; au démarrage, ça se fait tout seul, mais à la création d'un site il faut :
- créer, en tant que root, le répertoire
webmasters:/home/webmasters/$DOMAIN/$SITE/log
- lancer, sur le système hôte, une fois la première visite effectuée :
mount -o bind,ro /var/log/frangipane/web/$REP /var/lib/vservers/webmasters/home/webmasters/$DOMAIN/$SITE/log
Then restart the webmasters VServer so that this bind mount is seen inside it :
sudo vserver webmasters restart
Web site importation
First, create the new site instance, without enabling it. Then, on the web VServer...
Import files
Copy the files into the new empty web site directory :
tar -cf- --one-file-system -C OLD_WEB_SITE/ . | tar -xf- -C /var/www/$DOMAIN/$SITE -p
Set the correct owner/group on imported files :
chown -R $USER.$USER /var/www/$DOMAIN/$SITE
Set the correct Unix permissions :
-
find /var/www/$DOMAIN/$SITE -type d -exec chmod 700 {} \;
-
find /var/www/$DOMAIN/$SITE -type f -exec chmod 600 {} \;
Set the ACL :
-
setfacl -R -m user:www-data:rX /var/www/$DOMAIN/$SITE
-
setfacl -R -m d:user:www-data:rX /var/www/$DOMAIN/$SITE
Import MySQL database
If not already done, dump the database on the old server :
mysqldump -u root -p NOM_DE_LA_BASE > /tmp/mysqldump
Then, on the web VServer :
$ mysql -u root -p NOM_DE_LA_BASE
mysql> source DUMP_FILE;
Web site deletion
DNS and emails
Remove all entries for the hosted website in the dns (if we host it), and all mail aliases for the site in the corresponding postfix valias file.
Mounted directories
You have to unmount the logs in the home directory of the site's user in the webmasters vserver:
umount /var/lib/vservers/webmasters/home/webmasters/$DOMAIN/$SITE/log
Apache
Sur le vserver web,
- Desactiver le site:
sudo a2dissite $SITE.$DOMAIN.$TLD ; sudo /etc/init.d/apache2 reload
- Supprimer la conf du vhost correspondant: =rm -f /etc/apache2/site-available/$SITE.$DOMAIN.$TLD
- Supprimer la conf php: sudo rm -rf /etc/php5/suphp/$DOMAIN/$SITE (ou sudo rm -rf /etc/php5/suphp/$DOMAIN s'il s'agissait du site du domaine)
Mysql
Supprimer la base de données et l'utilisateurice dans le mysql du vserver web:
mysql -u root -p mysql
mysql> select User from db where Db="DOMAIN_TLD_SITE";
Vous obtenez l'identifiant $USER correspondant au site pour mysql, utilisez le pour supprimer toute references a ce site:
mysql> delete from user where User="$USER";
mysql> delete from db where User="$USER";
mysql> drop database DOMAIN_TLD_SITE;
Users
Sur les 2 vserver, il vous faut supprimer l'utilisateurice pour le site
Files
Il faut supprimer le home de l'utilisateurice dans le vserver webmasters et le repertoire correspondant au site dans /var/www/$DOMAIN/$SITE (ou juste /var/www/$DOMAIN si c'etait le site du domaine). Il faut egalement se debarasser des lgs d"apache dans /var/log/frangipane/web/$DOMAINE/$SITE
On the web VServer, delete
/var/tmp/frangipane/$UID_DU_DOMAINE_PARENT/$SITE/php/{upload,sessions}.
Note: actuellement la suppression du home dans le vserver webmasters semble problematique: la commande echoue car le repertoire log/ semblerait etre utilise, meme si lsof ne renvoie rien...)