使用Vagrant和Ansible来建立开发环境(软件包安装部分)

这次要做的事情

安装用于开发的各种软件。
httpd:nginx
db:MariaDB
lang:php5
editor:emacs

此次制作的设置内容可以在以下链接中找到:
https://github.com/ak-ymst/vm_config。

安装Emacs

为了使服务器上的工作变得顺畅,安装emacs(因为我不熟悉Vi)。

在ansible/roles/init/tasks/main.yml文件中添加以下描述后,执行配置过程。

- name: install emacs
  become: yes
  yum: name=emacs state=installed

- name: copy .emacs.d
  become: yes
  copy: src=~/.emacs.d dest=~/ owner=vagrant group=vagrant

执行 provision 后,登录虚拟环境并确认。

[vagrant@vagrant-centos7 ~]$ emacs --version
GNU Emacs 24.3.1
[vagrant@vagrant-centos7 ~]$ ls -al 
合計 24
drwx------. 5 vagrant vagrant 4096  2月  2 13:34 .
drwxr-xr-x. 3 root    root      20  8月 12 23:22 ..
drwxr-xr-x  3 vagrant vagrant   16  2月  1 16:55 .ansible
-rw-------  1 vagrant vagrant  351  2月  2 13:33 .bash_history
-rw-r--r--. 1 vagrant vagrant   18  3月  6  2015 .bash_logout
-rw-r--r--. 1 vagrant vagrant  193  3月  6  2015 .bash_profile
-rw-r--r--. 1 vagrant vagrant  231  3月  6  2015 .bashrc
drwxr-xr-x  6 vagrant vagrant  120  2月  2 13:36 .emacs.d
drwx------  2 vagrant vagrant   28  2月  1 16:40 .ssh
-rw-r--r--  1 vagrant vagrant    6 11月  3 00:20 .vbox_version
[vagrant@vagrant-centos7 ~]$ 

我决定简单地将.emacs配置文件复制到主机上来使用,但是我希望能够在GitHub或其他地方管理配置文件,以便能够在多台机器上同步。我想实现从那边拉取配置文件。另外,关于目录的复制目标,最初我写成了”dest=~/”,结果复制并不成功,我被困扰了一段时间。

安装nginx

– 进行以下任务:
– 安装软件包
– 将默认站点设置为VirtualHost
– 配置启动设置
– 重新启动nginx

安装软件包

使用yum进行安装。
创建一个新的角色来整理nginx相关任务,并将其写入其中。

ansible/roles/nginx/tasks/main.yml 的内容重新编写成中文。

- name: Install Nginx
  become: yes
  yum: name=nginx state=latest

在ansible/playbook.yml中,添加角色。

- hosts: all
  become: true
  roles:
     - init
     - nginx

在执行提供后,确认包已被成功安装。

[vagrant@vagrant-centos7 ~]$ yum list installed | grep nginx
nginx.x86_64                          1:1.6.3-8.el7                   @epel     
nginx-filesystem.noarch               1:1.6.3-8.el7                   @epel     
[vagrant@vagrant-centos7 ~]$ 

启动设置和重新启动

在CentOS 7上,听说守护进程的自动启动设置和重启都改为使用systemctl命令,所以请设置为使用该命令。

ansible/roles/nginx/tasks/main.yml 可以被转述为:ansible/角色/nginx/tasks/main.yml

- name: Set autoload nginx
  become: true
  command: systemctl enable nginx

- name: restart nginx
  become: true
  command: systemctl restart nginx

将默认网站设置为VirtualHost。

根据提示,需要将VirtualHost的配置文件放置在/etc/nginx/conf.d目录下。因此,我们可以准备以下模板并进行复制。

ansible/vars/nginx.yml 的中文意思是 “ansible 变量中的 nginx.yml”。

vhost_path: /etc/nginx/conf.d
vhost_file: default.conf
template: default.j2

server_name: 192.168.33.100
document_root: /vagrant

ansible/roles/nginx/templates/default.j2 的原生中文释义

server {
    listen  80;
    server_name {{ server_name }};

    root {{ document_root }};

    location / {
        index index.html;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

ansible/roles/nginx/tasks/main.yml 可以被用于定义安装和配置 Nginx 的任务。

- name: incled variables for nginx
  include_vars: "nginx.yml"

- name: Set default nginx site
  sudo: yes
  template: src={{ template }} dest={{ vhost_path }}/{{ vhost_file }}

确定

如果在 provision 执行之后,在指定的文档根目录/vagrant中创建了用于确认的 index.html 文件,并且可以通过 http://192.168.33.100/index.html 访问,那么就算成功。

安装PHP

要做的事情:
– 安装各种软件包
– 修改配置文件
– 设置php-fpm的自动启动配置

安装不同的软件包

与nginx类似,创建一个新的角色并将任务描述在其中。

ansible/roles/php/tasks/main.yml的一项任务

- name: Install PHP Packages
  become: true
  yum: name={{ item }} state=latest
  with_items:
      - php
      - php-devel
      - php-fpm
      - php-xml
      - php-mysql
      - php-mbstring
      - php-gd

在执行 provision 操作之后,需要确认已安装的软件包。

[vagrant@vagrant-centos7 ~]$ yum list installed | grep php
php.x86_64                            5.4.16-36.el7_1                 @base     
php-cli.x86_64                        5.4.16-36.el7_1                 @base     
php-common.x86_64                     5.4.16-36.el7_1                 @base     
php-devel.x86_64                      5.4.16-36.el7_1                 @base     
php-fpm.x86_64                        5.4.16-36.el7_1                 @base     
php-gd.x86_64                         5.4.16-36.el7_1                 @base     
php-mbstring.x86_64                   5.4.16-36.el7_1                 @base     
php-mysql.x86_64                      5.4.16-36.el7_1                 @base     
php-pdo.x86_64                        5.4.16-36.el7_1                 @base     
php-xml.x86_64                        5.4.16-36.el7_1                 @base     
[vagrant@vagrant-centos7 ~]$ 
[vagrant@vagrant-centos7 ~]$ php --version
PHP 5.4.16 (cli) (built: Jun 23 2015 21:17:27) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[vagrant@vagrant-centos7 vagrant]$
[vagrant@vagrant-centos7 ~]$ systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2016-02-02 16:38:51 JST; 7min ago
 Main PID: 5221 (php-fpm)
   Status: "Processes active: 0, idle: 5, Requests: 2, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php-fpm.service
           ├─5221 php-fpm: master process (/etc/php-fpm.conf)
           ├─5223 php-fpm: pool www
           ├─5224 php-fpm: pool www
           ├─5225 php-fpm: pool www
           ├─5226 php-fpm: pool www
           └─5227 php-fpm: pool www
[vagrant@vagrant-centos7 ~]$ 

修改配置文件 de

    • php.iniのTimezoneの修正

 

    php-fpmの実行ユーザの変更

ansible/roles/php/tasks/main.yml 的汉语释义如下:

- name: update php.ini for cli
  lineinfile: dest=/etc/php.ini
              regexp=';date.timezone ='
              line='date.timezone = Asia/Tokyo'

- name: Set user to nginx
  lineinfile: "dest=/etc/php-fpm.d/www.conf state=present regexp='^user = apache' line='user = nginx'"

- name: Set group to nginx
  lineinfile: "dest=/etc/php-fpm.d/www.conf state=present regexp='^group = apache' line='group = nginx'"

PHP-FPM的自动启动设置

- name: Set autoload php-fpm
  become: true
  command: systemctl enable php-fpm

- name: restart php-fpm
  become: true
  command: systemctl restart php-fpm

确认

执行条款之后,
在执行条款后,

[vagrant@vagrant-centos7 ~]$ echo "<?php echo phpinfo() ?>" > /vagrant/index.php

创建一个类似的确认文件,然后访问http://192.168.33.100/index.php。如果显示了PHP_INFO,就表示一切正常。

安装MariaDB

虽然可以使用MySQL,但为了尝试一下未使用过的MariaDB,也是一种难得的机会。

做的事情:
– 安裝套件
– 自動啟動設定
– 更改 root 使用者的密碼

安装软件包并设置自动启动

与nginx类似,使用yum进行安装,并使用systemctl进行自动启动配置。

ansible/roles/mariadb/tasks/main.yml 的含义是什么?

- name: Install MariaDB Packages
  become: true
  yum: name={{ item }} state=latest
  with_items:
      - mariadb
      - mariadb-server
      - MySQL-python

- name: Set autoload mariadb
  become: true
  command: systemctl enable mariadb

- name: restart mariadb 
  become: true
  command: systemctl restart mariadb

请在下一次进行密码更改时一起安装MySQL-python库,因为它是必需的。
在执行provision后,尝试使用默认的root用户登录。

[vagrant@vagrant-centos7 ~]$ mysql --version
mysql  Ver 15.1 Distrib 5.5.44-MariaDB, for Linux (x86_64) using readline 5.1
[vagrant@vagrant-centos7 ~]$ mysql -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.44-MariaDB MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

更改root用户的密码

默认的root用户没有密码,所以最好先设置一个密码。

ansible/vars/mariadb.yml:反应堆/变量/马里亚DB.yml

db_root_password: Ahth7Oth
my_cnf_template: my.cnf.j2

ansible/roles/mariadb/tasks/main.yml的含义是什么?

- name: incled variables for mariadb
  include_vars: "mariadb.yml"

- name: change root password
  become: true
  mysql_user: name=root host={{ item }} password={{ db_root_password }}
  with_items:
      - 127.0.0.1
      - localhost

- name: create root .my.cnf
  become: true
  template: src={{ my_cnf_template }}  dest=/root/.my.conf owner=root mode=0600

在执行提供程序后,确认密码已更改。

[vagrant@vagrant-centos7 ~]$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[vagrant@vagrant-centos7 ~]$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 5.5.44-MariaDB MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

结束

我认为现在准备开始开发的基本条件已经具备了,但还存在一些问题。
– 我希望能够管理emacs的配置文件(像从仓库中获取一次一样)
– 我想要将php的版本设置为5.6
– 守护进程的自动启动设置会在每次提供时被执行
关于这些问题,我希望以后能进行修正。

广告
将在 10 秒后关闭
bannerAds