Rails 5 自动化部署
来源:互联网 发布:上海争游网络首页 编辑:程序博客网 时间:2024/06/03 09:56
Rails 5 自动化部署
这篇文章主要记录我参考这篇文章来部署我项目(使用Capistrano
自动部署)的过程,下面是我开发环境和生产环境介绍:
- 开发环境
macOS 10.13
+rbenv(ruby 2.4.2)
+sqlite
- 生产环境
Ubuntu 16.04
+rbenv(ruby 2.4.2)
+mysql
项目托管在
GitHub
上
通过 ssh-key
无密码登录服务器
在本地运行以下命令创建 `ssh-key`:cd# 把 YOUR_EMAIL 换成你的 emailssh-keygen -t rsa -b 4096 -C "YOUR_EMAIL"
在服务器上,创建一个名为 `deploy` 的用户来部署项目,运行命令:sudo adduser deploysudo adduser deploy sudosu deploy
注:sudo adduser deploy
:创建一个名为deploy
的用户sudo adduser deploy sudo
:把deploy
这个用户添加到sudo
用户组su deploy
:切换到deploy
用户
在本地运行以下命令把 ssh-key
拷贝到服务器上:
# 把 SERVER_IP 换成你的服务器 IPssh-copy-id deploy@SERVER_IP
以后登录服务器只需运行 ssh deploy@SERVER_IP
不需要密码就可以z自动登录到服务器
安装 Ruby
在服务器上,运行以下命令安装部署需要的软件和库
sudo apt-get updatesudo 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 libffi-dev nodejs
安装 rbenv
来管理 ruby
版本(关于 rbenv
,参考 这儿 )
cdgit clone https://github.com/rbenv/rbenv.git ~/.rbenvecho 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrcecho 'eval "$(rbenv init -)"' >> ~/.bashrcexec $SHELLgit clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-buildecho 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrcexec $SHELLrbenv install 2.4.2rbenv global 2.4.2ruby -v
安装 Bundler
gem install bundler
安装 Nginx
以下配置、命令都需要用
sudo
权限来执行
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7sudo apt-get install -y apt-transport-https ca-certificates# Add Passenger APT repositorysudo 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 & Nginxsudo apt-get install -y nginx-extras passenger
打开 /etc/nginx/nginx.conf
找到 # include /etc/nginx/passenger.conf
这一行去掉前面的注释:
### Phusion Passenger### Uncomment it if you installed ruby-passenger or ruby-passenger-enterprise##include /etc/nginx/passenger.conf;
打开 /etc/nginx/passenger.conf
,添加配置:
passenger_ruby /home/deploy/.rbenv/shims/ruby;passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
执行 sudo service nginx restart
重启 Nginx
安装 MySQL
sudo apt-get install mysql-server mysql-client libmysqlclient-dev
你可以创建新账号用于这次部署,关于
MySQL
创建新用户,参考这儿。然后创建一个database
,数据库名字根据你项目里的database.yml
来配置,比如:
create database `my_app_production`
Capistrano 安装配置
配置
Capistrano
确保你本地环境而不是服务器上
把以下 gems
添加到你项目的 Gemfile
里,然后 bundle
安装
gem 'capistrano'gem 'capistrano-rails'gem 'capistrano-rbenv'
运行下面命令生产 Capistrano
配置文件
cap install STAGES=production
通过上面的命令,产生了一些文件,打开在项目主目录下的 Capfile
文件,添加配置:
require 'capistrano/rails'require 'capistrano/rbenv'set :rbenv_type, :userset :rbenv_ruby, '2.4.2'
打开 config/deploy.rb
添加以下配置:
set :application, "my_app_name"set :repo_url, "git@example.com:me/my_repo.git"set :deploy_to, "/home/deploy/my_app_name"append :linked_files, "config/database.yml", "config/secrets.yml"append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "public/system"
打开 config/deploy/production.rb
添加以下配置:
# 把 127.0.0.1 换成你服务器的 IP!server '127.0.0.1', user: 'deploy', roles: %w{app db web}
更多关于
Capistrano
,参考这儿
添加 Nginx Host
打开 /etc/nginx/sites-enabled/default
,添加:
server { listen 80; listen [::]:80 ipv6only=on; # 把 mydomain.com 改成你的域名 server_name mydomain.com; passenger_enabled on; rails_env production; # 把 my_app_name 改成你之前配置的 root /home/deploy/my_app_name/current/public; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }}
连上数据库
建议把像 database.yml
和 secrets.yml
这里配置文件不要加入 git
,创建两个*.yml.example
echo "config/database.yml\nconfig/secrets.yml" >> .gitignoregit add -Agit mv config/secrets.yml config/secrets.yml.examplegit mv config/database.yml config/database.yml.examplegit commit -m "Capistrano configs"cp config/secrets.yml.example config/secrets.ymlcp config/database.yml.example config/database.yml
执行 cap production deploy
第一次自动化部署,可以看到报错信息(因为没有配置 database.yml
、secrets.yml
文件)
linked file /home/deploy/build.gorails.com/shared/config/database.yml does not exist on IP_ADDRESS
在服务器上创建 database.yml
文件,配置:
# /home/deploy/my_app_name/shared/config/database.ymlproduction: adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: <%= ENV['BLOG_DATABASE_PASSWORD'] %> host: localhost database: blog_production
在服务器上创建 secrets.yml
文件,在项目主目录执行 rails secret
生成 secret_key
填到 YOUR_SECRET_KEY
位置
# /home/deploy/my_app_name/shared/config/secrets.ymlproduction: secret_key_base: YOUR_SECRET_KEY
在本地运行 cap production deploy
部署。完成后,在服务器上运行 touch my_app_name/current/tmp/restart.tx
重启网站。
完。
- Rails 5 自动化部署
- Capistrano 3 实现Rails 自动化部署
- Rails 的自动化部署工具Cap(Capistrano)和mina
- rails部署
- 自动化部署
- 使用Capistrano部署rails
- rails heroku 部署
- capistrano 部署rails
- rails 服务器部署
- Rails+nginx服务器部署
- Rails应用部署
- Passenger + Nginx 部署Rails
- Passenger + Nginx 部署Rails
- docker+daocloud+rails部署
- jenkins自动化构建rails程序
- openstack 自动化部署/离线部署
- 自动化部署实践capistrano
- Puppet 自动化配置 部署
- 2017php经典面试题 1、PHP语言的一
- FreeTextBox-在线编辑器
- md5、sha1+salt和Bcrypt对比
- 点云滤波处理方式
- Mikolov的Word2vec学习理解
- Rails 5 自动化部署
- 分布式基础-RMI原理简单通俗版
- 课后练习
- 在JDBC中 java项目 以及 web项目加载路径文件的异同
- Android DiskLruCache(磁盘缓存)
- 闭包的学习例子
- 编译ESP8266固件说明
- 运行循环和自动释放池关系
- cas shiro spring实现单点登录