通过本次环境搭建过程,一方面熟悉常用的linux运维操作,另一方面介绍国内一种流行的开发环境模式之一,最后指出网上相关文章的一些错误说法。
搭建PHP开发环境时, 如果是单一操作系统, 无论 纯windows 开发还是 纯linux 都会有诸多不便
- 纯windows: 开发环境与线上linux环境的不一致往往造成一些部署问题
- 纯linux: 许多常用windows软件无法使用
所以一种常见的php开发环境搭建如下:
- 搭建vmware虚拟机跑服务器版linux,并架设 LAMP/LNMP 服务
- window下secureCRT远程ssh管理该虚机
- 通过samba服务将linux虚机下的代码目录共享给windows实机, 开发人员windows实机下在这个共享目录做开发
- windows实机浏览器访问虚拟机中的web服务做调试
新建虚拟机
请准备至少20g硬盘、3g内存、使用仅主机模式网络
配置虚拟机内网环境 - 使用hostonly
vmware中有 nat、bridge、hostonly三种虚拟机网络连接方式,其中:
- nat模式不支持vpn穿透,这会导致在国内部分公司做开发很受局限,许多公司在访问远程开发环境和开发数据库时需要启用vpn链路,这时nat模式的虚拟机网络便会掉线
- bridge模式需要占用局域网ip,这在国内部分公司做开发也会受局限,许多公司的ip是动态绑定到网卡的,虚拟机无法申请到ip使用
- hostonly模式是我推荐的连接方式,它并不像许多网上教程说的那样不支持外网访问,其实配置得当以后是可以访问外网的, 而且它支持vpn穿透、不占用公司局域网ip
hostonly模式默认使用VMnet1虚拟网卡(默认占用1号ip),后面我们约定给虚拟机配置2号ip
配置windows实机的入网网卡,共享其网络连接给VMnet1虚拟网卡
配置虚拟网路编辑器,配置仅主机模式为启用“将主机虚拟适配器连接到此网络”,关闭“DHCP”
安装CentOS7操作系统
虚拟机光驱加载CentOS7 ISO镜像,启动虚拟机安装:
- 选定时区
- 增加简体中文支持
- 软件选择最简安装Minimal Install (出于性能的考虑,我们选择最简方式安装系统,刨去那些无用又占资源的服务,因此造成的各种基础包的缺失我会在安装过程中逐步补全)
- Minimal:基本的系统,不包含任何可选的软件包
- Desktop:基本的桌面系统,包括常用的桌面软件,如文档查看工具
- Minimal Desktop:基本的桌面系统,包含的软件更少
- Basic Server:安装了基本系统平台的支持,不包含桌面
- Database Server:基本系统平台,加上MySQL和PostgreSQL数据库的客户端,无桌面
- Web Server:基本系统平台,加上PHP,Web server,还有MySQL和PostgreSQL数据库的客户端,无桌面
- Virtual Host:基本系统加虚拟化平台
- Software Development Workstation:包含的软件包较多,基本系统,虚拟化平台桌面环境,开发工具等
- 配置网络(这里设定好后就不需要下面去修改网卡配置文件了)
在IPv4 Settings中做这些配置:- Method改为Manual
- Addresses里分配一个宿主机所在网段ip,掩码255.255.255.0,网关为宿主机ip
- DNS server为宿主机ip 示例配置如下图
- 启动安装后设定root密码
等待系统安装完毕重启
运维用户管理
基于安全性和文件权限相关考量,一般都是以普通用户身份来管理系统,而不推荐以root账号来管理系统
# 密码登录root账号,然后新建一个普通管理员账号
useradd yunwei # 创建yunwei账户
passwd yunwei # 设定yunwei账户的密码
# 如果密码设定过于简单,系统会提示the password fails the dictionary check并要求重新设定
# 绕过方法:
# vi /etc/pam.d/system-auth
# 注释掉 password requisite 那行
# 编辑 password sufficient 那行, 删除末尾的 use_authtok
usermod -aG wheel yunwei # 把yunwei账户加入wheel管理员组
id yunwei # 查看yunwei账号的属组情况
su - yunwei # 切换到yunwei账号及相应上下文账户环境
虚拟机网卡设定(若上述过程未配置网络)
编辑虚拟机网卡配置,具体网段(这里是192.168.137.0)和网卡文件名(这里是ifcfg-ens32)需要看实际情况
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens32
# 做如下修改
ONBOOT=yes
BOOTPROTO=static
# 追加下述三行
IPADDR=192.168.137.4
GATEWAY=192.168.137.1
DNS1=192.168.137.1
重启网络服务 service network restart
这时候应该能ping通百度了 ping baidu.com
安装ssh服务
sudo yum install openssh-server
SecureCRT远程ssh管理虚拟机
使用我们刚创建的管理员账号yunwei远程ssh连接到虚拟机,免去我们在实机虚机间切换的麻烦。 至此,我们就可以通过终端工具比较方便的和虚拟机交互了。 (视具体情况,连接可能需要十几秒时间才有响应)
简化sudo操作
为了日后管理方便,我们解除wheel组账户在sudo操作时密码的输入
sudo visudo
# 注释掉下面这行
%wheel ALL=(ALL) ALL
# 启用下面这行
%wheel ALL=(ALL) NOPASSWD:ALL
关闭安全服务
为后面安装smb等其他服务方便,避免各种服务被屏蔽
sudo service firewalld stop # 关闭防火墙(centos6.5下是iptables服务)
sudo chkconfig firewalld off # 关闭防火墙的开机启动
sudo setenforce 0 # 关闭selinux服务
sudo sed -i 's|SELINUX=enforcing|SELINUX=disabled|g' /etc/selinux/config # 关闭selinux的开机启动
安装一些基础工具
sudo yum install gcc gcc-c++ cmake vim wget git mlocate tree net-tools psmisc kernel-devel openssl-devel bash-completion
定制下shell提示符
# Sexy Solarized Bash Prompt, inspired by "Extravagant Zsh Prompt"
# Customized for the Solarized color scheme by Sean O'Neil
if tput setaf 1 &> /dev/null; then
if [[ $(tput colors) -ge 256 ]] 2>/dev/null; then
BASE03=$(tput setaf 234)
BASE02=$(tput setaf 235)
BASE01=$(tput setaf 240)
BASE00=$(tput setaf 241)
BASE0=$(tput setaf 244)
BASE1=$(tput setaf 245)
BASE2=$(tput setaf 254)
BASE3=$(tput setaf 230)
YELLOW=$(tput setaf 136)
ORANGE=$(tput setaf 166)
RED=$(tput setaf 160)
MAGENTA=$(tput setaf 125)
VIOLET=$(tput setaf 61)
BLUE=$(tput setaf 33)
CYAN=$(tput setaf 37)
GREEN=$(tput setaf 64)
else
BASE03=$(tput setaf 8)
BASE02=$(tput setaf 0)
BASE01=$(tput setaf 10)
BASE00=$(tput setaf 11)
BASE0=$(tput setaf 12)
BASE1=$(tput setaf 14)
BASE2=$(tput setaf 7)
BASE3=$(tput setaf 15)
YELLOW=$(tput setaf 3)
ORANGE=$(tput setaf 9)
RED=$(tput setaf 1)
MAGENTA=$(tput setaf 5)
VIOLET=$(tput setaf 13)
BLUE=$(tput setaf 4)
CYAN=$(tput setaf 6)
GREEN=$(tput setaf 2)
fi
BOLD=$(tput bold)
RESET=$(tput sgr0)
else
# Linux console colors. I don't have the energy
# to figure out the Solarized values
MAGENTA="\033[1;31m"
ORANGE="\033[1;33m"
GREEN="\033[1;32m"
PURPLE="\033[1;35m"
WHITE="\033[1;37m"
BOLD=""
RESET="\033[m"
fi
parse_git_dirty () {
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit, working directory clean" ]] && echo "*"
}
parse_git_branch () {
branch=$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1$(parse_git_dirty)/")
echo $branch
}
PS1="\[${BOLD}${CYAN}\]\u \[$BASE0\]in \[$BLUE\]\w\[$BASE0\]\$([[ -n \$(git branch 2> /dev/null) ]] && echo \" on \")\[$YELLOW\]\$(parse_git_branch)\[$BASE0\] \$ \[$RESET\]"
将以上代码保存为 /etc/prompt.sh
文件
sudo chmod 777 /etc/prompt.sh
sudo sed -i 's|\r||g' /etc/prompt.sh # 删除window换行符
sudo sed -i '$a source /etc/prompt.sh' /etc/profile # 开机加载
source /etc/prompt.sh
定制vim更方便
sudo vim /etc/vimrc
命令追加如下配置
%retab!
set nu "显示行号
set ic "搜索时忽略大小写
set nowrap "禁止自动换行
set ffs=unix,dos,mac
set expandtab "制表符以空格组合展示
set tabstop=4 "读取时制表符长度
set softtabstop=4 "编辑时制表符长度
set ai shiftwidth=4 "设定缩进4。注意:粘贴缩进文本需退出缩进set noai,否则粘贴结果会 自动缩进+剪贴板文本已有缩进
禁用官方源
cd /etc/yum.repos.d
sudo mkdir backup
sudo mv *.repo backup/
使用新的源
sudo wget http://mirrors.163.com/.help/CentOS7-Base-163.repo # 国内的高速YUM源 - 163源
sudo yum install epel-release # 增加EPEL源
# 重建yum缓存
sudo yum clean all #清除yum源缓存信息
sudo yum makecache #重建yum源缓存信息
sudo yum repolist
安装vmtools虚拟机增强套件
虚拟机光驱加载 vm安装目录\VMware Workstation\linux.iso
文件(这是vmwaretool镜像而非系统镜像)并重新连上光驱。
sudo mkdir /media/cdrom
sudo mount /dev/cdrom /media/cdrom # 挂载光驱
cd /media/cdrom
mkdir /tmp/vmtools # 创建vmtools安装的临时目录
cp -a VMwareTools-9.6.2-1688356.tar.gz /tmp/vmtools
cd /tmp/vmtools
tar -zxvf VMwareTools-9.6.2-1688356.tar.gz
cd vmware-tools-distrib/
sudo ./vmware-install.pl # 执行安装脚本
# 一路回车直至安装完毕
# 其中下面这步选择 no 键入, 因为我们后面将通过更好的samba服务来实现实机虚机之间的文件系统共享
#The VMware Host-Guest Filesystem allows for shared folders between the host OS and the guest OS in a Fusion or Workstation virtual environment.Do you wish to enable this feature? [yes]
# 清理安装文件
rm -rf /tmp/vmtools
LNMP/LAMP环境编译搭建
参见文章 CentOS7-Minimal模式下编译搭建 LAMP / LNMP环境
搭建samba共享服务
samba服务提供了一种主机之间共享文件系统的能力
通过它,我们能将虚拟机下的代码目录共享给windows实机,这样我们便能在window环境下进行代码开发
安装samba服务
sudo yum install samba
sudo chkconfig smb on # 设置smb服务开机启动
sudo service smb start # 启动smb服务
sudo mkdir /srv/share # 创建共享目录
sudo chmod -R 777 /srv/share
sudo smbpasswd -a yunwei # 把yunwei账号加入smb服务中
配置samba服务sudo vim /etc/samba/smb.conf
在配置文件最后追加如下几行
[share]
comment = share directory for develop
path = /srv/share
valid users = yunwei
public = yes
writable = yes
create mask = 0777
directory mask = 0777
重启samba服务sudo service smb restart
映射网络驱动器
进入windows的资源管理器,选择映射网络驱动器,文件夹路径为: \\虚机ip\share,登录账号为yunwei
查看共享信息
windows下cmd输入命令 "net use"