准备系统镜像文件

在开始创建虚拟机之前,我们还须要准备一个用于安装操作系统的镜像文件,我这里选择的是CentOS 7 作为系统开拓环境

创建NAT虚拟交流机

php双环境Windows  Linux虚拟机打造PHP开辟情况 SQL

由于默认的虚拟交流机是随机分配的IP,每次重启电脑后网关都会变革,无法为虚拟机设置静态IP,而我们往后基本上都要通过IP远程SSH去管理Linux虚拟机,以是还须要有一个能配置静态IP的虚拟交流机

以管理员身份运行PowerShell,在PowerShell中运行以下命令,创建一个新的NAT虚拟交流机

# 创建虚拟交流机,等同于在Hyper-V管理器界面中新建虚拟网络交流机New-VMSwitch -SwitchName "NAT-VM" -SwitchType Internal# 查看 NAT-VM 的 ifindexGet-NetAdapter# 创建ip,InterfaceIndex参数自行调度为上一步获取到的ifindex。
这一步等同于在 掌握面板-网卡属性 中设置ipNew-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24 -InterfaceIndex 6# 创建nat网络,这一步是教程中的关键命令,24为子网掩码位数,即:255.255.255.0New-NetNat -Name NAT-VM -InternalIPInterfaceAddressPrefix 192.168.100.0/24

新建虚拟机

打开 Hyper-V管理器 -> 新建 -> 虚拟机

安装系统

在开始安装之前,如果在上一步新建虚拟机的时候选择了二代虚拟机,则须要在虚拟机设置中把安全启动关闭掉,否则无法正常进入到安装界面

为了加快安装速率,可以多分配几个处理器来加快安装速率,等安装好之后在调回来

开始安装

等待安装完成后,点击重启就能进入到安装好的系统了

搭建PHP开拓环境

Nginx + MySQL + PHP 是目前比较盛行的php环境组合,下面就以这样一个组合来搭建一个PHP开拓环境,你也可以利用一键安装脚本来完成此步骤,推举OneinStack - 一键PHP/JAVA安装工具

通过之前配置好的静态IP远程SSH到虚拟机

ssh qsz@192.168.100.11

安装Nginx

安装编译工具

yum -y install wget gcc-c++

如果你利用的是普通用户登录的话,可能会碰着如下问题

办理办法,切换到root用户,将当前用户加入到sudoers这个文件中

su # 切换到root账号yum -y install vim # 先利用root账号安装vim文本编辑器vim /etc/sudoers # 编辑 /etc/sudoers 文件,将须要授权的账号加入到该文件中,完成授权操作,如下图

之后切换回普通用户,连续操作

su qsz # 切换到指定用户sudo yum -y install wget gcc-c++wget https://nginx.org/download/nginx-1.21.0.tar.gz # 下载Nginx源文件压缩包sudo tar -zxvf nginx-1.21.0.tar.gz -C /usr/local/src/ # 解压文件到指定位置

安装必要扩展

sudo yum -y install pcre-devel openssl-devel

编译安装

cd /usr/local/src/nginx-1.21.0 # 进入到解压后的目录sudo ./configure \ # 配置编译选项--prefix=/usr/local/nginx-1.21.0 \ # 配置安装目录--user=qsz \ # 配置运行用户--group=qsz \ # 配置运行用户组--with-http_ssl_module \ # 开启httpssudo make && sudo make install # 编译并安装

加入到系统做事

创建系统做事文件 /usr/lib/systemd/system/nginx.service,并写入如下内容

[Unit]Description=The NGINX HTTP and reverse proxy serverAfter=syslog.target network-online.target remote-fs.target nss-lookup.targetWants=network-online.target[Service]Type=forkingPIDFile=/usr/local/nginx-1.21.0/logs/nginx.pidExecStartPre=/usr/local/nginx-1.21.0/sbin/nginx -tExecStart=/usr/local/nginx-1.21.0/sbin/nginxExecReload=/usr/local/nginx-1.21.0/sbin/nginx -s reloadExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target

开机启动

sudo systemctl enable nginx安装PHP

下载编译文件

cd ~ # 回到主目录wget https://www.php.net/distributions/php-8.0.7.tar.gz # 下载php编译包sudo tar -zxvf php-8.0.7.tar.gz -C /usr/local/src/ # 解压文件到指定位置

安装扩展

sudo yum -y install libxml2-devel sqlite-devel curl-develsudo yum -y install https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-6.8.2-1.el7.x86_64.rpmsudo yum -y install https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-devel-6.8.2-1.el7.x86_64.rpm

编译安装

按需选择须要开启的扩展

cd /usr/local/src/php-8.0.7/ # 进入到解压后的目录sudo ./configure \ # 配置编译参数--prefix=/usr/local/php-8.0.7 \ # 配置安装目录--enable-fpm \ # 开启fpm--enable-mbstring \ # 开启多字节字符串函数--with-openssl \ # openssl--with-pdo-mysql \ # 开启pdo支持--with-curl \ # 开启curl支持--with-pear \ # 开启pear支持,用于安装php扩展--with-fpm-user=qsz \ # 配置fpm运行用户--with-fpm-group=qsz \ # 配置fpm运行用户组sudo make && sudo make install # 编译安装

创建配置文件

sudo cp php.ini-development /usr/local/php-8.0.7/lib/php.ini # 复制配置文件到安装目录cd /usr/local/php-8.0.7/etc/sudo cp php-fpm.conf.default php-fpm.conf # 创建fpm主配置文件sudo cp ./php-fpm.d/www.conf.default ./php-fpm.d/www.conf # 创建fpm子配置文件

加入到环境变量

创建软连接

sudo ln -s /usr/local/php-8.0.7/bin/php /usr/local/bin/php

查看效果

加入到系统做事

创建系统做事文件 /usr/lib/systemd/system/php8.0-fpm.service,并写入如下内容

[Unit]Description=The PHP FastCGI Process ManagerAfter=network.target[Service]Type=simplePIDFile=/usr/local/php-8.0.7/var/run/php-fpm.pidExecStart=/usr/local/php-8.0.7/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php-8.0.7/etc/php-fpm.confExecReload=/bin/kill -USR2 $MAINPID[Install]WantedBy=multi-user.target

开机启动

sudo systemctl enable php8.0-fpm

安装Composer

cd ~php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"php composer-setup.phpphp -r "unlink('composer-setup.php');"sudo mv composer.phar /usr/local/bin/composer

实行命令的时候可能会碰着如下问题

根据给出的提示解释,该当是短缺了zlib扩展,安装一下该扩展就好

cd /usr/local/src/php-8.0.7/ext/zlib/ # 进入源码扩展目录sudo /usr/local/php-8.0.7/bin/phpize # 创建编译配置sudo ./configure --with-php-config=/usr/local/php-8.0.7/bin/php-config # 配置编译参数sudo make && sudo make install # 编译安装# 编辑 /usr/local/php-8.0.7/lib/php.ini 文件,加入如下内容extension=zlib.so

如果涌现以下提示就先实行一下 mv config0.m4 config.m4 命令后再实行 sudo usr/local/php-8.0.7/bin/phpize

如果涌现以下提示解释短缺了autoconf编译环境,实行sudo yum -y install autoconf安装编译环境后在操作就好

安装Git

下载二进制包

Git二进制包下载地址

cd ~wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz

安装扩展

sudo yum -y install perl-CPAN asciidoc xmltosudo yum -y install https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/d/docbook2X-0.8.8-17.el7.x86_64.rpmsudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi

编译安装

sudo tar -zxvf git-2.9.5.tar.gz -C /usr/local/src/cd /usr/local/src/git-2.9.5/sudo make configuresudo ./configure --prefix=/usr/local/git-2.9.5make all doc infosudo make install install-doc install-html install-info

添加到环境变量

sudo ln -s /usr/local/git-2.9.5/bin/git /usr/local/bin/

安装MySQL

下载二进制包

MySQL二进制文件下载地址

建议大家用迅雷下载好后再上传到虚拟机中吧,官网下载速率实在太慢了,惨不忍睹

利用sftp把文件上传到虚拟机,默认会上传到用户主目录下

sftp qsz@192.168.100.11

创建用户

sudo useradd -M -U -r -s /sbin/nologin mysql

安装

sudo tar -zxvf mysql-8.0.25-el7-x86_64.tar.gz -C /usr/local/sudo mv /usr/local/mysql-8.0.25-el7-x86_64/ /usr/local/mysql-8.0.25rm -rf /etc/my.cnf /etc/my.cnf.d/cd /usr/local/mysql-8.0.25/sudo mkdir {mysql-files,log,data,etc,tmp}sudo chown -R mysql.mysql /usr/local/mysql-8.0.25/

初始化数据

sudo bin/mysqld --initialize --basedir=/usr/local/mysql-8.0.25/ --datadir=/usr/local/mysql-8.0.25/data/ --user=mysql

sudo ln -s /usr/local/mysql-8.0.25/bin/mysql /usr/local/bin/ # 加入到环境变量

创建配置文件

创建文件 /usr/local/mysql-8.0.25/etc/my.cnf,并写入如下内容

[mysqld]daemonize = onuser = mysqlport = 3306basedir = /usr/local/mysql-8.0.25datadir = /usr/local/mysql-8.0.25/datasocket = /usr/local/mysql-8.0.25/tmp/mysql.sockbind-address = 0.0.0.0pid-file = /usr/local/mysql-8.0.25/tmp/mysqld.pidcharacter-set-server = utf8mb4collation-server = utf8mb4_general_cimax_connections = 2408log-error = /usr/local/mysql-8.0.25/log/mysqld.log

加入到系统做事

创建系统做事文件 /usr/lib/systemd/system/mysqld8.service,并写入如下内容

[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Service]User=mysqlGroup=mysqlType=forkingTimeoutSec=0PermissionsStartOnly=trueExecStart=/usr/local/mysql-8.0.25/bin/mysqld --defaults-file=/usr/local/mysql-8.0.25/etc/my.cnfLimitNOFILE = 5000Restart=on-failureRestartPreventExitStartus=1PrivateTmp=false[Install]WantedBy=multi-user.target

修正密码

启动mysql做事

sudo systemctl start mysqld8

利用之前得到的初始密码登录mysql

mysql -uroot -p'Iqua+osDJ9y6' -S /usr/local/mysql-8.0.25/tmp/mysql.sock

设置密码

mysql> set password='MyPassword@123';

开机启动

sudo systemctl enable mysqld8利用共享文件夹实现Windows上编码Linux上运行

利用Windows上开启共享文件夹Linux上挂载共享文件夹,来实现在Windows上编写代码,然后在Linux上实时查看效果

或者反过来在Linux开启共享文件夹,Windows上挂载共享文件夹来实现都可以

前者在运行大项目的时候会涌现明显的加载缓慢,后者则是在利用ide等编辑器写代码的时候会有的卡顿征象

下面就以第一种办法来实现效果

Windows上创建共享文件夹

新建目录web

Web目录构造

├─nginx # 用于存放nginx干系配置文件│ ├─log # 用于存放nginx日志文件│ │ ├─access # 访问日志│ │ └─error # 缺点日志│ ├─php # 存放php资源反向代理配置│ ├─rewrite # 存放路由重写配置文件│ └─vhost # 存放虚拟主机配置文件└─project # 用于存放项目

选择文件夹右键 -> 属性 -> 共享 -> 高等共享

挂载共享目录

安装cifs工具包,用于连接挂载smb共享目录

sudo yum -y install cifs-utils

创建挂载点

sudo mkdir /web

挂载共享目录

# username指定登录共享目录的用户名# password指定登录共享目录的用户密码# uid用于指定挂载目录的所有者的uid,可通过 cat /etc/passwd 查看,指定后挂载目录所有者将被设置为该用户# gid用于指定挂载目录的所属组的gid,可通过 cat /etc/group 查看,指定后挂载目录所属组将被设置为该用户组# //192.168.123.211/web 个中 192.168.123.211 为开启了共享目录的打算机IP地址,/web 为共享的目录名称sudo mount -t cifs -o username=qsz,password=123123,uid=1000,gid=1000 //192.168.123.211/web /web

开机挂载共享目录

创建启动脚本文件 ~/mount.sh,写入如下内容

#!/bin/bashmount -t cifs -o username=qsz,password=123123,uid=1000,gid=1000 //192.168.123.211/web /web

付与脚本可实行权限

chmod +x ~/mount.sh

在centos7中,/etc/rc.d/rc.local的权限被降落了,以是须要实行如下命令授予其可实行权限

sudo chmod +x /etc/rc.d/rc.local

编辑 /etc/rc.d/rc.local 文件将启动脚本加入到系统的启动脚本中

...touch /var/lock/subsys/local+ /home/qsz/mount.sh

配置Nginx

配置PHP脚本转发

nginx是无法解析php脚本的,以是须要将php脚本转发给到php-fpm解析实行后将结果返回给到nginx处理,为了方便管理这里就单独创建一个文件作为转发规则配置,然后在须要到的地方直接引入该配置文件

添加php转发规则配置文件 /web/nginx/php/enable-php-80.conf

location ~[^/]\.php{fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;fastcgi_pass 127.0.0.1:9000;#fastcgi_pass unix:/run/php/php8.0-fpm.sock;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;set $script $uri;set $path_info "";if ($uri ~ "^(.+\.php)(/.+)") {set $script $1;set $path_info $2;}fastcgi_index index.php;fastcgi_param PATH_INFO $path_info;fastcgi_param SCRIPT_NAME $script;include fastcgi_params;include fastcgi.conf;}

路由重写

很多框架都有自己的路由重写规则,这里以thinkphp为例,为了方便管理这里就单独创建一个文件作为重写配置,然后在须要到的地方直接引入该配置文件

添加路由重写配置文件 /web/nginx/rewrite/thinkphp.conf

location / {if (!-e $request_filename) {rewrite ^/(.)$ /index.php?s=/$1 last;break;}}

虚拟主机配置

很多时候我们须要根据不同的域名来访问不同的项目,如果都写到nginx.conf文件里面,等到项目越来越多的时候就会变得难以管理,以是就须要将这些配置单独抽离出来,然后在nginx.conf中引入。

添加虚拟主机配置文件 /web/nginx/vhost/example.conf

server{listen 80;server_name example.com;index index.php index.html index.htm;root /web/project/example;# ssl证书配置# ssl_session_cache shared:SSL:10m;# ssl_session_timeout 10m;# ssl_certificate /web/nginx/ssl/devyun.dezhikm.com/fullchain.pem;# ssl_certificate_key /web/nginx/ssl/devyun.dezhikm.com/privkey.pem;proxy_set_header x-real-ip $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location ~ .\.(js|css)?$ {expires 7d;access_log off;}# php引用配置include /web/nginx/php/enable-php-80.conf;# 伪静态include /web/nginx/rewrite/thinkphp.conf;access_log /web/nginx/log/access/example.com.log;error_log /web/nginx/log/error/example.com.log;}

配置nginx.conf

备份nginx主配置文件

sudo mv /usr/local/nginx-1.21.0/conf/nginx.conf /usr/local/nginx-1.21.0/conf/nginx.conf.bak

新建nginx主配置文件 /usr/local/nginx-1.21.0/conf/nginx.conf,写入如下内容

user qsz qsz;worker_processes 1;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;# 日志格式设置log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';log_format json escape=json '{"clientIp": "$remote_addr", "agent": "$http_user_agent", "timeLocal": "$time_local", "status": $status, "upstreamStatus": $upstream_status, "requestTime": "$request_time", "upstreamResponseTime": "$upstream_response_time", "requestUri": "$request_uri", "requestMethod": "$request_method", "requestBody": "$request_body"}';# 日志文件设置access_log /web/nginx/log/access/default.log;error_log /web/nginx/log/error/default.log;sendfile on;keepalive_timeout 65;# 引入虚拟主机配置include /web/nginx/vhost/.conf;# 默认虚拟主机server {listen 80;server_name localhost;error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}}

查看效果

在完成上面的配置后,接下来就可以查看配置是否生效了,在 配置Nginx > 虚拟主机配置 这一步中我们已经添加了一个虚拟主机的配置文件 example.conf,现在还须要将配置中的 example.com 域名加入到 hosts 文件中,之后才能够利用该域名访问

配置hosts

在Windows上编辑 C:\Windows\System32\drivers\etc\hosts 文件,加入如下内容

+ 192.168.100.11 example.com www.example.com

启动做事

回到虚拟机中,启动nginx做事和php-fpm做事

sudo systemctl start nginx php8.0-fpm

开放 80 端口,以便可以在Windows上访问http做事

sudo firewall-cmd --zone=public --add-port=80/{tcp,udp} --permanent # 开放端口sudo firewall-cmd --reload # 重新加载配置使配置生效

查看

在Windows上打开浏览器,在地址栏输入 example.com

可以看到这时候已经可以访问到虚拟机上的做事了,但是由于我们example项眼前还什么文件都没有,以是返回了403缺点,接下来我们在 D:\web\project\example 目录下新建一个 index.html 文件,并写入如下内容

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><h1>Hello World!</h1></body></html>

再次刷新页面就可以实时看到效果

接下来我们在 D:\web\project\example目录下创建一个 index.php 文件,并写入如下内容

<?phpphpinfo();

刷新页面,看看是否能正常解析

可以看到php文件已经能被正常解析了,现在我们就可以愉快地在Windows上用各种编辑器和IDE来开拓项目,而不用管php环境的问题了,所有的开拓环境都在Linux虚拟机中

配置HTTP代理

配置HTTP代理,用于在windows上可以直接访问到虚拟机上的做事,这样就不须要在windows上配置host了

安装squid代理做事

sudo yum -y install squid

开机启动代理做事

sudo systemctl enable squid

关闭代理缓存

编辑 /etc/squid/squid.conf 文件,加入如下内容

...+ acl NCACHE method GET+ no_cache deny NCACHE

开放代理端口

squid默认代理端口为3128,可以在/etc/squid/squid.conf配置文件中进行修正

sudo firewall-cmd --zone=public --add-port=3128/{tcp,udp} --permanent # 开放端口sudo firewall-cmd --reload # 重新加载配置使配置生效

连接代理

在Windows上打开浏览器,安装 ProxySwitchyOmega 插件

配置插件连接代理

在Widdows上删除上一节中添加的host,编辑 C:\Windows\System32\drivers\etc\hosts 文件

- 192.168.100.11 example.com www.example.com

在Linux虚拟机中编辑 /etc/hosts 文件,加入如下内容

+ 127.0.0.1 example.com www.example.com

在Windows上打开浏览器,利用代理来访问虚拟机的做事

在浏览器地址栏输入 example.com

在做接口开拓的时候一样平常是用postman来做接口调试,下面来说一下postman如何利用代理

配置好后就可以直接在postman中直接访问虚拟机上的做事了

建议

建议安装两个浏览器,一个用来日常浏览网页,一个用来开拓调试,如果只有一个浏览器,在利用代理的时候,就须要常常切换代理,特殊是还开了vpn的情形下,很有可能会和vpn冲突

我自己是利用edge和chrome,日常利用edge,开拓用chrome