RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

User Tools

Site Tools


Sidebar


Навигация

Линкшэринг

ALARM!

Добавить новую страницу

You are not allowed to add pages
linux:nginx:redmine

Установка Redmine в CentOS 6. RVM, Ruby, nginx + thin

Исходные данные

[root@mx ~]# uname -a
Linux mx.root.cx 2.6.32-504.12.2.el6.i686 #1 SMP Wed Mar 11 19:05:53 UTC 2015 i686 i686 i386 GNU/Linux
  • RVM as user-wide
  • Будет только одна версия Ruby
  • Кроме Redmine приложений на Ruby не будет
  • На сервере уже установлены nginx и php-fpm, поэтому в качестве сервера приложений для Ruby будет использоваться Thin

Установка RVM и Ruby

В первую очередь добавляем в файл /etc/sudoers пользователя из под которого далее будем выполнять все операции

dx ALL=(ALL:ALL) ALL

Установка Ruby Version Manager (RVM)

$ gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
$ curl -L get.rvm.io | bash -s stable
Installing RVM to /home/dx/.rvm/
    Adding rvm PATH line to /home/dx/.profile /home/dx/.mkshrc /home/dx/.bashrc /home/dx/.zshrc.
    Adding rvm loading line to /home/dx/.profile /home/dx/.bash_profile /home/dx/.zlogin.
Installation of RVM in /home/dx/.rvm/ is almost complete:

  * To start using RVM you need to run `source /home/dx/.rvm/scripts/rvm`
    in all your open shell windows, in rare cases you need to reopen all shell windows.

# dx,
#
#   Thank you for using RVM!
#   We sincerely hope that RVM helps to make your life easier and more enjoyable!!!
#
# ~Wayne, Michal & team.

In case of problems: http://rvm.io/help and https://twitter.com/rvm_io

  * WARNING: You have '~/.profile' file, you might want to load it,
    to do that add the following line to '/home/dx/.bash_profile':

      source ~/.profile

Загружаем RVM

Обновим среду shell

$ source /home/dx/.rvm/scripts/rvm

В файл /home/dx/.bash_profile или /home/dx/.bashrc добавляем

source ~/.profile

Перелогиниваемся и проверяем, что всё хорошо бьютифул гуд

Если

[dx@mx ~]$ type rvm | head -1

показывает

rvm is a function

значит можно двигаться дальше.

Если же будет сообщение "rvm is hashed" или "rvm is $rvm_path/bin/rvm" (rvm is /home/dx/.rvm/bin/rvm) или даже "not found" значит …. then it is running as a binary or not at all within the script and will not be able to control the environment of the script as expected.

Установка зависимостей RVM

Для работы RVM необходимо установить ряд дополнительных зависимостей

[dx@mx ~]$ rvm requirements
Checking requirements for centos.
Installing requirements for centos.
Installing required packages: patch, libyaml-devel, glibc-headers, autoconf, gcc-c++, glibc-devel, patch, readline-devel, zlib-devel, libffi-devel, openssl-devel, automake, libtool, bison, sqlite-devel..dx password required for 'yum install -y patch libyaml-devel glibc-headers autoconf gcc-c++ glibc-devel patch readline-devel zlib-devel libffi-devel openssl-devel automake libtool bison sqlite-devel': .-

Для установки используем rvmsudo (НЕ sudo)

rvmsudo yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel

При установке получаем сообщение

Warning: can not check `/etc/sudoers` for `secure_path`, falling back to call via `/usr/bin/env`, this breaks rules from `/etc/sudoers`. Run:

    export rvmsudo_secure_path=1

to avoid the warning, put it in shell initialization file to make it persistent.

In case there is no `secure_path` in `/etc/sudoers`. Run:

    export rvmsudo_secure_path=0

to avoid the warning, put it in shell initialization file to make it persistent.

Что делать если не работает rvmsudo

Добавляем в файл /home/dx/.bash_profile

export rvmsudo_secure_path=0

и делаем

source ~/.bash_profile

После установки всех необходимых пакетов

[dx@mx ~]$ rvm requirements
Checking requirements for centos.
Requirements installation successful.

У внимательного читателя наверняка возник вопрос, а почему .bash_profile, а не .bashrc?

Установка Ruby

Доступные версии Ruby для установки

[dx@mx ~]$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p598]
[ruby-]2.1.4
[ruby-]2.1[.5]
[ruby-]2.2.0
[ruby-]2.2-head
ruby-head

Устанавливаем последнюю доступную stable-версию и делаем её версией по-умолчанию

rvm install ruby --latest
rvm use ruby --latest --default

Либо явно указываем версию

rvm install 2.2.0
rvm use --default 2.2.0

Проверяем версию RVM и Ruby

[dx@mx ~]$ rvm -v
rvm 1.26.10 (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

[dx@mx ~]$ ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [i686-linux]

[dx@mx ~]$ which ruby                
~/.rvm/rubies/ruby-2.2.0/bin/ruby

MySQL

service mysqld start
mysqladmin -u root password 'YOUR_PASSWORD'
mysql -u root -p
mysql> CREATE DATABASE redmine CHARACTER SET utf8;
mysql> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password';
mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
mysql> \q
cd /var/www/redmine
cp config/database.yml.example config/database.yml
nano config/database.yml

Step Three—Install RubyGems ???

Default –no-ri –no-rdoc on Ruby Gem installation
https://coderwall.com/p/spo6bq/default-no-ri-no-rdoc-on-ruby-gem-installation

/home/user/.gemrc

install: --no-rdoc --no-ri
update:  --no-rdoc --no-ri
echo "gem: --no-ri --no-rdoc" > ~/.gemrc

Далее во всех HowTo идет установка rubygems и bundler

Но gem уже установлен

[dx@mx ~]$ gem -v
2.4.6

[dx@mx ~]$ gem list

Просмотреть список установленных gem'ов (http://guides.rubygems.org/rubygems-basics/#listing-installed-gems)

*** LOCAL GEMS ***

bigdecimal (1.2.6)
bundler (1.9.1)
bundler-unload (1.0.2)
executable-hooks (1.3.2)
gem-wrappers (1.2.7)
io-console (0.4.3)
json (1.8.1)
minitest (5.4.3)
power_assert (0.2.2)
psych (2.0.8)
rake (10.4.2)
rdoc (4.2.0)
rubygems-bundler (1.4.4)
rvm (1.11.3.9)
test-unit (3.0.8)

Установка Thin

Переходим в каталог с Redmine

Добавляем в Gemfile.local

gem 'thin'

Установка зависимостей Redmine

bundle install --without development test postgresql sqlite

Создание структуры базы данных и загрузка данных по-умолчанию

rake generate_secret_token
env RAILS_ENV=production rake db:migrate
env RAILS_ENV=production rake redmine:load_default_data

Ошибка#1

An error occurred while installing mysql2 (0.3.18), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.3.18'` succeeds before bundling.

Fix

$ yum install Percona-Server-devel-55

Ошибка#2

Make sure that `gem install rmagick -v '2.13.4'` succeeds before bundling.

Fix

yum install ImageMagick-devel

RMagick (позволяет использовать ImageMagick для работы с изображениями в при экспорте в PDF и PNG)

Если ImageMagick не установлен в вашей системе, вы должны пропустить установку gem-пакета rmagick используя команду:

bundle install –without development test rmagick

thin

[dx@mx ~]$ gem install thin
Building native extensions.  This could take a while...
Successfully installed thin-1.6.3
1 gem installed

Далее

[dx@mx ~]$ rvmsudo thin install        
Installing thin service at /etc/rc.d/thin ...
mkdir -p /etc/rc.d
writing /etc/rc.d/thin
chmod +x /etc/rc.d/thin
mkdir -p /etc/thin

To configure thin to start at system boot:
on RedHat like systems:
  sudo /sbin/chkconfig --level 345 thin on
on Debian-like systems (Ubuntu):
  sudo /usr/sbin/update-rc.d -f thin defaults
on Gentoo:
  sudo rc-update add thin default

Then put your config files in /etc/thin

Если

[dx@mx ~]$ rvmsudo thin install                
sudo: thin: command not found

То

export rvmsudo_secure_path=1

Копируем init-скрипт в /etc/init.d/

cp /etc/rc.d/thin /etc/init.d/thin

Создаем wrapper для приложения thin

rvm wrapper <версия_ruby>@<gemset> bootup thin

В нашем случаем команда будет выглядеть так

rvm wrapper ruby-2.2.0 bootup thin

Regenerating ruby-2.2.0 wrappers........

В итоге в директории .rvm/bin будет создана обертка запуска thin с именем bootup_thin. Заменить в скрипте запуска Thin значение переменной DAEMON на путь к только что созданной обертке.

Редактируем /etc/init.d/thin

Заменяем

DAEMON=/home/dx/.rvm/gems/ruby-2.2.0/bin/thin

На

DAEMON=/home/dx/.rvm/bin/bootup_thin

Создаем конфигурационный файл для нашего приложения

sudo thin config -C /etc/thin/redmine.yml -c /home/dx/data/www/todo.root.cx --servers N -e production

[dx@mx ~]$ rvmsudo thin config --config /etc/thin/redmine.yml --chdir /home/dx/data/www/todo.root.cx --environment production --socket /var/run/thin.sock --daemonize --log /var/log/thin/redmine.log --pid /var/run/thin/redmine.pid --user dx --group dx --servers 2 --prefix /       
Wrote configuration to /etc/thin/redmine.yml

Добавляем в автозагрузку

rvmsudo /sbin/chkconfig --level 345 thin on

init-скрипт /etc/init.d/thin

#!/bin/sh
### BEGIN INIT INFO
# Provides:          thin
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      S 0 1 6
# Short-Description: thin initscript
# Description:       thin
### END INIT INFO

# Original author: Forrest Robertson

# Do NOT "set -e"

#DAEMON=/home/dx/.rvm/gems/ruby-2.2.0/bin/thin
DAEMON=/home/dx/.rvm/bin/bootup_thin  
#SCRIPT_NAME=/etc/rc.d/thin
SCRIPT_NAME=/etc/init.d/thin
CONFIG_PATH=/etc/thin

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

case "$1" in
  start)
        $DAEMON start --all $CONFIG_PATH
        ;;
  stop)
        $DAEMON stop --all $CONFIG_PATH
        ;;
  restart)
        $DAEMON restart --all $CONFIG_PATH
        ;;
  *)
        echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2
        exit 3
        ;;
esac

:

Конфигурационный файл /etc/thin/redmine.yml

pid: /var/run/thin.pid    # расположение файла pid
timeout: 30               # таймаут запросов
log: /var/log/thin.log    # расположение логов
max_conns: 256            # максимальное количество одновременных соединений
require: []               # подключение библиотек
environment: production   # окружение фреймворка
max_persistent_conns: 128 # максимальное количество постоянных соединений
chdir: /var/lib/redmine   # смена текущей директории
no-epoll: false           # разрешение асинхронного ввода-вывода
servers: 1                # количество запускаемых серверов thin
daemonize: true           # переходить в режим демона
socket: /tmp/redmine.sock # расположение сокета
user: redmine             # учетная запись, под которой будет работать сервер thin
group: redmine            # группа, под которой будет работать сервер thin
---
chdir: "/home/dx/data/www/todo.root.cx"
environment: production
timeout: 30
log: "/home/dx/data/logs/redmine.log"
pid: "/tmp/thin.pid"
max_conns: 1024
max_persistent_conns: 100
require: []
wait: 30
threadpool_size: 20
daemonize: true
socket: "/tmp/thin.sock"
user: dx
group: dx
servers: 2
prefix: "/"
#!/bin/sh
### BEGIN INIT INFO
# Provides:          thin
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      S 0 1 6
# Short-Description: thin initscript
# Description:       thin
### END INIT INFO

# Original author: Forrest Robertson

# Do NOT "set -e"

#DAEMON=/home/dx/.rvm/gems/ruby-2.2.1/bin/thin
#SCRIPT_NAME=/etc/rc.d/thin
DAEMON=/home/dx/.rvm/bin/bootup_thin
SCRIPT_NAME=/etc/init.d/thin

CONFIG_PATH=/etc/thin

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

case "$1" in
  start)
	$DAEMON start --all $CONFIG_PATH
	;;
  stop)
	$DAEMON stop --all $CONFIG_PATH
	;;
  restart)
	$DAEMON restart --all $CONFIG_PATH
	;;
  *)
	echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2
	exit 3
	;;
esac

:

Конфигурация nginx

https://gist.github.com/wake/5432215

# -------------------------------------------------------------------------------- #
#                         Last modified 27/10/2013                                 #
# -------------------------------------------------------------------------------- #
#                         REDMINE VHOST                                            #
# -------------------------------------------------------------------------------- #

upstream thin {
	server unix:/tmp/thin.0.sock;
	server unix:/tmp/thin.1.sock;
}

server {
	listen 80;
	server_name todo.root.cx;
	charset utf-8;	
	set $root_path /home/dx/data/www/todo.root.cx/public;
	root $root_path;
	index index.html;
	autoindex off;
# -------------------------------------------------------------------------------- #
        access_log  /home/dx/data/logs/todo.root.cx.access.log;
        error_log   /home/dx/data/logs/todo.root.cx.error.log;
# -------------------------------------------------------------------------------- #
#	include block.conf;
#	include drop.conf;
# -------------------------------------------------------------------------------- #
        client_max_body_size            128m;
        client_body_buffer_size         128k;
        proxy_connect_timeout           300;
        proxy_send_timeout              300;
        proxy_read_timeout              300;
        proxy_buffer_size               4k;
        proxy_buffers                   4 32k;
# -------------------------------------------------------------------------------- #
	location / {
		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;
		try_files $uri/index.html $uri.html $uri @redmine;
}

	location @redmine {
		proxy_pass http://thin;
	}

}

Mr Redmine

Данные для входа по-умолчанию

Логин: admin
Пароль: admin

Так выглядит страница О системе

вставить картинку

RVM шпаргалка и ссылки

Вывести список доступных версий для установки

rvm list known

Установить определенную версию из списка rvm list known

rvm install VERSION_NUMBER

To then use the ruby version you have installed:

rvm use VERSION_NUMBER

Установить $версию% ruby по-умолчанию

rvm use VERSION_NUMBER --default

Удалить версию ruby, оставив gemset

rvm uninstall VERSION_NUMBER

Полностью удалить ruby

rvm remove VERSION_NUMBER

Вывести информацию о ruby окружении

rvm info

bash: bundle: command not found

$ gem install bundler

Удаляем полностью rvm из системы

$ rvm implode
Are you SURE you wish for rvm to implode?
This will recursively remove /home/dx/.rvm and other rvm traces?
(anything other than 'yes' will cancel) > yes
Removing rvm-shipped binaries (rvm-prompt, rvm, rvm-sudo rvm-shell and rvm-auto-ruby)
Removing rvm wrappers in /home/dx/.rvm/bin
find: failed to restore initial working directory: Permission denied
Hai! Removing /home/dx/.rvm
/home/dx/.rvm has been removed.

Note you may need to manually remove /etc/rvmrc and ~/.rvmrc if they exist still.
Please check all .bashrc .bash_profile .profile and .zshrc for RVM source lines and delete or comment out if this was a Per-User installation.
Also make sure to remove `rvm` group if this was a system installation.
Finally it might help to relogin / restart if you want to have fresh environment (like for installing RVM again).

Настройка почты

Плагины

Шаблоны

Discussion

Enter your comment. Wiki syntax is allowed:
 
linux/nginx/redmine.txt · Last modified: 2017/11/24 02:33 (external edit)