基于fastcgi分离和LAMP虚拟主机部署wordpress和DiscuzX

背景

虚拟主机

  如今服务器的配置提升明显,单一主机上部署单一网站会对主机造成大量的性能损失,因此web服务虚拟主机的技术应运而生。所谓虚拟主机指的是在一台机器上运行多个网站(如company1.example.com和company2.example.com)的做法 。虚拟主机可以是“ 基于IP的 ”,这意味着每个网站都有不同的IP地址,或者“ 基于名称 ”,这意味着每个IP地址上都有多个名称,或者“基于端口”,这意味着在同一ip的不同端口上提供不同的网站,通过这些方法使得他们在同一台物理服务器上运行的事实对最终用户来说并不明显。
  Apache是第一批支持基于IP的虚拟主机的服务器之一。Apache的版本1.1及更高版本支持基于IP和基于名称的虚拟主机(虚拟主机)。虚拟主机的后一种变型有时也被称为基于主机的或非IP虚拟主机。
  

fastcgi

  FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
  
  

部署流程

  

部署架构

  

环境

  
3台主机用于分别部署httpd,php和mysql,实现分离
软件版本

未分类
  

架构图

未分类

编译软件


这里我们需要编译的软件为httpd和php,mysql可以考虑使用二进制包或者直接官方yum安装
  

安装开发环境和必要的包

1.安装centos开发工具包

yum groupinstall "development tools" -y

2.安装编译httpd和php需要的包

#部分包需要epel源 
#yum install epel-release -y
yum install pcre-devel openssl-devel expat-devel libxml2-devel bzip2-devel libmcrypt-devel -y

编译httpd

这里在192.168.99.130机器上编译httpd2.4

1.创建apache用户

useradd -r apache -s /sbin/nologin

2.解压httpd,apr,apr-util源码包,这里需要的包均可在httpd官网下到

tar xvf httpd-2.4.33.tar.bz2
tar xvf apr-1.6.2.tar.gz
tar xvf apr-util-1.6.1.tar.gz

3.编译httpd

#移动解压的apr和apr-util到指定的httpd源码目录可以省去分别编译3个程序
 mv apr-1.6.2 httpd-2.4.33/srclib/apr
 mv apr-util-1.6.1 httpd-2.4.33/srclib/apr-util

#编译参数,具体含义可以参考./configure的帮助文档或者官方文档
./configure 
--prefix=/app/httpd24 
--enable-so 
--enable-ssl 
--enable-cgi 
--enable-rewrite 
--with-zlib 
--with-pcre 
--with-included-apr 
--enable-modules=most 
--enable-mpms-shared=all 
--with-mpm=prefork

make && make install

4.配置环境变量

vim /etc/profile.d/httpd.sh

PATH=/app/httpd24/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

source /etc/profile.d/httpd.sh

编译php

由于这里为了实现多机分离,因此在192.168.99.131主机上进行编译

1.解压PHP源码

tar xvf php-7.1.18.tar.bz2

2.进入目录

#编译参数
./configure 
--prefix=/app/php 
--enable-mysqlnd 
--with-mysqli=mysqlnd 
--with-openssl 
--with-pdo-mysql=mysqlnd 
--enable-mbstring 
--with-freetype-dir 
--with-jpeg-dir 
--with-png-dir 
--with-zlib 
--with-libxml-dir=/usr 
--enable-xml 
--enable-sockets 
--enable-fpm 
--with-config-file-path=/etc 
--with-config-file-scan-dir=/etc/php.d 
--enable-maintainer-zts 
--disable-fileinfo

make && make install

3.配置文件设置

cd php-7.1.18/
cp php.ini-production /etc/php.ini
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
#给予执行权限
chmod +x /etc/init.d/php-fpm
#添加到服务中
chkconfig --add php-fpm
#设置开机启动
chkconfig php-fpm on

cd /app/php/etc
cp php-fpm.conf.default php-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf
service php-fpm start

安装mariadb

  
这里不再多谈maraidb安装,之前的博客有很详细的mariadb部署细节。这里推荐直接yum安装就好。
  
  

配置文件修改

修改httpd主机

  

1.支持代理模块

vim /app/httpd24/conf/httpd.conf

#取消下面两行的注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

#修改下面行
<IfModule dir_module>
DirectoryIndex index.php index.html

2.编辑虚拟主机配置

<VirtualHost *:80>
  DocumentRoot "/data/web1/wp"
  ServerName www.douma.com
  ErrorLog "logs/a.com.error_log"
  TransferLog "logs/a.com-access_log"
  AddType application/x-httpd-php .php
  AddType application/x-httpd-php-source .phps
  ProxyRequests Off
  ProxyPassMatch ^/(.*.php)$ fcgi://192.168.99.131:9000/app/web1/wp/$1
<directory "/data/web1/wp">
require all granted
</directory>
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot "/data/web2/dz"
  ServerName www.fansity.com
  ErrorLog "logs/b.com.error_log"
  TransferLog "logs/b.com-access_log"
<directory "/data/web2/dz">
require all granted
</directory>
  AddType application/x-httpd-php .php
  AddType application/x-httpd-php-source .phps
  ProxyRequests Off
  ProxyPassMatch ^/(.*.php)$ fcgi://192.168.99.131:9000/app/web2/dz/$1
</VirtualHost>

3.创建站点目录

# httpd主机
 mkdir -pv /data/web{1,2}
#wordpress
 tar xvf wordpress-4.9.4-zh_CN.tar.gz
 mv wordpress web1/
 cd web1
 ln -sv wordpress wp
 #修改配置文件
 vim web1/wp/wp-config-sample.php
 mv wp-config-sample.php wp-config.php

未分类

wordpress基本配置完成,之后复制到fast-cgi机器的对应目录(要先在对应主机创建好目录)

scp -pr wordpress 192.168.99.131:/app/web1/

安装Discuzx

cd /data/web2/
git clone https://gitee.com/ComsenzDiscuz/DiscuzX.git
cp -a DiscuzX/upload web2/
ln -sv upload dz

复制文件到fast-cgi主机(要在另一台主机创建好对应目录)

scp -pr upload 192.168.99.131:/app/web2/

4.启动httpd服务

apachectl start

修改fast-cgi主机

  
1.站点目录修改

#创建对应目录,要在httpd主机复制文件到fast-cgi之前
mkdir -pv /app/web{1,2}

#创建软连接
cd /app/web1
ln -sv wordpress wp

#复制配置文件并且修改
mv wordpress/wp-config-simple.php  wordpress/wp-config.php 
vim  wordpress/wp-config.php 

cd /app/web2
ln -sv upload dz

未分类

2.php修改,并添加apache用户

useradd -r apache -s /sbin/nologin
vim /app/php/etc/php-fpm.d/www.conf

#修改运行用户为apache
#修改监听ip
#注释掉仅仅允许本机访问

#重新启动php-fpm
service php-fpm restart

#由于论坛安装时候会修改文件所以要给upload目录添加apache的权限

setfacl -R -m u:apache:rwx /app/web2/upload/

未分类

未分类

配置mysql

  
1.创建账号

MariaDB [(none)]> grant all on *.* to admin identified by 'admin';
#刷新权限
MariaDB [(none)]> flush privileges;

2.创建wp数据库,论坛会在安装时候自动创建

MariaDB [(none)]> create database wp;

宿主机的hosts文件修改

  
由于是基于域名的虚拟主机,所以在没有DNS的情况下,要想正常访问,就要在宿主机上修稿hosts文件

#win
C:WindowsSystem32driversetchosts
#linux
/etc/hosts

#添加如下信息
192.168.99.130  www.douma.com
192.168.99.130  www.fansity.com

安装wordpress和Discuzx

  
1.安装wordpress
在宿主机浏览器上打开www.douma.com
会自动跳转到安装页面
配置好对应信息点击安装wordpress

未分类

未分类

未分类

2.安装Discuzx
在宿主机浏览器上打开www.fansity.com
自动跳转到安装页面

未分类

点击同意

未分类

点击下一步

未分类

继续下一步

未分类

填写完成后点击下一步进行自动安装

未分类

安装完成

未分类

点击右下角的跳转到论坛

未分类

正常访问,这里论坛基本配置完成。

CentOS 7搭建LAMP (非一键安装)

因为工作原因需要搭建一个zabbix服务器用来做监控,而zabbix是需要lamp或lnmp环境的。
现在网上一键搞定lamp/lnmp的教程很多,用起来也真的很方便,但是对于初学linux的人(比如说我)就有点儿云里雾里,不知道究竟做了什么?有点儿像windows下你安装一个软件只需要下一步下一步就可以了。
虽然便捷,但不适合新手去操作,一步一步的安装并成功才是真的有成就感,这也是学习的原动力。
废话不多说,网上各种各样的资料也很齐全,只把自己验证过的步骤写出来,能帮到大家最好,也可以给自己写下一备忘文档。

LAMP顾名思义就是Linux Apache Mysql PHP的缩写。
英文版原帖在此:https://www.howtoforge.com/apache_php_mysql_on_centos_7_lamp
有兴趣的朋友可以去看一下。

环境:CentOS 7

未分类

废话不多说,开干!

一、安装CentOS7, 少侠先把你的Linux装起来,LAMP的第一步。

(本次安装都在root权限下进行!!!)

二、安装Apache

1、yum的方式安装:

#yum -y install httpd

2、开启Apache服务:

#systemctl start httpd.service

3、设置Apache服务开机启动

#systemctl enable httpd.service

4、验证Apache服务是否安装成功。
在本机浏览器中输入地址IP地址,ip地址的查看方式

#ifconfig

如果你是用ssh的方式连接你的linux,而服务器在同一个局域网的情况下无法访问,那么请把CentOS的Firewall关闭或打开80和443端口。

#firewall-cmd --permanent --zone=public --add-service=http
#firewall-cmd --permanent --zone=public --add-service=https
#firewall-cmd --reload

此时Apache应该已经可以访问了,如果看到Apache默认页面 有Testing123….字样的话就是安装成功了。

未分类

三、安装PHP

1、安装

#yum -y install php

2、重启Apache服务

#systemctl restart httpd

然后写一个php文件在浏览器中运行一下

#vi /var/www/html/info.php

这是一个新建的php文件,按“i“ 插入以下内容

<?php phpinfo(); ?>

按ECS

:wq

保存退出
然后,在自己电脑浏览器中输入192.168.2.112/info.php
运行后会出现php的一些信息。

未分类

四、安装MySQL

MySQL在CentOS 7里是Mariadb。

1、安装

#yum -y install mariadb*

(这里我看到的教程是不加*的,所以导致我卡在这里卡了好久,有一些相关的东西没有安装上,我在后面的步骤中无法进行下去,后来排错半天加上星号之后问题解决。)

2、开启MySQL服务并设置开机启动

#systemctl start mariadb.service
#systemctl enable mariadb.service

未分类

3、设置root账户的密码

#mysql_secure_installation

这里会跳出一段英文,英文好的同学可以仔细的阅读以下,如果懒得读久在提示出来后按Enter就好了,设置密码时输入自己想设置的密码就可以,然后继续再让你选择y/n时,Enter就好。

未分类

当一切结束的时候,输入#mysql -uroot -p的方式验证一下。

未分类

未分类

五、将PHP和MySQL关联起来

#yum search php

未分类

选择你需要的安装:

#yum -y install php-mysql

未分类

六、安装常用的PHP模块。

包括GD库,Curl,mbstring等等…..

#yum -y install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

然后重启Apach服务

#systemctl restart httpd.service

然后,再次再浏览器中运行info.php。你会看到安装的模块的信息,这就表示你的LAMP就搭建好了。

未分类

至此,完毕。

Ubuntu 17.10 用 apt 搭建 lamp 环境、安装 phpmyadmin、redis 服务+扩展、mysql 扩展、开启错误提示、配置虚拟主机

一、最终环境

Ubuntu17.10、Apache2.4.27、MySQL5.7.20、PHP7.1.8

二、安装 apache

官方源有,直接安装:

sudo apt-get install apache2

三、安装 mysql

官方源有,直接安装:

sudo apt-get install mysql-server

安装期间会提示设置 MySQL administrator 的密码

============================================

PS:需要什么软件或包,直接用 apt-cache 搜索

apt-cache search <关键词>

确认包名后,直接用 apt-get install 安装。

四、安装 php

官方源有 php7.1,直接安装:

sudo apt-get install php7.1 php7.1-dev

注意带上版本号,不然默认安装 7.x。php7.1 是主程序,php7.1-dev 是 7.1 版的开发包(有 phpize、php-config 等等,phpize 可以为 已编译好的 php 加载外挂模块,php-config 可以获得 php 的详细配置)。

============================================

如果要装 php5.6 的话,推荐这个 PPA 源:ppa:ondrej/php。这个源有 php5.6 和 php7.x 以及绝大多数的 php 扩展,包括 redis、memcache、mongodb 等等。

添加 ppa:ondrej/php 源:

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

安装 php5.6:

sudo apt-get install php5.6 php5.6-dev

五、重启 apache

sudo /etc/init.d/apache2 restart

更多选项:

Usage: apache2 {start|stop|graceful-stop|restart|reload|force-reload}

六、检查 apache

访问 http://localhost/。这是 apache 服务器的默认页在 /var/www/html 下,里面还介绍了 apche 的相关配置文件。

未分类

七、检查 mysql

终端输入 mysql,跟着打两个 Tab,看到所有有关 mysql 的命令包:

mingc@mingc-GE60-2PL:~$ mysql
mysql                      mysql_install_db
mysqladmin                 mysqloptimize
mysqlanalyze               mysql_plugin
mysqlbinlog                mysqlpump
mysqlcheck                 mysqlrepair
mysql_config_editor        mysqlreport
mysqld                     mysql_secure_installation
mysqld_multi               mysqlshow
mysqld_safe                mysqlslap
mysqldump                  mysql_ssl_rsa_setup
mysqldumpslow              mysql_tzinfo_to_sql
mysql_embedded             mysql_upgrade
mysqlimport               

输入 mysql -u<你的账号> -p ,回车,输入密码,进入 mysql:

mingc@mingc-GE60-2PL:~$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 73
Server version: 5.7.20-0ubuntu0.17.10.1 (Ubuntu)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql>

八、检查 php

php -v

不出意外的话,应该显示 php 的版本

============================================

也可以查看 apache 和 mysql 版本:

apache2 -v
mysql -V

九、创建 php 探针

sudo vim /var/www/html/info.php

添加如下内容:

<?php
phpinfo();

改变所有者:

sudo chown www-data:www-data /var/www/html/info.php

访问 http://localhost/info.php,得到有关 PHP 的详细页面。

未分类

十、安装 phpmyadmin

sudo apt-get install phpmyadmin

安装期间,

询问要连接的服务器,选择 apache2;

询问创建 phpmyadmin 的数据库,选择“是”;

询问设置登录 phpmyadmin 的用户和密码。

然后浏览器访问:http://localhost/phpmyadmin

未分类

十一、安装 redis 服务和 redis 扩展

官方源有,直接安装:

(1)redis 服务器

sudo apt-get install redis-server

期间,一些需要的工具包也会自动安装。安装好后,默认自启动、后台运行,配置文件在 /etc/redis 目录下。

(2)php 的 redis 扩展模块

sudo apt-get install php-redis

其他的扩展也可以这么装,利用 apt-cache search 搜索包名,再用 apt-get install 安装。

重启 apche, sudo /etc/init.d/apache2 restart

访问 http://localhost/info.php,确认 redis 扩展:

未分类

测试一下:

终端输入 redis-,跟着打两个 Tab 键,看到有关 redis 的命令和工具:

mingc@mingc-GE60-2PL:~$ redis-
redis-benchmark  redis-check-rdb  redis-server    
redis-check-aof  redis-cli

redis-cli 是 访问 redis-server 的客户端接口,执行 redis-cli 即可登录到 redis 服务器:

mingc@mingc-GE60-2PL:~$ redis-cli
127.0.0.1:6379>

更多 redis-cli 的命令选项,使用 redis-cli –help 查看。

再写一段 php 脚本测试一下, vim /var/www/html/test_redis.php

内容如下:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
echo "Server is running: " . $redis->ping(); 

十二、安装 mysql 扩展

在上面的 http://localhost/info.php 里可以看到,没有 mysql 扩展。虽说 php7 弃用了 mysql 扩展,但有些旧项目还是需要的。装一下 mysql 扩展。

这里选择编译安装(通过 apt 安装的 php-mysql 扩展,如果是 php7.x,那就是装 pdo 和 pdo_mysql 扩展)

(1)直接从 PECL 官方站 搜索 mysql,找到 MySQL 扩展的 页面 ,点击页面的 [ Browse Source ],选择最新的 commit、下载 tar.gz 包。我下载后的包名为 mysql-fae9884.tar.gz。

(2)编译安装:

tar -xf mysql-fae9884.tar.gz
cd mysql-fae9884
phpize
./configure --with-php-config=/usr/bin/php-config
sudo make && sudo make install

前面装 php7.1 的时候,也装了 php7.1-dev,这里面就有 phpize 和 php-config。而 –with-php-config 是 php-config 程序(命令)的位置,可以使用 whereis php-config 查看。

编译安装成功后,会有成功提示 和 mysql 扩展模块(.so 文件)的路径:

Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /usr/lib/php/20160303/  

然后,编辑 php 用于 apache 的配置文件 /etc/php/7.1/apache2/php.ini,在最后添加一行:

extension=mysql.so

重启 apache, sudo /etc/init.d/apache2 restart

访问 http://localhost/info.php,确认下有了 mysql 扩展。

未分类

写一段 php 脚本测试: vim /etc/www/html/test_mysql.php

内容如下:

<?php
$mysql = mysql_connect('127.0.0.1', 'root', 'root');
if(!$mysql) {
    die(mysql_error($mysql));
}
echo 'Ok' . "rn";

由于 mysql 模块是手动编译安装的,所以默认不会进入 php 的命令行配置。

下面把 mysql 模块加入到 php 的 cli(命令行) 配置,让 php 的命令行模式也支持 mysql 模块:

sudo vim /etc/php/7.1/mods-available/mysql.ini

编辑内容如下:

extension=mysql.so

建立符号链接:

sudo ln -s /etc/php/7.1/mods-available/mysql.ini /etc/php/7.1/cli/conf.d/mysql.ini

检查一下,确认 php 命令行模式启用了 mysql 扩展模块:

php -m | grep mysql  

十三、开启 php 和 apache 的错误提示

默认不显示 php 错误,下面开启。

(1)修改 php 的配置文件,在 /etc/php/7.1/apache2 下,打开 php.ini。

(2)搜索 display_errors = Off,修改为 On

(3)搜索 error_reporting = E_ALL & ~E_NOTICE,修改为 E_ALL | E_STRICT(搜不到的话就搜短一点:“error_reporting =”)。

(4)修改 apache 的配置文件,在 /etc/apache2 下,打开 apache.conf。

(5)文件最后添加两行:

php_flag display_errors        on
php_value error_reporting       2039

(6)重启 apache:

sudo /etc/init.d/apache2 restart

十四、创建虚拟主机

创建虚拟主机自然用 apache 配置,了解一下 apache 的配置目录:

/etc/apache2
├── apache2.conf      # 主配置文件,其他的一些配置文件通过 Include 指令包含进来
├── conf-available    # 所有可用的配置文件(里面的 *.conf 文件内容几乎都被默认注释了)
├── conf-enabled      # 可用的配置文件中,启用了哪些,一般都是符号链接、指向上面的 conf-available 目录里每个 *.conf 文件
├── envvars           # 环境变量
├── magic
├── mods-available    # 所有可用的模块
├── mods-enabled      # 哪些模块被启用了
├── ports.conf        # 定义端口监听
├── sites-available   # 重点来了:所有可用的站点
└── sites-enabled     # 哪些站点被启用了

步骤简单,就是在 sites-available 目录定义站点配置文件,然后在 sites-enabled 里建立指向这个配置文件的符号链接。

(1)建配置

cd /etc/apache2/sites-available/
sudo cp 000-default.conf my.site.conf
vim my.site.conf

修改如下(注意别把注释与指令行放在一行,不然会有语法错误;精简版在后面):

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.

    # 域名
    ServerName my.site
    # 域名别名,可以设置多个,空格隔开
    ServerAlias my.site

    ServerAdmin webmaster@localhost

    # 站点根目录
    DocumentRoot /var/www/my.site
    <Directory "/var/www/my.site/">
        # 启用符号链接
        Options FollowSymLinks

        DirectoryIndex index.php index.html index.htm

        # 注意这个配置,会影响本地目录下的 .htaccess 的启用
        AllowOverride All

        Order deny,allow
        Allow from All

        # 限制访问目录,多个目录用冒号隔开
        # php_admin_value open_basedir "/var/www/my.site/:/tmp:/usr/lib/php/"
    </Directory>

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

精简版(去掉了多余注释):

<VirtualHost *:80>
    ServerName my.site
    ServerAlias my.site
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/my.site
    <Directory "/var/www/my.site/">
        Options FollowSymLinks
        DirectoryIndex index.php index.html index.htm
        AllowOverride All
        Order deny,allow
        Allow from All
        # php_admin_value open_basedir "/var/www/my.site/:/tmp:/usr/lib/php/"
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

(2)建符号链接

sudo ln -s /etc/apache2/sites-available/my.site.conf /etc/apache2/sites-enabled/my.site.conf

(3)检查语法

终端执行:

apachectl configtest

(4)添加 hosts 解析

vim /etc/hosts ,添加一行:

127.0.0.1   my.site

(5)重启 apache

sudo /etc/init.d/apache2 restart

然后,按照配置的站点目录 /etc/www/my.site,创建目录和测试文件:

sudo makedir -p /etc/www/my.site
cd /etc/www/my.site/
sudo echo "<h2>Welcome to my.site!</h2>" > index.html

浏览器访问 http://my.site,

未分类

OK,完成~~

十五、相关链接

PHP 及扩展的 PPA 源:https://launchpad.net/~ondrej/+archive/ubuntu/php/+index?batch=75&memo=75&start=75

LINUX搭建LAMP(APACHE+PHP+MYSQL环境)CENTOS7.2版

我们更多的网站服务器是选择了Linux系统,这里建议你选择centos,这也是阿里云ecs推荐的系统,在服务器上比较推荐centos,特别对于新手,首选CentOS,并不是centos比Debian和ubuntu好,而是centos是初学者安装vps的首选,它既稳定,占用资源又少此版本生命周期较长,而且网上有关centos的教程很多,方便学习,我们这里选择了Centos7.2,采用yum在线安装。

一、 检查系统环境

1、确认centos版本

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

2、检查是否安装过apache

rpm -qa | grep httpd

或者:

apachectl -v

或者:

httpd -v

3、检查是否安装过Mysql

service mysqld start

如果未被识别则没有安装
如果系统安装过,或者安装失败,清理一下系统

4、清理Mysql痕迹

yum remove mysql
rm -f /etc/my.cnf

5、卸载Apache包

rpm -qa|grep httpd

注意:如果是新的系统或者你从来没有尝试安装过,则以上步骤省略。

二、安装APACHE、PHP、MYSQL

1、安装apache

[root@localhost ~]# yum -y install httpd

直到返回

......
Installed:
  httpd.x86_64 0:2.4.6-40.el7.centos.4                                          

Dependency Installed:
  apr.x86_64 0:1.4.8-3.el7                      apr-util.x86_64 0:1.5.2-6.el7   
  httpd-tools.x86_64 0:2.4.6-40.el7.centos.4    mailcap.noarch 0:2.1.41-2.el7   

Complete!

表示安装成功!

2、安装Php

[root@localhost ~]# yum -y install php

直到返回:

......
Installed:
  php.x86_64 0:5.4.16-36.3.el7_2                                                

Dependency Installed:
  libzip.x86_64 0:0.10.1-8.el7             php-cli.x86_64 0:5.4.16-36.3.el7_2   
  php-common.x86_64 0:5.4.16-36.3.el7_2   

Complete!

3、安装php-fpm

[root@localhost ~]# yum -y install php-fpm

直到返回:

Installed:
  php-fpm.x86_64 0:5.4.16-36.3.el7_2                                            

Complete!

4、安装Mysql

[root@localhost ~]# yum -y install mysql

直到返回:

Installed:
  mariadb.x86_64 1:5.5.50-1.el7_2                                               

Dependency Updated:
  mariadb-libs.x86_64 1:5.5.50-1.el7_2                                          

Complete!

7.2版本的Centos已经把mysql更名为mariadb,表示安装成功!

5、安装 mysql-server

[root@localhost ~]# yum -y install mysql-server
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirror.lzu.edu.cn
 * extras: mirrors.nwsuaf.edu.cn
 * updates: mirrors.tuna.tsinghua.edu.cn
No package mysql-server available.
Error: Nothing to do

返回错误!!!

分析解决方案

CentOS 7+ 版本将MySQL数据库软件从默认的程序列表中移除,用mariadb代替了,entos7配置教程上,大多都是安装mariadb,因为centos7默认将mariadb视作mysql。

因为mysql被oracle收购后,原作者担心mysql闭源,所以又写了一个mariadb,这个数据库可以理解为mysql的分支。如果需要安装mariadb,只需通过yum就可。

解决方案:

二是从官网下载mysql-server

wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

rpm -ivh mysql-community-release-el7-5.noarch.rpm

yum install mysql-community-server

然后需要确定,输入y回车即可

Install  3 Packages (+8 Dependent packages)

Total download size: 82 M
Is this ok [y/d/N]:

一直选择输入 y ,有两次选择,直到返回:

Replaced:
  mariadb.x86_64 1:5.5.50-1.el7_2      mariadb-libs.x86_64 1:5.5.50-1.el7_2     

Complete!

安装成功!!!

6、安装 php-mysql

[root@localhost ~]# yum -y install php-mysql

直到返回:

Installed:
  php-mysql.x86_64 0:5.4.16-36.3.el7_2                                          

Dependency Installed:
  php-pdo.x86_64 0:5.4.16-36.3.el7_2                                            

Complete!

安装成功!!!

三、安装基本常用扩展包

1、安装Apache扩展包

yum -y install httpd-manual mod_ssl mod_perl mod_auth_mysql

返回

......
Installed:
  httpd-manual.noarch 0:2.4.6-40.el7.centos.4                                   
  mod_ssl.x86_64 1:2.4.6-40.el7.centos.4                                        

Complete!

安装成功!!!

2、安装PHP扩展包

yum -y install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc php-devel

返回:

......
Dependency Updated:
  pcre.x86_64 0:8.32-15.el7_2.1                                                 

Complete!

安装成功!!!

3、安装Mysql扩展包

yum -y install mysql-connector-odbc mysql-devel libdbi-dbd-mysql

返回:

......
Dependency Installed:
  libdbi.x86_64 0:0.8.4-6.el7         libdbi-drivers.x86_64 0:0.8.3-16.el7     
  unixODBC.x86_64 0:2.3.1-11.el7     

Complete!

安装成功!!!

四、配置APACHE、MYSQL开机启动

重启Apache、mysql服务(注意这里和centos6有区别,Cenots7+不能使用6的方式)

systemctl start httpd.service #启动apache
systemctl stop httpd.service #停止apache
systemctl restart httpd.service #重启apache
systemctl enable httpd.service #设置apache开机启动

启对应服务

service mysqld restart

service php-fpm start

service httpd restart

五、配置MYSQL

初次安装mysql是没有密码的,我们要设置密码,mysql的默认账户为root

设置 MySQL 数据 root 账户的密码:

[root@localhost ~]# mysql_secure_installation

当出现如下提示时候直接按回车:

Enter current password for root

出现如下再次回车:

Set root password? [Y/n]

出现如下提示输入你需要设置的密码,这里输入了root,输入密码是不显示的,回车后再输入一次确认:

New password:

接下来还会有四个确认,分别是:

Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]

直接回车即可。

六、测试环境

1、我们在浏览器地址栏输入http://localhost/如下图,说明我们的apache测试成功

未分类

2、测试Php

进入apache的web根目录:/var/www/html 中写一个最简单的php测试页面

cd /var/www/html

touch phpinfo-test.php

vi phpinfo-test.php

进入到了控制模式之后按键盘字母 i 进入到编辑模式,将如下代码输入到文件中

<?php

echo "<title>Phpinfo Test.php</title>";

phpinfo()

?>

按 esc 退出编辑模式,回到控制模式,输入 :wq 然后回车,在浏览器中输入服地址http://localhost/phpinfo-test.php

出现下图则成功。

未分类

七、小结

1、我们采用了yum在线安装,版本都是默认的Php是5.4,apache的版本是Server version: Apache/2.4.6 (CentOS)

2、要想安装更高版本的php 阅读:centos7.2yum安装php70w.x86_64

3、以上教程亲测完成成功,极力推荐,如果你在调试过程中出现问题,留言讨论,如有错误,敬请指教。

nginx+lamp负载均衡实验

实验实现目的如下

  • 客户端通过外网地址访问 nginx 的 外网地址(假设的) 172.18.5.117

  • nginx 通过轮询的负载均衡设置分别调度到 apache服务器 192.168.5.109 和 192.168.5.111

  • php-fpm 服务器 192.168.5.113 上传 discuz源码文件到目录下, 用nfs共享此目录, 提供两个 apache 服务器挂载到站点根目录下,实现访问的资源一致性

  • apache响应站点目录下的静态文件, 动态文件使用fastcgi 交给php server 响应, php需要查询插入在与 mariadb服务交互

  • 整体实现 客户端访问 172.18.5.117 能够实现,轮询,正常发帖看帖

实验拓扑图如下

未分类

实验过程如下

编译安装httpd

在192.168.5.109 和 192.168.5.111 主机上编译安装httpd.

  • 主机操作系统: centos6.9_x86_64

  • httpd版本: httpd-2.4.47

  • apr版本: apr-1.5.2

  • aprutil版本: apr-util-1.5.4

  • 依赖软件包: gcc make expat-devel pcre-devel openssl-devel

操作步骤如下

# 下载源码包后放在 /usr/local/src
cd /usr/local/src
tar xf /usr/local/src/httpd-2.4.47.tar.gz
tar xf /usr/local/src/apr-1.5.2.tar.gz
tar xf /usr/local/src/apr-util-1.5.4.tar.gz
cp -r apr-1.5.2 httpd-2.4.47/srclib/apr
cp -r apr-util-1.5.4 httpd-2.4.47/srclib/apr-util
cd httpd-2.4.47
./configure 
--prefix=/usr/local/httpd 
--sysconfdir=/etc/httpd 
--enable-so --enable-ssl 
--enable-rewrite 
--with-zlib 
--with-pcre 
--with-included-apr 
--enable-deflate 
--enable-modules=most 
--enable-mpms-shared=all 
--with-mpm=prefork
make && make install
echo 'export PATH=/usr/local/httpd/bin:$PATH' > /etc/profile.d/httpd.sh

注意事项:

  • httpd2.2 不支持 fastcgi 所以在centos6 上要编译安装

  • centos6 中的默认apr版本过低 httpd-2.4版本需要 apr-1.4以上版本

  • 这里采用的编译是将apr和apr-util的源码复制到 httpd-2.4.47/srclib 中并去掉版本号, 这样编译比较方便,不用apr和apr-util一个一个编译, 但在httpd编译选项中要加上 –with-included-apr 的选项,

  • 编译完成后,推荐导出头文件,库文件,man帮助,和PATH变量. 和制作启动脚本,复制rpm安装的脚本就行,这里没有做这些步骤

配置httpd虚拟主机

注释中心主机
--------------
#DocumentRoot "/usr/local/httpd/htdocs"
----------------
启用包含虚拟机配置文件
Include /etc/httpd/extra/httpd-vhosts.conf   # 启用虚拟机配置
mkdir /web/forum -p                          # 创建站点根目录
echo "test" > /web/forum/index.html          # 创建测试文件
vim /etc/httpd/extra/httpd-vhosts.conf       
# 编辑虚拟机配置文件如下所示
<VirtualHost *:80>
    DocumentRoot "/web/forum"
    <Directory "/web/forum">
        Options none
        DirectoryIndex index.php index.html
        Require all granted             # 注意此项,要启用不然 403
    </Directory>
</VirtualHost>
# 导入PATH 变量后启动httpd 这里就不贴命令了
apachectl      # 启动后测试访问页面

编译安装php+xcache

192.168.5.113 上编译安装php+xcache

  • 操作系统版本 centos6.9

  • php版本: php-5.6.31

  • xcache版本: xcache-3.2.0

  • 依赖软件:gcc make libxml2-devel bzip2-devel libmcrypt-devel autoconf

第一步安装php:

cd /usr/local/src
tar xf php-5.6.31.tar.bz2
cd php-5.6.31
./configure 
--prefix=/usr/local/php 
--with-mysql=mysqlnd    # 注意以下三台如果mysql在本机上要使用mysqlnd
--with-mysqli=mysqlnd 
--with-pdo-mysql=mysqlnd 
--with-openssl 
--enable-mbstring       #支持多字节字符串即中文
--with-freetype-dir   
--with-jpeg-dir 
--with-png-dir 
--with-zlib 
--with-libxml-dir=/usr 
--enable-xml 
--enable-sockets 
--enable-fpm       # 启用fpm模式
--with-mcrypt 
--with-config-file-path=/etc/ 
--with-config-file-scan-dir=/etc/php.d 
--with-bz2
make && make install

第二步: php配置

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/src/php-5.6.31/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
cp /usr/local/src/php-5.6.31/php.ini-production /etc/php.ini
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm

第三步: 编译安装xcache

cd /usr/local/src
tar xf xcache-3.2.0.tar.gz
cd xcache-3.2.0
/usr/local/php/bin/phpize   # xcache没有configure脚本, 这条命令php提供 依赖 autoconf 软件包
./configure  --enable-xcache --with-php-config=/usr/local/php/bin/php-config
make && make install

注意事项

  • xcache 编译完成后会输出xcache.so的目录,请复制出此目录,(每次编译是目录并不是都一样)

  • xcache 源码经过企业多方测试性能稳定,不过版本太老,貌似不支持 php7版本

未分类

第四步: 配置php支持xcache模块

mkdir /etc/php.d
cp /usr/local/src/xcache-3.2.0/xcache.ini /etc/php.d/
# 找出xcache.so模块的路径
xcache_so_path=`find /usr/local/php/lib/php/extensions/ -name "xcache.so"`
# 替换配置文件extension = < xcache.so的路径 >
sed -i  '/^extension = xcache.so/cextension = '"${xcache_so_path}"'' /etc/php.d/xcache.ini

配置httpd, 并测试httpd连接php

在 192.168.5.111 和 192.168.5.109 上的虚拟主机上配置

# 更改虚拟机配置文件,让以php结尾的文件,通过fastcgi 交给php服务器处理,虚拟机配置文件如下
LoadModule proxy_module modules/mod_proxy.so            # 开启代理模块
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so  # 开启支持fcgi的反向代理
<VirtualHost *:80>
    DocumentRoot "/web/forum"
    ServerName forum.zxs.com
    <Directory "/web/forum">
        DirectoryIndex index.html  index.php
        Require all granted
    </Directory>
    ProxyRequests Off                                    # 关闭正向代理
    ProxyPassMatch ^(.*.php)$ fcgi://192.168.5.113:9000/web/forum/$1   # fastcgi连接php
</VirtualHost>
# 完成后重启httpd
/usr/local/httpd/bin/apachectl stop
/usr/local/httpd/bin/apachectl

在php 192.168.5.113主机上修改如下配置: php配置监听本机端口, 并允许 192.168.5.111和 192.168.5.109 ,需要修改以下参数

vim /usr/local/php/etc/php-fpm.conf         # 编辑fpm.conf 的配置文件
listen 192.168.5.113:9000                   # 增加监听本机网卡地址 默认只监听 127.0.0.1
listen.allowed_clients = 192.168.5.109,192.168.5.111 # 允许web服务器通过fastcgi 的9000端口进来
service php-fpm restart                     # 重启php-fpm

测试连接状态

在php的主机 192.168.5.113上执行如下操作(创建一个index.php的文件)

mkdir /web/forum
vim /web/forum/index.php       
# 添加如下内容
<?php
    phpinfo();
?>

注意: php文件的路径要根 fastcgi上的路径相匹配, 例如: httpd的proxy规则是 192.168.5.113:9000/web/forum/$1 , 那就要创建在 /web/forum目录下, 可以改成别的但必须保持一致.

测试效果如下, 成功后浏览器搜索 xcache 加速器是否已经启用

未分类

通用二进制安装mariadb

mkdir /mydata
useradd -r mysql
cd /usr/local/src
tar xf mariadb-5.5.57-linux-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/mariadb-5.5.57-linux-x86_64.tar.gz /usr/local/mysql
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --datadir=/mydata
cp support-files/my-huge.cnf /etc/my.cnf
sed -i '/^[mysqld]/adatadir=/mysqdata' /etc/my.cnf
sed -i '/^[mysqld]/alog-error=/var/log/mysqld.log' /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
service mysqld start
echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysqld.sh
. /etc/profile.d/mysqld.sh
mysql_secure_installation            # 安全初始化,嫌麻烦可以暂时不做

接下来我们需要安装discuz论坛系统, 在这之前先来测试下php是否能连接上mysql

# 首先连接上mysql
mysql> CREATE DATABASE forum;
mysql> GRANT ALL ON forum.* TO 'zxs'@'192.168.5.113' IDENTIFIED BY '123456';
# 创建数据库和授权完成后切换到php服务器测试是否能远程mysql服务器,没安装客户端的安装下mysql客户端
mysql -uzxs -h192.168.5.115 -p123456  
# 测试手动可以链接后在测试mysql是否可以连接, 需要编辑index.php文件添加如下代码
vim /web/forum/index.php
<?php
$mysqli=new mysqli("192.168.5.115","zxs","123456");
if(mysqli_connect_errno()){
echo "connect to database failure!";
$mysqli=null;
exit;
}
echo "connect to database success!";
$mysqli->close();
phpinfo();
?>

未分类

下载解压discuz源码到php 192.168.5.113 服务器上,并通过nfs共享出了来

unzip Discuz_X3.2_SC_UTF8.zip
rm -rf forum                # 删除原来的目录,之前做测试用的 
cp upload/ /web/forum -r    # 复制源码下 upload 目录并重命名为 forum
yum install rpcbind nfs-utils   # nfs服务依赖的包
service rpcbind start           # 启动rpcbind
chkconfig rpcbind on            
chkconfig nfs on
groupadd -g 800 apache   # 这里创建uid=800的用户和组,用于nfs共享是映射的用户,避免权限问题
useradd -g apache -u 800 -s /sbin/nologin apache   
chown -R apache.apache /web/forum  #将站点目录该为apache所有
vim /etc/exports
/web 192.168.5.109(rw,all_squash,anonuid=800,anongid=800)  #nfs配置所有用户映射为apache
/web 192.168.5.111(rw,all_squash,anonuid=800,anongid=800) 
service nfs start

httpd服务器上 192.168.5.109和192.168.5.111 上挂载php共享出来的nfs 并且写入/etc/fstab中

# 先安装nfs-utils 不然挂载不上
yum install nfs-utils -y
vim /etc/fstab
192.168.5.113:/web      /web                    nfs     defaults        0 0
mount -a

浏览器访问 192.168.5.109 和 192.168.5.111 进入discuz 向导

未分类

安装步骤到第二步可能会报如下错误, php进程可能无法写入以下文件

未分类

查看php以 nobody身份允许 ,改为apache 身份允许就能访问站点目录了

# 修改下php以apache的身份允许,这样就可以写了
vim /usr/local/php/etc/php-fpm.conf  # 修改php-fpm的配置文件
user = apache
group = apache

编译安装nginx,做负载均衡

wget http://nginx.org/download/nginx-1.13.6.tar.gz
tar xf nginx-1.13.6.tar.gz
cd nginx-1.13.6/
mkdir /var/tmp/nginx
useradd -r nginx
./configure 
--prefix=/usr/local/nginx 
--conf-path=/etc/nginx/nginx.conf 
--user=nginx 
--group=nginx 
--error-log-path=/var/log/nginx/error.log 
--http-log-path=/var/log/nginx/access.log 
--pid-path=/var/run/nginx/nginx.pid 
--lock-path=/var/lock/nginx.lock 
--with-http_ssl_module 
--with-http_stub_status_module 
--with-http_gzip_static_module 
--with-http_flv_module 
--with-http_mp4_module 
--http-client-body-temp-path=/var/tmp/nginx/client 
--http-proxy-temp-path=/var/tmp/nginx/proxy 
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi 
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
make && make install
ln -sv /usr/local/nginx/sbin/nginx  /usr/sbin/nginx
nginx
# 启动后测试nginx是否能访问

简单设置nginx设置使用轮询负载均衡, nginx (修改的部分)配置如下:

...
  #keepalive_timeout  0;
keepalive_timeout  65;
#gzip  on;
upstream backend {
    server 192.168.5.111;
    server 192.168.5.109;
}
server {
    listen       80;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location  / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
    }
...

测试是否能访问:

修改php服务器上的discuz的主页文件最前面, 让其能识别前端apache服务器是那个发来的请求, 好测试负载均衡轮询是否成功

vim /web/forum/forum.php       # 修改 php服务器站点目录下的 
<?php
echo 'apache服务器地址:'. $_SERVER['SERVER_ADDR']."<br/>"; 
?>   #该代码用于输出前端访问php的apache 服务器地址 用户测试调度是否成功

修改后访问测试页面如下所示

未分类

部署LAMP+NFS实现双Web服务器负载均衡

未分类

一、需求分析

  1. 前端需支持更大的访问量,单台Web服务器已无法满足需求了,则需扩容Web服务器;

  2. 虽然动态内容可交由后端的PHP服务器执行,但静态页面还需要Web服务器自己解析,那是否意味着多台Web服务器都需要在各自的系统中都存有一份静态页面数据呢?那么如果能将静态页面集中存放,所有Web服务器都来集中地取文件,对于文件的一致性就有了保障,这个集中地就叫做“文件共享服务器”;

二、需求实现

  1. web1充当http服务器和DNS解析服务器,客户端到web1和web2的请求,如果是静态资源请求通过php主机的NFS服务挂载的存储返回结果

  2. web1和web2对于客户端动态资源请求都反向代理到后端php服务器进行执行后返回结果

  3. web1和web2实现DNS轮询,客户端访问博客网站是负载均衡的。

  4. 建立wordpress博客

  5. 数据库存储wordpress博客的各种数据

三、架构图

未分类

四、步骤概述

  1. 部署LAMP环境、配置NFS服务器

  2. web1、web2、php服务器全部挂载NFS共享目录为网站根目录

  3. 配置httpd实现动静分离

  4. 配置DNS实现负载均衡

五、详细过程

1. web1、web2服务器编译安装Apache

# 安装依赖包
yum groupinstall "development tools"
yum install openssl-devel expat-devel pcre-devel 
#
# 解压文件
tar xvf apr-1.6.2.tar.gz 
tar xvf apr-util-1.6.0.tar.gz 
tar xvf httpd-2.4.27.tar.bz2 
cp -r apr-1.6.2 httpd-2.4.27/srclib/apr
cp -r apr-util-1.6.0 httpd-2.4.27/srclib/apr-util
#
# 编译安装
cd httpd-2.4.27/
./configure 
--prefix=/app/httpd24 
--sysconfdir=/etc/httpd24 
--enable-so --enable-ssl 
--enable-rewrite --with-zlib 
--with-pcre --with-included-apr 
--enable-modules=most 
--enable-mpms-shared=all 
--with-mpm=prefork
#
make && make install
#
#配置环境变量
vim /etc/profile.d/lamp.sh
    PATH=/app/httpd24/bin/:$PATH
. /etc/profile.d/lamp.sh
#
# 启动服务
apachectl start

2. 数据库服务器二进制安装mariadb

# 解压文件
tar xvf mariadb-10.2.8-linux-x86_64.tar.gz  -C /usr/local/
cd /usr/local
#
# 创建软连接,mariadb在/usr/local下必须名为mysql,可以创建软连接,可以改名
ln -s mariadb-10.2.8-linux-x86_64/ mysql
#
# 创建用户
useradd -r -m -d /app/mysqldb -s /sbin/nologin mysql 
cd mysql/
#
# 初始化数据库
scripts/mysql_install_db --datadir=/app/mysqldb --user=mysql
#
# 创建配置文件
mkdir /etc/mysql
cp support-files/my-large.cnf   /etc/mysql/my.cnf
#
# 修改配置文件,指定数据库存放路径
vim /etc/mysql/my.cnf
[mysqld]
datadir = /app/mysqldb             在mysqld下添加这三行
innodb_file_per_table = ON
skip_name_resolve = ON
#
# 复制启动脚本,添加开机自动启动
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list 
service mysqld start
#
# 创建日志目录
mkdir /var/log/mariadb
chown mysql /var/log/mariadb/
#
#添加环境变量
vim /etc/profile.d/lamp.sh 
   PATH=/app/httpd24/bin/:/usr/local/mysql/bin/:$PATH
. /etc/profile.d/lamp.sh
#
#调用安全加固脚本,加固数据库。汉字为每一项的翻译
mysql_secure_installation
  是否设置root密码
  输入密码
  确认密码
  是否设置匿名用户
  是否允许root远程登录
  删除test数据库
  现在是否生效

3. PHP应用服务器编译安装PHP7

# 安装依赖包
yum install libxml2-devel bzip2-devel libmcrypt-devel gcc openssl-devel
tar xvf  php-7.1.7.tar.bz2
#
#编译安装
cd php-7.1.7.tar.bz2
./configure 
--prefix=/app/php 
--enable-mysqlnd                           #mysqlnd 指明Mysql不再本地
--with-mysqli=mysqlnd 
--with-pdo-mysql=mysqlnd 
--with-openssl 
--enable-mbstring 
--with-freetype-dir  
--with-jpeg-dir 
--with-png-dir 
--with-zlib 
--with-libxml-dir=/usr 
--enable-xml 
--enable-sockets 
--enable-fpm                               #用FPM模式
--with-mcrypt 
--with-config-file-path=/etc/php 
--with-config-file-scan-dir=/etc/php.d 
--with-bz2
#
# 创建PHP配置文件
mkdir /etc/php/
cp php.ini-production /etc/php/php.ini
#
# 复制服务脚本,添加开机自动启动
cp   sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig --list  php-fpm
#
# 创建fpm的配置文件
cd /app/php/etc
cp php-fpm.conf.default php-fpm.conf
cd /app/php/etc/php-fpm.d/
cp www.conf.default www.conf
vim www.conf
    listen = 172.18.68.23:9000              #设置监听的IP,注释监听所有, 只写端口监听鄋
    ;listen.allowed_clients = 127.0.0.1.    #把这项注释掉,分号为注释
systemctl start php-fpm

4. 配置NFS服务器

NFS服务器的配置特别简单,最重要的时配置完后就赶紧将NFS共享目录挂载至web1、web2、PHP服务器的网站根目录。

mkdir -pv /app/nfs/web #创建共享目录,此目录为网站的根目录,实现统一管理。

vim /etc/exports
  /app/nfs/web 172.18.0.0/16(ro,sync,root_squash,no_all_squash)
# 允许172.18.0.1网段挂载NFS共享,如果要提高安全性应该控制到主机
  • Web1服务器

mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs #/app/httpd24/htdocs为httpd.conf中的根目录

  • Web2服务器

mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs #/app/httpd24/htdocs为httpd.conf中的根目录

  • PHP应用服务器

mkdir /app/httpd24/htdocs #PHP没有根目录,/app/httpd24/htdocs为NFS的挂载点。
mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs

5. 配置Apache实现动静分离

  • 加载模块
vim /etc/httpd24/httpd.conf
    LoadModule proxy_module modules/mod_proxy.so                       #取消两行的注释,加载两模块
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
  • 动静分离

在配置文件的末尾追加这四行,利用代理将所有以.php结尾的文件交给PHP服务器处理,实现动静分离

vim /etc/httpd24/httpd.conf
  AddType application/x-httpd-php .php
  AddType application/x-httpd-php-source .phps
  ProxyRequests Off 关闭正向代理
  ProxyPassMatch  ^/(.*.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1  
#要确保PHP服务器中有这个目录,(在NFS中创建这个目录,且将NFS挂载至此目录。)
apachectl restart

6. 部署wordpress博客

因为web1、web2、PHP服务器都使用NFS共享的目录作为根目录,所以只需要将wordpress博客系统部署在NFS服务器上即可让所有服务器得到同样的数据。

  • 安装博客程序
# 解压博客程序
tar xvf wordpress-4.8.1-zh_CN.tar.gz  -C /app/httpd24/htdocs
cd /app/httpd24/htdocs
mv wordpress/ blog/
# 创建配置文件
cd /app/httpd24/htdocs/blog/
cp wp-config-sample.php  wp-config.php
  • 配置数据库

wordpress需要数据库,所以在此先创建一个wordpress专用的数据库,且创建授权用户。

mysql -uroot -pCentOS
create datebase wpdb;
grant all on wpdb.* to wpuser@'172.18.68.%' identified by 'centos';
  • 配置wordpress连接数据库
# 编辑配置文件,写入创建的IP、数据库、与用户性
vim wp-config.php
define('DB_NAME', 'wpdb');
#
/** MySQL数据库用户名 */
define('DB_USER', 'wpuser');
#
/** MySQL数据库密码 */
define('DB_PASSWORD', 'centos');
#
/** MySQL主机 */
define('DB_HOST', 'localhost');

7. 登录测试

  • 浏览器打开,http://IP,设置管理员的用户名密码,点击安装

未分类

  • 输入用户名密码,即可进入博客网站的后台页面。

未分类

  • 默认风格的博客页面首页,还是比较好看滴

未分类

8. 配置DNS负载均衡

购买了单独域名后,在后台控制面板中添加两条A记录,就可以达到负载均衡。

到这里基于LAMP+NFS架构的双Web服务器、动静分离网站就搭建完成了。
双WEB服务器架构的好处在于如果有一台服务器宕机不会是整个网站瘫痪。

NFS共享存储的好处在于,DNS负载均衡后,不论用户被分配到哪台主机上,都能看到相同的页面得到相同的结果。

Ansible roles实现LAMP架构部署wordpress

为何使用Ansible及Ansible特点? Agentless(去中心化) Stupied Simple SSH by default YAML no code,定制剧本 基于python实现 模块化:调用特定模块 ,完成特定任务,支持自定义模块

整个role目录的结构:

.
├── ansible.cfg
├── hosts
├── httpd-php_roles.retry
├── httpd-php_roles.yml
├── roles
│ ├── httpd
│ │ ├── files
│ │ │ ├── mysql_wp.sh
│ │ │ ├── wordpress-4.7.4-zh_CN.tar.gz
│ │ │ ├── wordpress.conf
│ │ │ └── wp-config.php
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── vars
│ ├── mariadb
│ │ ├── defaults
│ │ ├── files
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ └── main.yml
│ │ ├── templetes
│ │ └── vars
│ └── php
│ ├── defaults
│ ├── files
│ ├── handlers
│ ├── meta
│ ├── tasks
│ │ └── main.yml
│ ├── tmpletes
│ └── vars
└── wp-config.php

1. 定义hosts目标主机:

vim /etc/ansible/hosts
[httpd]
192.168.5.111

2. 创建httpd相关的目录:

mkdir httpd/{tasks,vars,files} -pv

3. 进入tasks目录创建并编辑main.yml

---
- name: install httpd
  yum: name=httpd state=present
- name: conf httpd
  copy: src=wordpress.conf dest=/etc/httpd/conf.d/
- name: file wordpress
  copy: src=wordpress-4.7.4-zh_CN.tar.gz dest=/var/www/html
- name: tar wordpress.tar.gz
  shell: "tar -xf wordpress-4.7.4-zh_CN.tar.gz && chown -R apache.apache wordpress && mv wordpress-4.7.4-zh_CN.tar.gz /usr/local/src"
  args:
    chdir: /var/www/html 
  notify: start httpd  #当上面的执行完成后会触发handler定义的同名的动作 
- name: conf wp-config.php
  copy: src=wp-config.php dest=/var/www/html/wordpress
- name: mysql_wp.sh
  script: mysql_wp.sh
  notify: restart httpd 
- name: restart httpd
    service: name=httpd state=restarted

4. 将所需的文件放入roles/httpd/files中,文件中的内容下面用到会提及

files/
├── mysql_wp.sh
├── wordpress-4.7.4-zh_CN.tar.gz
├── wordpress.conf
└── wp-config.php

5. 在handlers中编辑main.yml定义触发的动作

---
- name: start httpd
  service: name=httpd state=started
- name: restart httpd
  service: name=httpd state=restarted

6. httpd的已经完成,接下来定义php模块的内容,同样在roles中创建php相关目录:

mkdir php/{tmpletes,tasks,files,handlers,meta,defaults,vars} -pv

7. 编辑tasks中的main.yml文件,这里只是安装了一个php模块:

---
- name: install php
  yum: name=php state=present

8. 定义mariadb相关的内容的目录:

mkdir mariadb/{templetes,handlers,vars,files,defaults,tasks} -vp

9. 编辑roles/mariadb/tasks/main.yml文件,顺带安装一下几个模块:

---
- name: install mariadb
  yum: name=mariadb-server state=present
- name: install httpd-mysql
  yum: name=php-mysql state=present
- name: install php-mbstring
  yum: name=php-mbstring state=present
- name: restart mariadb 
  service: name=mariadb state=restarted

10. wordpress程序需要手动更改一个配置文件,事先编辑好直接推送wordpress/目录下,这就是roles/httpd/files中的wp-conf.php,需要更改内容如下:

define('DB_NAME', 'wordpress');

/** MySQL数据库用户名 */
define('DB_USER', 'wpuser');

/** MySQL数据库密码 */
define('DB_PASSWORD', 'wppd');

/** MySQL主机 */
define('DB_HOST', 'localhost');

11. 上面定义的数据库需要数据库等需要自行创建,将其写脚本files/mysql_wp.sh文件:

#!/bin/bash
#
mysql -uroot -e " 
        CREATE DATABASE IF NOT EXISTS wordpress CHARACTER  SET 'utf8';
        GRANT ALL ON wordpress.* TO 'wpuser'@'localhost' IDENTIFIED BY 'wppd'; "

12. 与roles同级创建一个yml文件,将这三个项目整合起来运行:

cd /etc/ansible
vim httpd-php_roles.yml
---
- hosts: httpd
  remote_user: root
  roles:
  - { role: php, tags: [ php-tag,ap-tag ] }
  - { role: mariadb, tags: [ mariadb-tag,ap-tag ] }
  - { role: httpd, tags: [ httpd-tag,ap-tag ] }

13. 向定义的目标主机进行发布程序:

~]# ansible-playbook /etc/ansible/httpd-php_roles.yml

只要目标主机yum源可用,没有遇到报错基本OK.

未分类

访问验证一下:

未分类

CentOS 7.2安装LAMP(apache mariadb php)搭建WordPress

导语

WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中有超过16.7%的网站使用WordPress。

一.LAMP环境搭建

LAMP即Linux+Apache+MySQL(MariaDB)+PHP,由于其开源免费,所以是目前非常受欢迎的一组网站解决方案,本文也将采用此方案。

1. Linux选择

笔者选用的是CentOS 7.2这个版本,CentOS实质为无支持版的RHEl,稳定性还是比较高的,当然也可以选择其它发行版,只是后续的操作略有不同,本文将只介绍在CentOS下的操作(系统的安装和本文关系不大,故不再赘述)。

2. 安装Apache

直接yum安装

# yum -y install httpd

安装完成后,启动服务

# systemctl start httpd.service

设置为开机启动

# systemctl enable httpd.service

之后可以在浏览器输入localhost进行测试,由于笔者没有安装GUI,只能在客户端浏览器进行测试,在这之前需要打开80和443端口

首先开启防火墙并设置为开机启动

# systemctl start firewalld.service
# systemctl enable firewalld.service

开启端口(80和443)

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https

重启防火墙

# firewall-cmd --reload

查询已开启端口

# irewall-cmd --list-ports

未分类

客户端测试
未分类

3. 安装并配置数据库(Mariadb)

由于甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,所以在CentOS 7中弃用了MySQL,改为支持Mariadb(MySQL的一个分支,与之完全兼容),所以本文也将使用该数据库。

同样还是利用yum命令进行安装,并且配置开机启动

# yum -y install mariadb-server mariadb
# systemctl start mariadb.service
# systemctl enable mariadb.service

配置root密码

# mysql_secure_installation

配置过程中会有几个选项,大家根据自己的需要进行配置就好了

未分类

使用root用户登录mysql

# mysql -u root -p

为WordPress创建数据库

# CREATE DATABASE wordpress;

查看创建结果

未分类

为该数据库创建用户

# CREATE USER username@localhost IDENTIFIED BY 'password';

说明:username – 你将创建的用户名, host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password – 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.

更改用户权限,保存并退出

# GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost;
# FLUSH PRIVILEGES;
# exit

重启服务

# systemctl restart mariadb.service

4. 安装PHP及相关组件

首先安装PHP

# yum -y install php

安装相关组件

# yum -y install php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

安装完成之后我们可以新建一个php页面进行测试

# vim /var/www/html/info.php

编辑为以下内容

未分类

重启httpd服务

# systemctl restart httpd.service

打开网址 http://x.x.x.x/info.php 进行查看(x.x.x.x为vps的ip地址)

未分类
php测试页

二. WordPress安装与配置

安装wget(下载) unzip(解压) net-tools(网络管理)

# yum -y install wget unzip net-tools

下载WordPress

# wget http://wordpress.org/latest.zip

未分类

解压文件,并将其复制到/var/www/html/目录下

# unzip -q latest.zip
# cp -rf wordpress/* /var/www/html/

未分类

编辑配置文件

# cd /var/www/html
# cp wp-config-sample.php wp-config.php
# vim wp-config.php

将其修改为以下格式(其中wordpress为数据库名称,wordpressuser为数据库用户名,10293847为数据库密码)

未分类

保存后退出,重启相关服务

# systemctl restart httpd.service
# systemctl restart mariadb.service

三. WordPress的个人设置

完成以上配置之后,便可以输入http://yourserverip/来访问你的博客了。

  • 选择语言

未分类

  • 填写个人信息

未分类

  • 安装完成

未分类

  • 登录到仪表盘

未分类

至此WordPress已经搭建完成,之后可根据自己的需要进行其它配置。

CentOS 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)

未分类

准备篇

CentOS 7.0系统安装配置图解教程

http://www.osyunwei.com/archives/7829.html

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

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

  • 关闭firewall:
systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动
  • 安装iptables防火墙
yum install iptables-services #安装

vi /etc/sysconfig/iptables #编辑防火墙配置文件

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

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

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

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

:wq! #保存退出

systemctl restart iptables.service #最后重启防火墙使配置生效

systemctl enable iptables.service #设置防火墙开机启动

2、关闭SELINUX

vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存退出

setenforce 0 #使配置立即生效

安装篇

1、安装Apache

未分类

yum install httpd #根据提示,输入Y安装即可成功安装

systemctl start httpd.service #启动apache

systemctl stop httpd.service #停止apache

systemctl restart httpd.service #重启apache

systemctl enable httpd.service #设置apache开机启动

在客户端浏览器中打开服务器IP地址,会出现下面的界面,说明apache安装成功

未分类

2、安装MariaDB

CentOS 7.0中,已经使用MariaDB替代了MySQL数据库

  • 安装MariaDB

未分类

yum install mariadb mariadb-server #询问是否要安装,输入Y即可自动安装,直到安装完成

systemctl start mariadb.service #启动MariaDB

systemctl stop mariadb.service #停止MariaDB

systemctl restart mariadb.service #重启MariaDB

systemctl enable mariadb.service #设置开机启动

cp /usr/share/mysql/my-huge.cnf /etc/my.cnf #拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可)
  • 为root账户设置密码

未分类

mysql_secure_installation

回车,根据提示输入Y

输入2次密码,回车

根据提示一路输入Y

最后出现:Thanks for using MySQL!

MariaDB密码设置完成,重新启动 MariaDB:

systemctl restart mariadb.service #重启MariaDB

3、安装PHP

  • 安装PHP

未分类

yum install php #根据提示输入Y直到安装完成
  • 安装PHP组件,使PHP支持 MariaDB
yum install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash

#这里选择以上安装包进行安装,根据提示输入Y回车

systemctl restart mariadb.service #重启MariaDB

systemctl restart httpd.service #重启apache

配置篇

1、Apache配置

vi /etc/httpd/conf/httpd.conf #编辑文件

ServerSignature On  #添加,在错误页中显示Apache的版本,Off为不显示

Options Indexes FollowSymLinks  #修改为:Options Includes ExecCGI FollowSymLinks(允许服务器执行CGI及SSI,禁止列出目录)

#AddHandler cgi-script .cgi #修改为:AddHandler cgi-script .cgi .pl (允许扩展名为.pl的CGI脚本运行)

AllowOverride None  #修改为:AllowOverride All (允许.htaccess)

AddDefaultCharset UTF-8 #修改为:AddDefaultCharset GB2312 (添加GB2312为默认编码)

#Options Indexes FollowSymLinks   #修改为 Options FollowSymLinks(不在浏览器上显示树状目录结构)

DirectoryIndex index.html   #修改为:DirectoryIndex index.html index.htm Default.html Default.htm index.php(设置默认首页文件,增加index.php)

MaxKeepAliveRequests 500  #添加MaxKeepAliveRequests 500 (增加同时连接数)

:wq! #保存退出

systemctl restart httpd.service #重启apache

rm -f /etc/httpd/conf.d/welcome.conf /var/www/error/noindex.html #删除默认测试页

2、php配置

vi /etc/php.ini #编辑

date.timezone = PRC #把前面的分号去掉,改为date.timezone = PRC

disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

expose_php = Off #禁止显示php版本的信息

short_open_tag = ON #支持php短标签

open_basedir = .:/tmp/  #设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,可以防止php木马跨站,如果改了之后安装程序有问题(例如:织梦内容管理系统),可以注销此行,或者直接写上程序的目录/data/www.osyunwei.com/:/tmp/

:wq! #保存退出

systemctl restart mariadb.service #重启MariaDB

systemctl restart httpd.service #重启apache

测试篇

cd /var/www/html

vi index.php #输入下面内容

<?php

phpinfo();

?>

:wq! #保存退出

在客户端浏览器输入服务器IP地址,可以看到如下图所示相关的配置信息!

未分类

注意:apache默认的程序目录是/var/www/html

权限设置:chown apache.apache -R /var/www/html

至此,CentOS 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)教程完成!

centos7.3下配置LAMP部署WordPress博客

在同一台主机上搭建,首先需要安装的软件包Apache 、MariaDB 、PHP

未分类

一、安装LAMP 这里我们采用yum的方式

yum install httpd mariadb-server php php-mysql -y

未分类

二、创建虚拟主机

1、虚拟主机配置文件

未分类

2、创建所需的目录

mkdir /var/www/wordpress

三.在虚拟主机主目录/var/www/wordpress下新建index.php文件

<?php
        phpinfo();
 ?>

四、启动httpd服务

systemctl start httpd

五、测试

未分类

六、解压 wordpress 4.7并把解压的wordpress复制到/var/www/wordpress

未分类

七、通过浏览器访问wordpress

主意:

注意:配置DNS服务器解析www.test.com 为192.168.23.144 或者 修改windows 下的C:WindowsSysteme32driversetchosts文件
192.168.23.144 www.test.com

未分类

未分类

八、修改wordpress 配置文件复制cp wp-config-sample.php模板文件为 wp-config.php,然后编辑

vim /var/www/wordpress/wordpress/wp-config.php

未分类

未分类

未分类

上一篇 vim shell 练习作业题