Redmine 2, FreeBSD 9, Postgres 9, Ruby 2, Passenger 4, Nginx 1.4

Сумбурно, несколько методов вперемешку - это просто черновик шпаргалки.

Простая установка из портов Redmine 2 с Postgresql 9.3, Ruby 2.0, Phusion Passenger 4.0.19 и Nginx 1.4.2 из портов на FreeBSD 9.1

http://habrahabr.ru/post/114885/

Осуществлялось и запускалось в эксплуатацию в конце сентября 2013 года на виртуальном хостинге RuWEB.net на самом дешевом тарифном плане VDS9-MICRO. Использовался шаблон FreeBSD-9-minimal.

С шаблоном FreeBSD-9-ISPmanager ставил по инструкции с сайта Redmine - все работает. Однако, поскольку на сервере ничего, кроме Redmine стоять не будет, то наличие ISPManager, которому требуется Apache, представилось мне не целесообразным.

Создаем пользователя от имени которого потом будет функционировать Redmine
# adduser
все по умолчанию (кроме имени пользователя)
пароль - случайный
shell указываем nologin

Чтобы из портов цеплялись автоматом более свежие версии Perl и Ruby. Без указания свежих версий 5.18 и 2.0 (для Perl и Ruby соответственно) порты тянут версии 5.14 и 1.9.
#ee /etc/make.conf
DEFAULT_VERSIONS= perl5=5.18 ruby=1.9
Можно бы и "ruby=2.0" поставить, но с ним не получается завести Phusion Passenger из портов.
Туда же добавить, чтобы порты тянули не PostgreSQL 9.0, а версию 9.3:
DEFAULT_PGSQL_VER=93

# setenv LANG en_US.UTF-8
# setenv LC_ALL en_US.UTF-8
Проверить, что все нормально установилось можно вводом команды locale, в ее ответе должны быть строки только с текстом про "UTF-8".

portmaster --force-config misc/mc devel/mercurial graphics/ImageMagick-nox11 www/nginx databases/postgresql93-server www/redmine

В умной статье http://forums.freebsd.org/showthread.php?t=41256 упоминается, что это позволяет избежать косяков компиляции из портов кое-каких компонентов Ruby. Я еще знаю, что в этом случае инициализация БД PostgreSQL пройдет так как нужно по кодировкам - иначе придется менять кодировку БД дополнительными командами.

Обновляем порты
# portsnap fetch
# portsnap extract

В той же умной статье предлагается использовать portmaster, благодаря которому мы можешь сразу же зажать все конфигурационные параметры для портов, а затем спокойно их компилировать, не подбегая к компьютеру регулярно. Этот самый portmaster сделает так, что все конфигурационные диалоги перед компиляцией зависимых портов выведутся нам в первую очередь, еще до того как начнется компиляция портов.
# cd /usr/ports/ports-mgmt/portmaster
# make install clean

#portmaster --force-config databases/postgresql93-server
В конфигурационном диалоге (и у postgresql93-server и у postgresql93-client) отмечаем галочками опции:
ICU (все равно другие компоненты установят позже эту библиотеку, так почему бы сразу не связать эту библиотеку с PostgreSQL), OPTIMIZED_CFLAGS
Ждем завершения компиляции-установки...
В файл "/etc/rc.conf" добавляем строку "postgresql_enable="YES", разрешающую автозапуск PostgreSQL вместе с операционной системой:
#ee /etc/rc.conf
После чего необходимо инициализировать кластер баз данных, что делается двумя альтернативными способами:
Способ 1:
#su pgsql
#initdb -D /usr/local/pgsql/data
Путь должен быть именно этот, иначе месторасположение кластера БД придется дополнительно указывать демону, например, через установку переменной среды окружения PGDATA.
Способ 2:
#service postgresql initdb
Отступление по поводу кодировки UTF-8 в базах данных, которая потребуется в дальнейшей работе:
- в способе первом при переходе под пользователя "su pgsql" используются унаследованные переменные среды окружения, которые мы ранее выставили в UTF-8, поэтому кластер инициализируется сразу же так как надо.
- во втором способе запуск "initdb" выполняется под тем же пользователем pgsql, но в виде отдельного сенса демона, поэтому ранее установленные командами "setenv" переменные среды окружения не действуют на этот сеанс. Следовательно, инициализация кластера будет проведена не в UTF-8. В дальнейшем, при создании базы данных с указанием кодировки UTF-8, мы получим ругань от PostgreSQL. Поэтому после инициализации кластера вторым способом (через демона), чтобы можно было создавать базы данных в кодировке UTF-8 простым образом, следует переделать шаблонную базу данных template1 так:


UPDATE pg_database SET datistemplate=FALSE WHERE datname='template1';
DROP DATABASE template1;
CREATE DATABASE template1 WITH owner=postgres template=template0 encoding='UTF8';
UPDATE pg_database SET datistemplate=TRUE WHERE datname='template1';

Или же, еще до инициализации кластера БД, установить правильные переменные среды окружения для всех пользователей:
#ee /etc/login.conf
меняем строки


    default:\
             ... \
             :lang=en_US.UTF-8:

Затем вызвать
# cap_mkdb /etc/login.conf
или же только для PostgreSQL:


postgres:\
        :lang=en_US.UTF-8:\
        :setenv=LC_COLLATE=C:\
        :tc=default:

Тогда нужно будет добавить 'postgresql_class="postgres"' to /etc/rc.conf.
Затем стартуем PostgreSQL:
#service postgresql start
или
#/usr/local/etc/rc.d/postgresql start

Создаем пользователя и БД для Redmine:
#su pgsql
#psql postgres
#CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity';
#CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
#\q
#exit

Устанавливаем Git
portmaster --force-config devel/git
в зависимостях ставим опции у cURL опцию IDN (и вообще еще где встречается IDN включаем эту опцию), у ca_root_nss опция ETCSYMLINK

Устанавливаем ImageMagick, вариант порта без X11:
#portmaster --force-config graphics/ImageMagick-nox11
В опциях у ghostscript9 отключаем драйвера принтеров, зачем они нам в таком количестве...

Ставим Nginx

При компиляции модуля Phusion Passenger для Nginx получим ругань "'remove_entry_secure': parent directory is world writable" на файл "/tmp/passenger.чего-то там". Чтобы этого не было назначаем права на каталог /tmp:
#chmod 1777 /tmp

# portmaster --force-config www/nginx
Не забываем поставить галочку "PASSENGER" в конфигурационном диалоге. Тем самым добавим к Nginx модуль запуска приложений веб-фреймворка "Ruby On Rails". Одновременно с этим модулем будет установлен и Ruby 2.0 и еще несколько компонентов Ruby.
Вызываем текстовый редактор
#ee /etc/rc.conf
и добавляем в него строку для автоматического запуска Nginx при загрузке операционной системы:
nginx_enable="YES"
Проверяем запускается ли nginx:
#/usr/local/etc/rc.d/nginx start
#/usr/local/etc/rc.d/nginx stop

Конфигурируем модуль Phusion Passenger с Nginx
Для начала определяем куда был установлен Passenger:
#passenger-config --root
Затем редактируем конфигурационный файл Nginx с указанием узнанного только что пути:
ee /usr/local/etc/nginx/nginx.conf


http {
   ...
   passenger_root /usr/local/lib/ruby/gems/2.0/gems/passenger-4.0.19;
   passenger_ruby /usr/local/bin/ruby20;
   passenger_user redmine;
   passenger_group redmine;

   server {
        listen       80;
        ...


        location / {
            root   /usr/local/www/redmine/public;
            passenger_enabled on;
        }
   ...
}

Устанавливаем cURL
#cd /usr/ports/ftp/curl
#make install clean
Отмечаем IDN на всякий случай

Ставим GEM с сайта (ссылка на текущую версию берется на сайте http://rubygems.org в разделе "Download")
#curl http://production.cf.rubygems.org/rubygems/rubygems-2.1.5.tgz > rubygems.tgz
#tar -xvf rubygems.tgz
#cd rubygems-2.1.5
#ruby20 setup.rb
Все, каталог rubygems-2.1.5 можно удалить

Устанавливаем Phusion Passenger и получаем сообщение об ошибке
#gem20 install passenger
ERROR: Could not find a valid gem 'passenger' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://s3.amazonaws.com/production.s3.rubygems.org/latest_specs.4.8.gz)
Отключаем контроль сертификатов:
Правим (или создаем) файл ".gemrc" в своем home (в моем случае в /root) - добавляем строку ":ssl_verify_mode: 0"
После этого контроль SSL сертификатов проводиться не будет при установке gem'ов
Кроме того можно сделать то же самое и в файле "/etc/gemrc" - глобально для всех
Для Windows XP в "c:\Documents and Settings\All Users\Application Data\gemrc"
Для Windows 7 в "C:\ProgramData\gemrc"
Повторяем
#gem20 install passenger

Компьютерные вопросы: 
2002-2012 ©