Terokai Vagrant: Fahami tujuan, faedah dan pelaksanaannya

王林
Lepaskan: 2023-09-02 13:10:02
asal
1022 orang telah melayarinya

探索 Vagrant:了解其目的、好处和实施

Artikel ini akan membantu anda memahami cara menggunakan Vagrant untuk mengurus kejadian mesin maya dan menerangkan cara memanfaatkan Puppet untuk mengkonfigurasi pelbagai sumber seperti PHP dan PostgreSQL.


Pengenalan

Pembangun mempunyai banyak cara untuk menstrukturkan persekitaran pembangunan web mereka.

Pembangun mempunyai banyak cara untuk menstrukturkan persekitaran pembangunan web mereka. Anda boleh menggunakan pilihan "asli", seperti memasang tindanan pelayan "semua-dalam-satu" pra-bina seperti Pelayan Zend, XAMPP, MAMP, WAMP, dsb., atau anda boleh memasang sendiri komponen daripada sumber atau melalui pakej sistem pengurusan seperti Homebrew , Apt dan Yum.

Ini boleh ditambah semasa anda bekerja pada pelbagai projek menggunakan PHP 5.3 dan PHP 5.4, MySQL, SQLite, MongoDB, Postgres, PEAR, PHPUnit, Rails 3.1, Memcached, Redis, Gearman, NodeJS, dll. Jika anda menaik taraf atau komputer anda membeku, anda perlu memulakan semula.

Anda boleh melakukan persediaan "jauh" menggunakan pelayan dengan perkongsian Samba pada rangkaian anda atau pelayan SSH dipasang menggunakan alat seperti ExpanDrive. Pilihan terakhir boleh menyebabkan kelewatan membaca/menulis fail, yang boleh menjadi sangat menjengkelkan. Anda boleh menggunakan SSH + Vim untuk melakukan segala-galanya, yang pantas, tetapi hanya jika anda mahu menggunakan Vim untuk melakukan segala-galanya.


Pembangunan dan Pengeluaran

Walaupun anda mungkin gembira dengan cara kerja sekarang, berapa ramai daripada anda pernah mendengar (atau berkata) "ia berfungsi hebat pada komputer saya". Ini adalah perkara biasa dan boleh berlaku apabila terdapat perbezaan dalam keadaan, bahkan hingga ke butiran yang paling remeh.

Adalah penting untuk memastikan persekitaran pembangunan anda sama dengan persekitaran pengeluaran anda dan sepadan dengan pelayan pementasan dan ujian anda (jika anda mempunyainya juga).

Ini mungkin kedengaran mudah jika anda hanya mempertimbangkan untuk memasang beberapa salinan Apache, PHP dan MySQL, tetapi terdapat sejuta faktor yang perlu dipertimbangkan. Jika anda membangun pada OSX dan menggunakan sistem Ubuntu, anda akan melihat isu menarik dengan sarung fail. Ini adalah perkara biasa dalam CodeIgniter apabila seseorang mempunyai perpustakaan dengan huruf kecil pertama. Ia dimuatkan dengan baik pada OSX tetapi ranap apabila digunakan untuk pengeluaran. Proses pembangunan anda mungkin hanya membebankan perniagaan anda, semuanya disebabkan oleh beberapa perbezaan sistem pengendalian remeh yang tiada siapa yang menyedari sehingga sudah terlambat.


Pembangunan=Pengeluaran

Memaksa pembangun menggunakan sistem pengendalian yang sama boleh menyebabkan masalah.

Jadi apakah penyelesaiannya? Memaksa semua pembangun untuk meninggalkan alat yang berbeza dan membangunkan pada komputer riba model yang sama? Jika pembangun anda semua menggunakan Macbook serba baharu, anda mungkin tidak akan mendapat banyak aduan, tetapi anda memerlukan Pelayan OSX untuk melakukan segala-galanya.

Anda boleh melakukan segala-galanya dengan Linux, tetapi anda perlu berhujah tentang distro yang hendak digunakan. Memaksa pembangun menggunakan sistem pengendalian yang sama boleh menyebabkan masalah, mengurangkan produktiviti dan menggalakkan perang nerd.

Virtualization ialah jawapannya, ia bukanlah perkara baharu, tetapi apabila orang ramai memikirkan tentang virtualisasi, mereka sering memikirkan isu prestasi, peminat mereka berputar seperti orang gila manakala komputer riba mereka bermati-matian cuba menjalankan dua sistem pengendalian.

Anda masih mendapat ini apabila cuba menjalankan Windows pada mesin berkuasa rendah, tetapi hari ini, purata Mac mempunyai 4 GB RAM di luar kotak, yang lebih daripada cukup untuk menghidupkan pemasangan pelayan Ubuntu. Windows. Mod baris arahan dan semua alat pembangunan biasa (IDE, penyemak imbas, alat penyahpepijatan, dll.). Terdapat beberapa pilihan untuk virtualisasi, tetapi saya lebih suka Oracle's VirtualBox (percuma). Perisian melakukan semua pengangkatan virtualisasi yang berat, dan alat yang dipanggil Vagrant kemudiannya menguruskan kejadian.


Langkah 1 - Pasang VirtualBox

Muat turun VirtualBox dan pasangnya. Pada sistem *nix (Mac OSX, Linux, dll.) anda perlu mengubah suai pembolehubah .bash_profile (或 .zsh_profile)以扩展 $PATH:

PATH=$PATH:/Applications/VirtualBox.app/Contents/MacOS/
export PATH
Salin selepas log masuk

Ini akan memberitahu Vagrant di mana VirtualBox dipasang, tetapi sudah tentu ini berbeza antara sistem pengendalian.


Langkah 2 - Pasang Vagrant

Anda boleh memuat turun versi vagrant untuk sistem pengendalian anda, atau jika ia tidak tersedia, pasangkannya sebagai permata:

$ gem install vagrant
Salin selepas log masuk

Langkah 3 - Cipta contoh

Berikan persediaan gelandangan anda tempat tinggal:

mkdir -p ~/Vagrant/test
cd ~/Vagrant/test
Salin selepas log masuk

Kami akan menggunakan Ubuntu 12.04 LTS (Precise Trenggiling), yang mempunyai "kotak" yang telah disediakan.

vagrant box add precise32 http://files.vagrantup.com/precise32.box
Salin selepas log masuk

Anda boleh melihat parameter "precise32" di sini, iaitu nama panggilan URL. Anda kini boleh membuat contoh yang akan memuat turun .box ini.

vagrant init precise32
vagrant up
Salin selepas log masuk

Ia akan berjalan sekarang. Mudah! Jika anda mahu SSH ke dalam contoh ini, gunakan arahan berikut:

vagrant ssh
Salin selepas log masuk

第 5 步 - 配置

您将有一个名为 Vagrantfile 的文件,其中包含此实例的配置:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant::Config.run do |config|

    config.vm.box = "precise32"
    config.vm.box_url = "http://files.vagrantup.com/precise32.box"

    # Assign this VM to a host-only network IP, allowing you to access it
    # via the IP. Host-only networks can talk to the host machine as well as
    # any other machines on the same network, but cannot be accessed (through this
    # network interface) by any external networks.
    config.vm.network :hostonly, "192.168.33.10"

    # Set the default project share to use nfs
    config.vm.share_folder("v-web", "/vagrant/www", "./www", :nfs => true)
    config.vm.share_folder("v-db", "/vagrant/db", "./db", :nfs => true)

    # Forward a port from the guest to the host, which allows for outside
    # computers to access the VM, whereas host only networking does not.
    config.vm.forward_port 80, 8080

    # Set the Timezone to something useful
    config.vm.provision :shell, :inline => "echo \"Europe/London\" | sudo tee /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata"

    # Update the server
    config.vm.provision :shell, :inline => "apt-get update --fix-missing"

    # Enable Puppet
    config.vm.provision :puppet do |puppet|
        puppet.facter = { "fqdn" => "local.pyrocms", "hostname" => "www" } 
        puppet.manifests_path = "puppet/manifests"
        puppet.manifest_file  = "ubuntu-apache2-pgsql-php5.pp"
        puppet.module_path  = "puppet/modules"
    end

end
Salin selepas log masuk

如果您没有注意到,这是 Ruby 语法;这样您就可以对该文件发挥相当大的创意,但这是基础知识。

它将显示要使用的昵称并具有 URL,以防本地未设置昵称(适合共享)。

share_folder 行对于将实例中的文件夹映射到本地文件夹非常有用。使用 nfs => true 实例将能够写入和更改文件的权限,这在您尝试在其中安装 CMS 等情况时非常有用。

端口转发允许您访问 http://localhost:8080 上的实例,当然,如果发生冲突,请将其更改为其他端口。

此配置文件还将时区设置为欧洲/伦敦,然后运行 ​​apt-get update,这将强制您的系统在启动时保持最新状态。如果您跳过此配置项,您可能会发现多个软件包拒绝安装,因为参考现已过时。

当您更改配置时,您可以重新加载实例来使用它:

vagrant reload
Salin selepas log masuk

现在我们的服务器已经运行并准备就绪,我们需要安装一些软件。我们不仅仅要通过命令行 apt-get install 一堆软件包,我们还要“配置”我们的服务器。


第 4 步 - 配置

服务器配置并不是许多开发人员需要考虑的问题。

服务器配置并不是许多开发人员需要考虑的事情,因为它通常留给系统管理员。这个想法是对服务器上的软件和配置进行一些记录,以便您可以创建新的开发环境、复制生产的新登台服务器,或者创建另一个生产服务器以在两者之间进行负载平衡。

老式配置

系统管理员处理这个问题的方式各不相同,但过去已经使用过各种解决方案 - 从保持命令维基运行(它可能会很快变得庞大和过时)到拥有“多终端”的绝佳方法,您在一个窗口中输入命令,它会同时在另外 7 台服务器上复制相同的命令。 这些方法都很糟糕。

一种解决方案是构建您自己的 .box 文件,或创建 .iso 备份,以便新服务器可以基于此,但维护这些图像会产生大量额外的工作,而且无论多么困难你尝试一下,随着时间的推移,这些开发机器将会变得不同步。

现代配置

目前有两种流行的系统,称为 Puppet 和 Chef。

目前有两种流行的系统,称为 Puppet 和 Chef。两者都已存在多年,但随着 DevOps 开发方法的增加而开始变得更加流行。两者的想法相似,您应该研究这两个系统,但本教程将专门关注 Puppet。

本质上,您不必运行一堆命令并希望一切正常,而是为 Puppet 构建一个清单,解释您需要确保已完成的所有内容。当您在终端中运行命令时,您基本上是在对计算机说:

“安装 Apache”

对于 Puppet,我们会说:

“确保 Apache 已安装”

或者,代替:

“创建一个新文件夹,名为 /var/www 并设置 www-data:www-data 的权限”

对于 Puppet,我们会说:

“确保 /var/www 存在并且具有与 www-data:www-data 匹配的权限”

这里的区别在于,这些清单可以运行多次(在 cron 作业中每小时或每天)以保持最新状态,并且尝试安装两次不会出现意外结果。

它还将帮助您测试一切是否按预期运行,因为任何规则失败都会引发错误,这些错误比 grep 大量 bash 命令结果更容易跟踪。 Puppet 会抛出大红色错误,让您知道 PHP 没有安装,或者无法配置特定模块。

清单和模块

清单一开始有点令人困惑,但过了一段时间,它们就开始有意义了。

查看一个基本示例:

file {'testfile':
  path    => '/tmp/testfile',
  ensure  => present,
  mode    => 0640,
  content => "I'm a test file.",
}
Salin selepas log masuk

无需解释这里发生了什么,对吧?

此文件稍后可以在清单中称为“testfile”,这意味着它可以被列为其他操作的依赖项。

有关更多示例,我们将参考 GitHub 上的 PyroCMS Puppet 清单。

include apache

$docroot = '/vagrant/www/pyrocms/'
$db_location = "/vagrant/db/pyrocms.sqlite"

# Apache setup
class {'apache::php': }

apache::vhost { 'local.pyrocms':
    priority => '20',
    port => '80',
    docroot => $docroot,
    configure_firewall => false,
}

a2mod { 'rewrite': ensure => present; }
Salin selepas log masuk

这包括“apache”模块,设置一些变量,在 apache 模块中运行额外的“apache::php”清单,设置虚拟主机,然后确保启用“mod_rewrite”。

所有这些类都在我们包含的 Apache 模块中定义。

继续,我们还想安装 PHP:

include php

php::module { ['xdebug', 'pgsql', 'curl', 'gd'] : 
    notify => [ Service['httpd'], ],
}
php::conf { [ 'pdo', 'pdo_pgsql']:
    require => Package['php5-pgsql'],
    notify  => Service['httpd'],
}
Salin selepas log masuk

这块清单将安装我们需要的 PHP 扩展,然后 notify 选项会让 Apache 知道您已经安装了新配置,这意味着它将重新启动。

include postgresql

class {'postgresql::server': }

postgresql::db { 'pyrocms':
    owner     => 'pyrocms',
    password => 'password',
}
Salin selepas log masuk

这将设置一个 postgres 服务器,创建一个名为“pyrocms”的数据库,并确保名为“pyrocms”的用户存在并提供密码。

快完成了!最后一步是确保您正确设置了可写文件和文件夹:

file { $docroot:
    ensure  => 'directory',
}

file { "${docroot}system/cms/config/config.php":
    ensure  => "present",
    mode    => "0666",
    require => File[$docroot],
}

$writeable_dirs = ["${docroot}system/cms/cache/", "${docroot}system/cms/config/", "${docroot}addons/", "${docroot}assets/cache/", "${docroot}uploads/"]

file { $writeable_dirs:
    ensure => "directory",
    mode   => '0777',
    require => File[$docroot],
}
Salin selepas log masuk

这将确保 Apache 文档根目录存在,配置文件设置为 0666,一些可写文件夹设置为 777。

我们有了!

要运行所有这些,只需重新启动 vagrant 实例,或运行:

vagrant provision
Salin selepas log masuk

如果一切正常,您应该会看到很多蓝色文本,表明一切都正在安装,但是,如果出现问题,您会看到红色。 Google 搜索这些错误,然后重试。

这里使用的模块是:Apache、Postgres、PHP,您可以通过克隆 PyroCMS Vagrant 存储库来查看整个操作:

git clone --recursive git://github.com/pyrocms/devops-vagrant.git ~/vagrant/pyrocms
cd ~/vagrant/pyrocms
vagrant up
Salin selepas log masuk

将浏览器指向 http://localhost:8089/,您应该会看到安装程序。很简单的事情,是吧?

注意:这将与 MySQL 一起安装,因为 PyroCMS 的 Postgres 和 SQLite 支持仍在开发中,等待某些 CodeIgniter PDO 功能完成。如果您有兴趣,可以通过更改 Vagrantfile 来尝试使用 ubuntu-apache2-pgsql-php5.pp 清单,销毁实例,然后再次启动它。 Pyrocms 子模块还需要签出到 feature/pdo


摘要

在本文中,我们使用 Vagrant、VirtualBox 和 Puppet 不仅设置了一个可供我们使用的服务器实例,而且还为我们的服务器创建了一个测试套件,以确保一切都正确运行、安装和配置。

我们还创建了一份需求清单,并且将来能够在几分钟而不是几小时内创建任意数量的相同服务器!

Atas ialah kandungan terperinci Terokai Vagrant: Fahami tujuan, faedah dan pelaksanaannya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan