This commit is contained in:
Your Name
2022-06-29 13:15:55 -04:00
commit 4e044251eb
18 changed files with 2437 additions and 0 deletions
@@ -0,0 +1,322 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Rails 3 on AWS micro: CentOS Nginx Passenger</title>
<meta name="description" content="Note: This was tested on AWS using a micro instance and ami-6b608c02 which seemed to be the most barebones community CentOS i386 EBS AMI I could find. It wor...">
<link rel="stylesheet" href="/css/main.css">
<link rel="canonical" href="http://blog.krisforbes.ca/2010/09/11/rails-3-on-aws-micro-centos-nginx-passenger.html">
<link rel="alternate" type="application/rss+xml" title="Kris Forbes Blog" href="http://blog.krisforbes.ca/feed.xml">
</head>
<body>
<header class="site-header" role="banner">
<div class="wrapper">
<a class="site-title" href="/">Kris Forbes Blog</a>
<nav class="site-nav">
<a href="#" class="menu-icon">
<svg viewBox="0 0 18 15">
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
</svg>
</a>
<div class="trigger">
<a class="page-link" href="/about/">About</a>
</div>
</nav>
</div>
</header>
<main class="page-content" aria-label="Content">
<div class="wrapper">
<article class="post" itemscope itemtype="http://schema.org/BlogPosting">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">Rails 3 on AWS micro: CentOS Nginx Passenger</h1>
<p class="post-meta"><time datetime="2010-09-11T21:07:00-04:00" itemprop="datePublished">Sep 11, 2010</time></p>
</header>
<div class="post-content" itemprop="articleBody">
<p>Note: This was tested on AWS using a micro instance and ami-6b608c02 which seemed to be the most barebones community CentOS i386 EBS AMI I could find. It works as a Micro instance out of the box without issues.</p>
<h2 id="prepare-the-server">Prepare the Server</h2>
<h3 id="update-the-system-and-install-required-libraries">Update the system and install required libraries</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code>yum update -y
yum groupinstall “Development Tools” -y
yum install zlib-devel wget openssl-devel pcre pcre-devel readline-devel sudo nano -y
</code></pre>
</div>
<h3 id="configure-time-settings">Configure Time Settings</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code>yum install tzdata system-config-date -y
yum install ntp -y
<span class="c"># Contact NTP server and update current time</span>
ntpdate ntp.ubuntu.com
</code></pre>
</div>
<h3 id="configure-the-hostname">Configure the hostname</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code>hostname my.specialhost.name
</code></pre>
</div>
<p>Write loopback IP and your hostname in your /etc/hosts file:
<code class="highlighter-rouge">bash
nano /etc/hosts
127.0.0.1 my.specialhost.name
Write your hostname to /etc/hostname
nano /etc/hostname
my.specialhost.name
</code>
## Installing the Application Stack</p>
<h3 id="install-mysql">Install MySQL</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code>yum install mysql mysql-devel
Secure your MySQL install:
mysql_secure_installation
Install Ruby
Ignore ri and rdoc <span class="k">for </span>this server
nano ~/.gemrc
Add these two lines:
install: —no-ri —no-rdoc
update: —no-ri —no-rdoc
</code></pre>
</div>
<h3 id="download-ruby-from-source-and-install">Download Ruby from source and install:</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code>wget ftp://ftp.ruby-lang.org:21//pub/ruby/1.9/ruby-1.9.2-p0.tar.gz
tar xvfz ruby<span class="k">*</span>
<span class="nb">cd </span>ruby<span class="k">*</span>
./configure <span class="o">&amp;&amp;</span> make <span class="o">&amp;&amp;</span> make install
Check that Ruby and RubyGems all were installed correctly:
ruby -v
gems -v
</code></pre>
</div>
<h3 id="clean-up-the-ruby-source-files">Clean up the Ruby source files:</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="nb">cd</span> ..
rm -R ruby<span class="k">*</span>
Install Git <span class="o">(</span>Good idea <span class="k">for </span>Capistrano deployments<span class="o">)</span>
yum install gettext-devel expat-devel curl-devel zlib-devel openssl-devel
wget http://kernel.org/pub/software/scm/git/git-1.7.1.tar.gz
tar xzvf git-1.7.1.tar.gz
<span class="nb">cd </span>git-1.7.1
make <span class="nv">prefix</span><span class="o">=</span>/usr/local all
make <span class="nv">prefix</span><span class="o">=</span>/usr/local install
</code></pre>
</div>
<h3 id="install-rails-and-passenger-gems">Install Rails and Passenger gems</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code>gem install rails
If you need a specific version of Rails:
gem install rails -v<span class="o">=</span>2.3.8
gem install passenger
Install modified Nginx with Passenger built-in
passenger-install-nginx-module
Option 1
</code></pre>
</div>
<h3 id="create-init-scripts-for-nginx">Create init scripts for Nginx</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code>git clone git://github.com/xdite/rails-nginx-passenger-centos.git
sudo mv rails-nginx-passenger-centos/nginx/nginx /etc/init.d/nginx
sudo chown root:root /etc/init.d/nginx
Verify the script can start and stop Nginx:
sudo /etc/init.d/nginx start
  <span class="k">*</span> Starting Nginx Server…
  …done.
sudo /etc/init.d/nginx status
  nginx found running with processes:  11511 11510
sudo /etc/init.d/nginx stop
  <span class="k">*</span> Stopping Nginx Server…
  …done.
Add Nginx to startup:
sudo /sbin/chkconfig nginx on
Check that it starts and stops with the server by:
reboot
Install ImageMagick and RMagick <span class="o">(</span>Optional<span class="o">)</span>
yum remove imagemagick
yum install tcl-devel libpng-devel libjpeg-devel ghostscript-devel bzip2-devel freetype-devel libtiff-devel
yum install libjpeg-devel libpng-devel glib2-devel fontconfig-devel zlib-devel libwmf-devel freetype-devel
Download the ImageMagick Source
wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
tar xvfz ImageMagick.tar.gz
<span class="nb">cd </span>ImageMagick-6<span class="k">*</span>
./configure —prefix<span class="o">=</span>/usr —with-bzlib<span class="o">=</span>yes —with-fontconfig<span class="o">=</span>yes —with-freetype<span class="o">=</span>yes —with-gslib<span class="o">=</span>yes —with-gvc<span class="o">=</span>yes —with-jpeg<span class="o">=</span>yes —with-jp2<span class="o">=</span>yes —with-png<span class="o">=</span>yes —with-tiff<span class="o">=</span>yes
make <span class="o">&amp;&amp;</span> make install
Install RMagick
gem install rmagick
</code></pre>
</div>
<h2 id="create-a-deployer-user-recommended">Create a deployer user (Recommended)</h2>
<p>### Add the user
<code class="highlighter-rouge">bash
useradd deployer
passwd deployer
</code></p>
<h3 id="give-deployer-sudo-permission">Give deployer sudo permission</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code>nano /etc/sudoers
Add this near the bottom of the file:
deployer    <span class="nv">ALL</span><span class="o">=(</span>ALL<span class="o">)</span>     ALL
</code></pre>
</div>
<h3 id="end-your-ssh-session">End your SSH session</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="nb">exit
</span>ssh deployer@my.specialhost.name
Lock the root account
sudo passwd root -l
</code></pre>
</div>
<h2 id="test-a-rails-3-app">Test a Rails 3 app</h2>
<h3 id="create-the-testapp">Create the testapp</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code>rails new testapp -d mysql
<span class="nb">cd </span>testapp
bundle install
Enter your database password <span class="k">in </span>your database.yml real quick
nano config/database.yml
rake db:create:all
rails generate scaffold post title:string body:text
rake db:migrate
Check really quick that WeBrick can start the rails app before we involve Passenger/Nginx
rails server
Change the user Nginx runs as
sudo nano /opt/nginx/conf/nginx.conf
At the top of the config file, uncomment or change “user nobody;” to:
 user deployer;
</code></pre>
</div>
<h3 id="add-a-virtual-host-to-nginx">Add a virtual host to Nginx</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code>sudo nano /opt/nginx/conf/nginx.conf
Find the server <span class="o">{</span> <span class="o">}</span> block <span class="k">in </span>the default file and remove it. Add this:
server <span class="o">{</span>
    listen 80;
    <span class="c"># server_name www.mycook.com;</span>
    root /home/deployer/testapp/public;
    passenger_enabled on;
<span class="o">}</span>
Restart Nginx:
 sudo /etc/init.d/nginx restart
Try accessing your testapp
In your web browser:
http://my.specialhost.name/posts
Tweaking Nginx/Passenger
Enable gzip
sudo nano /opt/nginx/conf/nginx.conf
Find the existing commented “ <span class="c">#gzip on; ” and remove it and replace it with the following:</span>
gzip on;
gzip_buffers 16 8k;
gzip_disable “MSIE <span class="o">[</span>1-6].”;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
Longer expiration tags on content served by Nginx
Place the following <span class="k">in </span>your virtual hosts server <span class="o">{</span> <span class="o">}</span> block:
location ~<span class="k">*</span> .<span class="o">(</span>ico|css|js|gif|jp?g|png<span class="o">)(</span><span class="se">\?</span><span class="o">[</span>0-9]+<span class="o">)</span>?<span class="nv">$ </span><span class="o">{</span>
      expires max;
      <span class="nb">break</span>;
  <span class="o">}</span>
Reduce Passenger spin-up <span class="nb">time
</span>Place the following <span class="k">in </span>your virtual hosts server <span class="o">{</span> <span class="o">}</span> block:
<span class="c">#Passenger options</span>
rails_spawn_method smart-lv2; <span class="c"># This can cause problems with some apps</span>
rails_app_spawner_idle_time 0;
rails_framework_spawner_idle_time 0;
</code></pre>
</div>
</div>
</article>
</div>
</main>
<footer class="site-footer">
<div class="wrapper">
<h2 class="footer-heading">Kris Forbes Blog</h2>
<div class="footer-col-wrapper">
<div class="footer-col footer-col-1">
<ul class="contact-list">
<li>Kris Forbes Blog</li>
</ul>
</div>
<div class="footer-col footer-col-2">
<ul class="social-media-list">
<li>
<a href="https://github.com/krisf"><span class="icon icon--github"><svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
</span><span class="username">krisf</span></a>
</li>
<li>
<a href="https://twitter.com/forbes_kris"><span class="icon icon--twitter"><svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
</span><span class="username">forbes_kris</span></a>
</li>
</ul>
</div>
<div class="footer-col footer-col-3">
<p>Kris Forbes - Personal blog covering experiences with tech such as Docker, Azure, OVH, Linux, Windows, etc.</p>
</div>
</div>
</div>
</footer>
</body>
</html>