Total Pageviews

Wednesday 9 March 2016

在Ubuntu上用thin发布ROR app

How to deploy ruby on rails with thin on Ubuntu

Create a deploy user

sudo adduser deploy
sudo adduser deploy sudo
su deploy

update and install packages

sudo apt-get update
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties

Install RVM

sudo apt-get install libgdbm-dev libncurses5-dev automake libtool bison libffi-dev
curl -L https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
echo "source ~/.rvm/scripts/rvm" >> ~/.bashrc
rvm install 2.1.5
rvm use 2.1.5 --default
ruby -v

echo "gem: --no-ri --no-rdoc" > ~/.gemrc

Git Server

RoR比较流行的是使用git,我们来配置一下Git Server,首先我们需要新建一个名为git的用户并且为它添加公钥。
$ sudo adduser git
$ sudo vi /home/git/.ssh/authorized_keys
我这里假设你的项目名称是project和准备把git仓库的目录设定为/opt/git,如果你没有一个/opt/git目录,需要切换到root新建并且把这个目录的所有者改为git:
$ su - root
# cd /opt
# mkdir git
# chown git git
$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git --bare init
本地电脑
$cd /git/project
$git remote add alt alt-machine:/path/to/repo
$git push alt master
这样会把本地项目同步到git server

Installing MySQL

sudo apt-get install mysql-server mysql-client libmysqlclient-dev

创建用户

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

更改用户密码

mysqladmin -u USER -p password NEWPASSWORD 

创建数据库

CREATE DATABASE database name;

mysql.sock

vi /etc/mysql/my.cnf
You will find the lines below top in your configuration file

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

install thin

gem install thin    
thin config -C /etc/thin/myapp.example.com -c /var/www/myapp.example.com --servers 3 -e development # or: -e production for caching, etc

install nginx

sudo apt-get install nginx

nginx configuration

#/etc/nginx/sites-enabled/myapp.example.com
upstream myapp {
  server 127.0.0.1:3000;
  server 127.0.0.1:3001;
  server 127.0.0.1:3002;
}
server {
  listen   80;
  server_name .example.com;

  access_log /var/www/myapp.example.com/log/access.log;
  error_log  /var/www/myapp.example.com/log/error.log;
  root     /var/www/myapp.example.com;
  index    index.html;

  location / {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host $http_host;
    proxy_redirect  off;
    try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby;
  }

  location @ruby {
    proxy_pass http://myapp;
  }
}

ln -nfs /etc/nginx/sites-available/myapp.example.com /etc/nginx/sites-enabled/myapp.example.com

Start app

thin start -C ~/myapp.example.com 
/etc/init.d/nginx reload
/etc/init.d/nginx restart

用git更新项目

ps -aux
cd your_project_dir
git fetch https://github.com/xxx/yyy.git
git pull https://github.com/xxx/yyy.git
thin start -C ~/myapp.example.com 
/etc/init.d/nginx reload
/etc/init.d/nginx restart