"Установка Redmine в изолированном контейнере LXC"

Tue 24 March 2015

Redmine - гибкий инструмент позволяющий удобно организовывать проекты и задачи, а также отслеживать ошибки. Написан он на Ruby и использует известный фреймворк Ruby on Rails. GNU GPL, Open Source и все дела... (В вики более подробно)

Самой большой проблемой, с которой сталкиваются люди при работе с этим монстром - это множество версионных зависимостей между различными частями системы. Для решения этой проблемы рекомендуется использовать Bundler - приложение, которое выполняет установку gem-ов и их обновление в соответствии с конфигурацией из Gemfile. Но данный механизм недостаточно прозрачен для администратора, ведь помимо установки гемов необходимо следить и за актуальными версиями самого Ruby. Также при установке плагинов зависимости могут изменяться, устанавливаются новые гемы. И так или иначе при работе с RoR приложением система обрастает гигабайтами файлов, которые никаким образом не фигурируют в базе данных пакетного менеджера, да и в базе данных самого пользователя такой объем информации держать не стоит.

Чтобы минимизировать вред для вашей системы и упростить процесс обновления, бэкапа, а также разворачивания тестовых окружений я использую контейнеры LXC. Сам набор утилит уже умеет создавать "клоны" систем, используя простое копирование или более продвинутые методы типа снапшотов BTRFS или LVM.

Установка LXC

yum install lxc lxc-templates libvirt libvirt-python

Теперь запустим libvirtd, это самый простой способ создания внутренней маршрутизируемой сети для наших контейнеров:

service libvirtd start

По умолчанию, в качестве места установки будет использоваться /var/lib/lxc Если необходимо добавить там места или вынести на отдельный диск, раздел или планету, лучше сделать это сейчас.

VMSNAME=PlzKillMe #Имя контейнера
TEMPLATE=centos #Шаблон будущей системы
LXCPATH=/var/lib/lxc #Место хранения образов
REL=6 #Релиз CentOS
lxc-create -n $VMSNAME -t $TEMPLATE -P $LXCPATH -- --release=$REL

После того как образ будет готов, вы увидите сообщение, которое будет означать успешную установку:

The temporary root password is stored in:

    '/var/lib/lxc/PlzKillMe/tmp_root_pass'

The root password is set up as expired and will require it to be changed
at first login, which you should do as soon as possible.  If you lose the
root password or wish to change it without starting the container, you
can change it from the host by running the following command (which will
also reset the expired flag):

    chroot /var/lib/lxc/PlzKillMe/rootfs passwd

Можно запустить контейнер:

lxc-start -d -n $VMSNAME

Установка Ruby

Через некоторое время после старта узнаём адрес контейнера

IP=$(lxc-info -n $VMSNAME | grep IP | awk '{print $2}') && echo $IP

И подключаемся к этому контейнеру (пароль в файле, если не меняли)

ssh root@$IP

"Кристаллики" будем ставить с помощью rvm Устанавливаем нужные пакеты

yum install which tar

После чего следуем официальной документации (Эти команды могут устареть, сравните с оффдоками)

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
сurl -sSL https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh

Устанавливаем последний релиз Ruby

rvm install ruby

Готово! Проверяем

ruby -v

Получение и установка Redmine

rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install epel-release -y
yum install wget nginx ImageMagick-devel mysql-server mysql-devel libcurl-devel

Качаем последнюю версию RM по ссылке

cd /opt/
wget http://www.redmine.org/releases/redmine-3.0.1.tar.gz
tar xf redmine-3.0.1.tar.gz
ln -s redmine-3.0.1 redmine
adduser redmine

Далее следуем официальной документации

cd /opt/redmine/
gem install bundler mysql2
bundle install --without development test

Настройку сервера БД я оставлю на ваше усмотрение, данные остается только прописать в config/database.yml В этом примере я буду использовать дефолтный сервер CentOS с правами доступа по умолчанию.

cp config/database.yml.example config/database.yml

service mysqld start
mysql -e "create database redmine character set utf8;"
rake generate_secret_token
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data
chown redmine:nginx -R files/ log/ tmp/ public/plugin_assets

На этом установка и базовая настройка окончена, теперь попробуем запустить сервер:

ruby bin/rails server webrick -e production

Эта строка будет означать успешный запуск:

[2015-03-24 10:50:49] INFO  WEBrick::HTTPServer#start: pid=24657 port=3000

Установка Nginx с модулем Passenger

Для запуска RoR приложений будем использовать Passenger

gem install passenger
passenger-install-nginx-module

Настройки компиляции Nginx я оставил по умолчанию, никаких изменений я не делал, да и нет смысла, это же контейнер, который в любой момент может быть удален или создан заново по данному гайду

После сборки готовый к работе Nginx будет находится в /opt/nginx, нам лишь остаётся запускать его системным init скриптом от нашего старого nginx. Немного подправим файл с настройками /etc/sysconfig/nginx к следующему виду:

NGINX=/opt/nginx/sbin/nginx
CONFFILE=/opt/nginx/conf/nginx.conf
PIDFILE=/opt/nginx/logs/nginx.pid

Попробуем запустить?

service nginx start

Если всё хорошо, и сервер запустился, то добавляем в конфиг /opt/nginx/conf/nginx.conf следующие настройки:

passenger_log_level 5;
passenger_debug_log_file /opt/nginx/logs/passenger.log;
server {
    listen       80;
    server_name  redmine.myhost.ru;
    client_max_body_size       128m;
    root /opt/redmine/public/;
    passenger_user redmine;
    passenger_group nginx;
    passenger_enabled on;
    passenger_min_instances 1;
}
passenger_pre_start http://redmine.myhost.ru/;

!! Отредактируйте опции в соответствии с вашими условиями. !!

Перезапускаем Nginx и получаем на $IP:80 ваш любимый RM. У меня всё. Дальше вы настраиваете проксирование трафика с хоста в гостя как вам удобнее (haproxy, nginx и т.п.) По умолчанию для входа используются admin/admin

By A. Semenov, Category: linux

Tags: linux / redmine / LXC / cgroup / centos /

Other articles

"Установка и настройка Graphite WebApp через RPM"

Thu 05 March 2015

Хочется поделиться старой, но от этого не менее хорошей и полезной заметкой, автор которой рассказывает, как можно установить Graphite в дистрибутиве CentOS, используя для этого штатные rpm-tools.

Статья замечательна еще тем, что по сути в радиусе досигаемости гугла (менее 5 страницы поиска) она единственная.

И я, к сожалению, не нашел …

By A. Semenov, Category: linux

Continue reading …

"Настройка bridge-интерфейса в CentOS"

Sun 07 September 2014

yum install bridge-utils

# cat /etc/sysconfig/network-scripts/ifcfg-bridge0
DEVICE="bridge0" 
TYPE=Bridge
BOOTPROTO="static" 
IPADDR="xxx.xxx.xxx.xxx" 
GATEWAY="xxx.xxx.xxx.xxx" 
DNS1="xxx.xxx.xxx.xxx"
ONBOOT="yes" 
IPV6INIT="no" 
PEERDNS="yes"

# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
BOOTPROTO="static" 
BRIDGE …

By A. Semenov, Category: linux

Continue reading …

"CentOS. Upgrade zabbix с версии 1.8 до 2.0"

Sun 07 September 2014

В репозиториях CentOS появился Zabbix версии 2.0, просто праздник какой-то, но нет худа без добра. Изменения в новой версии затронули базу данных во всех интересных местах и просто обновиться недостаточно, также нам нужно будет пропатчить базу в соответствии с нововведениями.

Вся процедура обновления выполняется в соответствии с официальной документацией …

By A. Semenov, Category: linux

Continue reading …

"Сборка и установка модуля php-sweph"

Wed 23 April 2014

Просто абзац

UPD(16.01.17)...

yum install php-devel php subversion wget tar gcc file make git -y
BUILD=/usr/src
SWEURL=ftp://ftp.astro.com/pub/swisseph/swe_unix_src_2.06.tar.gz
INCLUDEDIR=/usr/local/include
LIBDIR=/usr/local/lib
PHPMODDIR=/usr/lib64/php/modules
pushd $BUILD
wget $SWEURL
mkdir …

By A. Semenov, Category: linux

Continue reading …

"CentOS. SSSD и OpenLDAP"

Fri 21 March 2014

В [предыдущем][l01] топике я показал, как можно быстро настроить ваш сервер OpenLDAP на использование TLS соединений, чтобы наши враги не могли получить сведения из трафика между сервером и клиентом. В дополнении хотелось бы продемонстрировать настройку групповых политик доступа на сервер под управлением CentOS 6. В качестве клиента будем использовать …

By A. Semenov, Category: linux

Continue reading …
Яндекс.Метрика