如果您正在寻找一种方法来帮助某些您每天执行的操作,正如简单的搜索显示的那样,可用的工具很多。如果您检查它们,会发现这些都声称可以使您的应用程序在线(即部署)更容易。但是,它们之间几乎没有区别 - 而且使用起来也很复杂。
Mina Deployer 部署程序和自动化工具,可能看起来与其他工具没有什么不同,实际上非常特殊。我们将学习一种自动化远程服务器任务的方法,涵盖从管理流程到实际部署应用程序的大部分领域,并通过Bash脚本生成器和基于 RAKE构建的远程执行工具来使用Mina。
使用Ruby / RAKE工具非常简单,可以帮助您自动执行远程任务 - 通常与部署相关。
Mina是一个基于Ruby的工具。它可以帮助人们创建脚本,其中包含要执行的任务列表,按名称分组,以方便日常操作。Mina将这些基于RAKE的编程文件转换为Bash脚本,连接到已定义的远程服务器并执行它们。
它实际上运行非常快,并且可能和它的类型工具一样快,因为它只是连接到服务器并运行Bash程序。
虽然有些人批评Mina,并称其太过原始,但是它还是具有非常出色的功能,例如排队任务,可以非常顺利地实现很多任务,速度很快且没有间断。
为了让您更好地理解Mina不仅仅是一般的工具,这里有一个简短的列表,列出了可以做什么以及何时Mina可以派上用场:
Mina的deploy.rb
脚本实际上是带有一堆分组任务的RAKE文件。一切都是用Ruby编写的,而不需要处理其他类型的配置,您可以不需要熟悉任何你再也不会使用的新东西。
Web开发人员,程序员以及任何与科学或计算机打交道的人都应该很好地理解他们使用的工具。在Mina的案例中,RAKE最为关键。
但是,什么是RAKE?
RAKE是一系列与GNU Make类似的组件,工具和定义。Make是最广泛和最受欢迎的实用程序之一,自20世纪70年代末推出以来,它已经内置于Unix系统中。Rake可以称为构建语言。它因其独立于系统的特性以及将命令和指令组合到单个文件中而提供的能力变得非常流行,这些文件被称为“makefile”。 这些文件和Make作为工具用于构建应用程序(即编译源代码并生成可执行二进制文件)。
Rake可以称为构建语言。 它用于以结构化方式定义任务,以便在命令行中执行。 本质上,这些命令通常与系统管理相关,例如应用程序部署或管理服务器。 Rake的这种结构可以称为特定于域的语言,用Ruby编写,从而在边界内以某种方式定义和设置所有内容。 它被称为构建工具,因为如前面所述,它的操作通常与构造某些东西(例如库,应用程序等)有关。
RAKE可以通过RubyGems获得。
使用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.
在官方CentOS存储库中找不到一些方便的库和软件包(例如libyaml-devel,nginx等)。 为简化操作而不处理手动安装,我们将为YUM包管理器添加EPEL软件存储库以供使用。 这样可以简单地下载其他软件。
# 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 Version Manager(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
想了解更多关于ruby环境和rails,可以参考腾讯云开发者实验室在 Linux 上部署 Ruby On Rails 环境,腾讯云社区也提供Ruby中文开发者手册,欢迎使用。
有几种方法可以下载Mina,其中最简单的方法是使用RubyGems。
运行以下命令下载并安装Mina:
gem install 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将使用和调用的部署操作是一个理智的选择。为此,让我们在远程主机上创建一个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确认保存并退出。
接下来,打开由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应用程序部署示例,请参考:“如何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序”。要了解更多关于Rails的应用程序,欢迎访问腾讯云+社区学习更多知识。
注意:使用相同的主体,您可以使用Mina部署任何类型的应用程序。
参考文献:《How To Deploy With Mina: Getting Started》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。