记我的第二次部署
创建于: 2017-03-17   最后更新: 2017-03-26
部署 记录 Rails

还记得第一次部署Rails应用时花了我很多时间,也踩了一些坑,那是我第一次自己独立完成一次开发,最后输入域名看到网站正常运行的那一瞬间,真的是非常欣慰的。

当时本想把整个部署过程记录下来,但一直没来得及,转眼这又是第二次部署了,有了上次的经验,这次轻松了许多,参考相关资料,我把全过程简洁记录如下:

  1. 生成ssh key 并添加到服务器: ssh-keygen -t rsa

    如果已经有key, 直接显示ssh key内容: cat ~/.ssh/id_rsa.pub

  2. 以root用户登录服务器: ssh root@[ip.address]

  3. 创建部署用的用户: useradd -m deploy

    将用户加入sudo群组: adduser deploy sudo

    为deploy用户设置密码: passwd deploy

    退出当前 SSH 链接,用 deploy 帐号重新登陆。

    如果此时用deploy无法登陆,可能是没有权限,尝试

    mkdir /home/deploy/.ssh
    cp ~/.ssh/authorized_keys /home/deploy/.ssh/
    chown -R deploy.deploy /home/deploy/.ssh
    chmod -R go-rwx /home/deploy/.ssh  
    
  4. apt-get update (此处阿里云服务器可能有个坑)

  5. 安装rvm

    gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
    
    \curl -sSL https://get.rvm.io | bash
    

    安装完成后启动:source ~/.rvm/scripts/rvm

  6. 安装ruby rvm use --install --default 2.3.1

  7. 安装Passenger + Nginx

    # Install our PGP key and add HTTPS support for APT
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
    sudo apt-get install -y apt-transport-https ca-certificates
    
    # Add our APT repository
    
    sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger xenial main > /etc/apt/sources.list.d/passenger.list'
    sudo apt-get update
    
    # Install Passenger + Nginx
    
    sudo apt-get install -y nginx-extras passenger
    

    (此处的安装的Passenger是作为模块编译到nginx中,所以事先不能装nginx,如果装了要先卸载,否则会出现奇怪的错误)

  8. 编辑/etc/nginx/nginx.conf

    在http块中注释掉或是加入 include /etc/nginx/passenger.conf;

    (此时可以用nginx -t -c /etc/nginx/nginx.conf 检查nginx配置是否正确

    sudo /usr/bin/passenger-config validate-install 检查passenger的安装是否正确)

    编辑/etc/nginx/passenger.conf

    passenger_ruby /usr/bin/ruby;一行 改为 passenger_ruby /home/deploy/.rvm/wrappers/default/ruby;

  9. 重启Nginx

    sudo service nginx restart

  10. 上传文件

    mkdir -p /var/xxx/
    cd xxx
    git clone xxx
    bundle install
    rails db:create db:migrate
    rails assets:precompile
    
  11. 修改nginx配置

    删除原有的默认网站配置: rm /etc/nginx/sites-enabled/default

    新建网站配置: touch /etc/nginx/sites-enabled/example.com.conf

    内容:

    server {
        listen 80 default;
        server_name example.com; # 这里填写你真实域名
        root /var/www/example.com/current/public; #网站目录
        passenger_enabled on;
    }
    

最后重启nginx,Bingo!

当然这其中还有很多大大小小的坑,欢迎交流。