最近因为工作开始接触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文件,并在文件中添加以下内容
进入
/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错误日志。
注意:写的有点累了,有些还有一小节待续。这些是在本宝宝安装完之后的回忆,其实遇到挺多问题,这里可能并没有写到,因为我忘了,嘿嘿,欢迎大家在评论里交流。