如何在Ubuntu13上使用Capistrano自动化PHP应用程序部署过程
介绍
现代 Web 应用程序开发严重依赖于框架。 与过去不同,这些易于准备的库集使实际编程比以前容易得多。 它们提供从身份验证到加密、cookie 和会话处理到文件上传的各种工具。
尽管 PHP 编程语言及其许多优秀的框架很受欢迎,但仍然存在一些耗时的挑战,这些挑战使开发人员远离了创建他们梦寐以求的网站(或 API)的乐趣。
在这篇 DigitalOcean 文章中,在我们的 Capistrano 自动化工具系列之后,我们将看到如何引入另一个小框架(或工具),这一次是为了帮助您将代码推送到您的服务器而无需处理 SFTP 文件管理器 - 自动!
词汇表
1. Capistrano 简介
2. 获取 Ruby 解释器和 Capistrano
- Ruby 解释器
- 卡皮斯特拉诺
3. 准备部署服务器
- 创建部署用户和组
- 创建应用程序部署目录
- 设置 PHP 和 Nginx
4. 为自动部署准备 PHP 应用程序
- 启动 Git
- 启动 Capistrano
- 配置 Capistrano 部署
- 使用 Capistrano 配置生产
- 部署到生产服务器
5. 故障排除
注意: 虽然我们将看到如何下载和设置 Capistrano 的必要依赖项(例如 Ruby 2.1.0
) 来自动化部署过程,本文假设您已经准备好 部署 droplet,并在 Ubuntu 13 云服务器上在线安装了正常运行的网站。
Capistrano 简介
Capistrano 是一种基于 Ruby 编程语言的开源服务器(或部署)管理工具。 使用 Capistrano,可以通过让 Capistrano 执行脚本(即 食谱)列出所有说明。 一般来说,这个工具可以被认为是开发人员自己的部署助手,几乎可以帮助完成从远程机器上获取代码到引导整个上线过程的所有工作。
Capistrano 3 最初是为了帮助 Rails 框架部署而编写的,其最新版本现在可以用于(和用于)几乎任何东西,包括 PHP。
注意: 如果您想了解更多关于 Capistrano 和 Ruby 的信息,请查看我们关于该主题的文章:如何使用 Capistrano 自动化部署:入门。
获取 Ruby 解释器和 Capistrano
Ruby 解释器
在您的 PHP 开发机器上,您需要拥有最新的可用 Ruby 解释器才能运行 Capistrano。 下面的说明解释了如何在 Ubuntu VPS 上获取 Ruby,实际上是我们详细教程的快速总结:Preparing An Ubuntu 13 Server To Run 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
卡皮斯特拉诺
安装 Ruby 后,可以使用默认的 Ruby 包管理器 RubyGems 设置 Capistrano。
运行以下命令以使用 gem
下载并安装 Capistrano 3:
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
使用文本编辑器 nano
编辑 /etc/sudoers
以让用户 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 的更多信息,请查看有关 Linux 基础知识 的 DigitalOcean 社区文章。
创建应用程序部署目录
在部署服务器上,我们还需要定义和创建 PHP 代码库所在的目录,以便 Web 服务器运行应用程序。
在 /var
中创建 www
web-application 目录:
sudo mkdir /var/www
并设置权限以使其访问网络服务器(即 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 的更多信息,请查看 DigitalOcean 社区页面上的 如何有效使用 Git 教程。
启动 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
包含与部署服务器相关的参数和设置。 在这里,我们将告诉 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 文档 。