"Установка 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. В качестве клиента будем использовать …