【ubuntu】学习之八:php开发环境搭建(存在问题,需要后期改正)

一、安装Apache

下载Apache 2.4及依赖包

Apache官网下载:http://httpd.apache.org/download.cgi

由于Apache依赖于APR、APR-Util和PCRE,所以需要下载:

APR + APR-Util:http://apr.apache.org/download.cgi

PCRE:http://sourceforge.net/projects/pcre/files/pcre/

在此,笔者使用均为目前最新版本,Apache 1.4.6,APR 1.4.1,APR-Util 2.4.1,Perl 5.14.2,PCRE 8.30

安装依赖

APR及APR-Util安装

解压缩APR及APR-Util

shell> sudo tar zxvf apr-1.4.6.tar.gz -C /opt/sources
shell> sudo tar zxvf apr-util-1.4.1.tar.gz -C /opt/sources

创建安装目录并创建软链接

shell> sudo mkdir /opt/software/develop/apr-1.4.6
shell> sudo mkdir /opt/software/develop/apr-util-1.4.1
shell> sudo ln -s /opt/software/develop/apr-1.4.6 /usr/local/apr
shell> sudo ln -s /opt/software/develop/apr-util-1.4.1 /usr/local/apr-util

安装APR及APR-Util

复制代码
shell> cd /opt/sources/apr-1.4.6
shell> sudo ./configure --prefix=/usr/local/apr
shell> sudo make
shell> sudo make install

shell> cd /opt/sources/apr-util-1.4.1
shell> sudo ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
shell> sudo make
shell> sudo make install
复制代码

安装PCRE

首先请确定系统安装了Perl,Perl在此不再赘述,如有需要请去官网查看安装细则:http://www.cpan.org/src/README.html

解压缩PCRE

shell> sudo tar zxvf pcre-8.30.tar.gz -C /opt/sources

创建PCRE安装目录及软链接

shell> sudo mkdir /opt/software/develop/pcre-8.30
shell> sudo ln -s /opt/software/develop/pcre-8.30 /usr/local/pcre

安装PCRE

shell> cd /opt/sources/pcre-8.30
shell> sudo ./configure --prefix=/usr/local/pcre
shell> sudo make
shell> sudo make install

安装Apache 2.4

解压缩Apache 2.4

shell> sudo tar zxvf httpd-2.4.2.tar.gz -C /opt/sources

创建Apache安装目录及软链接

shell> sudo mkdir /opt/software/develop/httpd-2.4.2
shell> sudo ln -s /opt/software/develop/httpd-2.4.2 /usr/local/apache2

安装Apache

复制代码
shell> cd /opt/sources/httpd-2.4.2

# 此处请根据自己要搭建的环境进行配置,我这里是为了配置PHP环境
shell> sudo ./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite=shared --with-mpm=prefork --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre

shell> sudo make
shell> sudo make install
复制代码

启动Apache

通过apachectl启动Apach

shell> sudo /usr/local/apache2/bin/apachectl start

检查是否有Apache进程

shell> ps aux | grep httpd

如果有Apache的进程,则证明启动成功,浏览器地址栏输入 http://localhost 试试吧~

启动成功之后,可以将apachectl拷贝到/etc/init.d下,作为service启动。

shell> sudo cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd
shell> sudo service httpd start
执行下面的命令关闭开机自启动:      chkconfig httpd off

配置apache

 apache的配置,下面这些我是摘抄过来的,没经过验证,大家谨慎用之:

复制代码
二、配置Apache
1. 修改httpd.conf文件
# vi  /usr/local/apache/conf/httpd.conf
1) 设置根目录的路径
根目录是指Apache存放配置文件和日志文件的目录,配置参数为ServerRoot,默认位于“/usr/local/apache”。命令如下:
2) 设置监听IP地址及端口号
默认侦听本机所有IP地址的TCP80端口,命令如下:
Listen 80
用户也可以按自己的需求,使用多个Listen语句在多个地址和端口上侦听客户端请求。比如:
Listen 192.168.99.9:80
Linsten 172.16.0.20:8080
3) 设置系统管理员E-mail
使用ServerAdmin参数设置管理员E-mail,比如管理员的Email地址为root@guoxuemin.cn:
4) 设置服务器主机的名称
参数ServerName用来设置服务器的主机名称,如果没有域名则填入服务器的IP地址,比如服务器的IP地址为192.168.99.9:
5) 设置主目录的路径
用户可以使用参数DocumentRoot配置服务器主目录默认路径,比如,主目录路径为:
6) 设置默认文件
Apache的默认文件名为index.html,可以使用Directory Index参数来配置,比如,将index.php设置为默认文件名:
7)测试:
打开浏览器,输入地址:http://192.168.99.9,可以打开站点了:
2. 配置目录权限
使用<Directory 目录路径>和</Directory>设置目录的权限。比如:
<Directory  “/var/www/icons”>
Options  Indexes  MultiViews
AllowOverride  None
Order  allow,deny
Allow  from  all
</Directory>
说明:
1)定义目录特性选项Options
可选参数:
Indexes:该特性表明目录允许“目录浏览”;
MultiViews:该特性表明目录允许内容协商的多重试图;
All:包含了除MultiViews外的所有特性;
ExecCGI:该特性表明允许在该目录下执行CGI脚本;
FollowSymLinks:该特性表明允许在该目录下使用符号连接。
2).htaccess文件
可以通过.htaccess文件(访问控制文件)设置目录的权限。
AccessFileName  .htaccess
配置参数AllowOverride指定目录的.htaccess文件中指令的类型,包括All、None与Options、FileInfo、AuthConfig、Limit的任意组合。一般将AllowOverride设置为“None”,禁止使用.htaccess文件,当AllowOverride参数为All时,.htaccess文件可以覆盖任何以前的配置。
3)设置访问控制
使用Order选项来定义访问权限。
比如以下语句表明允许所有客户机的访问:
Order  allow,deny
Allow  from  all
以下语句表明只允许网段192.168.99.0/24的客户机访问,但IP地址为192.168.99.254这个客户机除外:
Order  allow,deny
Allow from  192.168.99.0/24
Deny from  192.168.99.254
用户可以根据需要,按上述方法配置自己的目录权限。
3. 创建虚拟目录
使用Alias选项创建虚拟目录,比如,建立“/icons/”这个虚拟目录,其对应的物理路径为“/var/www/icons/”:
Alias  /icons/  “/var/www/icons/”
4. 用户认证
比如,有一个名为myweb的虚拟目录,其对应的物理路径是“/usr/local/myweb”,现对其启用用户认证功能,只允许用户Tonyguo和Wayne访问。
1)建立虚拟目录并设置用户认证:
2) 建立口令文件并为用户设置口令
-c选项表示无论口令文件是否已经存在,都会重新写入文件并删除原内容。所以第二个用户wayne不需要使用-c选项。
3)测试
在浏览器中输入:http://192.168.99.9/myweb,可以看到如下对话框:
输入用户名和密码后就可以访问网站了:
三、配置虚拟主机
1. 配置基于IP的虚拟主机
1)IP地址相同,但端口号不同的虚拟主机配置
比如使用192.168.99.9的两个不同端口80和8080发布两个不同站点, 虚拟主机分别对应的目录为/usr/local/apache/htdocs/web1和/usr/local/apache/htdocs/web2:
Listen 80
Listen 8080
<VirtualHost  192.168.99.9:80>
  ServerSignature  email
  DocumentRoot  /usr/local/apache/htdocs/web1
  DirectoryIndex  index.html  index.htm
  LogLevel  warm
  HostNameLookups  off
</VirtualHost>
<VirtualHost  192.168.99.9:8080>
  ServerSignature  email
  DocumentRoot  /usr/local/apache/htdocs/web2
  DirectoryIndex  index.html  index.htm
  LogLevel  warm
  HostNameLookups  off
</VirtualHost>
2)配置基于域名的虚拟主机
比如服务器有两个IP地址192.168.99.9和192.168.99.10,使用这两个IP创建两台虚拟主机,虚拟主机分别对应的目录为/usr/local/apache/htdocs/web1和/usr/local/apache/htdocs/web2。设置方法如下:
<VirtualHost  192.168.99.9>
  ServerName  192.168.99.9:80
  DocumentRoot  /usr/local/apache/htdocs/web1
  DirectoryIndex  index.html  index.htm
</VirtualHost>
<VirtualHost  192.168.99.10>
  ServerName  192.168.99.10:80
  DocumentRoot  /usr/local/apache/htdocs/web2
  DirectoryIndex  index.html  index.htm
</VirtualHost>
2. 配置基于域名的虚拟主机
比如有两个域名guoxuemin.cn和tonyguo.com需要使用同一台服务器192.168.99.9,那么可以这样配置:
NameVirtualHost  192.168.99.9
<VirtualHost  www.guoxuemin.cn>
  ServerName  www.guoxuemin.cn:80
  ServerAdmin  admin@guoxuemin.cn
  DocumentRoot  /usr/local/apache/htdocs/web1
  DirectoryIndex  index.html  index.htm
  ErrorLog  logs/web1/error_log
  Customlog  logs/web1/access_log  combined
</VirtualHost>
<VirtualHost  www.tonyguo.com>
  ServerName   www.tonyguo.com:80
  ServerAdmin  admin@tonyguo.com
DocumentRoot  /usr/local/apache/htdocs/web2
  DirectoryIndex  index.html  index.htm
  ErrorLog  logs/web1/error_log
  Customlog  logs/web1/access_log  combined
</VirtualHost>
复制代码

二、安装mysql数据库

三种安装方式:

  1. 从网上安装 sudo apt-get install mysql-server。装完已经自动配置好环境变量,可以直接使用mysql的命令。

    注:建议将/etc/apt/source.list中的cn改成us,美国的服务器比中国的快很多。

    ubuntu上安装mysql非常简单只需要几条命令就可以完成。

    
1. sudo apt-get install mysql-server
 
2. apt-get isntall mysql-client
 
3.  sudo apt-get install libmysqlclient-dev
 

 

  安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功:
 
  sudo netstat -tap | grep mysql
 
  通过上述命令检查之后,如果看到有mysql 的socket处于 listen 状态则表示安装成功。
 
  登陆mysql数据库可以通过如下命令:
 

  mysql -u root -p

  2. 安装离线包,以mysql-5.0.45-linux-i686-icc-glibc23.tar.gz为例。

  3. 二进制包安装:安装完成已经自动配置好环境变量,可以直接使用mysql命令

网上安装和二进制包安装比较简单,重点说安装离线包。

  1. groupadd mysql

  2. mkdir /home/mysql

  3. useradd -g mysql -d /home/mysql mysql

  4. copy mysql-5.0.45-linux-i686-icc-glibc23.tar.gz到/usr/local目录

  5. 解压:tar zxvf mysql-5.0.45-linux-i686-icc-glibc23.tar.gz

  6. ln -s mysql-5.0.45-linux-i686-icc-glibc23 mysql

  7. cd /usr/local/mysql

  8. chown -R mysql .

  9. chgrp -R mysql .

  10. scripts/mysql_install_db --user=mysql (一定要在mysql目录下执行,注意输出的文字,里边有修改root密码和启动mysql的命令)

  11. 为root设置密码: ./bin/mysqladmin -u root password 'passw0rd'

 

配置和管理msyql:

  1. 修改mysql最大连接数:cp support-files/my-medium.cnf ./my.cnf,vim my.cnf,增加或修改max_connections=1024

  关于my.cnf:mysql按照下列顺序搜索my.cnf:/etc,mysql安装目录,安装目录下的data。/etc下的是全局设置。

  2. 启动mysql:/usr/local/mysql/bin/mysqld_safe --user=mysql &

    查看mysql版本:mysqladmin -u root -p version

    注:网上安装或者二进制安装的可以直接使用如下命令启动和停止mysql: /etc/init.d/mysql start|stop|restart

  3. 停止mysql:mysqladmin -uroot -ppassw0rd shutdown 注意,u,p后没有空格

  4. 设置mysql自启动:把启动命令加入/etc/rc.local文件中

  5. 允许root远程登陆:

    1)本机登陆mysql:mysql -u root -p (-p一定要有);改变数据库:use mysql;

    2)从所有主机:grant all privileges on *.* to root@"%" identified by "passw0rd" with grant option;

    3)从指定主机:grant all privileges on *.* to root@"192.168.11.205" identified by "passw0rd" with grant option; flush privileges;

    4)  进mysql库查看host为%的数据是否添加:use mysql; select * from user;

  6. 创建数据库,创建user:

    1)  建库:create database test1;

    2)  建用户,赋权:grant all privileges on test1.* to user_test@"%" identified by "passw0rd" with grant option;

    3)删除数据库:drop database test1;

  7. 删除权限:

    1) revoke all privileges on test1.* from test1@"%";

    2) use mysql;

    3) delete from user where user="root" and host="%";

    4) flush privileges;

  8. 显示所有的数据库:show databases; 显示库中所有的表:show tables;

  9. 远程登录mysql:mysql -h ip -u user -p

  10. 设置字符集(以utf8为例):

    1) 查看当前的编码:show variables like 'character%';

      或者:

      mysql> show variables like 'collation_%';

      mysql> show variables like 'character_set_%';

    2) 修改my.cnf,在[client]下添加default-character-set=utf8

    3) 在[mysqld]下添加default-character-set=utf8,init_connect='SET NAMES utf8'

    4) 重启mysql。

      sudo service mysql restart

    注:只有修改/etc下的my.cnf才能使client的设置起效,安装目录下的设置只能使server的设置有效。

      二进制安装的修改/etc/mysql/my.cnf即可

   11. 旧数据升级到utf8(旧数据以latin1为例):

    1) 导出旧数据:mysqldump --default-character-set=latin1 -hlocalhost -uroot -B dbname --tables old_table >old.sql

    2) 转换编码(Linux和UNIX):iconv -t utf-8 -f gb2312 -c old.sql > new.sql

      这里假定原表的数据为gb2312,也可以去掉-f,让iconv自动判断原来的字符集。

    3) 导入:修改new.sql,在插入或修改语句前加一句话:"SET NAMES utf8;",并修改所有的gb2312为utf8,保存。

      mysql -hlocalhost -uroot -p dbname < new.sql

      如果报max_allowed_packet的错误,是因为文件太大,mysql默认的这个参数是1M,修改my.cnf中的值即可(需要重启mysql)。

  12. 支持utf8的客户端:Mysql-Front,Navicat,PhpMyAdmin,Linux Shell(连接后执行SET NAMES utf8;后就可以读写utf8的数据了。10.4设置完毕后就不用再执行这句话了)

  13. 备份和恢复

    备份单个数据库:mysqldump -uroot -p -B dbname > dbname.sql

    备份全部数据库:mysqldump -uroot -p --all-databases > all.sql

    备份表: mysqldump -uroot -p -B dbname --table tablename > tablename.sql

    恢复数据库:mysql -uroot -p < name.sql

    恢复表:mysql -uroot -p dbname < name.sql (必须指定数据库) 

  14. 复制

    Mysql支持单向的异步复制,即一个服务器做主服务器,其他的一个或多个服务器做从服务器。复制是通过二进制日志实现的,主服务器写入,从服务器读取。可以实现多个主    服务器,但是会碰到单个服务器不曾遇到的问题(不推荐)。

    1). 在主服务器上建立一个专门用来做复制的用户:grant replication slave on *.* to 'replicationuser'@'192.168.0.87' identified by 'iverson';

    2). 刷新主服务器上所有的表和块写入语句:flush tables with read lock; 然后读取主服务器上的二进制二进制文件名和分支:SHOW MASTER STATUS;将File和Position的值记录下来。记录后关闭主服务器:mysqladmin -uroot -ppassw0rd shutdown

      如果输出为空,说明服务器没有启用二进制日志,在my.cnf文件中[mysqld]下添加log-bin=mysql-bin,重启后即有。

    3). 为主服务器建立快照(snapshot)

      需要为主服务器上的需要复制的数据库建立快照,Windows可以使用zip格式,Linux和Unix最好使用tar命令。然后上传到从服务器mysql的数据目录,并解压。

      cd mysql-data-dir

      tar cvzf mysql-snapshot.tar ./mydb

      注意:快照中不应该包含任何日志文件或*.info文件,只应该包含要复制的数据库的数据文件(*.frm和*.opt)文件。

      可以用数据库备份(mysqldump)为从服务器做一次数据恢复,保证数据的一致性。

    4). 确认主服务器上my.cnf文件的[mysqld]section包含log-bin选项和server-id,并启动主服务器:

      [mysqld]

      log-bin=mysql-bin

      server-id=1

    5). 停止从服务器,加入server-id,然后启动从服务器:

      [mysqld]

      server-id=2

      注:这里的server-id是从服务器的id,必须与主服务器和其他从服务器不一样。

      可以在从服务器的配置文件中加入read-only选项,这样从服务器就只接受来自主服务器的SQL,确保数据不会被其他途经修改。

    6). 在从服务器上执行如下语句,用系统真实值代替选项:

      change master to MASTER_HOST='master_host', MASTER_USER='replication_user',MASTER_PASSWORD='replication_pwd',

        MASTER_LOG_FILE='recorded_log_file_name',MASTER_LOG_POS=log_position;

    7). 启动从线程:mysql> START SLAVE; 停止从线程:stop slave;(注意:主服务器的防火墙应该允许3306端口连接)

    验证:此时主服务器和从服务器上的数据应该是一致的,在主服务器上插入修改删除数据都会更新到从服务器上,建表,删表等也是一样的。

以下是几个有用的连接:

http://publish.it168.com/2006/0203/20060203001301.shtml?cChanNel=11&cpositioncode=296&hezuo=107

扩展阅读

posted on 2015-03-28 09:34  匆匆那些年  阅读(190)  评论(0)    收藏  举报

导航