Autohébergement d'un gitlab
L'idée de ce billet est d'avoir un github chez soi. Plusieurs raisons à cela :
- J'ai des dépôts privés. Github propose des dépôts privés payants, mais je n'ai pas confiance dans github pour respecter ma vie privée.
- J'ai des dépôts semi-privés. Idem à ci-dessus, je veux un cercle restreint.
- Je ne sais pas quel est l'avenir de github. Google code a fermé, gitorious de même. Je n'ai pas envie de devoir déménager un jour à la va-vite. Voir Et si github fermait.
L'outil git me permet de versionner :
- mes codes sources (scripts d'adminsys, codes scientifiques).
- mes articles, rédaction de projets, etc.
- mes figures.
Je garde des dépôts séparés pour :
- mes wiki et blog (géré par ikiwiki)
- mes dépôts git-annex (qui me permettent de synchroniser des fichier dont la masse totale fait plusieurs gigaoctets).
Il faut donc une gestion fine des permission, ce que gitweb ne permet pas (à ma connaissance).
Deux possibilités :
- gitlab : version entreprise + version communautaire. Des fonctionnalités ne sont pas disponibles dans la version communautaire comme le support de git-annex.
- Gogs : communautaire, plus jeune et prometteur.
A terme, si Gogs se développe, il sera intéressant. Pour l'instant, je reste sur gitlab qui est une valeur sûre en terme de maturité.
Framasoft ne propose pas (encore) d'explications pour installer gitlab sur sa machine, comme il le fait pour d'autres de ses services sur framacloud. On va donc s'atteler à la tâche (A noter que j'écris la suite de mémoire, je n'ai pas eu de difficultés particulières à la configuration une fois que j'ai su comment j'allais m'y prendre).
On commence à suivre les instructions d'installation sur https://about.gitlab.com/downloads/#debian8. En effet, l'application est empaquetée, ce qui nous facilite grandement la vie.
Ensuite, on va dans /etc/gitlab/gitlab.rb pour faire tourner notre instance sur le port 8888
external_url 'https://git.sciunto.org:8888'
# Unicorn
unicorn['worker_timeout'] = 600
unicorn['port'] = 8888
# Web server
web_server['external_users'] = ['www-data']
# On desactive nginx
nginx['enable'] = false
ci_nginx['enable'] = false
On n'oublie pas l'aspect backup, à agrémenter selon l'infrastructure
# For setting up backups
J'ai une instance apache sur ce serveur, je vais donc faire en sorte que apache serve les pages qui sont sur le port 8888. En clair, on mets en place un reverse proxy. Ma configuration est basée sur cet exemple, on n'oubliera pas de modifier le port 8080 pour le 8888. Une liste de modules est présente dans l'en-tête. Ils doivent être activés avec la commande a2enmod.
On reconfigure et relance tout le monde :
sudo gitlab-ctl reconfigure
sudo service apache reload
Après ça, on a un beau gitlab qui tourne.