<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>AV-Looks: Running Instiki - Best practices</title>
    <link>http://avlooks.net/articles/2006/02/15/running-instiki-best-practices</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Watching and Wondering</description>
    <item>
      <title>Running Instiki - Best practices</title>
      <description>&lt;p&gt;Best practices for running &lt;a href="http://instiki.org/show/HomePage"&gt;Instiki&lt;/a&gt;&lt;/p&gt;


	&lt;h3&gt;Initial setup &amp;#8211; prerequisites&lt;/h3&gt;


	&lt;ol&gt;
	&lt;li&gt;Download and install Ruby 1.8.2. In all our experience, later versions of Ruby break Instiki. You can download the source from &lt;a href="http://ftp.ruby-lang.org/pub/ruby/1.8/"&gt;ruby-lang.org&lt;/a&gt; .  We recommend building from source (tar zxvf, cd to dir, ./configure, make, make install), though you can certainly install ruby with any of the various package managers out there.&lt;/li&gt;
		&lt;li&gt;Download and install &lt;a href="http://rubyforge.org/frs/?group_id=126"&gt;rubygems&lt;/a&gt; .  tar zxvf the file, cd into the dir, and run `ruby setup.rb`&lt;/li&gt;
		&lt;li&gt;run `gem install instiki&amp;#8212;include-dependencies`.  Besides Ruby 1.8.2, the current Instiki (0.10.2) needs Rails 0.13.1, not higher.  A very nice thing about gem is that you can have multiple versions of packages, e.g. Rails 1.0.0 &lt;em&gt;and&lt;/em&gt; 0.13.1 installed, and different ruby gems and apps just seem to know what they need.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;Setting up Apache&lt;/h3&gt;


# Path to storage &amp;#8211; `mkdir storage` in the appropriate location, e.g.
&lt;pre&gt;
/home/httpd/vhosts/yourdomain.com/rails/storage
&lt;/pre&gt; 
# Virtual Host Config &amp;#8211; For each instiki domain, you will need to create a vhost.conf file which contains something like
&lt;pre&gt;
ServerName wiki.yourdomain.com
ProxyPass / http://wiki.yourdomain.com:2501/
ProxyPassReverse / http://wiki.yourdomain.com:2501
&lt;/pre&gt;
where &amp;#8216;2501&amp;#8217; above is the port on which this particular instance is running.  Each Instiki instance (each domain) must have its own port.

	&lt;h3&gt;Configuring Instiki to run on startup&lt;/h3&gt;


Create /etc/rc.d/rc.instiki
&lt;pre&gt;
#!/bin/bash
## Check and Start Instiki servers

LOGFILE="/usr/local/sbin/instikiStatus.txt" 
cat /dev/null &amp;gt; $LOGFILE
date &amp;gt;&amp;gt; $LOGFILE

## List of servers and ports
for instiki in \
"/home/httpd/vhosts/1domain.com/rails/storage 2501" \
"/home/httpd/vhosts/2domain.com/rails/storage 2502" \
"/home/httpd/vhosts/3domain.com/subdomains/wiki/rails/storage 2503" 

do
  set -- $instiki
  if ps aux | grep instiki | grep $1 &amp;gt; /dev/null
    then
      echo "Instiki server at $1 is running on port $2" &amp;gt;&amp;gt; $LOGFILE
    else
      echo "Instiki server at $1 is not running..." &amp;gt;&amp;gt; $LOGFILE
      /usr/local/bin/ruby /usr/local/bin/instiki --port $2 --storage $1 &amp;gt; /dev/null &amp;#38;
      echo "Instiki server at $1 started on port $2" &amp;gt;&amp;gt; $LOGFILE
  fi
done
cat $LOGFILE
&lt;/pre&gt;

	&lt;h3&gt;Setting up Instiki to run as a service&lt;/h3&gt;


create /etc/init.d/instiki
&lt;pre&gt;
#!/bin/bash
#. /etc/rc.d/init.d/functions
PATH=/sbin://bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/b
in:/usr/local/bin
prog=Instiki
proc="bin/instiki" 
startup=/etc/rc.d/rc.instiki
start() {
      echo -n $"Starting $prog: " 
      bash $startup &amp;gt; /dev/null 2&amp;gt;&amp;#38;1
      echo -e "OK";
}
stop() {
      echo -n "Stopping $prog: " 
      `ps auwx | grep $proc|awk '{print $2}'|xargs kill &amp;gt;/dev/null 2&amp;gt;&amp;#38;1`
      echo -e "OK" 
}
restart(){
    echo -n "Stopping $prog: " 
    `ps auwx | grep $proc|awk '{print $2}'|xargs kill &amp;gt;/dev/null 2&amp;gt;&amp;#38;1`
    echo -e "OK" 
    echo -n $"Starting $prog: " 
    bash $startup &amp;gt; /dev/null 2&amp;gt;&amp;#38;1
    echo -e "OK";
}
status(){
    if `pgrep -f $proc 1&amp;gt;/dev/null 2&amp;gt;/dev/null`;
    then echo "$prog is running on `pgrep -f -d , $proc`" 
    else echo "$prog is not running";
    fi
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
 restart)
        restart
        ;;
 status)
        status
        ;;
*)
        echo $"Usage: $prog {start|stop|restart|status}" 
        exit 1
esac
&lt;/pre&gt;

Now you are all set, and can run:
&lt;pre&gt;service instiki stop|start|restart
&lt;/pre&gt;</description>
      <pubDate>Wed, 15 Feb 2006 18:47:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:77e92cb8f956d1da26670bebc6dcd9fb</guid>
      <author>av@avlux.net (Andrew)</author>
      <link>http://avlooks.net/articles/2006/02/15/running-instiki-best-practices</link>
      <category>System Admin</category>
      <category>Ruby on Rails</category>
      <category>instiki</category>
      <category>rubyonrails</category>
      <category>howto</category>
      <category>wiki</category>
      <category>sysadmin</category>
      <trackback:ping>http://avlooks.net/articles/trackback/6</trackback:ping>
    </item>
  </channel>
</rss>
