介绍
现代Web应用程序开发在很大程度上依赖于框架。 这些容易准备的库使得实际的编程比它更容易,不像你们在旧的日子。 它们提供从认证,加密,cookie和会话处理到文件上传的工具。
尽管PHP编程语言及其许多优秀框架的普及,仍然存在时间的挑战,使开发人员远离创建他们梦想的网站(或API)的有趣的位。
在这种DigitalOcean文章,下面我们Capistrano的自动化工具系列中,我们将看到如何引入另一个微架构(或工具),这个时候来帮助你推动你的代码,您的服务器不与SFTP文件管理器处理- 自动!
词汇表
Capistrano简介
2.获取Ruby解释器和Capistrano
- Ruby解释器
- Capistrano
3.准备部署服务器
- 创建部署用户和组
- 创建应用程序部署目录
- 设置PHP和Nginx
4.为自动部署准备PHP应用程序
- 启动Git
- 发起Capistrano
- 配置Capistrano部署
- 使用Capistrano配置生产
- 部署到生产服务器
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:
为自动部署准备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)。