使用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
– 守护进程的自动启动设置会在每次提供时被执行
关于这些问题,我希望以后能进行修正。