前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何部署Mina:入门教程

如何部署Mina:入门教程

原创
作者头像
心语花束
发布2018-08-10 17:01:06
4.4K0
发布2018-08-10 17:01:06
举报

介绍

如果您正在寻找一种方法来帮助某些您每天执行的操作,正如简单的搜索显示的那样,可用的工具很多。如果您检查它们,会发现这些都声称可以使您的应用程序在线(即部署)更容易。但是,它们之间几乎没有区别 - 而且使用起来也很复杂。

Mina Deployer 部署程序和自动化工具,可能看起来与其他工具没有什么不同,实际上非常特殊。我们将学习一种自动化远程服务器任务的方法,涵盖从管理流程到实际部署应用程序的大部分领域,并通过Bash脚本生成器和基于 RAKE构建的远程执行工具来使用Mina。

术语表

1.了解Mina&Rake

  1. Mina Deployer和自动化工具
  2. RAKE - Ruby Make

2.获得Mina

  1. 准备系统
  2. 设置Ruby环境和Rails
  3. 安装Mina

3.使用Mina

  1. 启动Mina
  2. 在Deployment Server上创建部署者用户

4.使用config / deploy.rb

  1. 定义服务器
  2. 部署应用程序
  3. 定义部署任务
  4. 使用任务和子任务

5.示例:部署Rails应用程序

了解Mina和RAKE

使用Ruby / RAKE工具非常简单,可以帮助您自动执行远程任务 - 通常与部署相关。

Mina Deployer和自动化工具

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 - Ruby Make

Web开发人员,程序员以及任何与科学或计算机打交道的人都应该很好地理解他们使用的工具。在Mina的案例中,RAKE最为关键。

但是,什么是RAKE?

RAKE是一系列与GNU Make类似的组件,工具和定义。Make是最广泛和最受欢迎的实用程序之一,自20世纪70年代末推出以来,它已经内置于Unix系统中。Rake可以称为构建语言。它因其独立于系统的特性以及将命令和指令组合到单个文件中而提供的能力变得非常流行,这些文件被称为“makefile”。 这些文件和Make作为工具用于构建应用程序(即编译源代码并生成可执行二进制文件)。

Rake可以称为构建语言。 它用于以结构化方式定义任务,以便在命令行中执行。 本质上,这些命令通常与系统管理相关,例如应用程序部署或管理服务器。 Rake的这种结构可以称为特定于域的语言,用Ruby编写,从而在边界内以某种方式定义和设置所有内容。 它被称为构建工具,因为如前面所述,它的操作通常与构造某些东西(例如库,应用程序等)有关。

RAKE可以通过RubyGems获得。

获取Mina

使用Mina时,您需要确保拥有一个稳定的Ruby环境,并且安装了必要的依赖项并且运行正常 - 例如gem

在本节中,我们将首先在CentOS 6系统上创建Ruby环境。之后,您将能够使用Mina自动执行部署服务器。

准备系统

为了安装Ruby,我们首先需要准备最小的CentOS服务器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

运行以下命令以更新基于CentOS的VPS默认工具:

代码语言:javascript
复制
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. 

通过执行以下命令安装包含开发工具的软件包:

代码语言:javascript
复制
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软件存储库以供使用。 这样可以简单地下载其他软件。

代码语言:javascript
复制
# 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)。

要安装它们,请运行以下命令:

代码语言:javascript
复制
yum install -y curl-devel nano sqlite-devel libyaml-devel

设置Ruby环境和Rails

我们将使用Ruby Version Manager(RVM)下载并安装一个Ruby解释器。

运行以下两个命令来安装RVM并为Ruby创建系统环境:

代码语言:javascript
复制
curl -L get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh

最后,要在我们的系统上完成Ruby的安装,让我们让RVM下载并安装Ruby版本2.1.0:

代码语言:javascript
复制
rvm reload
rvm install 2.1.0

由于Rails首先需要一个JavaScript解释器才能工作,我们还需要设置Node.js。为此,我们将使用默认的系统包管理器YUM。

使用yum运行以下命令来下载并安装nodejs:

代码语言:javascript
复制
yum install -y nodejs

使用gem运行以下命令来下载并安装rails:

代码语言:javascript
复制
gem install bundler rails

想了解更多关于ruby环境和rails,可以参考腾讯云开发者实验室在 Linux 上部署 Ruby On Rails 环境,腾讯云社区也提供Ruby中文开发者手册,欢迎使用。

安装Mina

有几种方法可以下载Mina,其中最简单的方法是使用RubyGems。

运行以下命令下载并安装Mina:

代码语言:javascript
复制
gem install mina

使用Mina

在将mina引入项目时,首先需要在项目目录中启动mina。

之后,您可以编辑Mina创建的config / deploy.rb来定义要执行的服务器和任务。

启动Mina

输入项目目录并运行以下命令:

代码语言:javascript
复制
# Enter your project directory:
cd ~/project_dir
​
# Initiate Mina
mina init
​
# -----> Created ./config/deploy.rb
#        Edit this file, then run `mina setup` after.

在Deployment Server上创建部署者用户

创建除root之外的用户来执行Mina将使用和调用的部署操作是一个理智的选择。为此,让我们在远程主机上创建一个deployer用户。

创建一个新的系统用户:

代码语言:javascript
复制
adduser deployer

设置部署者的密码:

代码语言:javascript
复制
passwd deployer
​
# Enter a password
# Confirm the password

使用文本编辑器nano编辑/etc/sudoers

代码语言:javascript
复制
nano /etc/sudoers

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

代码语言:javascript
复制
..
​
## 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之后追加以下内容:

代码语言:javascript
复制
deployer ALL=(ALL) ALL

/etc/sudoers文件的部分现在应如下所示:

代码语言:javascript
复制
..
​
## 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,去定义您的部署服务器并设置任务。

代码语言:javascript
复制
nano config/deploy.rb

定义服务器

第一步编辑:domain行以设置服务器的地址。

查找并修改相关配置以匹配您的虚拟服务器:

代码语言:javascript
复制
# 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_torepository参数以及branch来实现此目的。

例如:

代码语言:javascript
复制
# 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。

例如:

代码语言:javascript
复制
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定义和链接任务,这在许多情况下都非常方便。

下面是一个使用任务并将其与官方文档链接起来的示例:

代码语言:javascript
复制
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应用程序部署示例,请参考:“如何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序”。要了解更多关于Rails的应用程序,欢迎访问腾讯云+社区学习更多知识。

注意:使用相同的主体,您可以使用Mina部署任何类型的应用程序。


参考文献:《How To Deploy With Mina: Getting Started》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 术语表
    • 1.了解Mina&Rake
      • 2.获得Mina
        • 3.使用Mina
          • 4.使用config / deploy.rb
            • 5.示例:部署Rails应用程序
            • 了解Mina和RAKE
              • Mina Deployer和自动化工具
                • RAKE - Ruby Make
                • 获取Mina
                  • 准备系统
                    • 设置Ruby环境和Rails
                      • 安装Mina
                      • 使用Mina
                        • 启动Mina
                          • 在Deployment Server上创建部署者用户
                          • 使用config / deploy.rb
                            • 定义服务器
                              • 部署应用程序
                                • 定义部署任务
                                  • 运行任务和子任务
                                    • 示例:部署Rails应用程序
                                    相关产品与服务
                                    云开发 CloudBase
                                    云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档