Scripts for WebSite.
Warning : 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
In the web
VM.
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 Scripts
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 VMs public IP ;/etc/bind/db.DOMAIN.TLD
- add a DNS MX record, pointing to the domain managing email for
hosted domains ;
/etc/bind/db.DOMAIN.TLD
- set up some non-www-related stuff, as explained on Scripts.
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 remplaçant tout les . par des _, ex : infokiosques_net, infokiosques_net_dev, gendertrouble_org_motenai, etc.
Cet utilisateur doit être créé en double, un sur le serveur web pour le site, et l'autre sur la VM d'accès sftp des webmasters, et évidemment avec les mêmes valeurs de UID/GID. Les seules différences entre les 2 sont juste :
- le chemin du $home des users, puisque sur la VM web,
home=/var/www/DOMAIN.TLD/SITE, et sur la VM webmaster,
/home/webmasters/DOMAIN.TLD/SITE
- Sur la VM 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 ça en place:
- choisir un UID=GID : prendre le plus petit nombre dispo au-dessus de 10000
- créer l'user sur la VM 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 la VM 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 vm que l'user a bien les meme UID/GID
- créer ses aliases mail
USER@web.boum.org
etUSER@webmasters.boum.org
, pointant verswebmaster@SITE.DOMAINE.TLD
, dans/etc/postfix/valias
, tout à la fin du fichier, dans la section "UIDs créés par le groupe Apache" ; puis lancersudo postmap /etc/postfix/valias
pour que les modifications soient prises en compte.
Répertoire du site
Situé sur la VM 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/$DOMAIN/$SITE/php/{upload,sessions}
chmod -R 700 /var/tmp/frangipane/$DOMAIN/$SITE
chown -R UID GID /var/tmp/frangipane/$DOMAINE/$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 la VM webmaster vers le /var/www/DOMAIN/SITE de cette VM (puisqu'on y a monté le /var/www de la VM web)
ln -s /var/www/DOMAIN/SITE /home/webmasters/DOMAIN/SITE/www
Fichier de configuration Apache
Sur la VM 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 maisondelagreve.boum.org, qui est bien
fignolé et a le SSL activé, et y remplacer :
- 'boum.org' par le nom de domaine du site
- 'maisondelagreve' 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 Discussion, c'est là bas qu'on y réfléchit.
PHP configuration
On the web VM...
- create
/etc/php5/fpm/pool.d/SITE.DOMAIN.conf
, by copying/etc/php5/fpm/pool.d/gendertrouble.org.conf
, and adapting; searching 'gendertrouble' in the copied file can help.
MySQL
On the mailsql VM, create :
- a MySQL database
- the related omnipotent MySQL called the same
- see http://boum.org/id_mysql.php and WebSite for the naming conventions
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 à la VM webmaster où tous les fichiers nécessaires sont montés (cf WebSite et Discussion).
L'aide utilisateurice à ce sujet est sur https://aide.boum.org/AutoAideWeb.
Activer le site
sur la VM web :
sudo a2ensite SITE.DOMAIN.TLD && sudo /etc/init.d/apache2 reload
Logs
Si les webmasters du site souhaitent avoir accès aux logs de leur site, on peut leur mettre à dispo dans leur home sur la VM webmasters en suivant ces instructions.
Apache
Apache envoie ses logs au syslog-ng sur la VM logs, 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/
dans la VM logs, à la
première visite.
Le répertoire de logs du site est monté dans le home du webmaster correspondant dans la VM webmaster ; au démarrage, ça se fait tout seul, mais à la création d'un site il faut :
Le répertoire de logs du site est monté dans le home du webmaster en l'exportant via nfs depuis la VM logs.
- créer, en tant que root, le répertoire
webmasters:/home/webmasters/$DOMAIN/$SITE/log
- ajouter la bonne ligne qu'il faut dans
/etc/exports
sur logs - ajouter la bonne ligne qu'li faut dans le
/etc/fstab
de webmasters
Then restart the webmasters VM so that this bind mount is seen inside it.
Migrate website to Git + sftp
addgroup --gid 10037 --force-badname nio
sur web :
adduser --home /var/www/indymedia.org/newnantes \
--shell /bin/false --uid 10036 --gid 10037 \
--force-badname --disabled-password nio_git
# effacer le contenu de /var/www/indymedia.org/newnantes
adduser --home /var/lib/frangipane/web/indymedia.org/newnantes \
--shell /bin/false --uid 10037 --gid 10037 \
--force-badname --disabled-password nio_ftp
# effacer le contenu de /var/lib/frangipane/web/indymedia.org/newnantes
sur webmasters :
adduser --home /home/webmasters/indymedia.org/nio_git \
--shell /usr/bin/git-shell \
--uid 10036 --gid 10037 --force-badname --disabled-password nio_git
adduser --home /home/webmasters/indymedia.org/nio_ftp \
--shell /usr/lib/openssh/sftp-server \
--uid 10037 --gid 10037 --force-badname --disabled-password nio_ftp
sur web :
find /var/www/indymedia.org/newnantes -type d -exec chmod 700 {} \;
find /var/www/indymedia.org/newnantes -type f -exec chmod 600 {} \;
setfacl -R -m user:www-data:rX /var/www/indymedia.org/newnantes
setfacl -R -m d:user:www-data:rX /var/www/indymedia.org/newnantes
find /var/lib/frangipane/web/indymedia.org/newnantes -type d -exec chmod 700 {} \;
find /var/lib/frangipane/web/indymedia.org/newnantes -type f -exec chmod 600 {} \;
setfacl -R -m user:www-data:rX /var/lib/frangipane/web/indymedia.org/newnantes
setfacl -R -m d:user:www-data:rX /var/lib/frangipane/web/indymedia.org/newnantes
setfacl -R -m user:nio_ftp:rX /var/www/indymedia.org/newnantes
setfacl -R -m d:user:nio_ftp:rX /var/www/indymedia.org/newnantes
sur web, répertoires temporaires PHP :
mkdir -p /var/tmp/frangipane/indymedia.org/nantesnew/php/{upload,sessions}
chmod -R 700 /var/tmp/frangipane/indymedia.org/nantesnew
chown -R 10037:10037 /var/tmp/frangipane/indymedia.org/nantesnew
sur webmasters :
for i in git ftp ; do
chown root:nio /home/webmasters/indymedia.org/nio_${i}
chmod 750 /home/webmasters/indymedia.org/nio_${i}
mkdir /home/webmasters/indymedia.org/nio_${i}/.ssh
# y mettre authorized_keys
chown -R root:nio /home/webmasters/indymedia.org/nio_${i}/.ssh
chmod -R g-w,g+rX,o-rwx /home/webmasters/indymedia.org/nio_${i}/.ssh
done
mounter ~nio_ftp
de web vers webmasters :
sur webmasters :
mkdir /home/webmasters/indymedia.org/nio_ftp/www
- éditer /etc/fstab et bind mounter /var/www/indymedia.org/newnantes dans le nouveau répertoire www.
- puis redémarré webmasters pour que ce soit pris en compte
dans webmasters:
# Oscailt
FTPDIRS="cache logs attachments"
### or
# SPIP
FTPDIRS="IMG local tmp"
cd /var/www/indymedia.org/newnantes
git init
chown -R nio_git:nio_git .git
chmod o-rwx .git
sudo -u nio_git mkdir $FTPDIRS
chown o-rwx *
for dir in $FTPDIRS ; do echo "/${dir}/" >> .gitignore ; done
chown nio_git:nio .gitignore
chmod o-rwx .gitignore
sudo -u nio_git git add .gitignore
sudo -u nio_git git commit -m 'Ignorer les repertoires non-Git'
sur web :
# Oscailt
FTPDIRS="cache logs attachments"
### or
# SPIP
FTPDIRS="IMG local tmp"
for dir in $FTPDIRS ; do
sudo -u nio_ftp mkdir "/var/lib/frangipane/web/indymedia.org/newnantes/${dir}"
done
sur l'hôte :
# Oscailt
FTPDIRS="cache logs attachments"
### or
# SPIP
FTPDIRS="IMG local tmp"
for dir in $FTPDIRS ; do
mount --bind -o acl \
/var/lib/vservers/web/var/lib/frangipane/web/indymedia.org/newnantes/${dir} \
/var/lib/vservers/web/var/www/indymedia.org/newnantes/${dir}
done
puis redémarré web pour que ce soit pris en compte, et ajouté cette
commande à /etc/init.d/boum-mountall.sh
Mis un hook Git post-update
dans
/var/www/indymedia.org/newnantes/.git/hooks/
, pris sur
http://utsl.gen.nz/git/post-update, pour que la working copy (qui
n'est pas bare) soit mise à jour lorsqu'on pousse des modifs dessus.
Rendu le hook exécutable.
copier le contenu des répertoires non Git
copier le reste du vieux site dans le Git, git add et git commit
adapter les jobs procreaper
logs : sur webmasters, faire un lien symbolique depuis l’endroit où les logs seront montés vers l’endroit où les webmasters peuvent les regarder ; cf. les sites fastcgi existants, comme exemples.
nettoyer vieux site : - désactiver login sftp anciens sites - ...
Web site importation
First, create the new site instance, without enabling it. Then, on the web VM...
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 mailsql VM :
$ 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 VM if they are there:
umount /var/lib/vservers/webmasters/home/webmasters/$DOMAIN/$SITE/log
Apache
Sur la VM 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 de la VM mailsql:
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 VMs, il vous faut supprimer l'utilisateurice pour le site
Files
Il faut supprimer le home de l'utilisateurice dans la VM 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 logs d'apache dans /var/log/frangipane/web/$DOMAINE/$SITE
On the web VM, delete
/var/tmp/frangipane/$DOMAINE_PARENT/$SITE/php/{upload,sessions}
.
Note: actuellement la suppression du home dans la VM webmasters semble problematique: la commande echoue car le repertoire log/ semblerait etre utilise, meme si lsof ne renvoie rien...)