Installation de Gitosis et RedMine sur squeeze - The Debian way!
Nous allons présenter dans ce tuto l'installation d'un dépôt Git et du gestionnaire de projet RedMine (optionnel évidemment...).
Debian a mis à notre disposition des paquets dans les dépôts pour ces deux applications; Comme vous êtes un bon administarteur (fainéant comme il se doit, et très attaché à apt) vous allez, tout comme moi faire l'installation avec apt-get ou aptitude. Les avantages sont nombreux, le plus évident étant les mises à jours simplifiées et la bonne intégration à votre système.
Git est un logiciel de gestion de versions décentralisé. C'est un logiciel libre créé par Linus Torvalds, le créateur du noyau Linux, et distribué selon les termes de la licence publique générale GNU version 2 (Git). Nous avons choisis Gitolite qui est une version plus sécurisée de Git. Gitosis permet l'accès au dépôt Git avec un seul utilisateur (utilisateur système) et il permet de filtrer les accès au dépôt par les opérateurs via des clef SSH.
RedMine RedMmine est une application web Open Source de gestion complète de projet en mode web, développé en Ruby sur la base du framework Ruby on Rails (Redmine).
Gitosis
Installation de Gitosis
Comme toujours ches Debian, l'installation est très simple:
apt-get install gitosis ... Les paquets supplémentaires suivants seront installés : python-pkg-resources python-setuptools Paquets suggérés : git-daemon-run gitweb python-distribute python-distribute-doc Les NOUVEAUX paquets suivants seront installés : gitosis python-pkg-resources python-setuptools ...
Configuration
Nous créons l'utilisateur "git", le seul à avoir l'accès au dépôt et à la configuration:
adduser --system --shell /bin/bash --gecos 'git version control' --group --disabled-password --home /var/git git Ajout de l'utilisateur système « git » (UID 113) ... Ajout du nouveau groupe « git » (GID 117) ... Ajout du nouvel utilisateur « git » (UID 113) avec pour groupe d'appartenance « git » ... Création du répertoire personnel « /var/git »...
Configuration Client/Admin
Pour avoir accès à la configuration des dépôts et des accès utilisateurs à distance, nous créons sur une machine cliente une clef SSH:
Création de la clef:
ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/laurent/.ssh/id_dsa): /home/laurent/.ssh/gitosis-admin-web Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/laurent/.ssh/gitosis-admin-web. Your public key has been saved in /home/laurent/.ssh/gitosis-admin-web.pub. The key fingerprint is: 99:xx:24:xx:ef:xx:d2:xx:87:xx:32:xx:1a:xx:b7:xx laurent@sidlol The key's randomart image is: +--[ DSA 1024]----+ | | | | | | | . .. o | | ..xx..S | | xx.+ | | ..xx o | | .oE x x | | .+xx o | +-----------------+
Il faut ensuite envoyer le clef générée sur le serveur:
scp /home/laurent/.ssh/gitosis-admin-web.pub web-git:/tmp/gitosis-admin-web.pub gitosis-admin-web.pub 100% 604 0.6KB/s 00:00
web-git (ci-dessus) est le nom configuré dans ssh pour l'accès au serveur:
cat ~/.ssh/config Host web-git HostName IP_du_serveur Port port_ssh User git PasswordAuthentication no IdentityFile ~/.ssh/gitosis-admin-web
Sur le serveur: Nous intégrons la clef SSH du "client" et initialisons le dépôt gitosis-admin.git.
su - git git@web:~$ gitosis-init < /tmp/gitosis-admin-web.pub Initialized empty Git repository in /var/git/repositories/gitosis-admin.git/ Reinitialized existing Git repository in /var/git/repositories/gitosis-admin.git/
Sur le client: Nous clonons le dépôt gitosis-admin.git localement
git clone git@web-git:gitosis-admin.git Cloning into 'gitosis-admin'... remote: Counting objects: 5, done. remote: Compressing objects: 100% (4/4), done. remote: Total 5 (delta 0), reused 5 (delta 0) Receiving objects: 100% (5/5), done.
Vérification:
cd gitosis-admin/ vdir total 8 -rw-r--r-- 1 laurent laurent 84 mars 4 11:25 gitosis.conf drwxr-xr-x 2 laurent laurent 4096 mars 4 11:25 keydir
Utilisation de gitosis
Ajouter un utilisateur
Récupérez le clef publique de l'utilisateur, et copiez-là dans le répertoire .../gitosis-admin/keydir
Editez la configuration de gitosis pour accorder à votre utilisateur les droits sur un dépôt:
nano gitosis.conf
Ajoutez la clef:
git add gitosis.conf keydir/x.pub
Modifiez le dépôt local:
git commit -m "Ajout de l'utilisateur x." [master b8aaa02] Added x user. 2 files changed, 2 insertions(+), 1 deletions(-) create mode 100644 keydir/x.pub
Assurez-vous que le dépôt local est synchronisé au dépôt distant:
git pull --rebase Current branch master is up to date.
Enfin, "poussez" les modification vers le serveur:
git push Counting objects: 8, done. Delta compression using up to 4 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (5/5), 888 bytes, done. Total 5 (delta 2), reused 0 (delta 0) To git@karma-git:gitosis-admin.git bf37bcf..b8aaa02 master -> master
Ajouter un dépôt
Ajoutons maintenant un dépôt à partir du "client" Nous ajoutons le dépôt "portailmadagascar"
nano gitosis.conf
[gitosis] [group gitosis-admin] writable = gitosis-admin members = laurent@sidlol [group portailmadagascar] writable = portailmadagascar members = laurent@sidlol
Activons le dépôt:
git add gitosis.conf git commit -m 'Ajout du dépôt portailmadagascar' [master b0192ad] Ajout du dépôt portailmadagascar Committer: Laurent L <laurent@sidlol.zehome.org> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly: git config --global user.name "Your Name" git config --global user.email you@example.com After doing this, you may fix the identity used for this commit with: git commit --amend --reset-author 1 files changed, 3 insertions(+), 0 deletions(-)
Envoyons la modification sur le serveur:
git push origin master Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 389 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To git@web-git:gitosis-admin.git e9439fc..b0192ad master -> master
Localement, sur le client, le dépôt n'a pas encore été initialisé; Il suffit maintenant de le "récupérer" (pull) depuis le serveur: Initialisation locale du dépôt:
cd ~/git git clone web-git:portailmadagascar.git Cloning into 'portailmadagascar'... Initialized empty Git repository in /var/git/repositories/portailmadagascar.git/ warning: You appear to have cloned an empty repository.
"Peupler" votre dépôt
Nous allons maintenant "peupler" notre dépôt (lui ajouter des fichiers):
Il suffit de copier vos fichiers dans le répertoire ~/git/portailmadagascar, de les ajouter au dépôt, puis de les envoyer au serveur:
git push origin master Counting objects: 6663, done. Delta compression using up to 4 threads. Compressing objects: 100% (6290/6290), done. Writing objects: 100% (6663/6663), 57.53 MiB | 55 KiB/s, done. Total 6663 (delta 747), reused 0 (delta 0) To web-git:portailmadagascar.git * [new branch] master -> master
git clone web-git:portailmadagascar.git cd portailmadagascar git add . git commit -m "Initial commit"
Initial commit
- Please enter the commit message for your changes. Lines starting
- with '#' will be ignored, and an empty message aborts the commit.
- On branch master
- Initial commit
- Changes to be committed:
- (use "git rm --cached <file>..." to unstage)
- new file: .htaccess
- new file: WP PROJET ubermenu-wordpress-mega-menu-plugin.zip
- new file: article.zip
- new file: article/admin.js
...
Avant d'envoyer au serveur, configurons nos identifiants:
git config --global user.name "lol" git config --global user.email lol@serveur.tld git commit --amend --reset-author git push origin master
Déployer un site web à partir de votre dépôt
Git va beaucoup plus loin que la simple gestion des dépôts, nous allons détailler le déploiement d'un site à partir de Git: Tout d'abord nous peuplons notre site avec le dépôt initial:
cd /var/www git clone /var/git/repositories/votresite.git votresite chown -R www-data:www-data /var/www/votresite
Nous créons ensuite un script chargé de mettre à jour le site:
# nano /usr/local/bin/MAJ-Votresite
#!/bin/bash cd /var/www/votresite git pull exit
Nous le rendons exécutable:
chmod a+x /usr/local/bin/MAJ-Votresite
Nous créons le "hooks" post-receive qui sera chargé de lancer la MAJ:
nano /var/git/repositories/votresite.git/hooks/post-receive
#!/bin/sh cd /usr/local/bin/ sudo -u www-data MAJ-Votresite
Nous donnons à git le droit d'utiliser sudo pour le script:
visudo
git ALL = (www-data) NOPASSWD: /usr/local/bin/MAJ-Votresite
Maintenant, à chaque mise à jour du dépôt, le site web sera lui aussi automatiquement mis à jour!
Redmine
Installation
Nous commençons par préparer la base sql. (Cette option est facultative, vous avez l'option de configurer et peupler la base automatiquement avec dpkg). Nous avons choisi ici de garder la contrôle du nom de la base et de l'utilisateur mysql)?
mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7327
Server version: 5.1.49-3 (Debian)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database baseredmine character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> create user 'mysqlredmine'@'localhost' identified by 'votre_mot-de-passe-pour-redmine';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on baseredmine.* to 'mysqlredmine'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
Installation redmine-mysql
apt-get install redmine redmine-mysql libapache2-mod-passenger
Configurer la base: NON (Sauf si vous avez décidé de laisser dpkg s'occuper de ça)
nano /etc/redmine/default/database.yml
production: adapter: mysql database: baseredmine host: localhost port: username: mysqlredmine password: votre_mot-de-passe-pour-redmine encoding: utf8
Nous créons maintenant la structure de la base de donnée:
cd /usr/share/redmine/ RAILS_ENV=production rake db:migrate (in /usr/share/redmine) == Setup: migrating ========================================================== -- create_table("attachments", {:force=>true}) -> 0.0993s -- create_table("auth_sources", {:force=>true}) -> 0.0796s ...
Et nous y intégrons les données par défaut (Optionnel, mais fortement conseillé par RedMine)
RAILS_ENV=production rake redmine:load_default_data (in /usr/share/redmine) Select language: bg, bs, ca, cs, da, de, el, en, en-GB, es, eu, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] fr ==================================== Default configuration data loaded.
Configuration de apache2
Nous allons maintenant configurer apache2 pour l'intégration de RedMine. Les choix sont multiples quant à cette installation; Nous avons choisi un sous répertoire de /var/www et la création d'un sous-domaine dans notre DNS.
ln -s /usr/share/redmine /var/www/redmine chown www-data:www-data /var/www/redmine/
nano /etc/apache2/sites-available/redmine
<VirtualHost ip_du_serveur:80>
ServerName redmine.serveur.tld
Alias /redmine /var/www/redmine/public
DocumentRoot /var/www/redmine/public
<Directory /var/www/redmine/public/>
PassengerAppRoot /var/www/redmine
RailsBaseURI /
AddHandler fastcgi-script .fcgi
Options Indexes +ExecCGI FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
/etc/apache2/sites-enabled/redmine service apache2 force-reload
Vous devriez maintenant être capable d'accéder à RedMine par votre navigateur (http://redmine.serveur.tld)
Login: admin Mot de passe: admin
Il est fortement recommandé de changer le mot de passe...
Configuration des mails
Vous devrez maintenant configurer l'envoi des mails par Redmine (Il suffit de modifier les données à la fin du fichier pour qu'elles "collent" à votre configuration.
cp /usr/share/doc/redmine/examples/email.yml.example /etc/redmine/default/email.yml nano /etc/redmine/default/email.yml
Activation du support tls pour la fonction mail
Il suffit d'ajouter un plugin en tapant les commandes suivantes:
cd /usr/share/redmine/ ruby script/plugin install git://github.com/collectiveidea/action_mailer_optional_tls.git db:migrate_plugins RAILS_ENV=production service apache2 restart
(en) Source: Setup redmine to send email using gmail
Intégrer le dépôt Gitosis
Il faut maintenant intégrer notre dépôt Git à Redmine:
Configurez le chemin du dépôt:
Sources
(en) Installing redmine and gitosis on a debian root server with mysql/
(fr) Installation et configuration de son serveur Git avec Gitosis sous Debian 5