CentOS 7迁移Magento 1.9.x到Mangento 2

Magento 2安装页面

Magento 2出来也挺久时间了,市场上的反应有部分人觉得它很慢,这可能与硬件设备的要求有关,也有部分人觉得不好用。不管怎样,事物总是向前发展的,Magento 2必将逐步取代Magento 1.9.x,这只是时间问题,也有消息称从今年11月起官方将可能不再对1.9.x的版本支持。Alan已经很久没有对Magento进行研究了,今天抽空对一个站点作迁移的尝试,在这里记录下来过程和问题和大家分享。

Read More

CentOS 7使用squid搭建http代理服务器

CentOS 7使用squid搭建http代理服务器

代理服务器不同于VPN,通常是在应用层完成的。基本原理是通过缓存来实现对应网站的访问并隐藏客户端IP,在商业范围应用广泛。

升级安装包

安装Squid并启动服务、设置开机自启动

Read More

通过CentOS 7从零开始学习Linux及常见问题

本文将通过CentOS 7来学习Linux的以下常用知识:

  • Linux网络设置
  • SSH常用配置和使用方法
  • Linux常用服务
    • Crontab定时任务
    • NTP时间同步
    • Logrotate日志切割
    • Supervisor进程管理
  • Linux常用命令
  • Linux中的防火墙配置方法
  • 使用Apache配置Web服务器
  • 使用Nginx配置Web服务器
  • MySQL的安装及常用操作
  • Linux中的常见问题
  • Memcached和Redis缓存
  • Git的配置和使用
  • PHP安装及配置
    • Lavarel的安装及配置
    • Yii的安装及配置
    • ThinkPHP的安装及配置
    • phpMyAdmin的安装及配置
    • phpRedisAdmin的安装及配置
  • Java环境搭建
    • Tomcat搭建和启用
    • Maven使用示例
  • Python运行环境配置
  • Zabbix监控系统安装配置
  • VirtualBox 设置共享文件夹

CentOS 7目录结构

Read More

CentOS 6 Yii框架开发

基本环境准备

yum install httpd mysql php -y
yum install php-devel php-mysql php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt -y
yum install mysql-server mysql mysql-devel -y
#设置MySQL密码
mysql_secure_installation
#安装Nginx
yum -y install nginx

Yii的安装

#安装composer:
curl -sS http://install.phpcomposer.com/installer | php 
#安装全局插件
php composer.phar global require "fxp/composer-asset-plugin:~1.1.1" 
#安装yii框架 
php composer.phar create-project --prefer-dist yiisoft/yii2-app-basic basic 2.0.10

Linux CentOS内核、I/O优化

资源限制/etc/security/limits.conf

* soft nofile 65535
* hard nofile 65535
* 表示对所有用户有效
soft 指的是当前系统生效的设置
hard 表明系统中所能设定的最大值
nofile 表示所限制的资源是打开文件的最大数目
65535 就是限制的数量

磁盘调度策略

查看IO调度方法
cat /sys/block/devname/queue/scheduler #devname为设备名,如sda等
noop anticipatory deadline [cfq]
noop(No operation电梯式调度策略)
noop实现了一个FIFO队列,它像电梯的工作方法一样对I/O请求进行组织,当有一个新的请求合并到最近的请求之后,以此来保证请求同一介质。NOOP倾向饿死读而利于写,因此noop对于闪存设备、RAM及嵌入式系统是最好的选择。
deadline(截止时间调度策略)
Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限。这样就防止了写操作因为不能被读取而饿死的现象,deadline对数据库类应用是最好的选择。
anticipatory(AS, 预料I/O调度策略)
本质上与deadline一样,但在最后一次读操作后,要等待6ms,才能继续进行对其它I/O请求进行调度。它会在每个6ms中插入新的I/O操作,而会将一些小写入流合并成一个大写入流,用写入延时换取最大 的写入吞吐量。AS适合于写入较多的环境,比如文件服务器,AS对数据库环境表现很差。
CFQ(Complete Fairness Queueing完全公平排队I/O调度程序)

修改方法: 如 echo deadline > /sys/block/sda/queue/scheduler

文件系统对性能的影响

ext3/ext4系统的挂载参数:/etc/fstab
日志记录方式:data = writeback | ordered | journal
writeback 获得更好的写入性能
ordered 提供性能和防护之间的最佳平衡
noatime, nodiratime 禁止记录文件/目录最近一次访问时间戳以提高系统性能
如在/etc/fstab中加入(ext4系统)

/dev/sda1	/	ext4	noatime,nodiratime,data=writeback 1 1

内核配置 /etc/sysctl.conf

net.core.somaxconn = 262144   用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制
net.core.netdev_max_backlog = 30000  每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.ipv4.tcp_max_syn_backlog = 262144   表示那些尚未收到客户端确认信息的连接(SYN消息)队列的长度,默认为1024,加大队列长度为262144,可以容纳更多等待连接的网络连接数。

 

net.ipv4.tcp_fin_timeout = 10    如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒
net.ipv4.tcp_tw_recycle = 1   开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1    表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。
net.core.rmem_default = 8388608    接收套接字缓冲区大小的默认值(以字节为单位)
net.core.rmem_max=16777216    接收套接字缓冲区大小的最大值(以字节为单位)
net.core.wmem_default = 8388608    发送套接字缓冲区大小的默认值(以字节为单位)
net.core.wmem_max=16777216    发送套接字缓冲区大小的最大值(以字节为单位)

 

net.ipv4.tcp_keepalive_time = 1200   当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟
net.ipv4.tcp_keepalive_intvl =30 当探测没有确认时,重新发送探测的频度。
net.ipv4.tcp_keepalive_probes =3 在认定连接失效之前,发送多少个TCP的keepalive探测包。缺省值是9。这个值乘以tcp_keepalive_intvl之后决定了,一个连接发送了keepalive之后可以有多少时间没有回应。

 

kernel.shmmax = 4294967295 Linux内核参数中最重要的参数之一,用于定义单个共享内存段的最大值
1.这个参数应该设置的足够大,以便能在一个共享内存段下容纳下整个的Innodb缓冲池的大小。
2.这个值的大小对于64位Linux系统,可取的最大值为物理内存值-1byte,建议值为大于物理内存的一半,一般取值大于Innodb缓冲池的大小即可,可以取物理内存-1byte。
vm.swappiness = 0  内存交换分区,这个参数当内存不足时会对性能产生比较明显的影响。设为0告诉Linux内核除非虚拟内存完全满了,否则不要使用交换分区。
net.ipv4.ip_local_port_range = 1024 65536    用于向外连接的端口范围
net.ipv4.tcp_mem = 786432 1048576 1572864    确定 TCP 栈应该如何反映内存使用,此处分别为3G、4G、6G;每个值的单位都是内存页(通常是 4KB)。第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用应用压力的上限。第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。
net.ipv4.tcp_rmem=4096 87380 16777216    TCP接收缓冲区,3个字段分别是min,default,max。Min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。
Default: 为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 net.core.wmem中default的值。该值决定了 在tcp_adv_win_scale、tcp_app_win和tcp_app_win的 默认值情况下,TCP 窗口大小为65535。
Max:为TCP socket预留用于接收缓冲的内存最大值。该值不会影响 net.core.wmem中max的值
net.ipv4.tcp_wmem=4096 65536 16777216    TCP发送缓冲区,3个字段分别是min,default,max。Min:为TCP socket预留用于发送缓冲的内存最小值。每个TCP socket都可以使用它。
Default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem中default的 值,一般要低于net.core.wmem中default的值。
Max:为TCP socket预留用于发送缓冲的内存最大值。该值不会影响net.core.wmem_max

net.ipv4.tcp_max_tw_buckets = 6000    系统在同时所处理的最大timewait sockets 数目。如果超过此数的话,time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的 DoS 攻击,千万不要人为的降低这个限制,不过,如果网络条件需要比默认值更多,则可以提高它(或许还要增加内存)
net.ipv4.tcp_timestamps = 0   时间戳可以避免序列号的卷绕。一个1Gbps 的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。
net.ipv4.tcp_window_scaling = 1   支持更大的TCP窗口. 如果TCP窗口最大超过65535(64KB), 必须设置该数值为1。
net.ipv4.tcp_sack = 1    表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)这个选项应该启用,但是这会增加对 CPU 的占用
net.ipv4.tcp_no_metrics_save=1    默认情况下一个tcp连接关闭后,把这个连接曾经有的参数比如慢启动门限snd_sthresh,拥塞窗口snd_cwnd 还有srtt等信息保存到dst_entry中, 只要dst_entry 没有失效,下次新建立相同连接的时候就可以使用保存的参数来初始化这个连接.通常情况下是关闭的。
net.ipv4.tcp_syncookies = 1  当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_max_orphans = 262144    系统中最多有多少个TCP 套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS 攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。

net.ipv4.tcp_synack_retries = 2    为了打开对端的连接,内核需要发送一个SYN 并附带一个回应前面一个SYN 的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量。
net.ipv4.tcp_syn_retries = 2    在内核放弃建立连接之前发送SYN 包的数量

web服务器收到了大量的连接,在启用了iptables的情况下,iptables会把所有的连接都做链接跟踪处理,这样iptables就会有一个链接跟踪表
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=1800   链接跟踪表保存时间,单位:秒
net.ipv4.netfilter.ip_conntrack_max=131070   链接跟踪表最大数目

kernel.sysrq = 0    允许按住Alt + PrtSc键打印内核信息,除非是调试,一般要关闭此功能
kernel.core_uses_pid = 1    控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core
kernel.msgmnb = 65536    每个消息队列的最大字节限制。
kernel.msgmax = 65536    从一个进程发送到另一个进程的消息的最大长度(bytes)。进程间的消息传递是在内核的内存中进行的,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量。

kernel.shmall = 4294967296    系统上可以使用的共享内存的总量(bytes)
kernel.randomize_va_space = 1    将该值设置为 0 可禁用地址空间布局随机化。DB2 数据服务器依赖特定共享内存对象的固定地址,地址空间布局随机化会导致有些活动发生错误
net.ipv4.ip_forward = 0    0表示禁用 IPv4 包转送
net.ipv4.neigh.default.gc_stale_time=120    ARP参数,检查一次相邻层记录的有效性的周期。当相邻层记录失效时,将在给它发送数据前,再解析一次。缺省值是60秒。
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2

以下命令使内核参数生效:
/sbin/sysctl -p 生效

/sbin/sysctl -a | grep net.core.netdev_max_backlog 查看

完整的参数列表:

net.core.netdev_max_backlog = 30000
net.core.somaxconn = 262144
net.core.rmem_default = 8388608
net.core.wmem_default = 8388608
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.ip_local_port_range = 1024 65536
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_no_metrics_save=1
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=1800
net.ipv4.netfilter.ip_conntrack_max=131070

kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.randomize_va_space = 1
kernel.exec-shield = 1
net.ipv4.ip_forward = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2

如果出现error: “net.ipv4.netfilter.ip_conntrack_max” is an unknown key

执行下面的命令加载对应模块:

modprobe ip_conntrack
lsmod |grep conn — if you see entries it means modules have been loaded correctly
sysctl -w — to write the changes you made under /etc/sysctl.conf
sysctl -p — to view the changes and see if it was actually loaded.

还不行,把net.ipv4.netfilter.ip_conntrack_max替换为:

net.nf_conntrack_max = 131070试试看
除了调整内核参数,还需 调整文件数:

linux系统优化完网络必须调高系统允许打开的文件数才能支持大的并发,默认1024是远远不够的。
查看进程占用的文件句柄数; lsof -n |awk ‘{print $2}’|sort|uniq -c |sort -nr|more       其中第一行是打开的文件句柄数量,第二行是进程号

执行Shell命令:
echo ulimit -HSn 65536 >> /etc/rc.local
echo ulimit -HSn 65536 >>/root/.bash_profile

ulimit -HSn 65536

如果要sudo执行时,使用:sudo sh -c “ulimit -HSn 65536 && exec su $LOGNAME”

-H 设置硬资源限制.
-S 设置软资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes
-u <程序数目>  用户最多可开启的程序数目
Windows:
打开注册表编辑器,在运行栏输入:regedit
第一步:启动注册表编辑器HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
第二步:新建
值名称:MaxUserPort
值类型: DWORD
值数据: 65534(用十进制的方法写进去就可以)
有效范围: 5000 – 65534 (十进制)
默认: 0x1388 5000 (十进制)
第三步:新建
值名称:TCPTimedWaitDelay
值类型: DWORD
值数据: 0000001e(也就是30,这个表示TIME_WAIT的秒数)

重启电脑

本文在Linux和windows下内核socket优化项内容基础上进行整理

CentOS 7安装Apache + MySQL + PHP

一、配置防火墙,开启80端口、3306端口

CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。

1、关闭firewall:

#停止firewall服务

systemctl stop firewalld.service

#禁止firewall开机启动

systemctl disable firewalld.service

 

2、安装iptables防火墙

#安装

yum install iptables-services

#编辑防火墙配置文件

vi /etc/sysconfig/iptables

添加80,3306端口

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

 #最后重启防火墙使配置生效

systemctl restart iptables.service

#设置防火墙开机启动

systemctl enable iptables.service

 

二、关闭SELINUX
#修改配置文件

  1. vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存退出

#使配置立即生效

setenforce 0

三.安装apache

yum -y install httpd

可能会用到的:

systemctl start httpd.service #启动apache

systemctl stop httpd.service #停止apache

systemctl restart httpd.service #重启apache

systemctl enable httpd.service #设置apache开机启动
restart一下,然后:
输入localhost
出现之后代表已经安装上去了。

四.安装mysql

方法参考
http://blog.itpub.net/29773961/viewspace-1248176/
(wget http://repo.mysql.com//mysql57-community-release-el7-8.noarch.rpm)
方法大致相同

在centos7中可以用:

rpm -ivh mysql57-community-release-el7-8.noarch.rpm

sudo yum -y install mysql-community-server

关于这一步骤,在目前能够找到的centos7配置教程上,大多都是安装mariadb,因为centos7默认将mariadb视作mysql。
p.s.因为mysql被oracle收购后,原作者担心mysql闭源,所以又写了一个mariadb,这个数据库可以理解为mysql的分支。
我在此处还是安装mysql

如果需要安装mariadb,只需通过yum就可。

查看MySQL安装过程中临时生成的密码

sudo grep ‘temporary password’ /var/log/mysqld.log

五.安装php
yum -y install php

安装PHP组件,使PHP支持mysql

yum -y install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash

重启对应服务

systemctl restart mysqld.service

systemctl restart httpd.service

CentOS 6.x 上如何升级php

我们都知道CentOS 6.x上的PHP版本为5.3.3,那么如果想要升级到更高的版本要怎么办呢?

这里使用Magento官方文档中提到的rpm包来进行相关安装

# 不加第一个有可能会报Requires: libmcrypt.so.4的错误
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
yum install -y php56w php56w-opcache php56w-xml php56w-mcrypt php56w-gd php56w-devel php56w-mysql php56w-intl php56w-mbstring php56w-bcmath

但是如果之前已经安装过php的朋友可能会发现无法进行安装,此时请先删除php-common即执行

yum remove php-common -y 

再进行安装可发现会正常进行新版本的升级,我这里演示的是5.6.x的版本,您也可以选择PHP 7.0(php70w...),如果您选择的是其它的rpm包,可通过如下命令来查看可供安装的PHP文件版本

yum list available | grep php

安装完成后可通过php -v或php -version来验证已安装的PHP版本

其它参考链接:https://foreigngods.com/blog/2016/03/14/56/upgrade-to-php-56-on-centos-6/

【大数据基础】VirtualBox安装CentOS实操

首先下载VirtualBox并安装,可在官网根据所使用的系统直接下载:https://www.virtualbox.org/wiki/Downloads。VirtualBox和一般的软件安装并没有什么差别,这里略过不提。

注:本文中使用Mac OS X系统进行操作,但文中的方法也同样适用Windows系统

安装完后打开VirtualBox,点击New添加虚拟机

VirtualBox管理界面

在弹出的窗口中填写名称方便查找并选择需安装的操作系统类型及版本,这里名称填入hadoop01,操作系统选择64位的Linux,完成点击Continue

主机名和操作系统配置

下一个页面为内存大小配置,此处用于配置所创建虚拟机所占用的内存大小,推荐大小为不小于512MB。可通过拖动滑块或直接输入来调整内存大小值,配置完成后点击Continue继续

VirtualBox虚拟机内存大小设置

下一个页面为硬盘配置页面,确定是否创建虚拟硬盘或使用已有的虚拟硬盘,我们选择Create a virtual hard disk now,点击Create进入下一步

VirtualBox配置硬盘

下一个页面选择创建的虚拟硬盘类型,默认为VDI,据说VMDK可跨平台在VMware中导入,这里我们选择VMDK格式,点击Continue进入下一步

VirtualBox选择虚拟硬盘类型

下一个页面用于如何为虚拟磁盘分配电脑的硬盘的资源,一般建议使用动态分配,这样不会占用过多的硬盘资源。点击Continue进入下一步

虚拟磁盘在电脑上的资源分配

此处选择虚拟磁盘保存位置以及可使用的硬盘资源大小。点击Create进入下一步完成VirtualBox上虚拟磁盘的配置

选择保存位置和大小

此时在VirtualBox主界面左侧就会出现刚刚创建的hadoop01,选中该虚拟机,点击Start

hadoop01虚拟机

进入的下一个页面需选择所下载CentOS的iso文件(可根据实际情况在以下地址中选择镜像下载地址:http://isoredirect.centos.org/centos/7/isos/x86_64/),点击Start开启操作系统的安装流程

CentOS操作系统文件选择

接下来进入的是CentOS安装的欢迎界面,选择Install or upgrade an existing system并按下Enter/Return键

CentOS安装欢迎界面

下一个页面为设备检测,可使用Tab键切换到Skip并按下Enter/Return键跳过该步骤

CentOS安装Media Test

紧接着进入欢迎页面和安装向导中使用的语言,选择后点击Next或直接按下Enter/Return键进入下一步(注:如果点击后发现鼠标无法退出虚拟机界面,按下左侧的Command键即可)

CentOS欢迎界面

安装界面语言选择

接下来的页面选择存储设备,一般选择默认的Basic Storage Devices,点击Next或直接按下Enter/Return键进入下一步

存储设备选择

接下来警告是否保存原虚拟磁盘的数据,由于我们是初次安装,可以选择Yes, discard any data,点击按钮或直接按下Enter/Return键进入下一步

是否保留原数据警告

接下来进入主机名和网络配置页面,主机名是指在局域网中显示的名称,这里我们使用hadoop01。在该页面点击Configure Network还可以进行网络配置,为便于对配置文件的了解我们将在安装完成后进行相关配置,点击Next按钮进入下一步

主机名和网络配置

紧接着进入的是时区配置页面,可根据需求进行选择或保持默认,这里我们选择北京时间Asia/Shanghai,点击Next按钮进入下一步

时区配置页面

接下来进入root用户的密码的设置页面,root用户在Linux中拥有最高权限,这个密码相当重要,务必记牢,点击Next按钮进入下一步

Root密码设置页面

下一个页面选择安装类型,我们采用默认的Replace Existing Linux System(s),点击Next或直接按下Enter/Return键进入下一步

覆盖当前Linux系统

此时会弹出一个窗口确认是否写入(Write changes to disk),点击Next或直接按下Enter/Return键进入下一步

确认写入磁盘

紧接着进入到安装进度页面

CentOS安装进程

安装完成进入如下页面,点击Reboot进行重启

CentOS安装重启页面

然后进入的是命令行页面,输入用户名(root)和密码完成登录

CentOS命令行登录页面

此时在主界面中点击Settings>Network,然后配置网卡适配器为Bridged Adapter,如无需上网,可选择Host-only Adapter,Alan使用的是Mac采用无线上网,这里选择en0: Wi-Fi(Airport)

VirtualBox下安装CentOS网络设置
在命令行界面输入vi /etc/sysconfig/network-scripts/ifcfg-eth0进行编辑,主要修改和配置的内容如下:


	BOOTPROTO="static" #动态获取IP值使用dhcp
	ONBOOT="yes"
	IPADDR="192.168.1.110" #根据实际网段和所需配置IP为定
	NETMASK="255.255.255.0" 
	GATEWAY="192.168.1.1" #根据实际网段而定
	DNS1=8.8.8.8 #DNS可不进行配置
	DNS2=8.8.4.4

vi /etc/hosts配置机名和IP映射

192.168.1.110  hadoop01

修改完成后输入service network restart更改生效

很多时候直接在虚拟机上操作不太方便,Mac上可使用Terminal进行连接,Windows上则可使用SecureCRT等工具进行连接。以Terminal为例,直接输入ssh root@192.168.1.110,第一登录需输入入yes添加为安全主机,然后输入root密码即可完成登录:

通过Terminal连接虚拟主机

其它相关文件:

/etc/sysconfig/network配置主机名

/etc/resolv.conf配置域名解析服务器地址

常见问题

Device eth0 does not seem to be present…报错

这种报错常见于在VirtualBox或VMware上克隆虚拟机时,在配置完成后输入service network restart重启时所出现的网络错误,解决的方法是打开/etc/udev/rules.d/70-persistent-net.rules文件,找到如下内容,记下eth1的MAC地址(本例中为08:00:27:19:10:77)

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:19:10:77", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

然后再打开 /etc/sysconfig/network-scripts/ifcfg-eth0 文件编辑,设置HWADDR后的值为刚刚记录下的MAC地址,并设置DEVICE=eth1再重启网络即可

CentOS安装SVN

1.使用yum install subversion -y可以直接在服务器上完成svn的安装。

2.通过rmp -ql subversion可以查看安装位置,可以看到svn在bin文件夹下生成了一些二进制文件

[root@alanhou ~]# rpm -ql subversion
/etc/bash_completion.d
/etc/bash_completion.d/subversion
/etc/rc.d/init.d/svnserve
/etc/subversion
/usr/bin/svn
/usr/bin/svnadmin
/usr/bin/svndumpfilter
/usr/bin/svnlook
/usr/bin/svnserve
/usr/bin/svnsync
/usr/bin/svnversion
... ...

通过svn –help可以查看svn的一些命令和使用方法。

3.为svn版本库创建一个文件夹,如执行mkdir -p /var/svn/alanhou创建一个名为alanhou目录

4.执行svnadmin create /var/svn/alanhou创建版本库,可以看到alanhou目录下出现如下目录和文件

[root@alanhou alanhou]# ll
total 24
drwxr-xr-x 2 root root 4096 Oct  9 05:10 conf
drwxr-sr-x 6 root root 4096 Oct  9 05:10 db
-r--r--r-- 1 root root    2 Oct  9 05:10 format
drwxr-xr-x 2 root root 4096 Oct  9 05:10 hooks
drwxr-xr-x 2 root root 4096 Oct  9 05:10 locks
-rw-r--r-- 1 root root  229 Oct  9 05:10 README.txt

conf目录中为svn版本库配置文件

[root@alanhou alanhou]# ll conf/
total 12
-rw-r--r-- 1 root root 1080 Oct  9 05:10 authz
-rw-r--r-- 1 root root  309 Oct  9 05:10 passwd
-rw-r--r-- 1 root root 2279 Oct  9 05:10 svnserve.conf
  • authz文件是权限控制文件,比如要设置用户alan对版本库根目录拥有读写权限
[/]
alan=rw
  • passwd是帐号密码文件,添加格式为user=password
  • svnserve.conf SVN服务配置文件

打开下面的几个注释(注意要同时去掉#后面的空格,否则会出现类似/var/svn/alanhou/conf/svnserve.conf:12: Option expected的报错):
anon-access = read #匿名用户可读
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
realm = /var/svn/alanhou # 认证空间名,版本库所在目录
启动版本库

svnserve -d -r /var/svn/alanhou

-d表示后台运行

-r 指定根目录

5.在Windows电脑上安装SVN客户端,如TortoiseSVN,在用于对接的文件夹上右击SVN Checkout,输入版本库所有服务器ip,点击OK在下一步中输入前面创建的用户名和密码

svn checkout

然后就可完成Checkout的步骤:

SVN checkout finished

VirtualBox配置CentOS Linux、安装Magento

在前面参照Allan MacGregor的Magento PHP Developer’s Guide一书尝试搭建Linux环境并安装Magento(参见Magento的安装Magento的环境搭建),中间存在一些问题,实际上未能100%完成。之后Alan请教了公司IT部门的技术大牛,在VirtualBox(也可使用VMware但可能需安装VMware Server且比较消耗系统资源)上配置CentOS并成功的安装了Linux,在这里与家分享一下。

VirtualBox以及CentOS的安装在这里就不再赘述,可根据实际需要在http://wiki.centos.org/Download下载CentOS安装文件。

安装Apache、配置网络

第一步我们先来安装Apache,登录后执行如下指令

yum install httpd -y

如果出现无法解析镜像主机的情况,则说明还需对网络及dns进行配置,输入指令vi /etc/sysconfig/network-scripts/ifcfg-eth0,enter进入后按下i进行编辑,将ONBOOT=后的值改为yes,BOOTPROTO值改为no,然后在结尾处加上如下内容:
DNS1=192.168.1.1(根据家庭路由器和公司配置可能会有不同,通常默认都是192.168.1.1)
IPADDR=192.168.1.123(根据实际情况指定,这里选择123)
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

按下esc,shift+:,输入wq保存退出
重启网络服务:service network restart,这里网成了网络相关配置,但还需要再进行一处配置,输入poweroff关机。在VirtualBox主界面选中机器,点击Machine>Settings或直接点击工具栏中的Settings,进入后点击Network,将Adapter1下的NAT改为Bridged Adapter,点击OK完成修改。
点击工具栏Start再次开启机器,这时再执行前面的yum指令就可以开始安装Apache服务器了。执行service httpd start命令启动Apache(默认开机开启Apache执行命令chkconfig httpd on)。

这时在浏览器中输入http://192.168.1.123发现无法访问,这是由于未配置防火墙的原因。在配置之前我们安装一下nano,因为很多人不太习惯使用vi编辑器,输入yum install nano -y命令即可。

下面我们来配置防火墙iptable,在命令行中输入
nano /etc/sysconfig/iptables
然后在-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
后面加入下面这一行,来开放80端口(Web服务的默认端口)
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

这时就可以通过ip地址http://192.168.1.123在浏览器中进行访问了,默认进入的是一个有着Apache 2 Test Page字样的页面。

安装PHP和MySQL

下面安装php,输入指令yum install php -y,然后输入yum install mysql mysql-server -y来安装MySQL数据库,输入service mysqld start启用MySQL(默认开机开启MySQL执行命令chkconfig mysqld on),输入mysql -uroot -p连接数据库,

create database magento_dev;
创建一个用户来管理这个数据库:
GRANT ALL PRIVILEGES ON magento_dev.* TO ‘alan’@’localhost’ IDENTIFIED BY ‘alanhou2014′; (其中alan和alanhou2014分别为用户名和密码,可根据需要调整)

安装Magento

下面我们开始对Magento进行安装,首先输入yum install subversion -y安装svn,完成后键入cd /var/www切换目录,
svn export –force http://svn.magentocommerce.com/source/branches/1.9 html/

打开C:\system32\drivers\etc\hosts文件,在最后添加一条192.168.1.123 magento.localhost.com

文件下载完成后在浏览器中输入http://magento.localhost.com就可以进入Magento的安装界面,但中间会出现一些错误,这是由于权限给予不足以及缺乏组件,让我们一起来看看有哪些错误提示:

提示没有可写权限

Path “/var/www/html/app/etc” must be writable.
Path “/var/www/html/media” must be writable.
Path “/var/www/html/media/xmlconnect” must be writable.
Path “/var/www/html/media/xmlconnect/original” must be writable.
Path “/var/www/html/media/xmlconnect/original/ok.gif” must be writable.
Path “/var/www/html/media/xmlconnect/custom” must be writable.
Path “/var/www/html/media/xmlconnect/custom/ok.gif” must be writable.
Path “/var/www/html/media/xmlconnect/system” must be writable.
Path “/var/www/html/media/xmlconnect/system/ok.gif” must be writable.
Path “/var/www/html/media/downloadable” must be writable.
Path “/var/www/html/media/customer” must be writable.

chown -R apache:apache html

出现如下提示分别表示缺少dom,mcrypt,gd,mysql这几个php库(可通过php -m查看当前php扩展(extension),也可cd /etc/php.d切换到这里查看)
PHP extension “dom” must be loaded.
PHP extension “mcrypt” must be loaded.
PHP extension “gd” must be loaded.
PHP Extensions “pdo_mysql” must be loaded.
安装方法也很简单:
yum install php-dom php-mcrypt php-gd php-mysql -y
重启Apache服务生效:service httpd restart

若出现The URL “http://magento.localhost.com/” is not accessible. Unable to read response, or response is empty提示,则只需勾选Skip Base URL Validation Before the Next Step即可。
Magento安装完成

Bonus Tip:

此外linux还有一个仓库(repository)的概念,通过cd /etc/yum.repos.d切换,ll或ls -l可查看现在的仓库,如果通过yum无法某些组件的话,通常是由于仓库中未包含所指定的内容(如在这里安装MongoDB以及前面的mcrypt),下面来介绍一个如何安装RHEL EPEL Repo软件源,我们使用的是国外的镜象,输入如下指令:
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm(先使用yum install wget -y来安装wget)
文件下载完成后将其载入到仓库中,使用指令:
rpm -Uvh epel-release-6*.rpm

另外再提供两个中国镜象源地址:
http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm(rpm为Red Hat Package Management的简写形式)
http://mirrors.hustunique.com/epel/6/x86_64/epel-release-6-8.noarch.rpm