===== Redmine ===== ==== pré-requis ==== * ruby (1.9.3) * rails * une connexion internet acceptant le https * git * un utilisateur redmine sans les droits sudo ==== Installation de Redmine ==== === Téléchargement === Nous utiliserons git mais il peut aussi être récupéré via svn à l'adresse http://svn.redmine.org/redmine cd /opt git clone https://github.com/redmine/redmine === Installation === == Installation et utilisation de MySql == Comme toujours, gem va avoir besoin de composants présents dans des librairies annexes sudo apt-get install libmysql-ruby libmysqlclient-dev mysql-client rvmsudo gem install mysql2 Ensuite il faut créer un utilisateur redmine et une base de même nom sur phpmyadmin. Et enfin il faut donner tous les renseignement necessaires à redmine, ceci ce trouve dans /opt/databse.yml production: adapter: mysql2 database: redmine host: sql.minet.net username: redmine password: passwd == Bundler pour les autres plugins == On va avoir besoin de bundler pour récupérer toutes les gems dont redmine a besoin. gem install bundler Un Gemfile est donné avec les sources de redmine lors du git, il faut donc executer bundler dans le dossier d'installation de redmine, ici /opt/redmine. rmagick a besoin de dépendances supplémentaires pour fonctionner. sudo apt-get install libmagickwand-dev rvmsudo bundle install --without development test == Generation des Token == rake generate_secret_token Si la commande renvoie une erreur dans /opt/redmine essayer : rvmsudo rake generate_secret_token == On peuple la base sql == On crée la structure de la base : RAILS_ENV=production rake db:migrate Puis on la peuple (il demande aussi la langue a ce niveau là) : RAILS_ENV=production rake redmine:load_default_data == Dossiers nécessaires à redmine == mkdir -p tmp tmp/pdf public/plugin_assets sudo chown -R redmine:redmine files log tmp public/plugin_assets sudo chmod -R 755 files log tmp public/plugin_assets == Test (non nécessaire) == Ceci ne fonctionne qu'en local : rvmsudo ruby script/rails server webrick -e production **Ceci est uniquement pour tester si l'installation est complète !** ==== Déploiement sur apache2 -> très mauvaise idée ! ==== ==== Déploiment sur nginx ==== === Utilisation d'unicorn === == Installation == Comme d'hab avec ruby on utilise gem. On se place dans /opt/redmine et on édite le Gemfile fourni pour que le versionning corresponde. On ajoute : gem "unicorn" Puis on installe : rvmsudo gem install unicorn == Configuration == On crée un fichier unicorn.rb dans /opt/redmine/ avec le contenu suivant : $unicorn_user = "redmine" $unicorn_group = "redmine" worker_processes 2 working_directory '/opt/redmine' listen "127.0.0.1:3000" timeout 30 pid "tmp/pids/unicorn.pid" stderr_path "log/unicorn.log" stdout_path "log/unicorn.log" preload_app true before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! end after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection begin uid, gid = Process.euid, Process.egid user, group = $unicorn_user, $unicorn_group target_uid = Etc.getpwnam(user).uid target_gid = Etc.getgrnam(group).gid worker.tmp.chown(target_uid, target_gid) if uid != target_uid or gid != target_gid Process.initgroups(user, target_gid) Process::GID.change_privilege(target_gid) Process::UID.change_privilege(target_uid) end rescue if RAILS_ENV = "development" STDERR.puts "could not change user, oh well" else raise e end end end Enfin on crée le script de démarrage dans /etc/init.d/redmine avec le contenu suivant : #!/bin/bash # # unicorn_rails_redmine Startup script for unicorn. # # chkconfig: - 85 15 # description: redmine on unicorn stabin:/usr/local/rvm/gems/ruby-1.9.3-p448@global/bin:/usr/local/rvm/gems/ruby-1.9.3-p448/bin:/usr/local/rvm/rt/stop script. # # # set rvm environment valiables. # export PATH=/usr/local/rvm/gems/ruby-1.9.3-p448@redmine/bin:/usr/local/rvm/gems/ruby-1.9.3-p448@global/bin:/usr/local/rvm/gems/ruby-1.9.3-p448/bin:/usr/local/rvm/rubies$ export GEM_HOME=/usr/local/rvm/gems/ruby-1.9.3-p448@redmine export GEM_PATH=/usr/local/rvm/gems/ruby-1.9.3-p448@redmine:/usr/local/rvm/gems/ruby-1.9.3-p448@global:/usr/local/rvm/gems/ruby-1.9.3-p448 export BUNDLE_PATH= export MY_RUBY_HOME=/usr/local/rvm/rubies/ruby-1.9.3-p448 export IRBRC=/usr/local/rvm/rubies/ruby-1.9.3-p448/.irbrc set -u set -e APP_NAME=redmine APP_ROOT="/opt/$APP_NAME" CNF="$APP_ROOT/unicorn.rb" PID="$APP_ROOT/tmp/pids/unicorn.pid" ENV=production UNICORN_OPTS="-D -E $ENV -c $CNF" old_pid="$PID.oldbin"bin:/usr/local/rvm/gems/ruby-1.9.3-p448@global/bin:/usr/local/rvm/gems/ruby-1.9.3-p448/bin:/usr/local/rvm/ cd $APP_ROOT || exit 1 sig () {bin:/usr/local/rvm/gems/ruby-1.9.3-p448@global/bin:/usr/local/rvm/gems/ruby-1.9.3-p448/bin:/usr/local/rvm/ test -s "$PID" && kill -$1 `cat $PID` } oldsig () { test -s $old_pid && kill -$1 `cat $old_pid` } case ${1-help} in start) sig 0 && echo >&2 "Already running" && exit 0 cd $APP_ROOT ; unicorn_rails $UNICORN_OPTS ;; stop) sig QUIT && exit 0 echo >&2 "Not running" ;; force-stop) sig TERM && exit 0 echo >&2 "Not running" ;; restart|reload) sig HUP && echo reloaded OK && exit 0 echo >&2 "Couldn't reload, starting instead" unicorn_rails $UNICORN_OPTS ;; upgrade) sig USR2 && exit 0 echo >&2 "Couldn't upgrade, starting instead" unicorn_rails $UNICORN_OPTS ;; rotate) sig USR1 && echo rotated logs OK && exit 0 echo >&2 "Couldn't rotate logs" && exit 1 ;; *) echo >&2 "Usage: $0 " exit 1 ;; esac On le rend exécutable et on le teste : sudo chmod +x /etc/init.d/redmine sudo service redmine start Puis il faut l'activer au démarrage de la VM : sudo update-rc.d redmine defaults === On passe a Nginx === == Installation == sudo apt-get install nginx == Configuration == On va venir éditer /etc/nginx/sites-available/redmine pstream redmine { server 127.0.0.1:3000; } server { server_name redmine.minet.net; root /opt/redmine/public; proxy_redirect off; location / { try_files $uri/index.html $uri.html $uri @ruby; } location @ruby { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://redmine; } } Puis on enable redmine sur le serveur : sudo ln -s /etc/nginx/sites-available /etc/nginx/sites-enable Enfin, on redémarre nginx ! sudo /etc/init.d/nginx restart ==== Et les mails ? (parce que le spam c'est bon :D) ==== Les mails ont besoin d'un gem qui ne s'installe pas forcément automatiquement : gem install mail Puis on renseigne le fichier /opt/redmine/config/configuration.yml default: email_delivery: delivery_method: :smtp smtp_settings: address: smtp.minet.net port: 25 ==== MAJ ==== Arrêter le service : service redmine stop - Telecharger la nouvelle version et la copier dans le dossier /opt/redmineXXX - Copier le contenu de /opt/redmine vers /opt/redmine.oldXXX - Supprimer entièrement le contenu de /opt/redmine/ avant d'y copier les fichiers de la nouvelle version - Copier depuis la version précédente les fichiers unicorn.rb, config/database.yml, config/configuration.yml, public/themes/MiNET - Se placer dans le dossier /opt/redmine puis exécuter : rvmsudo bundle install - Exécuter : rake generate_secret_token - Puis : rake config/initializers/session_store.rb - Enfin : chown -R redmine:redmine ./ === Test === Il faut ensuite relancer le service : service redmine start Si tout démarre, il suffit d'aller vérifier dans la configuration de redmine sur le site que tout est ok et que la version est bien la plus à jour et dans ce cas c'est gagné ! == Sinon... == En cas d'erreur de démarrage unicorn, il faut aller voir les logs : /opt/redmine/log/