Installation de Gitosis et RedMine sur squeeze - The Debian way!

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

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

  1. Please enter the commit message for your changes. Lines starting
  2. with '#' will be ignored, and an empty message aborts the commit.
  3. On branch master
  4. Initial commit
  5. Changes to be committed:
  6. (use "git rm --cached <file>..." to unstage)
  7. new file: .htaccess
  8. new file: WP PROJET ubermenu-wordpress-mega-menu-plugin.zip
  9. new file: article.zip
  10. 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:

Créez un nouveau projet:

Configurez le chemin du dépôt:

Accédez au 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

(fr) Installer un serveur git auto hebergé