Вступление
Так сложилось, что для ведения проекта не хватало обычного GitHub или GitBucket. Оснавная причина в хранении и контроле версий больших бинанрых файлов psd, 3dsmax и других. На самом деле вариантов решения масса, можно например было использовать Облачный диск или git Large Files System, представленный GitHub. Но взвесив все плюсы и минусы разных подходов к организации, мы пришли к связке GitLab + redmine.
Я не думаю, что есть смысл описывать продукты, я лишь приведу основные достоинства, которые подтолкнули нас на этот выбор.
Основные плюсы GitLab:
- Свой репозиторий.
- Тонкая настройка прав.
- Поддержка git lfs почти из коробки.
Также оба проекта Open Source.
Подготовка рабочего пространства
Решил не опускать всех мелочей, чтобы даже уровень пользователя «Первый раз вижу консоль Linux» мог поднять себе связку Redmine + GitLab.
Начнем с подготовки рабоченго пространства, а именно с установки sudo, так как использовать систему под пользователем root не есть хорошо. А также при установке от root возникали некоторые проблемы с GitLab:
#Также установит nano, если у вас его вдруг нет.
apt-get install nano sudo -y
Настроим sudo, добавив своего пользователя:
#Создадим пользователя, ответив на вопросы и задав пароль
<username>
# Там уже будет пример пользвателя root. Нужно лишь повторить с именем своего пользователя.
nano /etc/sudoers
#Перейдем на пользователя
sudo su <username>
Установка Redmine
Мы будем использовать Nginx,Thin и MySQL. Если по религиозным причинам вам необходима PostgreSQL, читайте заметки после кода, я буду указывать где менять настройки. Также вместо Thin можно использовать Unicorn, но мы опустим его установку в рамках данной статьи.
Установка сводится к следующему:
Установка Nginx на роль внешнего веб-сервера
sudo apt-get update
sudo apt-get install nginx -y
Установка базы данных
# База данных MySql
apt-get install mysql-server mysql-client libmysqlclient-dev
# База данных PostgreSQL
apt-get install postgresql
При установке MySql может запросить пароль супер пользователя. Придумайте и запишите его. Теперь нам нужно создать базу данных и пользователя дня нее.
# Если был выбран MySql
mysql -uroot -p
CREATE DATABASE redmine CHARACTER SET utf8;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
exit
# Если был выбран PostgreSQL
su postgres
psql
CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'password' NOINHERIT VALID UNTIL 'infinity';
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine TEMPLATE template0;
q
exit
Установка самого Redmine
Нам потребуются загаловки для компиляции.
# Внимание: libmagickcore-dev libmagickwand-dev потянут за собой много зависимостей. Если система была не чистой смотрите.
apt-get install libmagickcore-dev libmagickwand-dev imagemagick build-essential
Теперь мы готовы скачать свежий redmine. На момент написания статьи это 3.2.0. Скачаем и положим в рабочую директорию.
cd /tmp
mkdir redmine
cd redmine
wget http://www.redmine.org/releases/redmine-3.2.0.tar.gz
tar -zxvf ./redmine-3.2.0.tar.gz
mv ./redmine-3.2.0 /usr/local/share/redmine
Redmine написан на Ruby и требует его. Устанавливаем.
# Потянет много зависимостей.
apt-get install ruby ruby-dev rubygems libruby
# Нам потребуется bundler это почти как apt-get только для ruby
gem install bundler
Добавим thin.
nano /usr/local/share/redmine/Gemfile
#после добавляем gem "thin"
Установим все необходимые gem'ы для redmine:
cd /usr/local/share/redmine
#ЗАМЕТКА: Если вы используете PostgreSQL то замените --without PostgreSQL на --without mysql
bundle install --without development test postgresql sqlite
Осталось настроить.
cp config/database.yml.example config/database.yml
mv public/dispatch.fcgi.example public/dispatch.fcgi
nano config/database.yml
Изменяем production примерно к такому виду.
ЗАМЕТКА: Если вы устанавливаете PostgreSQL сделайте по примеру внизу файла database.yml. Также акуратней с табуляцией т.к *.yml достаточно специфичный формат.
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "<password_Mysql_redmine_user>"
encoding: utf8
Создадим секретный ключ:
rake generate_secret_token
Ошибок быть не должно. Но если вдруг он попросит mysql2 или другой гем для PostgreSQL, просто установите их:
gem install mysql2
# после чего снова попробуйте сделать ключ
rake generate_secret_token
Заполнение базы данных происходит 2 командами. После 2 попросят выбрать язык.
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data
# также если вы хотите зашифровать стандартный пароль выполните:
rake db:encrypt RAILS_ENV=production
Итак. Redmine полностью настроен и давайте проверим его. Для этого есть WebRic:
ruby script/rails server webrick -e production
Если увидели INFO WEBrick::HTTPServer#start: pid=27676 port=3000 то можно проверить в браузере hostname:3000 все должно отлично работать.
После чего нажимаем Ctrl+C.
Настройка Thin
Для того что бы nginx понимал ruby нам нужен thin:
thin install
#так же нам понадобится пользователь
adduser redmine
chown -hR redmine:redmine /usr/local/share/redmine
Осталось настроить thin:
nano /etc/thin/redmine.yml
pid: tmp/pids/thin.pid
group: redmine
wait: 30
timeout: 30
log: log/thin.log
max_conns: 1024
require: []
environment: production
max_persistent_conns: 512
servers: 1
daemonize: true
user: redmine
socket: /tmp/thin.sock
chdir: /usr/local/share/redmine
Запустим thin:
/etc/init.d/thin start
# Проверим работоспособнасть
nano /usr/local/share/redmine/logs/thin.0.log
Настройка Nginx
Создадим хост:
nano /etc/nginx/sites-available/redmine.hostname.ru
В файл копируем настройки и изменяем под себя:
# Настраиваем upstream на сокет нашего "слушающего" сервера thin
upstream thin_server {
server unix:/tmp/thin.0.sock;
}
# Веб-сервер видимый из вне
server
{
#имя сервера
server_name redmine.hostname.ru
#НЕ Используем HTTPS(SSL)
listen *:80;
#логи
access_log /var/log/nginx/redmine.mihanentalpo.me-access.log;
error_log /var/log/nginx/redmine.mihanentalpo.me-error.log;
#Папка public редмайна
root /usr/local/share/redmine/public;
# Основной location. Он отдаёт все статические файлы "как следует", а все
# нестатические адреса редиректит на прокси-сервер, которым и является thin
location / {
proxy_redirect off;
proxy_set_header Host redmine.mihanentalpo.me;
try_files $uri/index.html $uri.html $uri @thin;
}
# Именованый Location для того, чтобы было куда сослаться
location @thin
{
proxy_pass http://thin_server;
}
}
После чего включаем сайт и перезапускаем nginx:
ln -s /etc/nginx/sites-available/redmine.hostname.ru /etc/nginx/sites-enabled/redmine.hostname.ru
/etc/init.d/nginx restart
На этом установка Redmine завершена. А сам он будет доступен по адрессу redmine.hostname.ru. Для работы ему не хватает интересных плагинов а самое важное разрешений на записиь. Выполните:
chmod -R 0777 /usr/local/share/redmine/tmp
chmod -R 0777 /usr/local/share/redmine/files
У администратора по умолчанию логин admin и пароль admin.
В следующей статье мы рассмотрим установку и настройку GitLab. Возможно, будет настройка ldap.
P.S.: Первая статья, жду конструктивной критики. Может быть, был слишком дотошен и для такого крупного проекта, как Хабр, где собрались ИТ-шники, не нужно было столь подробно разбирать всякие мелочи. Мне просто хотелось что бы любой желающий мог настроить Redmine + GitLab на своем
Автор: grabedinex