Redmine

From Alpine Linux
Revision as of 13:31, 7 April 2011 by Aalatchm (talk | contribs) (add mysql to lbu)

Install Lighttpd with FastCGI

Basic Installation

For installing the additional packages first activate community packages and update the package index

Install the required packages:

# apk add lighttpd php82 fcgi php82-cgi

Configure Lighttpd

Edit lighttpd.conf (/etc/lighttpd/lighttpd.conf) and uncomment the line:

Contents of /etc/lighttpd/lighttpd.conf

... include "mod_fastcgi.conf" ...

Edit mod_fastcgi.conf (/etc/lighttpd/mod_fastcgi.conf), find and change /usr/bin/php-cgi to /usr/bin/php-cgi82.

Contents of /etc/lighttpd/mod_fastcgi.conf

... "bin-path" => "/usr/bin/php-cgi82" # php-cgi ...

Start lighttpd service and add it to default runlevel

# rc-service lighttpd start # rc-update add lighttpd default

Install extra packages for redmine:

apk add fcgi mysql mysql-dev rubygems fcgi-dev sqlite-dev

Install the following rubygems (gem install <gemname> --version <version>). Note: newer versions of the gems may work, but these have been confirmed working in Alpine 2.1.2:

gem install -V --no-rdoc --no-ri actionmailer --version 2.3.3
gem install -V --no-rdoc --no-ri activerecord --version 2.3.3
gem install -V --no-rdoc --no-ri activeresource --version 2.3.3 
gem install -V --no-rdoc --no-ri edavis10-object_daddy --version 0.4.3
gem install -V --no-rdoc --no-ri fcgi --version 0.8.8
gem install -V --no-rdoc --no-ri mocha --version 0.9.10
gem install -V --no-rdoc --no-ri mysql --version 2.8.1
gem install -V --no-rdoc --no-ri rails --version 2.3.3
gem install -V --no-rdoc --no-ri shoulda --version 2.10.3
gem install -V --no-rdoc --no-ri sqlite3 --version 1.3.3

Configure MySql

/usr/bin/mysql_install_db --user=mysql
/etc/init.d/mysql start && rc-update add mysql default
/usr/bin/mysqladmin -u root password 'password'

Create the redmine database

mysql -u root -p
create database redmine character set utf8;
grant all privileges on redmine.* to 'redmine'@'localhost' identified by 'Secur3P@ass';
flush privileges;
exit

Create redmine folder

mkdir -p /usr/share/webapps/redmine

Download, unpack and move Redmine

cd /tmp/
wget http://rubyforge.org/frs/download.php/73140/redmine-1.0.3.tar.gz
tar zxvf redmine-1.0.3.tar.gz
mv redmine-1.0.3/* /usr/share/webapps/redmine/

Change permissions

chown -R lighttpd:lighttpd /usr/share/webapps/redmine
chmod 0666 /usr/share/webapps/log/production.log
mkdir /var/run/redmine
chown lighttpd:lighttpd /var/run/redmine

Edit the database config file and add the mysql password at every occurrence of "password:"

cp /usr/share/webapps/redmine/config/database.yml.example /usr/share/webapps/redmine/config/database.yml
nano /usr/share/webapps/redmine/config/database.yml 

Some more steps

cd /usr/share/webapps/redmine
mv public/dispatch.fcgi.example public/dispatch.fcgi
rake generate_session_store
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data 

Note: keep default language of en

Start the Redmine testing webserver

ruby /usr/share/webapps/redmine/script/server webrick -e production

Now you can browse to localhost:3000 an log using admin user and admin password.

Once Redmine is confirmed working, kill webrick.

Set up lighttpd by editing lighttpd.conf.

Uncomment the following line:
   "mod_alias",
Add the following content to the end of the file:
$HTTP["url"] =~ "^/redmine/" {
 alias.url = ("/redmine" => "/usr/share/webapps/redmine/public")
 server.document-root = "/usr/share/webapps/redmine/public/"
 server.error-handler-404 = "/redmine/dispatch.fcgi"
 index-file.names         = ("dispatch.fcgi")
 # Change *-procs to 2 if you need to use Upload Progress or other tasks that
 # *need* to execute a second request while the first is still pending.
 fastcgi.server           += (
       ".fcgi" => (
               "localhost" => (
                       "min-procs"       => 1,
                       "max-procs"       => 2,
                       "check-local"    => "disable",
                       "socket"          => "/var/run/redmine/fcgi.socket",
                       "bin-path"        => "/usr/bin/ruby /usr/share/webapps/redmine/public/dispatch.fcgi",
                       "bin-environment" => (
                               "RAILS_ENV"               => "production"
                       )
               )
       )
 )
}

Configure a relative URL by editing /usr/share/webapps/redmine/config/environment.rb: Add the line shown below, within the code block "Rails::Initializer.run do |config|"

config.action_controller.relative_url_root = '/redmine'

Restart lighttpd

/etc/init.d/lighttpd restart

Note: To enable email to ticket creation from unknown users/email addresses (after allowing anonymous issue creation within Redmine UI) for the 'myproject' project in Redmine:

 #!/usr/bin/perl
 # Author: Jeff Bilyk
 # March 2, 2011
 #Script to take email from stdin, then:
 # - Check redmine database to see if the user exists
 #   - If user doesn't exist, create the user
 # - Pass the email on the redmine utility:
 #   - echo "email contents" | rake redmine:email:read RAILS_ENV="production" project=myproject
 
 use strict;
 use DBI;
 # global variables
 my $DbName = 'redmine';
 my $DbUser = 'redmine';
 my $DbPassword = 'Secur3P@ass';
 my @fields;
 my @address;
 my $existinguser;
 
 # Get email from stdin
 my @email = <STDIN>;
 
 # Parse field for "for"
 foreach (@email)
 {
 	if ($_ =~ /From/)
 	{
 		@fields = (split /</,$_);
 		@address = (split />/,$fields[1]);
 	}
 }
 
 my $dbh = DBI->connect('dbi:mysql:' . $DbName, $DbUser, $DbPassword, { PrintError => 0 }) or die "SQL Connect Error:" . DBI->errstr;
 
 # Find out if there're any existing users with the specified email address
 my $sqlStatement = "SELECT * from users where mail = '$address[0]';";
 
 my $sqlCommand = $dbh->prepare($sqlStatement);
 
 $sqlCommand->execute or die "SQL Error: " . DBI->errstr;
 
 my @sqlRecordset;
 $existinguser = 'maybe';
 
 @sqlRecordset = $sqlCommand->fetchrow_array;
 
 if ($sqlRecordset[0] == ) {
 	printf "@sqlRecordset \n";
 	$existinguser = 'no';
 }
 else {
 	$existinguser = 'yes';
 }
 
 # If there isn't a user already, then create one
 if ($existinguser == 'no')
 {
 	my @name = (split /@/,$address[0]);
 	printf "Current variables: $name[0]  $address[0]  \n";
 	$sqlStatement = "INSERT INTO users (login, firstname, lastname, mail, mail_notification, admin, status, language, type) values (\"$name[0]\", \"$name[0]\", \" \", \"$address[0]\", 0, 0, 1, \"en\", \"User\");";
 	$sqlCommand = $dbh->prepare($sqlStatement);
 	$sqlCommand->execute or die "SQL Error: " .DBI->errstr;
 	printf "User created";
 }
 
 my $timeinsec = `date +%s`;
 open (MYFILE, ">>/var/tmp/$timeinsec");
 print MYFILE "@email";
 close (MYFILE);
 
 system("sed -i 's/^  //' /var/tmp/$timeinsec");
 system("sed -i 's/^ //' /var/tmp/$timeinsec");
 
 `cd /usr/share/webapps/redmine && rake redmine:email:read RAILS_ENV="production" project=myproject < /var/tmp/$timeinsec`;
 exit 0

Configure LBU

lbu inc /usr/lib/ruby
lbu inc /usr/share/webapps
lbu inc /var/lib/mysql