Redmine — на мой взгляд, лучшее из свободно доступных решений для управления проектами, задачами, ведения статистики и отчетности и много еще чего. Все зависит от требований, фантазии и умений системного администратора \ разработчика.
Итак, перековыряв 100500 разных мануалов по установке и на Хабре и на официальном сайте и в куче блогов, я таки нашел инструкцию, которая от начала и до конца меня устроила и теперь дает возможность за 15 минут установить\обновить\переустановить Redmine 2.x, 3.x
В моем случае я осуществил переезд со старого Redmine 1.4 на новый 3.2, поэтому первые 8 пунктов в случае установки с 0 можно пропустить.
1. Создаю каталог, в который положу резервную копию старого Redmine
1 | mkdir /home/usefree/redmine-backup-files |
2. Становлюсь суперпользователем для возможности скопировать файлы.
1 | sudo -s |
3. Копирую файлы пользователей старого Redmine в созданный выше каталог.
1 | cp -f /var/lib/redmine/default/files/* /home/usefree/redmine-backup-files/ |
4. Создаю дамп базы данных. Здесь важно знать учетные данные пользователя, под которым Redmine обращается в базу. Подсмотреть можно в файле /каталог_с_Redmine/config/database.yml
/usr/bin/mysqldump --user redmine --password=password --skip-extended-insert redmine_default \ > /home/usefree/redmine-backup-files/redmine-backup.sql
5. Выхожу из учетной записи суперпользователя
1 | exit |
6. Перехожу в свой домашний каталог и создаю архив с данными резервной копии.
1 2 | cd /home/usefree/ tar -cvzf redmine-backup-files.tar.gz /home/usefree/redmine-backup-files |
7. Так как я разворачиваю новый Redmine на новом компьютере, то копирую файлы на этот новый компьютер с ip-адресом 192.168.0.222 в свой домашний каталог:
1 | scp redmine-backup-files.tar.gz 192.168.0.222:/home/usefree/ |
8. Зайдя на этот компьютер, извлекаю файлы
1 | tar -xvf redmine-backup-files.tar.gz |
9. Приступаю к собственно установке. Начинаю с обновления пакетов в системе.
1 2 | sudo apt-get update sudo apt-get upgrade |
10. Устанавливаю некоторые дополнительные пакеты.
1 2 3 4 5 6 7 | sudo apt-get install curl gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 curl -sSL https://get.rvm.io | bash -s stable --ruby=2.0.0 source /home/$USER/.rvm/scripts/rvm sudo apt-get install git git-core subversion sudo apt-get install imagemagick libmagickwand-dev sudo apt-get install libssl-dev |
11. Создаю каталог для Redmine, назначаю владельца каталога.
1 2 3 | cd /opt/ sudo mkdir redmine sudo chown $USER:$USER redmine |
12. Копирую из репозитория Redmine 3.2
1 2 3 | cd redmine/ svn co http://svn.redmine.org/redmine/branches/3.2-stable current cd current/ |
13. Создаю дополнительные каталоги, назначаю им права.
1 2 3 4 5 | mkdir -p tmp tmp/pdf public/plugin_assets sudo chown -R www-data:$USER files log tmp public/plugin_assets sudo chmod -R 775 files log tmp public/plugin_assets mkdir -p /opt/redmine/repos/svn /opt/redmine/repos/git sudo chown -R www-data:www-data /opt/redmine/repos |
14. Устанавливаю инструменты для работы с базой данных и пр.
1 2 3 | sudo apt-get install mysql-server libmysqlclient-dev sudo apt-get install -y libgmp3-dev sudo apt-get install ruby-dev |
15. Создаю базу данных
1 2 3 4 5 6 7 | mysql -uroot -p CREATE DATABASE redmine CHARACTER SET utf8; CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost'; FLUSH PRIVILEGES; EXIT; |
16. Создаю конфигурационные файлы
1 2 | cp config/configuration.yml.example config/configuration.yml cp config/database.yml.example config/database.yml |
17. Заполняю конфигурационный файл учетными данными для подключения к базе данных.
1 2 3 4 5 6 7 8 9 | vi config/database.yml production: adapter: mysql2 database: redmine host: localhost username: redmine password: "password" encoding: utf8 |
18. Установка менеджера gem-пакетов, установка пакетов зависимостей
1 2 | gem install bundler bundle install --without development test |
19. Импортирую данные из старой базы данных
1 | bundle exec rake generate_secret_token |
/usr/bin/mysql --user=redmine --password='password' redmine < \ /home/usefree/home/usefree/redmine-backup-files/redmine-backup.sql
20. Копирую старые файлы пользователей в новый каталог, назначаю им права
1 2 | cp -f /home/usefree/home/usefree/redmine-backup-files/* /opt/redmine/current/files/ sudo chown -R www-data:www-data /opt/redmine/current/files/ |
21. Инициализирую базу данных
1 | RAILS_ENV=production bundle exec rake db:migrate |
22. Устанавливаю Web-сервер и дополнительные пакеты
1 2 | sudo apt-get install apache2 apache2-dev libcurl4-gnutls-dev apache2 libapache2-svn \ libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl libauthen-simple-ldap-perl openssl |
23. Включаю модули web-сервера
1 | sudo a2enmod ssl perl dav dav_svn dav_fs rewrite |
24. Устанавливаю gem-пакет для связи Redmine и web-сервера
1 2 | gem install passenger
passenger-install-apache2-module |
Тут может появиться ошибка типа такой
1 | /Users/builder/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/bundler-1.13.0/lib/bundler/rubygems_ext.rb:23:in `source': uninitialized constant Gem::Source (NameError) |
Решение такое (может отличаться версия ruby):
1 | rm -rf ~/.rvm/gems/ruby-2.0.0-p647/gems/bundler-1.13.1 |
https://github.com/fastlane/fastlane/issues/6066
До конца выполнения последней команды будет сгенерирован код, который необходимо поместить в файл passenger.conf
(следующий пункт инструкции). Поместить, и только потом нажать Enter
!
25. Настраиваю конфигурационный файл модуля web-сервера для связи с redmine. Внимание! текст для файла
passenger.conf
генерируется в ходе выполнения предыдущей команды, для корректной установки до завершения выполнения предыдущей команды необходимо тот код, который она выдаст, поместить в файл /etc/apache2/conf-available/passenger.conf
. Об этом будет написано английским по серому!
1 2 3 4 5 6 | sudo vi /etc/apache2/conf-available/passenger.conf LoadModule passenger_module /home/usefree/.rvm/gems/ruby-2.0.0-p643/gems/passenger-5.0.25/buildout/apache2/mod_passenger.so PassengerRoot /home/usefree/.rvm/gems/ruby-2.0.0-p643/gems/passenger-5.0.25 PassengerDefaultRuby /home/usefree/.rvm/gems/ruby-2.0.0-p643/wrappers/ruby |
26. Включаю модуль
1 | sudo a2enconf passenger |
27. Загружаю библиотеку Redmine.pm для аутентификации в репозиториях
1 2 | sudo mkdir /usr/lib/perl5/Apache sudo ln -s /opt/redmine/current/extra/svn/Redmine.pm /usr/lib/perl5/Apache/ |
28. Настраиваю безопасное подключение по https с использованием самостоятельно сгенерированного сертификата.
1 2 3 4 5 | sudo mkdir /etc/apache2/ssl sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/apache2/ssl/redmine.key -out /etc/apache2/ssl/redmine.crt sudo chmod -R 740 /etc/apache2/ssl sudo chown -R www-data:www-data /etc/apache2/ssl |
29. Создаю конфигурационные файлы виртуальных хостов web-сервера.
1 2 | sudo vi /etc/apache2/sites-available/redmine-redirect.conf sudo vi /etc/apache2/sites-available/redmine.conf |
смотреть оригинальный пост
Install Redmine 2.5.x on Ubuntu 14.04 with Apache2, RVM and Passenger
30. Выключаю сайт по-умолчанию
1 | sudo a2dissite 000-default |
31. Возвращаем удаленный выше bundler
1 | gem install bundler |
32. Включаю сайт для redmine, перезапускаю web-сервер
1 2 | sudo a2ensite redmine redmine-redirect sudo service apache2 restart |
33. Настраиваю доставку уведомлений на почту при изменении в задачах.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | vi /opt/redmine/current/config/configuration.yml default: email_delivery: delivery_method: :smtp attachments_storage_path: /opt/redmine/current/files production: email_delivery: delivery_method: :smtp smtp_settings: address: "mailserver.yourdomain.com" port: 25 domain: "yourdomain.com" |
34. Если вдруг забыт пароль админа(admin), то переустановить его на ‘password’ можно так:
1 2 3 4 5 | mysql -u redmine -p #enter: UPDATE users SET hashed_password='353e8061f2befecb6818ba0c034c632fb0bcae1b' WHERE login='admin'; UPDATE users SET salt='' WHERE login='admin'; exit; |
Огромное спасибо Martin Denizet за труд по подготовке такой суперподробной и понятной инструкции.
Чуть погодя опишу установку некоторых дополнительных плагинов.