r22 - 08 Dec 2007 - 18:37:56 - IntRigeriYou are here: wiki.boum.org >  Frangipane Web  >  WebSite > WebSiteScripts

Web sites hosting (scripts)

Scripts for WebSite.

ALERT! : 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...)

Edit | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r22 < r21 < r20 < r19 < r18 | More topic actions
Frangipane.WebSiteScripts moved from Politburo.FranGiPaneSiteWebScripts on 12 Feb 2006 - 18:09 by IntRigeri - put it back
 
Powered by wiki.boum.org
Des idées, requêtes ou problèmes en rapport avec ce wiki ? écris nous !