如何使用Mina进行部署:入门
状态:已弃用
本文介绍了不再受支持的 CentOS 版本。 如果您目前正在运行运行 CentOS 6 的服务器,我们强烈建议您升级或迁移到受支持的 CentOS 版本。
原因:CentOS 6 已于 2020 年 11 月 30 日结束生命周期 (EOL) ,不再接收安全补丁或更新。 因此,不再维护本指南。
请参阅:本指南可能仍可用作参考,但可能不适用于其他 CentOS 版本。 如果可用,我们强烈建议使用为您正在使用的 CentOS 版本编写的指南。
介绍
如果您正在寻找一种方法来促进您每天执行的某些操作,就像一个简单的搜索将显示的那样,有很多可用的工具。 如果您检查它们,您会发现所有这些都声称要进行将您的应用程序放到网上的程序(即 部署它)对您来说更容易。 然而,它们之间几乎没有什么不同——而且它们的使用也非常复杂。
Mina 部署器和自动化工具,可能看起来与其他工具没有什么不同,但实际上非常特别。 在这篇 DigitalOcean 文章中,我们将学习一种不同的方式来自动化远程服务器任务,涵盖从管理流程到实际部署应用程序的大范围,使用 Mina:基于 RAKE 构建的 Bash 脚本生成器和远程执行工具.
词汇表
1. 了解 Mina 和 Rake
- Mina 部署程序和自动化工具
- RAKE - 红宝石制作
2. 得到米娜
- 准备系统
- 设置 Ruby 环境和 Rails
- 安装米娜
3. 开始使用 Mina
- 启动米娜
- 在部署服务器上创建部署者用户
4. 使用 config/deploy.rb
- 定义服务器
- 部署应用程序
- 定义部署任务
- 处理任务和子任务
5. 示例:部署 Rails 应用程序
了解 Mina 和 RAKE
幸运的是,米娜背后没有“火箭科学”。 这是一个非常简单易用的 Ruby/RAKE 工具,可帮助您自动执行远程任务——通常与部署相关。
Mina 部署程序和自动化工具
Mina 是一个基于 Ruby 的工具。 它可以帮助人们创建脚本,其中包含要执行的任务列表,按名称分组,以方便日常操作。 Mina 将这些基于 RAKE 的编程文件转换为 Bash 脚本,连接到定义的远程服务器并执行它们。
它实际上非常快,并且可能与同类工具一样快,因为它所做的只是连接到服务器并运行 Bash 程序。
尽管有些人批评 Mina 并称其为原始,但具有出色的功能(例如 任务排队,非常方便!)很多事情都可以非常顺利地完成,没有打嗝,速度很快。
为了让您更好地了解不仅是 Mina,而且是对此类工具的总体了解,这里有一个简短的列表,列出了可以做什么以及 Mina 什么时候可以派上用场:
- 准备和设置服务器:如果您需要重复创建和销毁虚拟服务器,您将花费大量时间来设置它们。 使用 Mina,您可以自动化该过程。
- 部署应用程序:无论您是否有HTTP服务器应用程序,您都可以使用Mina在部署机器上更新您的应用程序的源代码,并自动启动并运行新版本,而无需处理FTP或其他工具。
- 管理进程:这听起来很笼统,但想象一下你需要多少次(可能每天)管理在服务器上运行的某个进程,例如应用程序服务器、代理或典型的 Nginx 前端- 面向反向代理。 通过 Mina 的任务,您可以促进这一点并获得良好的动力——同时保持一切井井有条。
- 生活在一个没有 Rails 的世界中:Mina 可以做到以上所有,甚至更多,而无需对 Rails 有任何严格的依赖、依赖或忠诚。 使用 Mina,您几乎可以部署所有内容。
Mina 的 deploy.rb
脚本实际上是带有一堆分组任务的 RAKE 文件。 一切都是用 Ruby 编写的,无需处理其他类型的配置——您无需熟悉几乎不会再使用的任何新内容。
RAKE - 红宝石制作
Web 开发人员、程序员以及任何与科学或计算机打交道的人都应该对他们使用的工具有很好的了解。 在 Mina 的例子中,魔法来自 RAKE。
但是,什么是 RAKE?
RAKE 是一系列与 GNU Make 本质上相似的组件、工具和定义。 Make 是最广泛和流行的实用程序之一,自 1970 年代后期推出以来,它已内置于 Unix 系统中。 它因其独立于系统的特性以及将命令和指令组合成单个文件(称为“makefile”)的能力而变得非常流行。 这些文件和 Make 作为工具用于构建应用程序(即 编译源代码并生成可执行的二进制文件)。
Rake 可以称为 构建语言 。 它用于以结构化方式轻松定义要在命令行中执行的任务。 从本质上讲,这些命令通常与系统管理相关,例如应用程序部署或管理服务器。 Rake 的这种结构可以被称为 领域特定语言 ,用 Ruby 编写,从而在边界内以某种方式定义和设置所有内容。 它被称为构建工具,因为如前所述,它的操作通常与构建某些东西有关(例如 库、应用程序等)
RAKE 可以通过 RubyGems 获得。
要访问官方 RAKE 项目页面,请单击 这里 。 要了解有关 RAKE 的更多信息,请查看这篇关于该主题的出色、详细的文章:使用 Rake 构建语言 。
得到米娜
使用 Mina 时,您需要确保有一个稳定的 Ruby 环境,并安装了必要的依赖项并且运行良好——例如 gem
。
在本节中,我们将从在 CentOS 6 系统上创建 Ruby 环境开始。 从那时起,您将能够使用 Mina 自动执行部署服务器上的过程。
准备系统
为了安装 Ruby,我们首先需要准备最小的 CentOS 服务器。
运行以下命令来更新基于 CentOS 的 VPS 的默认工具:
yum -y update # This command will update all the base applications # that come with CentOS by default. Which are mostly # reserved for use by the operating system.
通过执行以下命令安装包含开发工具的包:
yum groupinstall -y 'development tools' # With more recent versions of CentOS, such as 6.5 in our case, # you can simply run: # yum groupinstall -y development # instead. # This bundle of applications contains various tools # Such as: gcc, make, automake, binutils, git etc.
一些方便的库和包(例如 libyaml-devel、nginx 等)在 CentOS 官方存储库中是 not。 为了简化事情而不是手动安装它们,我们将添加 EPEL 软件存储库供 YUM 包管理器使用。 这将启用附加软件的简单下载。
# Enable EPEL Repository sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm' # Update everything, once more. yum -y update
最后,我们需要得到 curl-devel
以及本教程的其他几个工具和库(例如 Rails 需要 sqlite-devel)。
为了安装它们,运行以下命令:
yum install -y curl-devel nano sqlite-devel libyaml-devel
设置 Ruby 环境和 Rails
注意:本节是我们专门文章如何在CentOS 6.5上安装Ruby 2.1.0的摘要。
我们将使用 Ruby 版本管理器 (RVM) 下载并安装 Ruby 解释器。
运行以下两条命令安装 RVM 并为 Ruby 创建系统环境:
curl -L get.rvm.io | bash -s stable source /etc/profile.d/rvm.sh
最后,为了在我们的系统上完成 Ruby 的安装,让我们让 RVM 下载并安装 Ruby 版本 2.1.0:
rvm reload rvm install 2.1.0
因为 Rails 首先需要一个 JavaScript 解释器才能工作,所以我们还需要设置 Node.js。 为此,我们将使用默认的系统包管理器 YUM。
运行以下命令以使用 yum
下载并安装 nodejs:
yum install -y nodejs
使用 gem
执行以下命令下载并安装 rails:
gem install bundler rails
安装米娜
有几种方法可以下载 Mina。 最简单的方法是使用 RubyGems。
运行以下命令下载并安装 Mina:
gem install mina
开始使用 Mina
将 mina 引入项目时,首先需要在项目目录中启动 mina。
之后,您可以编辑 Mina 创建的 config/deploy.rb
来定义您的服务器和要执行的任务。
启动米娜
输入您的项目目录并运行以下命令:
# Enter your project directory: cd ~/project_dir # Initiate Mina mina init # -----> Created ./config/deploy.rb # Edit this file, then run `mina setup` after.
在部署服务器上创建部署者用户
创建一个除 root 之外的用户来执行部署操作,这将由 Mina 使用和调用,这是一个明智的选择。 为此,让我们在 remote 主机上创建一个 deployer
用户。
创建一个新的系统用户:
adduser deployer
设置部署者的密码:
passwd deployer # Enter a password # Confirm the password
使用文本编辑器 nano 编辑 /etc/sudoers
:
nano /etc/sudoers
向下滚动文件并找到定义 root
的位置:
.. ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL=(ALL) ALL ..
在 root ALL=(ALL) ALL 之后添加以下内容:
deployer ALL=(ALL) ALL
/etc/sudoers
文件的这一部分现在应该如下所示:
.. ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL=(ALL) ALL deployer ALL=(ALL) ALL ..
按 CTRL+X 并用 Y 确认保存并退出。
使用 config/deploy.rb
接下来,打开 Mina 创建的 deploy.rb
文件,以定义您的部署服务器并设置任务。
nano config/deploy.rb
定义服务器
第一步是编辑 :domain
行来设置你的服务器地址。
查找并修改相关配置以匹配您的虚拟服务器:
# Basic settings: # domain - The hostname to SSH to. # deploy_to - Path to deploy into. # repository - Git repo to clone from. (needed by mina/git) # branch - Branch name to deploy. (needed by mina/git) # Default: # set :domain, 'foobar.com' # Change the default to match your server's address # Example: set :domain, 'server.domain.tld' # or # set :domain, '162.243.74.190' # Optional settings: # set :user, 'foobar' # Username in the server to SSH to. # set :port, '30000' # SSH port number. set :user, 'deployer' set :port, '22'
部署应用程序
使用 Mina,您可以轻松地从 Github 等中央托管存储库部署您的应用程序。 如上一节所述,您可以通过设置 deploy_to
和 repository
参数以及必要时设置 branch
来实现此目的。
例子:
# Application's deployment location on the remote server # Example: set :deploy_to, '/var/www/my_app' set :repository, 'git://...' set :branch, 'master'
定义部署任务
Mina 的 deploy.rb
文件附带了一些示例任务集,针对 mina deploy
命令的 Rails。
例子:
desc "Deploys the current version to the server." task :deploy => :environment do deploy do # Put things that will set up an empty directory into a fully set-up # instance of your project. invoke :'git:clone' invoke :'deploy:link_shared_paths' invoke :'bundle:install' invoke :'rails:db_migrate' invoke :'rails:assets_precompile' to :launch do queue "touch #{deploy_to}/tmp/restart.txt" end end end
处理任务和子任务
您可以使用 Mina 定义和链接任务,这在许多情况下都非常方便。
下面是一个使用任务并将它们从官方文档链接起来的示例:
task :down do invoke :maintenance_on invoke :restart end task :maintenance_on queue 'touch maintenance.txt' end task :restart queue 'sudo service restart apache' end
示例:部署 Rails 应用程序
要了解如何部署实际的 Rails 应用程序以及如何相应地使用 deploy.rb
,请查看 DigitalOcean 社区文章部分中的 如何使用 Mina 部署 Ruby on Rails 应用程序。
注意: 使用相同的主体,您可以使用 Mina 部署任何类型的应用程序。