## 还是少不了虚拟机
**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
- 开始
- 公益
- 更好的使用看云
- 推荐书单
- 优秀资源整理
- 技术文章写作规范
- SublimeText - 编码利器
- PSR-0/PSR-4命名标准
- php的多进程实验分析
- 高级PHP
- 进程
- 信号
- 事件
- IO模型
- 同步、异步
- socket
- Swoole
- PHP扩展
- Composer
- easyswoole
- php多线程
- 守护程序
- 文件锁
- s-socket
- aphp
- 队列&并发
- 队列
- 讲个故事
- 如何最大效率的问题
- 访问式的web服务(一)
- 访问式的web服务(二)
- 请求
- 浏览器访问阻塞问题
- Swoole
- 你必须理解的计算机核心概念 - 码农翻身
- CPU阿甘 - 码农翻身
- 异步通知,那我要怎么通知你啊?
- 实时操作系统
- 深入实时 Linux
- Redis 实现队列
- redis与队列
- 定时-时钟-阻塞
- 计算机的生命
- 多进程/多线程
- 进程通信
- 拜占庭将军问题深入探讨
- JAVA CAS原理深度分析
- 队列的思考
- 走进并发的世界
- 锁
- 事务笔记
- 并发问题带来的后果
- 为什么说乐观锁是安全的
- 内存锁与内存事务 - 刘小兵2014
- 加锁还是不加锁,这是一个问题 - 码农翻身
- 编程世界的那把锁 - 码农翻身
- 如何保证万无一失
- 传统事务与柔性事务
- 大白话搞懂什么是同步/异步/阻塞/非阻塞
- redis实现锁
- 浅谈mysql事务
- PHP异常
- php错误
- 文件加载
- 路由与伪静态
- URL模式之分析
- 字符串处理
- 正则表达式
- 数组合并与+
- 文件上传
- 常用验证与过滤
- 记录
- 趣图
- foreach需要注意的问题
- Discuz!笔记
- 程序设计思维
- 抽象与具体
- 配置
- 关于如何学习的思考
- 编程思维
- 谈编程
- 如何安全的修改对象
- 临时
- 临时笔记
- 透过问题看本质
- 程序后门
- 边界检查
- session
- 安全
- 王垠
- 第三方数据接口
- 验证码问题
- 还是少不了虚拟机
- 程序员如何谈恋爱
- 程序员为什么要一直改BUG,为什么不能一次性把代码写好?
- 碎碎念
- 算法
- 实用代码
- 相对私密与绝对私密
- 学习目标
- 随记
- 编程小知识
- foo
- 落盘
- URL编码的思考
- 字符编码
- Elasticsearch
- TCP-IP协议
- 碎碎念2
- Grafana
- EFK、ELK
- RPC
- 依赖注入
- 开发笔记
- 经纬度格式转换
- php时区问题
- 解决本地开发时调用远程AIP跨域问题
- 后期静态绑定
- 谈tp的跳转提示页面
- 无限分类问题
- 生成微缩图
- MVC名词
- MVC架构
- 也许模块不是唯一的答案
- 哈希算法
- 开发后台
- 软件设计架构
- mysql表字段设计
- 上传表如何设计
- 二开心得
- awesomes-tables
- 安全的代码部署
- 微信开发笔记
- 账户授权相关
- 小程序获取是否关注其公众号
- 支付相关
- 提交订单
- 微信支付笔记
- 支付接口笔记
- 支付中心开发
- 下单与支付
- 支付流程设计
- 订单与支付设计
- 敏感操作验证
- 排序设计
- 代码的运行环境
- 搜索关键字的显示处理
- 接口异步更新ip信息
- 图片处理
- 项目搭建
- 阅读文档的新方式
- mysql_insert_id并发问题思考
- 行锁注意事项
- 细节注意
- 如何处理用户的输入
- 不可见的字符
- 抽奖
- 时间处理
- 应用开发实战
- python 学习记录
- Scrapy 教程
- Playwright 教程
- stealth.min.js
- Selenium 教程
- requests 教程
- pyautogui 教程
- Flask 教程
- PyInstaller 教程
- 蜘蛛
- python 文档相似度验证
- thinkphp5.0数据库与模型的研究
- workerman进程管理
- workerman网络分析
- java学习记录
- docker
- 笔记
- kubernetes
- Kubernetes
- PaddlePaddle
- composer
- oneinstack
- 人工智能 AI
- 京东
- pc_detailpage_wareBusiness
- doc
- 电商网站设计
- iwebshop
- 商品规格分析
- 商品属性分析
- tpshop
- 商品规格分析
- 商品属性分析
- 电商表设计
- 设计记录
- 优惠券
- 生成唯一订单号
- 购物车技术
- 分类与类型
- 微信登录与绑定
- 京东到家库存系统架构设计
- crmeb
- 命名规范
- Nginx https配置
- 关于人工智能
- 从人的思考方式到二叉树
- 架构
- 今日有感
- 文章保存
- 安全背后: 浏览器是如何校验证书的
- 避不开的分布式事务
- devops自动化运维、部署、测试的最后一公里 —— ApiFox 云时代的接口管理工具
- 找到自己今生要做的事
- 自动化生活
- 开源与浆果
- Apifox: API 接口自动化测试指南