搭建LAMP环境

环境:Centos7
/www/package/apache Apache 相关安装包目录
/www/package/mysql MySQL 相关安装包目录
/www/package/php PHP 相关安装包目录
/www/server 环境安装目录

预先安装以下组件
1
2
3
4
5
6
yum install gcc-c++
yum install openssl openssl-devel
yum install perl perl-devel
yum install libxml2 libxml2-devel
yum install curl curl-devel
yum install autoconf
Apache

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#下载相关包至Apache安装包目录
cd /www/package/apache
wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.4.25.tar.gz
wget http://mirrors.hust.edu.cn/apache/apr/apr-1.5.2.tar.gz
wget http://mirrors.hust.edu.cn/apache/apr/apr-util-1.5.4.tar.gz
wget https://sourceforge.net/projects/pcre/files/pcre/8.40/pcre-8.40.tar.gz

#install apr
tar -zxvf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/www/server/apr
make
make install

#install apr-util
tar -zxvf apr-util-1.5.4.tar-gz
cd apr-util-1.5.4
./configure --prefix=/www/server/apr-util -with-apr=/www/server/apr/bin/apr-1-config
make
make install

#install pcre
tar -zxvf pcre-8.40.tar.gz
cd pcre-8.40
./configure --prefix=/www/server/pcre
make
make install

#install httpd
tar -zxvf httpd-2.4.25.tar.gz
cd httpd-2.4.25
./configure --prefix=/www/server/httpd --with-apr=/www/server/apr --with-apr-util=/www/server/apr-util --with-pcre=/www/server/pcre --enable-module=so --enable-mods-shared=all --with-ssl=/usr/bin/openssl --enable-ssl
make
mak install
#PS:--enable-module=so 开启模块, --enable-mods-shared=all启用所有支持的动态加载模块

#如果提示 make[2]: *** [htpasswd] Error 1 错误, 则 ./configure 加上 --with-included-apr, 并将 apr 与 apr-util 的解压包复制到 srclib 目录下
cp -r /www/package/apache/apr-1.6.3 /www/package/apache/httpd-2.4.34/srclib/apr
cp -r /www/package/apache/apr-util-1.6.1 /www/package/apache/httpd-2.4.34/srclib/apr-util

配置

  1. 配置 httpd.conf, 去掉 ServerName www.example.com:80 前面的 # 号
  2. 启动apache

    1
    /www/server/httpd/bin/apachetcl start
  3. 访问 ip, 如果出现It Works 说明安装成功

    1
    2
    3
    #如果访问失败,可能是防火墙没开放80端口
    firewall-cmd --add-port=80/tcp --permanent
    systemctl restart firewalld
  4. 给 apache 服务分配用户和组

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #建立一个apache的组
    groupadd apache
    #建立apache用户, 并把用户放到apache组
    useradd -r -g apache apache
    #给apache用户设置一个密码
    passwd apache
    #配置 httpd.conf, 将 User 和 Group 改成刚刚创建的用户与用户组
    User apache
    Group apache
  5. 给目录/www/server/httpd 更改拥有者

    1
    chown -R apache:apache /www/server/httpd
  6. 添加httpd服务

    1
    2
    cd /www/server/httpd
    cp bin/apachectl /etc/init.d/httpd
  7. 启动服务

    1
    service httpd start
  8. 如果 session 保存不了, 或者 报 session_start():open failed:Permission denied(), 原因是:session 默认是保存在 /tmp 目录下, 但是修改 apache 的 User 和 Group 之后, 没有 /tmp 的操作权限, 只需要新建一个目录, 并更改拥有者为apache即可

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #编辑 php.ini
    vi php.ini
    #修改 session.save_path
    session.save_path = “/www/session”

    #在/www 目录下新建 session 目录
    mkdir /www/session
    #修改文件夹拥有者和所属组
    chown -R apache:apache /www/session
    #启动 apache
    service httpd restart
  9. Apache 虚拟主机配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #httpd.conf
    #DocumentRoot 和 Directory 改成 站点根目录, AllowOverride None 改成 AllowOverride All, Require all denied改成Require all granted
    DocumentRoot "/www/web"
    <Directory "/www/web">
    ...
    AllowOverride All
    ...
    Require all granted
    </Directory>

    # 去掉 httpd-vhosts.conf 前的 # 号
    Include conf/extra/httpd-vhosts.conf
    #开启 mod_rewrite 模块
    LoadModule rewrite_module modules/mod_rewrite.so

    #extra/httd-vhosts.conf
    #配置虚拟站点 - 域名 www.test.com
    <VirtualHost *:80>
    DocumentRoot /www/web/test
    ServerName www.test.com
    ServerAlias test1.com test2.com
    <Directory "/www/web/test">
    Options Indexes FollowSymLinks
    AllowOverride all
    Require all granted
    </Directory>
    ErrorLog "/www/logs/httpd/test-error.log"
    CustomLog "/www/logs/httpd/test.log" common
    </VirtualHost>
    #监听不同端口
    Listen 8080
    <VirtualHost *:8080>
    DocumentRoot /www/web/test
    ServerName localhost
    <Directory "/www/web/test">
    Options Indexes FollowSymLinks
    AllowOverride all
    Require all granted
    </Directory>
    ErrorLog "/www/log/httpd/test-error.log"
    CustomLog "/www/log/httpd/test.log" common
    </VirtualHost>
    #配置403, 禁止ip访问, 只能域名访问, 将此配置放在第一个
    <VirtualHost *:80>
    DocumentRoot /www/web/403
    <Directory "/www/web/test">
    AllowOverride None
    Require all denied
    </Directory>
    ErrorLog "/www/log/httpd/403-error.log"
    CustomLog "/www/log/httpd/403.log" common
    </VirtualHost>
PHP

安装

1
2
3
4
5
6
7
8
9
10
11
12
cd /www/package/php
wget http://cn2.php.net/distributions/php-7.1.4.tar.gz
tar -zxvf php-7.1.4.tar.gz
cd php-7.1.4
./configure --prefix=/www/server/php --with-apxs2=/www/server/httpd/bin/apxs --with-config-file-path=/www/server/php
make
make install

#提示 Sorry, I cannot run apxs, 查找 perl 安装目录, 一般在 /usr/bin/perl
which perl
#修改 /www/server/httpd/bin/apxs 第一行, 将 #!/replace/with/path/to/perl/interpreter -w 修改为
#!/usr/bin/perl -w

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd /www/package/php/php-7.1.4
cp php.ini-production /www/server/php/lib/php.ini

#httpd.conf
#搜索php7, 如果没有找到, 则需要添加指令
LoadModule php7_module modules/libphp7.so
#搜索 DirectoryIndex 字符串, 添加 index.php index.phtml
DirectoryIndex index.php index.phtml index.html index.htm
#添加一段指令
<FilesMatch "\.ph(p[2-6]?|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
#这段指令告诉 apache, 碰到文件名以.php,.php2,.php3,.php4,.php5,.php6 或 phtml 结尾的文件使用libphp7.so模块进行解析, 其中 "\.ph(p[2-6]?|tml)$" 为正则表达式, 可以随意更改, 只要符合PCRE 正则表达式语法就行
#重启 apache
service httpd restart

#创建test.php文件, 内容为 phpinfo(), 访问 test.php 文件
MYSQL

安装

1
2
3
4
5
6
cd /www/package/mysql
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
tar -zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.7.18-linux-glibc2.5-x86_64/* /www/server/mysql
cd /www/server/mysql
mkdir data

配置

  1. 配置 my.cnf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #/etc/my.cnf
    vi /etc/my.cnf
    [client]
    port=3306
    socket=/tmp/mysql.sock

    [mysqld]
    port=3306
    user=mysql
    character_set_server=utf8
    default-storage-engine=INNODB
    log_timestamps = SYSTEM
    socket=/tmp/mysql.sock
    basedir=/www/server/mysql
    datadir=/www/server/mysql/data
    pid-file=/www/server/mysql/data/mysql.pid
    # Disabling symbolic-links is recommended to prevent assorted security risks

    log-error=/www/logs/mysql/mysql-error.log
    #log_output=table
    general_log=on
    general_log_file=/www/logs/mysql/general.log
    log-raw=true

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  2. 给 mysql 服务分配用户和组

    1
    2
    3
    4
    5
    6
    #建立一个mysql的组
    groupadd mysql
    #建立mysql用户,并把用户放到mysql组
    useradd -r -g mysql mysql
    #给mysql用户设置一个密码
    passwd mysql
  3. 修改目录/www/server/mysql 拥有者

    1
    chown -R mysql:mysql /www/server/mysql
  4. 生成日志目录

    1
    2
    3
    4
    mkdir -p /www/logs/mysql
    chown -R mysql:mysql /www/logs/mysql
    touch /www/logs/mysql/mysql-error.log
    touch /www/logs/mysql/general.log
  5. 初始化数据

    1
    2
    3
    4
    5
    6
    7
    8
    cd /www/server/mysql
    bin/mysqld --initialize --user=mysql --basedir=/www/server/mysql --datadir=/www/server/mysql/data
    #数据库加密,可不加密
    bin/mysql_ssl_rsa_setup --datadir=/www/server/mysql/data
    #修改目录 /www/server/mysql/data 拥有者,因为数据库加密后生成的文件拥有者并不是mysql
    chown -R mysql:mysql /www/server/mysql/data
    #查看mysql密码, 因为设置了log_error, 所以初始化后的密码会保存到 mysql-error.log日志里
    cat /www/logs/mysql/mysql-error.log
  6. 注册服务

    1
    2
    3
    4
    5
    6
    7
    cd /www/server/mysql
    cp support-files/mysql.server /etc/init.d/mysql
    #因为mysql不是安装在/usr/local/mysql 目录下,所以这里需要修改/etc/init.d/mysql 文件
    vi /etc/init.d/mysql
    #找到basedir 和 datadir
    basedir=/www/server/mysql
    datadir=/www/server/mysql/data
  7. 启动服务

    1
    service mysqld start
  8. 进入 mysql 命令行窗口

    1
    2
    cd /www/server/mysql
    bin/mysql -u root -p
  9. 修改 mysql 密码

    1
    set password = password('root');
  10. 如果需要重新初始化mysql, 则把 mysql/data目录删除即可

  11. 查看ssl加密是否开启
    1
    2
    #have_ssl 为 yes 代表已开启,这里只是开启了SSL加密,如果要使用SSL账号,另找资料
    show variables like 'have_ssl'
添加 Apache PHP MySQL 环境变量
1
2
3
4
5
vi /etc/profile
#在最下面添加
export PATH=$PATH:/www/server/httpd/bin:/www/server/php/bin:/www/server/mysql/bin
#保存后运行以下命令,立即生效
source /etc/profile
设置 Apache MySQL 开机启动
1
2
3
4
vi /etc/rc.d/rc.local
#在最下面添加
/etc/init.d/httpd start
/etc/init.d/mysql start
禁止 mysql 和 apache 用户登录
1
2
3
4
5
6
#mysq与apache 都添加了用户组和用户,平时不需要登录
#禁止登录
usermod -L apache
usermod -L mysql
#解除禁用
usermod -U 用户名
PHP 扩展安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#pdo扩展
cd /www/package/php-7.1.4/ext/pdo
phpize
./configure --with-php-config=/www/server/php/bin/php-config --enable-pdo=shared
make && make install
cd /www/package/php-7.1.4/ext/pdo_mysql
./configure --with-php-config=/www/server/php/bin/php-config --with-pdo-mysql=/www/server/mysql
make && make install
#添加扩展
vi /www/server/php/lib/php.ini
extension=pdo.so
extension=pdo_mysql.so

#mb_string
cd /www/package/php-7.1.4/ext/mbstring
phpize
./configure --with-php-config=/www/server/php/bin/php-config
make
make install
#添加扩展
vi /www/server/php/lib/php.ini
extension=mbstring.so

#gd2
yum install -y libvpx libvpx-devel
yum install -y libjpeg-turbo libjpeg-turbo-devel
yum install -y libpng libpng-devel
yum install -y freetype freetype-devel
cd /www/package/php-7.1.4/ext/gd
phpize
./configure --with-php-config=/www/server/php/bin/php-config --with-vpx-dir=/usr/local/ --with-jpeg-dir=/usr/local/ --with-png-dir=/usr/local/ --with-freetype-dir=/usr/local
make
make install
#添加扩展
vi /www/server/php/lib/php.ini
extension=gd.so

#openssl
cd /www/package/php-7.1.4/ext/openssl
phpize
./configure --with-php-config=/www/server/php/bin/php-config --with-openssl
make
make install
#添加扩展
vi /www/server/php/lib/php.ini
extension=openssl.so
#提示 `Cannot find config.m4`, 将当前目录下的 config0.m4 重命名为 config.m4
mv config0.m4 config.m4

#curl
cd /www/package/php-7.1.4/ext/curl
phpize
./configure --with-php-config=/www/server/php/bin/php-config --with-curl
make
make install
#添加扩展
vi /www/server/php/lib/php.ini
extension=curl.so
#提示 make: *** No targets specified and no makefile found. Stop.
wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz
tar zxvf ncurses-5.6.tar.gz
cd ncurses-5.6
./configure -prefix=/usr/local -with-shared -without-debug
make && make install

#sockets
cd /www/package/php-7.1.4/ext/sockets
phpize
./configure --with-php-config=/www/server/php/bin/php-config --enable-sockets
make
make install
#添加扩展
vi /www/server/php/lib/php.ini
extension=sockets.so

#mysqli
cd /www/package/php-7.1.4/ext/mysqli
phpize
./configure --with-php-config=/www/server/php/bin/php-config --with-mysqli=/www/server/mysql/bin/mysql_config
make
#如果 make 时报:make: *** [mysqli_api.lo] Error 1, 运行以下命令
mkdir -p ext/mysqlnd
cp ../mysqlnd/mysql_float_to_double.h ext/mysqlnd/
make install
#添加扩展
vi /www/server/php/lib/php.ini
extension=mysqli.so
Apache 模块安装
1
2
3
4
5
6
7
8
#加载 mod_deflate模块
cd /www/package/apache/httpd-2.4.25/modules/filters
apxs -i -a -c mod_deflate.c

#加载 mod_ssl 模块
./configure --prefix=/www/server/httpd --with-apr=/www/server/apr --with-apr-util=/www/server/apr-util --with-pcre=/www/server/pcre --enable-module=so --enable-mods-shared=all --with-ssl=/usr/bin/openssl --enable-ssl
#重新编译不会覆盖httpd.conf文件, 所以需要httpd.conf手动加载模块
LoadModule ssl_module modules/mod_ssl.so
0%