多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 还是少不了虚拟机 **author:xiak** **last update: 2022-11-10 20:12:22** ---- [TOC=3,8] ---- ### 解决无法访问 github.com ~~~ # 查询域名ip https://www.ipaddress.com/site/github.com # 修改host vim /etc/hosts 140.82.113.3 github.com 185.199.108.133 raw.github.com ~~~ ---- ### VirtualBox & CentOS-7 网络配置 [VirtualBox 安装CentOs7 无法上网问题_vbox centos 无网络_fengshangzhuzhu的博客-CSDN博客](https://blog.csdn.net/bo_wei/article/details/124526834) ~~~ 网卡1:桥接网络 ~~~ ~~~ vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" #BOOTPROTO="dhcp" BOOTPROTO=static # 设置虚拟机系统IP地址,地址段需要跟宿主机的地址段一致,最后一个段的数字保证唯一就行 # 宿主 上看 ipconfig ,多尝试几个 ip ,多试几次,总有一个可以的 IPADDR=192.168.31.101 #GATEWAY=192.168.31.1 # 子网掩码,跟宿主机保持一致 NETMASK=255.255.255.0 # 网关地址,跟宿主机保持一致 GATEWAY=192.168.31.1 # 互联网域名解析器,不配置的话,无法解析域名;如果公司内网有自己的域名解析,可以用自己的 DNS1=114.114.114.114 DNS2=223.5.5.5 DNS3=1.1.1.1 DNS4=8.8.8.8 DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp0s3" UUID="05d46c43-d8c8-4c9f-bd8c-135fc6ab3fa0" DEVICE="enp0s3" ONBOOT="yes" ~~~ ~~~ vi /etc/resolv.conf service network restart ~~~ ~~~ vi /etc/resolv.conf # Generated by NetworkManager nameserver 223.5.5.5 nameserver 114.114.114.114 nameserver 1.1.1.1 nameserver 8.8.8.8 ~~~ ---- 网卡1:仅主机(Host-Only)网络 (界面名称: VirtualBox Host-Only Ethernet Adapter) 网卡2:网络地址转换(NAT) ![](https://img-blog.csdnimg.cn/4fa3fd3e8e3d4aada101f74d3cf25ace.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aW96I-c5ZOm,size_20,color_FFFFFF,t_70,g_se,x_16) ![](https://img-blog.csdnimg.cn/b79581d19c6047f49e9eec1d57980e43.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aW96I-c5ZOm,size_20,color_FFFFFF,t_70,g_se,x_16) ~~~ vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.56.10 ip addr service network restart systemctl stop firewalld.service systemctl disable firewalld.service systemctl status firewalld.service ping 192.168.56.10 ~~~ https://blog.csdn.net/Ever_Ardour/article/details/118314884 https://blog.csdn.net/aipande143/article/details/120916617 ---- ### VirtualBox & CentOS-7 磁盘自动挂载 ~~~ # 更新 kernel yum update kernel -y # 安装 kernel-herders 并编译 yum install kernel-headers kernel-devel gcc make -y # 重启并选择进入新安装的 kernel reboot ~~~ ~~~ uname -a # before Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux # after Linux localhost.localdomain 3.10.0-1160.76.1.el7.x86_64 #1 SMP Wed Aug 10 16:21:17 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux ~~~ **安装增强功能:** ![](https://img-blog.csdnimg.cn/img_convert/30217c722b97116746bbdeb21d89481e.png) ~~~ yum install bzip2 yum install libX11 yum install libXt yum install libXext yum install libXmu mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom cd /mnt/cdrom ./VBoxLinuxAdditions.run vi ~/.bashrc mount -t vboxsf web /mnt/web ~~~ https://blog.csdn.net/qq_33827423/article/details/126019729 https://blog.csdn.net/aipande143/article/details/120916617 https://blog.csdn.net/Ever_Ardour/article/details/118314884 ---- > 虚拟机有使用麻烦,性能不佳等缺点,现在 win10 系统使用 linux 子系统也挺好的: > https://www.jianshu.com/p/fcf21d45ea74 > https://www.cnblogs.com/skyshalo/p/7724072.html > https://segmentfault.com/a/1190000022059895 ![](http://cdn.aipin100.cn/18-3-22/98005862.jpg) 开发习惯于`win`了,但是`win`下总有各种不方便,比如不支持`PCNTL`。 > 需要提前说明的是,由于涉及到进程的开辟与管理,php-resque使用了php的PCNTL函数,所以只能在Linux下运行,并且需要php编译PCNTL函数。如果希望用Windows做同样的工作,那么可以去找找Resque的其他语言版本,php在Windows下非常不适合做后台任务。[PHP的轻量消息队列php-resque使用说明](https://avnpc.com/pages/run-background-task-by-php-resque) * * * * * #### 代码运行方式 代码在虚拟机中运行就跟之前在本地运行一样,无须作任何调整,因为代码就是运行在虚拟机中的。 运行环境在虚拟机中(取代`wamp`),代码编写在`win`中。 <span style="color:red">`D:\wamp64\www` 挂在到虚拟机 `/mnt/www` 目录</span> 虚拟机开着小窗不动就可以了,`Xshell` 可以连接虚拟机,和服务器环境一直,使用体验一致。以下说【服务器】就是此虚拟机了。 无需`FTP`使用连接服务器了,`www`目录直接在`win`中操作就可以了。 `宿主host文件`中指向虚拟机的地址 `192.168.1.110`(而不再是`127.0.0.1`了,因为`wamp`已经不用了) **就相当于是\[域名解析\]了**(解析到服务器地址)。(虚拟主机的对外开放IP通过在虚拟机中执行命令`ifconfig`查看inet字段) 服务器中创建nginx虚拟主机,设置网站根目录:`/mnt/www/XXX`**<span style="color:red">(其实目录实际指向了`宿主 D:\wamp64\www\XXX`)</span>**,并设置绑定域名(**相当于是\[域名绑定\]了**)。所有体验与服务器环境一致。 服务器无需再`git pull`拉代码了,因为`www`是直接挂载的,实时在`win`中编辑,在服务器环境中生效的。 #### 开发方式的转变 代码开发模式不变,还是在`win`中,与之前一致,对于原来的开发方式没有任何改变,只是代码的运行环境在本地的服务器中了,这样就能有强大的完整`Linux`了,能获得与服务器一致的运行环境了。 代码还是那一套代码,只不过运行环境,可以在服务器中(虚拟机),因为服务器把`D:\wamp64\www`挂载过去了,只要你愿意,本地还是可以打开`wamp`的,这样一套代码就可以同时运行在两个生产环境中了(宿主`wamp`中和虚拟机服务器中同时运行),只不过这样没必要。 #### 域名重定向设置 为了约束和规范,我们把虚拟机服务器中的域名都设置为 `xxx-v.com`,`宿主host`中也这样指向:`192.168.1.110 aipin-v.com` ,而本地`宿主host`指向不变还是 `127.0.0.1 aipin.com`,这样就能和原来的宿主环境区分开了,并且不影响原来的`wamp`,这样就能同时两个域名访问同一个网站了,但是两个网站只是文件完全相同,而运行在两个独立不同的环境中。**注意:代码还是同一套代码,都是对应的同一个文件。**(这种模式下,唯一可能爱出的问题是,文件权限问题,不能两个环境都同时拥有文件的独占权限,出现权限问题时肯定是因为冲突造成的) 在不改变,不侵入原来的开发过程,而实现与服务器端一致的运行环境。 >[danger] 开发环境不变,以后的运行环境就在虚拟机服务器中了,不再打开wamp而是开着VirtualBox虚拟机了。这样能得到和服务器一致的生产和部署环境。代码部署时就是无缝的了,并且拥有服务器强大的功能环境,不受win下各种限制了。 (可能写得比较啰嗦,但是这里面的东西确实比较绕,不啰嗦的话是很容易搞混淆的) >[tip] 注意:开启科学上网的代理时可能会导致修改host的域名重定向网站无法正常访问!(不要设置为“代理全部流量”就可以了) >[tip] 不知道怎么回事,最近在我的win10上面,虚拟机网络有时会慢的要死(宿主本机访问和虚拟机内访问都是这样,重启nginx也不行),但也不是不通,找不到原因,每次遇到这种情况时重启一次马上又好了,看来重启能解决80%的问题啊。 * * * * * ### 为了方便测试 修改 `/usr/local/nginx/nginx.conf` 文件: ``` location / { root /data/wwwroot/default; } #将test url指向已经挂在的目录,方便操作 location ^~ /test/ { root /mnt/www/; index index.html index.htm index.php; } ``` ```conf root /data/wwwroot/default; index index.html index.htm index.php; location /www { internal; alias /mnt/www/; } ``` 这样虚拟机内访问 `http://127.0.0.1/www` 就是映射到 `/mnt/www/` 目录了 >[tip] 上面的配置还有问题,望熟悉nginx别名配置的朋友告知。 * * * * * ### 开发环境优化 >[tip] **使用穿透时,为了内外环境区分,所以要做好标记:** 1. 本地虚拟机 `/usr/local/nginx/nginx.conf` 最后添加 ``` #标记web服务由本地虚拟主机提供 add_header WebServer-Powered-By 'Local VirtualBox'; ``` 2. 本地虚拟机 `/usr/local/nginx/conf/vhost/www.xxx.cn.conf` 最后也同样添加: ``` #标记web服务由本地虚拟主机提供 add_header WebServer-Powered-By 'Local VirtualBox'; ``` 同样的,服务器环境也添加此响应头,值为`Server`: ``` #标记web服务由服务器提供 add_header WebServer-Powered-By 'Server'; ``` 3. 框架入口文件`www/xxx/public/index.php`标记: ```php // 运行环境标记:本地虚拟主机 or 线上服务器环境 if (stripos($_SERVER['SCRIPT_FILENAME'], 'mnt') !== false) { define('RUNTIME_ENVIRONMENT', 'Local VirtualBox'); } else { define('RUNTIME_ENVIRONMENT', 'Server'); } header('Runtime-Environment: ' . RUNTIME_ENVIRONMENT); ``` 这样一来,所有web请求都有标记了,即使非动态文件也有`WebServer-Powered-By` 头标记。 > 另外frp中也可以添加header [设置-http-请求的-header](https://github.com/fatedier/frp/blob/master/README_zh.md#设置-http-请求的-header) **详细配置以及代理设置参见:**[Nginx · web开发最佳实践 · 看云](https://www.kancloud.cn/xiak/web-dev-best-practice/708061) [linux - nginx添加add_header能启动,但不生效,也不报错 - SegmentFault 思否](https://segmentfault.com/q/1010000009576840) [nginx添加自定义header - CSDN博客](https://blog.csdn.net/albertfly/article/details/51702556) [通过Nginx定义Header头信息 - CSDN博客](https://blog.csdn.net/u014743697/article/details/54375252) * * * * * ### 扩展 > 虚拟机要安装 `虚拟增强功能` ,鼠标、复制才能设置正常。 [ubuntu中vi不能正常使用方向键与退格键的问题_百度经验](https://jingyan.baidu.com/article/a3a3f811d194378da2eb8af8.html) [怎样在VirtualBox中创建共享文件夹_百度经验](https://jingyan.baidu.com/article/656db918cca831e381249cce.html) [分享Virtualbox Ubuntu 共享文件夹、自动挂载的一些问题 - CSDN博客](http://blog.csdn.net/skylake_/article/details/53132499) > 当我自己满怀希望的去测试了第四种方法之后,我发现,系统不会再出错了,我真的真的特别激动啊。。。。。但是,并没有实现自动挂载啊啊啊啊啊啊啊~闹心死我了 / 我的这种方法成功了,哈哈! [Ubuntu下设置开机自动挂载硬盘 - 在路上 - CSDN博客](https://blog.csdn.net/qwfys200/article/details/79737780)(上面如果不灵试下这种方式,另外打开VirtualBox的自挂载) [virtualbox下面安装ubuntu后外网如何远程ssh访问 - 黄锋 - 博客园](https://www.cnblogs.com/tonyibm/p/5622349.html) [Xshell5连接VirtualBox虚拟机中的Ubuntu_Linux教程_Linux公社-Linux系统门户网站](https://www.linuxidc.com/Linux/2016-08/134086.htm) [【Linux学习】配置环境:实现【VirtualBox + ubuntu】+【开启ssh服务】+【putty远程连接到虚拟机】 - 蔡諝 - 博客园](https://www.cnblogs.com/caixu/archive/2012/09/12/2682630.html) [ubuntu开启SSH服务远程登录 - jackghq的博客 - CSDN博客](https://blog.csdn.net/jackghq/article/details/54974141) [windows下virtualbox中Ubuntu与主机通过ssh建立连接的方法 - CSDN博客](http://blog.csdn.net/aristolto/article/details/50542463) [VirtualBox如何扩展虚拟机Ubuntu的硬盘容量? - CSDN博客](http://blog.csdn.net/ouyang_peng/article/details/53261599) [\[Linux\] VirtualBox - 主机与虚拟机互通 - CentOS - 横渡 - 博客园](https://www.cnblogs.com/HD/p/4011323.html) [VirtualBox网络环境配置,宿主机与虚拟机互联,同时虚拟机也可以使用互联网-张玉禄的博客-51CTO博客](http://blog.51cto.com/11156310/2159893) > 配置网卡1:仅主机网络;网卡2:网络地址转换 [lnmp、lamp、lnmpa一键安装包(Updated: 2018-03-18) | Linux运维笔记](https://blog.linuxeye.cn/31.html) [LNMP环境镜像使用手册](https://oneinstack.com/docs/lnmpstack-image-guide/) 多个虚拟机可能存在冲突,建议不开同时多开多个虚拟机软件,尤其是不同的软件。`夜神模拟器` 可能利用了 `VirtualBox` 的一些东西,在它的声音输入输出IO能看到 `VirtualBox` 的身影(它播放音乐时,win扬声器->合成器那里看到的),并且运行 `夜神模拟器` 时,安装 `VirtualBox` 时报严重错误,安装失败过。 * * * * * ### 内网穿透 >[nice] Ngrok:世界上最遥远的距离就是你在外网请求,我在内网测试。 [ngrok安装使用 - CSDN博客](https://blog.csdn.net/linshichen/article/details/52670385) [10分钟教你搭建自己的ngrok服务器 - CSDN博客](https://blog.csdn.net/yjc_1111/article/details/79353718) [Sunny-Ngrok内网转发](https://www.ngrok.cc/) [ngrok国内服务器 | ITTUN](https://www.ittun.com/#) [铂金ngrok(https://ngrok.bob.kim)原理浅析 - CSDN博客](https://blog.csdn.net/lyb3290/article/details/80239890) [铂金ngrok 如何让外网访问到本地内网-ngrok内网穿透免费服务器 - Boblog](https://ngrok.bob.kim/) [FRP内网穿透工具](http://diannaobos.com/frp/)(简单、免费、好用的内网穿透工具) [frp内网穿透搭建,超级简单实用 - CSDN博客](https://blog.csdn.net/qq_25351621/article/details/78947477) [shadowsocks](https://github.com/shadowsocks) [Search · goprox](https://github.com/search?o=desc&q=goprox&s=stars&type=Repositories) [snail007/goproxy: Proxy is a high performance HTTP(S), websocket, TCP, UDP,Secure DNS, Socks5 proxy server implemented by golang. Now, it supports chain-style proxies,nat forwarding in different lan,TCP/UDP port forwarding, SSH forwarding.Proxy是golang实现的高性能http,https,websocket,tcp,防污染DNS,socks5代理服务器,支持内网穿透,链式代理,通讯加密,智能HTTP,SOCKS5代理,域名黑白名单,跨平台,KCP协议支持,集成外部API。](https://github.com/snail007/goproxy) [fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.](https://github.com/fatedier/frp) * * * * * last update:2018-7-30 18:24:48