3

最近因为工作开始接触Yii,之前开发使用laravel习惯用vagrant。所以,这次尝试着打造一个box,专门用来写Yii框架的项目。

在这次打造box,收获了很多:
1)更加熟悉了nginx的配置;
2)学会了看nginx的错误日志;
3)提高了解决问题的能力等等。
希望大家也能通过,玩玩如何打造一个自己的box学到很多东西。

我的box配置是:
ubuntu+PHP7.1.0alpha2+ginx/1.10.1+MySQL5.5.49+Composer1.1.3.

在开始之前,我的电脑已经装好了Vagrant和Virtual Box。windows安装这两个软件时,请记住通过BIOS来开启系统的硬件虚拟化(VT-x)。
这里再推荐一个Mac下用的终端iTerm2,超好用。

添加box

我需要一个ubuntu系统,所以我通过vagrant添加目前已经有只ubuntu系统的空box。

1、参考资料:官方文档添加box

2、添加box:vagrant box add puphpet/ubuntu1404-x64

3、创建一个文件夹,用来初始化box:mkdir complex

4、进入complex文件夹:cd complex

5、查看目前有几个box:vagrant box list

dev                    (virtualbox, 0)
laravel/homestead      (virtualbox, 0.4.4)
puphpet/ubuntu1404-x64 (virtualbox, 20151201)

6、初始化box:vagrant init puphpet/ubuntu1404-x64

7、你会发现当前complex目录下,有一个文件名为Vagrantfile,这个文件为puphpet/ubuntu1404-x64这个盒子的初始化文件

8、Vagrantfile文件配置,文件修改两个地方就好:

设置config.vm.network这个参数,IP可以随意配;

config.vm.synced_folder中,第一个参数是我mac下的工作目录,第二个参数是我box中的工作目录。通过这个设置,将本机和box中的文件打通,两个文件夹内容将会相同,如果有一个文件夹内容有什么变化,另一个文件夹也会有相同的变化。大家根据自己的目录配置即可,最好采用绝对路径

  # using a specific IP.
  config.vm.network "private_network", ip: "192.168.22.55"
  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  config.vm.synced_folder "~/PhpstormProjects", "/www"

9、执行vagrant up,即可开启box。

10、执行vagrant ssh,即可进入box中。

11、如过修改了Vagrantfile,请记住重启boxvagrant reload

安装nginx

1、参考资料:官方文档nginx安装
2、安装nginx前需要添加nginx_signing.key下载地址,官方文档里也有下载地址。我下载到了本机上与box打通的文件夹中,再进入box,执行以下命令:sudo apt-key add nginx_signing.key
3、用代号取代ubuntu的发行版本代号,本系统是ubuntu1404-x64,所以代号为trusty;通过执行sudo vi /etc/apt/sources.list,在/etc/apt/sources.list文件尾部中添加,以下代码:

deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx

wq保存,相关vi编辑操作请谷歌。

4、安装nginx,执行以下命令
apt-get update
apt-get install nginx

5、进入/etc/nginx文件夹中,修改nginx.conf文件,将 sendfile on;修改为sendfile off;因为 VirtualBox关于sendfile有一个bug,这个bug可能会导致文件损坏或者不更新文件,所以设置为off

6、nginx常用命令:

sudo service nginx restart    重启nginx
ps -ax | grep nginx           查看nginx所有开启的进程

安装PHP7

1、参考文章,其实这篇文章已经说了很详细了,下面再简单的重复下

2、执行以下命令,可以根据apt-cache search php7的执行结果选择你们想要安装的版本和模块即可:

$ sudo apt-get install -y language-pack-en-base
$ sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
$ sudo apt-get update
$ apt-cache search php7
$ sudo apt-get install php7.1 php7.1-cli php7.1-fpm php7.1-gd php7.1-json php7.1-mysql php7.1-readline

3、测试php7是否已经安装成功

    • 添加域名,在本机 /etc/hosts文件中添加192.168.22.55 test.yuan.com

    • 在box中,进入/www目录,执行touch index.php创建index.php文件,并在文件中添加以下内容

      <?php 
          phpinfo();
      ?>
    • 进入/etc/nginx/conf.d文件夹,执行sudo cp default.conf test.yuan.com.conf,并修改内容为

    server {
        listen       80;
        server_name  test.yuan.com;
        index  index.html index.htm index.php default.php;
        root /www;
        #charset koi8-r;
        #access_log  /var/log/nginx/log/host.access.log  main;
    
        location / {
          try_files $uri $uri/ /index.php?$query_string;
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            fastcgi_pass   unix:/run/php/php7.1-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    • 进入浏览器,输入test.yuan.com即可

    4、如果想更加了解nginx相关配置参数信息,可参阅:nginx基本配置与参数说明

    注意:如果不成功,可能是nginx相关配置问题,请查看nginx错误日志,根据错误日志返回的信息谷歌。nginx错误日志文件一般是var/log/nginx中的error.log.也可通过nginx.conf查到错误日志文件存放目录.

    安装MySQL

    1、参考资料:官方文档

    2、安装MySQL:sudo apt-get install mysql-server ,安装过程中会要求对root用户设置密码,输入你想要的密码即可。

    3、MySQL常用命令:

    mysql -u username -p  mysql登陆
    exit  退出
    sudo service mysql status   mysql运行状态
    sudo service mysql stop     停止运行mysql 
    sudo service mysql start    开启mysql
     

    4、在本机,我使用Sequel Pro(mysql图形话界面管理工具)。连接box中mysql需要通过ssh连接,ssh key通过执行vagrant ssh-config命令即可知道。连接配置如图:

    图片描述

    安装Composer

    1、参考资料:官方文档Composer:Getting Started

    2、执行以下命令即可获得最新版本的composer

    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    php composer-setup.php
    php -r "unlink('composer-setup.php');"

    3、全局安装,执行以下命令即可:
    mv composer.phar /usr/local/bin/composer
    composer

    安装配置Yii1.1

    安装配置Yii2

    在安装时,按照官方文档提供的命令执行时,出了些错误。以下相关命令和配置都是在经过本机测试成功之后的结果。安装Yii2的前提是,已经安装成功Composer。

    1、参考资料:Yii 2.0 权威指南 安装 Yii

    2、通过执行composer self-update确保Composer已经为最新版本。

    3、执行以下命令即可安装Yii2

    composer global require fxp/composer-asset-plugin --no-plugins
    #第一条命令,安装 Composer asset plugin
    
    composer create-project --prefer-dist yiisoft/yii2-app-basic yii
    #将Yii安装在名为yii的安装目录,你也可以其他目录名。

    4、在本机etc/hosts 配置域名192.168.22.55 yii.yuan.com

    5、nginx配置,在box中/etc/nginx/conf.d目录中创建yii.yuan.com.conf,其内容如下:

    server {
        listen       80;
        server_name  yii.yuan.com;
        index  index.php;
        root /www/yii/web;
        charset utf-8;
        client_max_body_size 128M;
        #access_log  /var/log/nginx/log/host.access.log  main;
    
        location / {
          try_files $uri $uri/ /index.php?$query_string;
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            #fastcgi_pass   127.0.0.1:9000;
            fastcgi_pass   unix:/run/php/php7.1-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.(ht|svn|git) {
            deny  all;
        }
    }

    6、请在本机和box中都执行此命令:sudo chmod -R 777 yii赋予yii文件夹最高权限,以防在访问此项目时,出现权限错误。

    7、如果出现502错误或者not input file specified错误一定跟nginx配置有关,请仔细看nginx错误日志。

    注意:写的有点累了,有些还有一小节待续。这些是在本宝宝安装完之后的回忆,其实遇到挺多问题,这里可能并没有写到,因为我忘了,嘿嘿,欢迎大家在评论里交流。


    缘莲度
    300 声望26 粉丝

    谈梦想太大。我只想坚持每天学点知识。做点有趣的事情,做点自己喜欢的事情。这就是我的生活~