laravel开发网站实例
阅读原文时间:2021年04月21日阅读:1

#某魔法组织官网实现

这是一篇开源的基于laravel的网站开发项目博客,涉及的资源、工具、项目源代码,请访问我的github项目,地址为:https://github.com/xielinrui/laravel/tree/master/acmcqupt/html
###后端
####开发环境的搭建
#####在本机搭建laravel开发环境
######1、安装 php 7
如果你是windows系统,前往 https://windows.php.net/download 下载 PHP 7 最新版本
如果你是Linux系统,前往 http://www.php.net/downloads.php 下载 php 7 最新版本

下载好了php 7 之后,安装 php 7。这里以windows 10 为例(Linux后面部署生产环境的时候再说):
解压好php 7 下载的文件之后,呈现出下面的目录结构:

├─dev
├─ext
├─extras
│  └─ssl
├─lib
│  └─enchant
└─sasl2

在文件夹里面有大量的.lib文件(静态数据连接库)
dev:存放php7.lib文件,是php7的主设备目录
ext:extends的缩写,里面包含了php 7 自带的可扩展插件(即插即用,只需在配置文件中配置)
extras:
ssl:存放openssl的配置文件
lib:
enchant:存放了语法检查的文件
sasl2:用于验证身份

在主文件夹中,找到 php.ini-development 文件,复制一份备份,然后修改文件名为php.ini,作为php 7 的配置文件。

######2、安装 Nginx 作为服务容器
nginx支持的特性比apache服务器强一些,所以选择用nginx。另外,基于nginx配置高性能服务器也是朋友们可以尝试的

针对win10:
前往 http://nginx.org/en/download.html 下载nginx最新版

解压之后,目录结构如下:

├─conf
├─contrib
│  ├─unicode2nginx
│  └─vim
│      ├─ftdetect
│      ├─ftplugin
│      ├─indent
│      └─syntax
├─docs
├─html
├─logs
└─temp

conf:nginx的配置文件
contrib:
unicode2nginx:
vim:
ftdetect:
ftplugin:
indent:
syntax:
docs:
html:安装时的默认站点
logs:日志文件
temp:

ctrl+R 调出命令行窗口后进入到nginx的下载目录,使用这个指令来开启nginx

start nginx.exe

然后在浏览器输入 http://localhost/ 就可以访问到自己的nginx服务了。如果目前你查看到自己的nginx没有任何反应,可以使用下面的方法来查看问题。

1、进入到conf目录下,使用 nginx -t,测试自己 nginx 的配置文件是否有问题。如果没问题,使用 nginx -s reload 来重启nginx服务。
2、开启服务之后,使用 netstat -ano |findstr "80" (Linux下面为 netstat -lnp |grep "80") 的指令来查找80端口的占用情况,最后一项是占用着的进程ID(PID),然后在使用 tasklist |findstr "pid" 来查看占用者的信息。如果发现不是nginx,说明80端口已经被其他的进程占用了,所以nginx服务没有正常开启。需要做的就是关闭对应的应用即可。笔者在打开nginx的时候服务没打开就是因为前段时间部署在iis上的应用占用了80端口。
3、如果上面都没有问题,那就可以查看自己的防火墙设置,防火墙包括 Selinux 和 iptables ,可以使用 setenforce 0 ,使得 SElinux 不可用,然后查看iptables的出入站规则,查看80端口是否被防火墙拦截了

解决掉上面的问题之后,就可以看见nginx的欢迎界面了
welcome to nginx !!!

为了方便nginx在windows系统中好打开和关闭,可以把nginx加入到系统服务当中去
(1)、前往 https://github.com/kohsuke/winsw/releases 下载 xxxx.NET4 类型的文件,下载完成后放到nginx的解压目录中,与nginx.exe同级。
(2)、编写 xxxx.xml 文件(注意 xxxx 指代的是下载的 xxxx.NET4 的那个文件名)

<?xml version="1.0" encoding="UTF-8"?>
<service>
    <id>Nginx</id>
    <name>Nginx</name>
    <description>Nginx Services</description>
    <executable>C:\Users\laodiao\Downloads\www\nginx-1.15.1\nginx.exe</executable>
</service>  

其中里面代表的是解压文件中 nginx.exe 的绝对路径
(3)、使用指令 xxxx.exe install 来安装新建的服务、使用 xxxx.exe start 来启动服务,启动服务之后,到计算机服务管理界面就可以看见刚刚安装的nginx服务了。
(4)、如果想用winsw来安装其他的服务,也可以用类似的办法。

安装好nginx之后,可以到 codepen:https://codepen.io/ 下载 40x.html 和 50x.html 的页面,避免使用 nginx 默认的 404.html 和 50x.html 页面造成服务器版本泄露。保护服务器相关属性的隐私安全也是很重要的。在校园环境中,避免一些同学来对服务器进行恶意攻击练手。下载好之后需要去nginx.conf里面修改相关的配置。

error_page  404              /40x.html;
error_page   500 502 503 504  /50x.html;

如果前面有 # 号,就去掉

如何得到nginx的错误提示呢?
开启nginx的调试模式,当php代码有问题的时候,nginx服务默认是不提供报错信息的,对于开发人员来说,这样的后果就是增加了更多的调试时间,为了提高效率,在开发的阶段开启nginx的错误提示功能是很有必要的。修改配置文件即可。

######3、nginx中配置支持 php 7
配置php:
修改 php.ini 文件

cgi.fix_pathinfo=1 //找到这一项,并把前面的#号去掉,这一项开启了php对nginx的支持
//这样也可让php-cgi正常使用SCRIPT_FILENAME这个变量

配置nginx:
修改 nginx.conf 文件

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

去掉前面的所有注释,使nginx支持php。这里的Php是以CGI的模式运行的,与在apache服务器中运行的状态不一样,nginx通过监听9000端口发来的请求做相应的渲染动作。现在有很多技术的实现方法都类似于这种,例如 docker Client 和 docker Server 也是这样C/S结构的。nginx和php处于不同的进程,两个进程之间通过Socket连接起来。

使用CGI模式启动php 7:

php-cgi.exe -b 127.0.0.1:9000 -c D:\php-7.1.13\php.ini

输入以后没有反应,但是不能关掉命令行
不过,这种不关闭命令行的操作始终不符合简便性开发的原则(多一个黑窗口,还不能动,动了就凉了)

开启php之后,写一个php的 Hello world 来测试可用性

<?php
  phpinfo();
?>

从浏览器访问该文件,如果能够看到php的相关介绍,那么就配置成功了。

常见问题:
(1)、出现 “No input file specified.” 的错误提示,原因是由于nginx和php的根目录不一致造成的。查看 access.log 文件,“GET / HTTP/1.1” 404 36 “-” "Mozilla/5.0 也可以看出的确是没有找到这个文件,但是由于php接管了所有Php的东西,所以没有显示出默认的404页面,而是返回了上面那个错误提示。
解决办法:
修改 nginx.conf 文件:

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
//改成
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

修改完之后重启nginx服务即可。(可以先使用 nginx -t 测试配置文件的正确性,再使用nginx -s reload 重启nginx)。此时问题就解决掉了。

######配置composer
该部分来源于composer中国全镜像的教程,地址:https://pkg.phpcomposer.com/

打开命令行窗口,运行以下命令

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"

作用:

下载安装脚本 - composer-setup.php - 到当前目录。
执行安装过程。
删除安装脚本

全局安装composer
全局安装是将 Composer 安装到系统环境变量 PATH 所包含的路径下面,然后就能够在命令行窗口中直接执行 composer 命令了
方法:
1、找到并进入 PHP 的安装目录(和你在命令行中执行的 php 指令应该是同一套 PHP)。
2、将 composer.phar 复制到 PHP 的安装目录下面,也就是和 php.exe 在同一级目录。
3、在 PHP 安装目录下新建一个 composer.bat 文件,并将下列代码保存到此文件中。

@php "%~dp0composer.phar" %*

重新打开一个命令行窗口试一试执行 composer --version 看看是否正确输出版本号
如果看到类似这样的结果,就可以确定安装成功了。

Composer version 1.5.2 2017-09-11 16:59:25

经常执行 composer selfupdate 以保持 Composer 一直是最新版本

######使用Packagist 镜像( Composer 中国全量镜像)
修改 composer 的全局配置文件

composer config -g repo.packagist composer https://packagist.phpcomposer.com

试一下 composer install 来体验飞一般的速度

######创建一个laravel项目
到你的工作目录下,创建一个Laravel项目

composer create-project laravel/laravel acm 

下载这个laravel需要花一定的时间,耐心等待之后,就可以发现生成了laravel项目,由于篇幅原因,关于Laravel中相关目录代表的含义就不一一介绍了。感兴趣的同学可以自己看源码。laravel的源码主要是在vender目录下的 Illuminate 下的。应用访问的入口是 public 目录下的 index.php 文件。访问 laravel 应用前,应该修改 storage 目录的权限,否则会报错。

修改本地host文件,也就是当你在浏览器中输入域名的时候,实际上请求的dns首先是到host文件中去找

127.0.0.1 acm.xxxpt.edu.cn

配置 nginx 将 acm.xxxpt.edu.cn 指向当前这个服务
新增一个 server 块,修改下面这部分配置

server_name  acm.xxxpt.edu.cn;
location / {
            root   html/acm/public;
            index  index.php index.html index.htm;
}
location ~ \.php$ {
    root           html/acm/public;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

重启 nginx ,在浏览器中打开刚才的域名,就可以对laravel项目进行访问了。

下一篇