Ubuntu 上搭建 Ruby on Rails 生产环境
2015-02-05 14:18
716 查看
注意事项:
网络环境: 主机必须能够连接外网,国内的可能出现部分网络无法访问;软件版本:
nginx-1.5.0,
rvm-1.20.10,
ruby-2.0.0-p195,
postgresql-9.1.9,
passenger-4.0.2,版本可能会过期,执行时请换成相应的版本;
操作系统:
Ubuntu-12.04,
所有命令请使用root用户执行,如果不是root用户,请使用
sudo su -切换;
服务器: Nginx 或者 Apache。
目录
注意事项:一. 基本环境安装
1.更新服务器到最新的系统
2.设置
/etc/bash.bashrc和
/etc/profile
二. 安装 Ruby 环境
1. 服务器安装RVM:
2. 使用 RVM 安装和编译 Ruby
3. 设置 Ruby 环境
三. 安装数据库及其驱动
1. 安装 PostgreSQL Server
2. 安装 PostgreSQL 客户端和 Ruby 驱动
四. 安装 Web 服务器
Apache 的安装与配置
1. 安装 Apache 服务器
2. 设置 apache 用户
3. 安装 Passenger
Nginx 的安装与配置
1. 安装 passenger
2. 下载和编译 nginx
3. 配置 nginx
4. 配置 passenger
5. 配置 Nginx 随系统自动启动
6. 自动清理日志
五. 后记
参考文档
一. 基本环境安装
1.更新服务器到最新的系统
1 2 3 | apt-get update apt-get dist-upgrade do-release-upgrade |
2.设置 /etc/bash.bashrc
和 /etc/profile
编辑 /etc/profile文件,
在文件头加入:
1 | export system_profile_loaded=1 |
1 2 34 | if [ "$PS1" ]; then if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then # The file bash.bashrc has already set the default PS1. # PS1='\h:\w\$ ' if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "`id -u`" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fi fi |
1 2 3 | if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then [ -f /etc/bash.bashrc ] && . /etc/bash.bashrc fi |
/etc/bash.bashrc,并在开头加入:
1 2 34 | [ -n "${system_bashrc_running}" ] && return |
apt-get install -y bash-completion,不过新版Ubuntu已安装了这个包.
二. 安装 Ruby 环境
RVM 是目前最好, 也是最常用的管理和编译 ruby 的工具, 使用 rvm, 可以减少以后ruby升级带来的麻烦, 更平滑的迁移到新版本.
1. 服务器安装RVM:
12 | apt-get install -y curl git-core curl -L get.rvm.io | bash -s stable |
12 | type rvm | head -1rvm is a function |
2. 使用 RVM 安装和编译 Ruby
安装好 rvm 以后就可以使用 rvm 来对 ruby 进行编译, 推荐安装官方的 2.0.0+ 版本的 Ruby, 搭配Rails3.0+版本使用.编译 Ruby 前首先是需要安装 Ruby 所需要的类库, 所以我们输入:rvm requirements
程序会列出 Ruby 所需要的类库, 找到下面的内容:
从RVM 1.20以后就不需要手动安装确实的库了, 它会自动帮我们都装好;
等待安装完成后就可以编译 Ruby 了.
使用RVM安装Ruby, 终端输入:
rvm install 2.0.0
就会自动的编译和安装 Ruby, 如果需要安装其他版本的 ruby 也可以通过命令:
rvm list known
查看目前可以使用的 Ruby 版本, 其中有
[]的条目代表当前的默认版本.
等待 Ruby 2.0.0 安装好以后, 可以通过
rvm list命令来查看所有通过 rvm 安装的 ruby 版本。
3. 设置 Ruby 环境
首先, 我们通过 rvm 安装完以后, 需要将安装的Ruby设置为系统默认的Ruby环境, 在终端输入:rvm use 2.0.0 --default
接着我们就可以通过
ruby -v来验证是否成功设置.
另外, 服务器是生产环境 所以 rdoc 和 ri 基本是毫无用途的, 所以我们最好默认就不让 rake 去安装 rdoc 和 ri, 所以需要编辑
/usr/local/rvm/rubies/ruby-2.0.0-p195/etc/gemrc,
(如果没有就手动建出来:
gem: -V --no-ri --no-rdoc
设置完以后, 每次使用 gem 命令就不会下载并安装 ri 和 rdoc 了.
至此 Ruby 就算基本安装完成了。
最后一步, 安装Rails:
gem install rails
三. 安装数据库及其驱动
这里演示 PostgreSQL安装方法.
1. 安装 PostgreSQL Server
安装 PostgreSQL Server, 如果有多台机器作为服务器, 显然只需要一台机器安装数据库就可以了.apt-get install postgresql
安装完成以后, 编辑
/etc/postgresql/9.2/main/postgresql.conf找到:
#listen_addresses = 'localhost'
将其修改成:
listen_addresses = '*'
这样就可以通过远程来访问该数据库了, 当然还需要开启对应的权限才可以. 接着我们编辑
/etc/postgresql/9.2/main/pg_hba.conf在文件的最后可以看到:
# Database administrative login by UNIX sockets local all postgres peer # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5
这样的内容, 如果是开发或者测试的服务器, 可以修改成:
# Database administrative login by UNIX sockets #local all postgres peer # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all md5 # IPv4 local connections: host all all 0.0.0.0/0 md5 # IPv6 local connections: host all all ::1/0 md5
这样任何人在任何的地方都可以通过 ip 来访问数据库, 方便测试和调试, 但如果是生产环境, 请务必明白每一行代码的效果后再修改。
由于默认 postgres 用户密码是随机的, 如果需要使用 postgres 通过远程访问的话, 按照我们上述修改的话, 由于不知道密码还无法登入. 所以我们还需要在命令行输入:
su - postgres -c psql postgres ALTER USER postgres WITH PASSWORD 'postgres'; \q
修改 postgres 用户的密码, 我这里修改成的密码是 “postgres”, 实在是不安全, 所以请大家务必要修改成其他的密码.
最后输入
/etc/init.d/postgresql restart重启 postgresql 服务器使配置文件生效.
2. 安装 PostgreSQL 客户端和 Ruby 驱动
apt-get install -y postgresql-client libpq-dev gem install pg
这样就完成了客户端和驱动的安装.
四. 安装 Web 服务器
对于 Rails 或者说 Rack 服务器来说, 有很多的选择比如 unicorn, thin, passenger 等等.我们这里使用最常用的 “Apache + Passenger” 的方式, 就是因为其部署和维护最为方便, 至于性能等有了大量用户再考虑这个问题也不迟, 再说 “Apache + Passenger” 本身性能也不差,如果需要高并发和大量静态文件需要服务器处理,也可以选用 “Nginx + Passenger” ,性能上要好很多。
Apache 的安装与配置
1. 安装 Apache 服务器
在命令行输入:apt-get install -y apache2-mpm-prefork apache2-prefork-dev
安装完成以后, 用浏览器访问服务器的80端口确保可以看到 “It works!”. 再运行:
a2dissite default /etc/init.d/apache2 restart rm /var/www/index.html
关闭刚刚那个无用的默认的网站。
2. 设置 apache 用户
apache 默认使用的是 www-data用户,
而 Rails 程序也是使用该用户发布, 所以要修改
www-data的相关配置信息,
允许这个 用户安装 Gem, 也就是加入 rvm 组:
usermod --shell=/bin/bash -a -G rvm www-data chown -R www-data:www-data /var/www
完成以后 Apache 基本也就安装好了。
3. 安装 Passenger
在终端中输入:gem install passenger
会自动下载并安装 passenger, 安装完 passenger 后, 输入:
passenger-install-apache2-module
然后一路回车, passenger 会自动检测缺少的包, 我们这里提示缺少:
* Curl development headers with SSL support... not found
所以我们按
ctrl + c暂停目前的安装, 并输入:
apt-get install libcurl4-openssl-dev
安装 curl 的 ssl dev包, 接着重新输入
passenger-install-apache2-module开始编译
Passenger 的 Apache 模块 等编译完成以后, 会看到这样的提示:
Please edit your Apache configuration file, and add these lines: LoadModule passenger_module /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.2/ext/apache2/mod_passenger.so PassengerRoot /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.2 PassengerRuby /usr/local/rvm/wrappers/ruby-2.0.0-p195/ruby
于是我们就按照他的提示编辑
/etc/apache2/mods-available/passenger.load输入:
LoadModule passenger_module /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.2/ext/apache2/mod_passenger.so
再编辑
/etc/apache2/mods-available/passenger.conf输入:
PassengerRoot /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.2 PassengerRuby /usr/local/rvm/wrappers/ruby-2.0.0-p195/ruby
接下来让 apache 启用该模块, 输入:
a2enmod passenger /etc/init.d/apache2 restart
至于 Passenger 的性能调优, 清参考 passenger 的官方文档.
Nginx 的安装与配置
注:这里因为需要Nginx集成Passenger Module,并没有采用apt-get install的安装方式,而是Passenger提供的方法手动编译;另:Nginx 在静态文件读取和处理高并发任务上比 Apache 要快多了,有这方面需求的童鞋可以考虑,再者就是 Nginx 的配置比 Apache 要麻烦的多,每次模块的维护和升级都要重新编译。
1. 安装 passenger
只续简单输入gem install passenger
等待自动下载并安装完成.
2. 下载和编译 nginx
首先需要下载一些 Nginx和
Passenger的编译依赖包
apt-get install -y libpcre++-dev libcurl4-openssl-dev
然后输入如下命令
cd /usr/local/src/ wget http://nginx.org/download/nginx-1.5.0.tar.gz tar xvf nginx-1.5.0.tar.gz cd nginx-1.5.0
接着通过 passenger 的命令编译安装 nginx:
passenger-install-nginx-module \ --auto \ --nginx-source-dir=$PWD \ --prefix=/usr/local/nginx \ --extra-configure-flags=" \ --conf-path=/etc/nginx/nginx.conf \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --with-ipv6 --with-http_mp4_module"
等待他安装完成. 接着还需要安装对应的
manpage
mkdir -p /usr/local/share/man/man8/ install objs/nginx.8 /usr/local/share/man/man8/
接着需要将其连接到系统的配置和日志目录下, 输入
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ ln -s /usr/local/nginx/logs /var/log/nginx
3. 配置 nginx
一般来说默认编译出的配置并不适合生产环境的配置, 比较倾向于 ubuntu 自带的区分 sites-enabled和
conf.d的样子,
所以这里需要. 输入
mkdir -p /etc/nginx/conf.d mkdir -p /etc/nginx/sites-available mkdir -p /etc/nginx/sites-enabled usermod --shell=/bin/bash -a -G rvm www-data mkdir -p /var/www chown -R www-data:www-data /var/www
稍微解释下
conf.d放扩展的配置文件,
sites-available放服务器配置,
启用服务后需要将配置连接到
sites-enabled下,
接着需要修改
/etc/nginx/nginx.conf成如下内容
user www-data; worker_processes 4; pid /var/run/nginx.pid; events { worker_connections 768; # multi_accept on; } http { # Basic Settings sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include mime.types; default_type application/octet-stream; # Logging Settings access_log logs/access.log; error_log logs/error.log; # Gzip Settings gzip on; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; # Virtual Host Configs include conf.d/*.conf; include sites-enabled/*; }
4. 配置 passenger
虽然编译了 passenger 的模块, nginx 还需要配置 passenger 的配置.配置前首先需要获取 passenger 的安装目录, 输入
ruby -e 'gem "passenger"; puts Gem.loaded_specs["passenger"].full_gem_path'
可以看到返回的
/usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.2就是
passenger 的安装目录, 接着编辑
/etc/nginx/conf.d/passenger.conf文件,
按之前的结果输入:
passenger_root /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.2; passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p195/ruby;
保存退出后, 再在
/etc/nginx/sites-available下新建一个叫
default的文件,
内容如下:
server { listen 80; listen [::]:80; server_name _; root /var/www/default/htdocs; autoindex on; index index.html index.htm; access_log logs/default-access.log; error_log logs/default-error.log; passenger_enabled on; # enable passenger }
完成后输入
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
启用配置, 接着输入
mkdir -p /var/www/default/htdocs echo world > /var/www/default/htdocs/hello.txt chown -R www-data:www-data /var/www
新建测试文件后, 可以通过命令
nginx启动
nginx, 然后命令行输入
curl http://localhost/hello.txt[/code] 就可以看到其返回的结果是 “world” 了, 然后通过命令nginx -s stop停止 nginx 服务器.之前命令虽然已经可以启动 nginx 了, 但不会随系统一起启动. 为了让他随着系统启动我们还需要编辑
5. 配置 Nginx 随系统自动启动/etc/init.d/nginx文件,
输入
1 2 34 | #!/bin/sh |
chmod +x /etc/init.d/nginx
都完成后就可以通过命令
service nginx start|stop|status来启动,停止和查看 nginx 了. 之后还需要通过命令
update-rc.d nginx defaults
设置 nginx 可以随着系统自动启动.
6. 自动清理日志
如果是 apt 安装的 nginx 系统已经自动帮我们把日志清理给配置好了. 不过由于我们这里必须手工编译, 所以还需要配置日志的定期归档和清理. 这里我们编辑 /etc/logrotate.d/nginx输入:
/var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 0640 www-data adm sharedscripts prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi; \ endscript postrotate [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` endscript }
五. 后记
至此,Ruby on Rails 在Ubuntu上的环境搭建就已经完成了,之后就可以在服务器上发布项目了,Rails发布项目多使用自动化部署,需要安装 Capistrano,这里不再详述。
参考文档
Rails 部署Phusion Passenger users guide, Apache version
Phusion Passenger users guide, Nginx version
RVM官方文档
相关文章推荐
- Ubuntu 10.10下搭建Ruby on Rails 2.3.5开发环境
- Windows下用VirtualBox搭建Ubuntu环境做Ruby on Rails开发
- Ruby on Rails技术(二)——RoR开发环境搭建(Ubuntu)
- Ubuntu 10.10下搭建ror(ruby on rails)开发环境
- ubuntu下搭建Ruby on rails环境
- Ubuntu下搭建Ruby on Rails开发环境
- centos6搭建ruby on rails环境(最终还是用的是ubuntu11.10)
- 在ubuntu 9.04上搭建ruby on rails环境
- Ubuntu下搭建Ruby on rails 环境
- Ubuntu 11.10下搭建Ruby on Rails开发环境(rvm)
- Ubuntu 12.04搭建Ruby on Rails开发环境
- Ubuntu10.04下搭建Ruby on Rails 2.3.5开发环境 转自:http://www.baoyalv.info/blog/panjj/Rails/2010/05/01/76
- Ubuntu下搭建Ruby on Rails+MongoDB+Redis环境
- ubuntu8.10搭建Ruby on Rails环境
- 使用Nginx + unicorn搭建ruby on rails的生产环境
- ubuntu下ruby on rails环境搭建
- ubuntu下,rubyonrails环境搭建
- ubuntu下搭建ruby on rails环境
- 用 Ubuntu 搭建一个 Ruby on Rails 本地开发环境
- Ubuntu 12.04搭建Ruby on Rails开发环境