1.什么是LAMP服务架构

LAMP即Linux操作系统+Apache+MySQL/MariaDB/MongoDB+PHP/Python/Perl

数据库可以单独使用一台服务器,但是Apache和PHP必须在同一台服务器使用

2.源码编译安装MySQL数据库

  1. 查看系统版本

    uname -a
  2. 安装常用命令及MySQL依赖包

    yum -y install wget vim xz lrzsz
    yum -y install libaio-devel numactl-devel
  3. 下载MySQL并解压到/usr/local/目录

    wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
    tar -xvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
  4. 进入/usr/local/目录并将解压后的文件重命名为mysql

    cd /usr/local/
    mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql
  5. 创建MySQL数据库以及日志存放目录

    mkdir -p /data/mysql/{data,tmp,binlog,log}
    touch /data/mysql/log/mysqld-error.log
  6. 创建MySQL用户并给MySQL目录授权

    useradd mysql -s /sbin/nologin -M
    chown -R mysql.mysql /data/mysql
    chown -R mysql.mysql /usr/local/mysql
  7. 添加MySQL的环境变量

    export PATH=$PATH:/usr/local/mysql/bin 
    echo "export  PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
  8. 初始化MySQL数据库(若echo $?输出0,则初始化成功,否则初始化失败)

    mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql
    echo &?

    参数含义

    • –initialize 生成随机密码,官方推荐使用
    • –initialize-insecure 生成空密码,root用户密码默认为空
    • –basedir MySQL的安装目录,一般放在/usr/local/mysql/
    • –datadir 数据库的存放路径, 放在比较安全的目录
    • –user 指定用户去初始化MySQL
  9. 创建MySQL配置文件

    vim /etc/my.cnf

    修改内容为

    [mysqld]
    port=3306
    user=mysql
    basedir=/usr/local/mysql
    datadir=/data/mysql/data
    socket=/tmp/mysql.sock
    symbolic-links=0
    [mysqld_safe]
    log-error=/data/mysql/log/mysqld-error.log
    pid-file=/data/mysql/mysqld.pid

  10. 启动MySQL、查看服务是否启动、端口是否监听

    mysqld_safe --user=mysql &
    ps -aux | grep mysql
    netstat -anput | grep mysql
  11. 使用MySQL自带启动脚本启动MySQL并加入开机自启动

    cp /usr/local/mysql/support-files/mysql.server   /etc/init.d/mysql.server
    sed -i "45,~50s#basedir=#basedir=/usr/local/mysql#g"   /etc/init.d/mysql.server
    sed -i "45,~50s#datadir=#datadir=/data/mysql/data#g"  /etc/init.d/mysql.server

    确认一下我们是否修改成功

    grep -E '^datadir=|^basedir=' /etc/init.d/mysql.server

    若输出basedir=/usr/local/mysql
    datadir=/data/mysql/data则修改成功

    修改权限、启动服务、设置开机自启动

    chmod  +x /etc/init.d/mysql.server
    service mysql.server start
    chkconfig  mysql.server on
  12. 管理MySQL用户

    打开MySQL客户端

    mysql

    修改‘root’@’localhost’ 密码

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

    创建‘root’@’127.0.0.1’

    CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root_password';

    给’root’@’127.0.0.1’ 授权

    grant all privileges on *.* to 'root'@'127.0.0.1' ;

    刷新MySQL权限

    flush privileges;

3.源码编译安装Apache服务

  1. 进入/usr/src/目录

    cd /usr/src/
  2. 下载依赖apr和apr-util,下载httpd软件包

    wget https://mirrors.cnnic.cn/apache/apr/apr-1.7.0.tar.gz
    wget https://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.gz
    wget https://mirrors.cnnic.cn/apache/httpd/httpd-2.4.39.tar.gz

    文件在清华大学开源软件镜像站下载,若下载链接失效,前往网站寻找下载链接

  3. 解压下载的软件包

    ls
    tar -xvf apr-1.7.0.tar.gz
    tar -xvf apr-util-1.6.1.tar.gz
    tar -xvf httpd-2.4.39.tar.gz
  4. 设置apr安装路径,进行编译和编译安装

    cd apr-1.7.0
    ./configure --prefix=/usr/local/apr
    make && make install
  5. 设置apr-util安装路径,进行编译和编译安装

    cd ../apr-util-1.6.1
    yum install -y expat-devel
    ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
    make && make install
  6. 设置httpd安装路径和模块,进行编译和编译安装

    cd ../httpd-2.4.39
    yum groupinstall "Development Tools" "Server Platform Development"
    yum install -y pcre-devel
    yum install -y openssl-devel
    ./configure --prefix=/usr/local/apache2.4 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
    make && make install
  7. 进入/usr/local/apache2.4/目录,并查看文件内容

    cd /usr/local/apache2.4/
    ls
    • bin/httpd是启动Apache的文件
    • conf目录是配置文件所在目录
    • htdocs目录用于存放默认的网站页面
    • logs目录是存放日志的目录
    • modules目录是存放扩展模块的目录
  8. 添加httpd的全局变量

    vim /etc/profile.d/httpd.sh
    . /etc/profile.d/httpd.sh

    添加内容为export PATH=/usr/local/apache2.4/bin:$PATH

  9. 启动Apache服务

    apachectl start

4.源码编译安装PHP5.6

  1. 安装依赖、扩展库、扩展模块

    yum -y install gcc bison bison-devel zlib-devel libmcrypt-devel mcrypt mhash-devel openssl-devel libxml2-devel libcurl-devel bzip2-devel readline-devel libedit-devel sqlite-devel jemalloc jemalloc-devel bzip2-devel libjpeg-devel libpng-devel freetype-devel
  2. 进入/usr/src/目录

    cd /usr/src/
  3. 下载PHP5.6版本源码编译安装包(暂时没有找到下载速度比较快的镜像站)

    wget http://cn2.php.net/get/php-5.6.40.tar.bz2/from/this/mirror
  4. 解压源码包

    tar -xvf mirror
  5. 进入php-5.6.40/目录并进行配置,若echo $?输出0,则配置成功,否则配置失败

    cd php-5.6.40
    ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.4/bin/apxs --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
    echo $?
  6. 进行编译和编译安装,时间较长(与CPU和内存性能相关),若echo $?输出0,则编译安装成功,否则编译安装失败

    make && make install
    echo $?
  7. PHP核心二进制文件在/usr/local/php/bin/目录下,PHP与Apache的结合通过/usr/local/apache2.4/modules/libphp5.so文件实现的

  8. 添加PHP的全局变量

    vim /etc/profile.d/php.sh

    添加内容为export PATH=/usr/local/php/bin:$PATH

    source /etc/profile.d/php.sh
  9. 配置好全局变量后,可以使用php -m查看PHP加载的模块

  10. 运行/usr/local/php/bin/php | less时没有加载php.ini配置文件,需要复制php.ini-production配置文件到/usr/local/php/etc/目录下

    cp php.ini-production /usr/local/php/etc/php.ini

5.源码编译安装PHP7.2

  1. 进入/usr/src/目录

    cd /usr/src/
  2. 下载解压PHP7.2.3源码包,并进入php-7.2.3/目录

    wget http://cn2.php.net/get/php-7.2.3.tar.gz/from/this/mirror
    tar -vxf mirror
    cd php-7.2.3
  3. 进行参数设置和扩展模块设置,若echo $?输出0,则配置成功,否则配置失败

    ./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --with-apxs2=/usr/local/apache2.4/bin/apxs --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-icony-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
    echo $?
  4. 进行编译和编译安装,时间较长(与CPU和内存性能相关),若echo $?输出0,则编译安装成功,否则编译安装失败

    make && make install
    echo $?
  5. 将PHP7添加到全局变量

    vim /etc/profile.d/php7.sh

    添加内容为export PATH=/usr/local/php7/bin:$PATH

    source /etc/profile.d/php7.sh
  6. 在生成环境中PHP5和PHP7会产生冲突,如果不想使用PHP5或PHP7版本,可以在httpd.conf配置文件注释,大约在162行

    vim /usr/local/apache2.4/conf/httpd.conf

    #LoadModule php5_module modules/libphp5.so
    LoadModule php7_module modules/libphp7.so

6.源码编译安装Python

6.1源码编译安装Python3..6

  1. 安装Python依赖包

    yum -y install openssl-devel readline-devel unzip gcc-c++ wget
  2. 下载解压Python源码包,并进入Python-3.6.5/目录

    wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
    tar -vxf Python-3.6.5.tgz
    cd Python-3.6.5
  3. 进行编译配置,并编译安装

    ./configure --prefix=/usr/local/python36
    echo $?
    make && make install
    echo $?
  4. 配置pip命令,pip默认使用官方源,在国内速度较慢,需要更改为国内原

    vim /etc/pip.conf

    添加内容为

    [gloabl]
    index-url = http://pypi.douban.com/simple
    trusted-host = pypi.douban.com
    [list]
    format=columns

6.2 安装Python扩展MySQL数据库

  1. Python默认调用SQLite数据库,不支持MySQL数据库,需要手动安装MySQL数据库并进行配置

    wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
    rpm -ivh mysql-community-release-el7-5.noarch.rpm
    yum -y install mysql mysql-server mysql-devel zlib-devel
    systemctl start mysqld.service
  2. 调用python/bin/virtualenv,在目录下生产python36env配置文件

    pip install virtualenv
    virtualenv ./python36env
  3. 进入python36env环境

    source python36env/bin/activate
  4. 使用pip命令安装MySQL数据库,安装后使用pip list命令查看是否安装成功

    pip install pymysql
    pip list
  5. 退出python36env环境,并编辑MySQL主配置文件

    deactivate
    vim /etc/my.cnf

    添加内容为

    [mysqld]
    default-storage-engine = innodb
    innodb_file_per_table
    collation-server = utf8_general_ci
    init-connect = 'SET NAMES utf8'
    character-set-server = utf8

  6. 为MySQL设置密码

    mysqladmin -uroot password 'new_password'

7. Apache结合PHP操作

  1. 编辑httpd主配置文件

    vim /usr/local/apache2.4/conf/httpd.conf

    搜索ServerName,将ServerName www.example.com:80前的注释#删除

  2. 在浏览器输入虚拟机IP地址,若提示无法访问,则在防火墙添加80端口规则

    iptables -I INPUT -p tcp --dport 80 -j ACCEPT

  3. 在httpd.conf配置文件中搜索Require all denied,将denied改为granted

  4. 在httpd.conf配置文件中搜索AddType,在AddType application/x-gzip .gz .tgz下添加一行解析PHP代码AddType application/x-httpd-php .php

  5. 在httpd.conf配置文件中搜索IfModule dir_module,将

    <IfModule dir_module>
    DirectoryIndex index.html
    </IfModule>

    修改为

    <IfModule dir_module>

    `DirectoryIndex index.html index.php`

    </IfModule>

  6. 保存配置文件后,使用-t选项查看是否有语法错误

    /usr/local/apache2.4/bin/apachectl -t
    /usr/local/apache2.4/bin/apachectl graceful
  7. 若更改完配置文件仍无法解析PHP,在/usr/local/apache2.4/htdocs/目录下创建一个index.php文件

    vim /usr/local/apache2.4/htdocs/index.php

    在文件中写入

    <?php
    phpinfo();

  8. 问题:在浏览器打开IP/test.php后,浏览器弹出文件下载窗口

    解决方法:编辑httpd主配置文件

    vim /usr/local/apache2.4/conf/httpd.conf

    在文件末尾添加内容为

    AddHandler php7-script php
    AddType application/x-httpd-php .php .php7
    AddType application/x-httpd-php-source .phps

    检查是否有语法错误

    /usr/local/apache2.4/bin/apachectl -t
    /usr/local/apache2.4/bin/apachectl graceful

    再次进入IP/index.php解析成功

8.Apache默认虚拟主机

  1. 打开修改httpd.conf配置文件来打开虚拟主机配置文件

    vim /usr/local/apache2.4/conf/httpd.conf

    搜索extra,将#Include conf/extra/httpd-vhosts.conf前的注释去掉

  2. 打开httpd-vhost.conf配置文件,定义多个虚拟主机

    vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

    修改文件内容,每个VirtualHost *:80代表一个虚拟主机

    <VirtualHost *:80>

    `ServerAdmin admin@leeyd.top`
    `DocumentRoot "/data/www/leeyd_blog"`
    `ServerName leeyd.top`
    `ServerAlias www.leeyd.top`
    `ErrorLog "/data/logs/leeyd.top-error_log"`
    `CustomLog "/data/logs/leeyd.top-access_log" common`

    </VirtualHost>

    参数含义:

    • ServerAdmin 定义管理员邮箱
    • DocumentRoot 定义网站根目录路径
    • ServerName 网站域名
    • ServerAlias 网站别名,可以是多个域名
    • ErrorLog 网站错误日志路径
    • CustomLog 网站访问日志路径
  3. 修改完配置文件后,在对应目录下创建相应的目录

    mkdir /data/www/
    mkdir /data/www/leeyd_blog
    mkdir /data/www/www.leeyd.top
    mkdir /data/logs/
  4. 在对应站点创建index.php文件,并在每个站点的index.php文件中定义站点的名字

    cd /data/www/
    vim leeyd_blog/index.php

    添加内容为

    <?php
    echo "leeyd_blog";

  5. 确认无误后重新加载配置文件

    /usr/local/apache2.4/bin/apachectl -t
    /usr/local/apache2.4/bin/apachectl graceful
  6. 浏览器访问IP:80,网页成功显示leeyd_blog

未完待续。。。