如何自动PHP应用程序部署过程中使用Capistrano的在Ubuntu上13

在这种DigitalOcean文章中,我们Capistrano的自动化工具系列的后续,我们将看到如何引入另一个小框架(或工具),这个时候来帮助你推动你的代码,您的服务器不与SFTP文件管理器处理 - 自动!

介绍


现代Web应用程序开发在很大程度上依赖于框架。 这些容易准备的库使得实际的编程比它更容易,不像你们在旧的日子。 它们提供从认证,加密,cookie和会话处理到文件上传的工具。

尽管PHP编程语言及其许多优秀框架的普及,仍然存在时间的挑战,使开发人员远离创建他们梦想的网站(或API)的有趣的位。

在这种DigitalOcean文章,下面我们Capistrano的自动化工具系列中,我们将看到如何引入另一个微架构(或工具),这个时候来帮助你推动你的代码,您的服务器不与SFTP文件管理器处理- 自动!

词汇表


Capistrano简介


2.获取Ruby解释器和Capistrano


  1. Ruby解释器
  2. Capistrano

3.准备部署服务器


  1. 创建部署用户和组
  2. 创建应用程序部署目录
  3. 设置PHP和Nginx

4.为自动部署准备PHP应用程序


  1. 启动Git
  2. 发起Capistrano
  3. 配置Capistrano部署
  4. 使用Capistrano配置生产
  5. 部署到生产服务器

5.故障排除


注意:尽管我们将看到如何下载并为Capistrano的必要的依赖(如Ruby2.1.0 )自动化部署过程,本文假定您已经部署Droplet准备与一个正常运作的网站安装,在线在Ubuntu 13云服务器上。

Capistrano简介


Capistrano是一个基于Ruby编程语言的开源服务器(或部署)管理工具。 使用Capistrano,任意函数和过程可以在没有直接干扰的情况下通过Capistrano使用所有指令执行脚本(即配方)来在虚拟服务器上执行。 在一般意义上,这个工具可以被认为是开发人员自己的部署助手,帮助几乎任何事情从远程机器上的代码启动整个上线过程。

最初写的帮助Rails框架部署,与最新版本,Capistrano 3现在可以用于(和)几乎任何东西,包括PHP。

注:如果您想了解更多关于Capistrano的和Ruby,看看我们的文章的主题: 如何使用Capistrano的来自动化部署:入门

获得Ruby解释器和Capistrano


Ruby解释器


在您的PHP开发机器上,您需要有最新的可用的Ruby解释器才能运行Capistrano。 下面的说明,解释如何在Ubuntu的VPS拿到Ruby,其实是我们的详细教程的简单总结: 准备一个Ubuntu 13服务器来运行的Ruby 2.1.0

# Update the software sources list
# And upgrade the dated applications:

aptitude    update
aptitude -y upgrade

# Download and install the build-essential package:
aptitude install -y build-essential

# And some additional, commonly used tools:
aptitude install -y cvs subversion git-core libyaml-dev mercurial

# Get the Ruby Version Manager
curl -L get.rvm.io | bash -s stable

# And to create a system environment with RVM:
source /etc/profile.d/rvm.sh

# Download and install Ruby using RVM:
rvm reload
rvm install 2.1.0

Capistrano


一旦安装了Ruby,Capistrano可以使用默认的Ruby包管理器RubyGems来设置。

运行以下命令,使用下载和安装Capistrano的3 gem

gem install capistrano --no-ri --no-rdoc

准备部署服务器


作为一个成熟的自动化工具,Capistrano建立在稳定性和安全性的头脑。 为了使用它来部署PHP Web应用程序,我们首先需要在部署服务器上执行一些工作,例如创建一个用户组以供Capistrano用于连接到它。

创建部署用户和组


添加新用户组:

# Usage: sudo addgroup [group name]
sudo addgroup www

创建新用户并将其添加到此组:

# Create a new user:
# Usage: sudo adducer [user name]
sudo adduser deployer

# Follow on-screen instructions to user-related
# information such as the desired password.

# Add the user to an already existing group:
# Usage: sudo adducer [user name] [group name]
sudo adduser deployer www

编辑/etc/sudoers使用文本编辑器nano ,让用户deployer sudo未来部署:

nano /etc/sudoers

向下滚动文件,并找到root的定义:

..

# User privilege specification
root    ALL=(ALL:ALL) ALL

..

追加后立即以下root ALL=(ALL) ALL

deployer ALL=(ALL:ALL) ALL

在本节/etc/sudoers文件现在应该是这样的:

..

# User privilege specification
root     ALL=(ALL:ALL) ALL
deployer ALL=(ALL:ALL) ALL

..

按CTRL + X,并用Y确认保存并退出。

注意:要了解更多有关SSH和sudo的,请在社区DigitalOcean文章Linux基础

创建应用程序部署目录


在部署服务器上,我们还需要定义和创建PHP代码库所在的目录,以便Web服务器运行应用程序。

创建www内部网络的应用程序目录/var

sudo mkdir /var/www

并设置权限,使其访问Web服务器(即Nginx):

# Set the ownership of the folder to members of `www` group
sudo chown -R :www  /var/www

# Set folder permissions recursively
sudo chmod -R g+rwX /var/www

# Ensure permissions will affect future sub-directories etc.
sudo chmod g+s      /var/www

设置PHP和Nginx


Capistrano的职责是自动部署。 我们仍然需要设置PHP和NGinx - 或任何其他Web服务器和解释器组合,以使我们的Web应用程序工作。

为了完全准备部署服务器以运行PHP Web应用程序,请查看以下文章:

  • Nginx,PHP和MySQL:

如何安装Linux,nginx,MySQL,PHP(LEMP)

  • phpMyAdmin:

如何在LEMP服务器上安装phpMyAdmin

为自动部署准备PHP应用程序


一旦我们在我们的开发服务器上安装Ruby和Capistrano,并在部署机器上添加一个部署用户,我们就可以看到如何“启动”Capistrano开始使用该工具。

注:在本节中,我们假设你的web应用程序源代码位于/home/developer1/my_app目录。 下面的命令需要从内执行。

# cd /path/to/your/app/on/dev/server
cd /home/developer1/my_app

启动Git


Git是开发人员常用的源代码管理系统和重访工具。 Capistrano通过Git存储库控制和管理应用程序生命周期和部署过程。

在本节中,我们将创建一个中央可访问的Git存储库,启动Git并将您的项目上传到Capistrano以便在部署期间使用。

注意:为了遵循这一节中,您将需要一个Github上的帐户,并创建了一个空库。

执行您的应用程序源代码所在的目录(如内以下,不言自明的命令my_app )来启动一个存储库:

# !! These commands are to be executed on
#    your development machine, from where you will
#    deploy to your server.
#    Instructions might vary slightly depending on
#    your choice of operating system.

# Initiate the repository
git init

# Add all the files to the repository
git add .

# Commit the changes
git commit -m "first commit"

# Add your Github repository link 
# Example: git remote add origin git@github.com:[user name]/[proj. name].git
git remote add origin git@github.com:user123/my_app.git

# Create an RSA/SSH key
# Follow the on-screen instructions
ssh-keygen -t rsa

# View the contents of the key and add it to your Github
# by copy-and-pasting from the current remote session by
# visiting: https://github.com/settings/ssh
# To learn more about the process,
# visit: https://help.github.com/articles/generating-ssh-keys
cat /root/.ssh/id_rsa.pub

# Set your Github information
# Username:
# Usage: git config --global user.name "[your username]"
# Email:
# Usage: git config --global user.email "[your email]"
git config --global user.name  "user123"    
git config --global user.email "user123@domain.tld"

# Push the project's source code to your Github account
git push -u origin master

注意:要了解更多关于使用Git的工作,检查了如何使用有效的Git在DigitalOcean社区网页教程。

发起Capistrano


在这一步中,我们将使Capistrano自动支持其项目目录中的配置和部署文件。

运行以下命令以启动(即安装 )Capistrano的文件:

cap install

# mkdir -p config/deploy
# create config/deploy.rb
# create config/deploy/staging.rb
# create config/deploy/production.rb
# mkdir -p lib/capistrano/tasks
# Capified

配置Capistrano部署


该文件config/deploy.rb包含有关部署服务器(S)的参数和设置。 在这里,我们将告诉Capistrano我们想要连接和部署的服务器。

运行使用编辑文件中的以下nano文本编辑器:

nano config/deploy.rb

添加以下代码块,修改它以适合您自己的设置:

# !! When editing the file (or defining the configurations),
#    you can either comment them out or add the new lines.
#    Make sure to **not** to have some example settings
#    overriding the ones you are appending.

# Define the name of the application
set :application, 'my_app'

# Define where can Capistrano access the source repository
# set :repo_url, 'https://github.com/[user name]/[application name].git'
set :scm, :git
set :repo_url, 'https://github.com/user123/my_app.git'

# Define where to put your application code
set :deploy_to, "/var/www/my_app"

set :pty, true

set :format, :pretty

# Set your post-deployment settings.
# For example, you can restart your Nginx process
# similar to the below example.
# To learn more about how to work with Capistrano tasks
# check out the official Capistrano documentation at:
# http://capistranorb.com/

# namespace :deploy do
#   desc 'Restart application'
#   task :restart do
#     on roles(:app), in: :sequence, wait: 5 do
#       # Your restart mechanism here, for example:
#       sudo "service nginx restart"
#     end
#   end
# end

按CTRL + X,并用Y确认保存并退出。

使用Capistrano配置生产


注:类似config/deploy.rb ,你将需要做出一些修订config/production.rb文件。 你最好修改代码,而不是附加下面的块。

运行以下命令以使用nano文本编辑器编辑文件:

nano config/deploy/production.rb

输入您的服务器设置,类似如下:

# Define roles, user and IP address of deployment server
# role :name, %{[user]@[IP adde.]}
role :app, %w{deployer@162.243.74.190}

# Define server(s)
# Example:
# server '[your droplet's IP addr]', user: '[the deployer user]', roles: %w{[role names as defined above]}
# server '162.243.74.190', user: 'deployer', roles: %w{app}
server '162.243.74.190', user: 'deployer', roles: %w{app}

# SSH Options
# See the example commented out section in the file
# for more options.
set :ssh_options, {
    forward_agent: false,
    auth_methods: %w(password),
    password: 'user_deployers_password',
    user: 'deployer',
}

按CTRL + X,并用Y确认保存并退出。

部署到生产服务器


一旦我们完成设置,就是部署的时候了。

在开发计算机上运行以下代码以部署到生产服务器。 如上文所述,Capistrano将:

  • 连接到部署服务器

  • 下载应用程序源

  • 执行部署操作

完成所有设置后,您可以运行以下命令以使Capistrano将您的应用程序源从开发服务器部署到部署机器:

cap production deploy

就这样! 现在,您可以观看Capistrano在线代码,并跟踪您最新的代码库。

故障排除


使用Capistrano并不总是像看起来那么直接。 不幸的是,该工具喜欢抱怨,而不是指导,文档,在目前阶段,是有点有限。

为了一切顺利,努力:

  • 匹配目录和存储库名称。

  • 正确输入一切。

  • 确保您的开发和部署服务器包含所有必要的工具(即sqlite3,库等)。

  • 确保在Capistrano执行它们之前手动测试所有操作和执行。

  • 考虑在官方Capistrano文档之后实现更安全的身份验证方法。

要了解有关Capistrano及其功能的更多信息,请考虑阅读[Capistrano文档](capistranorb.com/documentation)。

:提交OS Tezer