如何部署Mina:入门教程

介绍

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

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默认工具:

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环境和Rails

我们将使用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

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

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

gem install mina

使用Mina

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

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

启动Mina

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

# 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用户。

创建一个新的系统用户:

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

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


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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玄魂工作室

CTF实战4 HTTP协议及嗅探抓包

HTTP(Hypertext Transfer Protocol)中文<超文本传输协议>,是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是Int...

12320
来自专栏Java技术分享

Mac OS X上IntelliJ IDEA 13与Tomcat 8的Java Web开发环境搭建

IntelliJ IDEA,发音大致如此:[in 'te li dʒei ai di: i: ei],我还是简称之为IntelliJ吧,“Intel”有“智能”...

895100
来自专栏Crossin的编程教室

[Hexo]部署博客及更新博文

本系列其它文章: 用 GitHub + Hexo 建立你的第一个博客 将本地文件部署到 GitHub 修改 Hexo 中的 _config.yml 文件 在...

36290
来自专栏北京马哥教育

Python篇-多进程与协程的理解与使用

一 : 科普一分钟 尽管进程间是独立存在的,不能相互访问彼此的数据,但是在python中却存在进程间的通信方法,来帮助我们可以利用多核CPU也能共享数据....

38470
来自专栏皮振伟的专栏

[linux][statethread]协程库ST技术分析

前言: 在IO密集型的场景下,尤其是互联网后台,经常会使用epoll等IO复用技术。鉴于直接使用epoll的代码阅读性和开发效率等原因,就抽象出来了各种高级模型...

35080
来自专栏美团技术团队

Android远程调试的探索与实现

作为移动开发者,最头疼的莫过于遇到产品上线以后出现了bug,但是本地开发环境又无法复现的情况。常见的调查线上棘手问题方式大概如下: ? 以上两种方法在之前调查线...

56530
来自专栏SMProxy

SMProxy,让你的数据库操作快三倍!

将数据库连接作为对象存储在内存中,当用户需要访问数据库时,首次会建立连接,后面并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。

16210
来自专栏pangguoming

Git可视化教程——Git Gui的使用

在Git简介一文中已经对Git进行了简单的介绍,但是理论知识过于枯燥,加上本人专业知识不够扎实,使得初学者在Git的使用上还是会有很大的困难。虽然我更推荐使用G...

31330
来自专栏编程软文

开发过程中快速抓包并解析

这几天小编在工作中遇到了一个灵异事件,客户端使用的是安卓原生系统,服务端使用的是java。需求就是客户端在照相的时候可以实时上传照片。后台接收并保存,并且可以在...

28530
来自专栏DeveWork

通过多说服务器缓存加速Gravatar 头像,解决被墙问题

由于大中华局域网的关系,Gravatar 头像所在的域名gravatar.com 及其二级域常常被墙,就算没有被墙,访问速度也非常慢。之前曾经分享过通过《Wor...

255100

扫码关注云+社区

领取腾讯云代金券