Open wangxinyun1995 opened 5 years ago
服务器系统是Ubuntu 16.04,本地系统也是Ubuntu 16.04,用ssh登录上服务器
# ip为服务器ip
ssh root@ip
# 登陆进服务器
# 服务器上
# `--ingroup sudo`是说,新建的用户直接就有执行`sudo`命令的权限。
adduser deploy --ingroup sudo
# 输入新密码。
# 问其他的Full Name之类的,你可以填写,也可以不填,直接回车。
# 切换到deploy用户
sudo su deploy
# 进入`家`目录
cd ~
很多云服务器,大部分默认都是使用账号密码登录的。这样做非常不安全,所以你需要改为SSH秘钥登录。如果你想改为秘钥登录,一种是直接在云主机管理界面,上传自己的秘钥。另一种通用方法,就是我下面的操作了。
# 本地,如果已经有这个了,不用执行这一步
ssh-keygen -t rsa
# 如果不需要加密,就直接全部回车。需要加密,就自己填写密码
cat ~/.ssh/id_rsa.pub
# 会出现一段文字,复制下来
# 服务器上(deploy账户)
ssh-keygen -t rsa
# 依然全部直接回车
vi /home/deploy/.ssh/authorized_keys
# 将刚才本地命令行中,复制的那一段文字,粘贴进去,然后按:wq保存离开
chmod 644 /home/deploy/.ssh/authorized_keys
sudo service ssh restart
# 现在你再用SSH连服务器,直接ssh deploy@你的ip,不再需要输入密码了。
# 可能会出现还是让你输入密码的情况,如果出现以下报错
sign_and_send_pubkey: signing failed: agent refused operation
# 解决办法
eval "$(ssh-agent -s)"
ssh-add
用密码登录服务器, 并不是一个安全的选择。最好方法是直接禁用密码登录,改为必须使用SSH秘钥登录。当然这一步是可选的,和我们学习Capistrano并没有什么关系。
# 服务器上(root账户)
sudo vi /etc/ssh/sshd_config
# 将`PasswordAuthentication yes` 修改成 `PasswordAuthentication no`
# :wq退出后
sudo service ssh restart
# 服务器上(deploy账户)
# 确认一下,当前用户依然是deploy。如果不是,先sudo su deploy
# 更新
sudo apt-get update
sudo apt-get upgrade -y
sudo dpkg-reconfigure tzdata
# 选择时区 Time zone=>Asia=>Shanghai
# 安装Rails所必须的各种常见依赖
sudo apt-get install -y build-essential git-core bison openssl libreadline6-dev curl zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 autoconf libc6-dev libpcre3-dev curl libcurl4-nss-dev libxml2-dev libxslt-dev imagemagick nodejs libffi-dev
Ubuntu 16.04 的 apt-get install 默认只支持 Ruby 2.3。对新版本Rails 5.2来说,已经无法运行了。所以我们选择使用 rbenv 来安装 Ruby。
# 服务器(deploy账户)
# 更新 apt,并安装 curl:
sudo apt-get update
sudo apt-get install curl
# 然后安装 RVM:
\curl -sSL https://get.rvm.io | bash
# RVM 安装完毕后,重新登陆 SSH,让 RVM 配置生效。然后安装 Ruby,版本可以自定义:
rvm use --install --default 2.3.1
# Ruby 安装过程会请求 apt-get update 的权限,并自动安装系统依赖。安装完毕后,确认目前的 Ruby 版本:
ruby -v
# 使用Ruby China的RubyGems(境外服务器请略过)
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem sources -l
# 确保只有 gems.ruby-china.com
# 接着安装 bundler gem
gem install bundler
# 同样使用gems.ruby-china.com
bundle config mirror.https://rubygems.org https://gems.ruby-china.com
# 服务器上(deploy账户)
sudo apt-get install mysql-common mysql-client libmysqlclient-dev mysql-server
# 安装过程中,会让你输入密码。自己记好了哦!
# 新建一个数据库,其中deployment是你数据库的名字,可根据需求自行修改
mysql -u root -p
CREATE DATABASE deployment_production CHARACTER SET utf8mb4;
# 退出 mysql console
exit
# 也可以用navicat远程链接,方便数据查看,需要开放mysql远程链接权限
# 服务器上(deploy账户)
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates
# 添加 APT 仓库地址
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
# 安装 Passenger + Nginx
sudo apt-get install -y nginx-extras passenger
到gemfile的group :development中,添加如下代码,这些都是capistrano的插件
group :development do
# ...
# 其中`capistrano-rails`包含了以下三个插件。
# gem 'capistrano/bundler'
# gem 'capistrano/rails/assets'
# gem 'capistrano/rails/migrations'
# 你也可以分别一个个加进去,但是何必呢?这些基本都是`rails`部署必须的。
# 直接用`gem 'capistrano-rails'`这一个就好了。
gem 'capistrano-rails'
# 对`passenger`与`rvm`的支持
gem 'capistrano-passenger'
gem 'capistrano-rvm'
end
# 改完后,本地,命令行进入你的项目中
# app_name是你自己的项目名称
cd ~/app_name
bundle install
# 本地运行
cap install
# 加上这行
require "capistrano/rails"
# 去掉这两行前面的`#`号
# 这儿使用的是rvm,require "capistrano/rails"这行加在require "capistrano/rvm"上一行
require "capistrano/rvm"
require "capistrano/passenger"
其他配置可保持默认。
# 最顶上加这行,注意是「`」号而不是单引号「'」
# 如果你对ssh-add有兴趣,你可以去读这一篇。https://ihower.tw/blog/archives/7837
`ssh-add`
# 项目名称
set :application, "app_name"
# git仓库地址,github仓库地址
set :repo_url, "git@git.coding.net:aaronryuu/deployment.git"
# 需要部署到服务器的位置
set :deploy_to, "/home/deploy/app_name"
# 去掉注释,并加上 "config/master.key"
append :linked_files, "config/database.yml", "config/master.key"
# 去掉注释
append :linked_dirs, 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system'
域名绑定,把对应的证书上传到服务器/etc/nginx/conf.d
文件夹下面
下载nigix
对应的ssl证书然后在/etc/nginx/sites-enabled
新建文件,你的项目名称.conf,eg:cdcwbk_api.conf
server {
listen 443 ssl;
server_name 你的域名;
root /home/deploy/cdcwbk_api/current/public;
ssl_certificate /etc/nginx/conf.d/cdcwlv.work_bundle.crt;
ssl_certificate_key /etc/nginx/conf.d/cdcwlv.work.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
passenger_enabled on;
passenger_min_instances 1;
location ~ ^/assets/ {
expires 1y;
add_header Cache-Control public;
add_header ETag "";
break;
}
}
server {
listen 80;
server_name 你的域名;
return 301 https://$host$request_uri;
}
https://github.com/ruby-china/homeland/wiki/Ubuntu-14.04-%E4%B8%8A%E4%BD%BF%E7%94%A8-Nginx-Passenger-%E9%83%A8%E7%BD%B2-Ruby-on-Rails