源碼搭建LAMP環境

  須要準備的安裝包以及下載地址(只是一個大概地址,版本和下載方式須要自行選擇):php

    Apache  http://httpd.apache.org/   httpd主程序包(http server)html

    MySQL  https://dev.mysql.com/downloads/mysql/  mysql主程序包mysql

    PHP  https://php.net/downloads.php  php主程序包c++

    apr和apr-util  http://apr.apache.org/  apr和apr-util都是httpd的依賴包正則表達式

    pcre  http://pcre.org/  httpd的依賴包sql

    boost  https://www.boost.org/users/download/  mysql5.7版本必須的依賴包數據庫

  其中apr和apr-util是對後端服務軟件進行優化的。apr-util只是在apr的基礎上提供了更多的數據結構和操做系統封裝接口而已。apache

  而pcre全稱Perl Compatible Regular Expressions,是使用C語言編寫的正則表達式函數庫,被普遍運用到許多開源軟件中。vim

(1).準備安裝環境後端

  安裝編譯工具和開發包(依賴包)

[root@youxi1 ~]# yum -y install make gcc gcc-c++ openssl openssl-devel expat-devel

  上傳下載好的源代碼包。我使用的是以下版本:apr-1.6.2.tar.gz、apr-util-1.6.0.tar.gz、boost_1_59_0.tar.gz、httpd-2.4.37.tar.gz、mysql-5.7.19.tar.gz、pcre-8.41.tar.gz、php-7.1.24.tar.gz。

(2).編譯安裝apr和apr-util

  編譯安裝apr

[root@youxi1 ~]# tar zxf apr-1.6.2.tar.gz -C /usr/local/src/  //解壓地址是約定俗成的,並非必須解壓到這個位置
[root@youxi1 ~]# cd /usr/local/src/apr-1.6.2/
[root@youxi1 apr-1.6.2]# ./configure --prefix=/usr/local/apr  //指定程序存放路徑,不存在時會自動建立
[root@youxi1 apr-1.6.2]# make && make install
[root@youxi1 apr-1.6.2]# echo $?  //若是返回0則正確安裝
0

  注意:若是沒有指定--prefix,那麼可執行文件默認放在/usr /local/bin,庫文件默認放在/usr/local/lib,配置文件默認放在/usr/local/etc,其它的資源文件放在/usr /local/share。

  回到上傳壓縮包的地址,編譯安裝apr-util

[root@youxi1 apr-1.6.2]# cd
[root@youxi1 ~]# tar zxf apr-util-1.6.0.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/apr-util-1.6.0/
[root@youxi1 apr-util-1.6.0]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
[root@youxi1 apr-util-1.6.0]# make && make install
[root@youxi1 apr-util-1.6.0]# echo $?
0

  注意:apr-util須要指定apr中的一個配置文件bin/apr-1-config。

(3).編譯安裝pcre

  回到上傳壓縮包的地址,編譯安裝pcre

[root@youxi1 apr-util-1.6.0]#cd
[root@youxi1 ~]# tar zxf pcre-8.41.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/pcre-8.41/
[root@youxi1 pcre-8.41]# ./configure --prefix=/usr/local/pcre
[root@youxi1 pcre-8.41]# !make  //調用最近一次make開頭的命令
[root@youxi1 pcre-8.41]# echo $?
0

(4).編譯安裝Apache

  1)回到上傳壓縮包的地址,編譯安裝Apache

[root@youxi1 pcre-8.41]# cd
[root@youxi1 ~]# tar zxf httpd-2.4.37.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/httpd-2.4.37/
[root@youxi1 httpd-2.4.37]# ./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --enable-ssl --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-modules=most --enable-mpms-shared=all --with-mpm=event
[root@youxi1 httpd-2.4.37]# make && make install
[root@youxi1 httpd-2.4.37]# echo $?
0

  參數說明:

  --prefix=/usr/local/apache  安裝路徑

  --enable-so  支持動態加載模塊

  --enable-rewrite  支持網站地址重寫

  --enable-ssl  支持ssl加密

  --with-apr=/usr/local/apr  指定apr路徑

  --with-apr-util=/usr/local/apr-util  指定apr-util路徑

  --with-pcre=/usr/local/pcre  指定pcre路徑

  --enable-modules=most  選擇要編譯的模塊

  --enable-mpms-shared=all  支持當前平臺上的動態加載的全部MPM,並將它們構建爲DSO模塊。

  --with-mpm=event  選擇默認的MPM

  參數詳細查看:http://httpd.apache.org/docs/2.4/programs/configure.html#configurationoptions

  注意:此時的配置文件是/usr/local/apache/conf/httpd.conf,默認網站根目錄是/usr/local/apache/htdocs/。

  說明:MPM,中文多處理模塊,能夠構建爲動態加載的DSO或與服務器靜態連接。

  2)生成啓動腳本。若是此時重啓服務器,那麼能夠使用systemctl start|stop|restart|status apachectl管理Apache,可是沒有辦法enable,由於這不是一個本地服務。

[root@youxi1 httpd-2.4.37]# cp /usr/local/apache/bin/apachectl /etc/init.d/
[root@youxi1 httpd-2.4.37]# chmod +x /etc/init.d/apachectl

  3)寫一個systemctl能夠調用的Apache服務腳本,讓它成爲本地服務

[root@youxi1 httpd-2.4.37]# vim /usr/lib/systemd/system/apache.service
[Unit]
Description=apache
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/apachectl start
ExecReload=/etc/init.d/apachectl restart
ExecStop=/etc/init.d/apachectl stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target

  這時候就能夠直接使用systemctl啓動Apache,而且開機自啓

[root@youxi1 httpd-2.4.37]# systemctl start apache  //啓動apache
[root@youxi1 httpd-2.4.37]# systemctl enable apache.service  //開機自啓apache
Created symlink from /etc/systemd/system/multi-user.target.wants/apache.service to /usr/lib/systemd/system/apache.service.
[root@youxi1 httpd-2.4.37]# ps aux | grep apache
root      41403  0.0  0.2  72808  2288 ?        Ss   14:45   0:00 /usr/local/apache/bin/httpd -k start
daemon    41404  0.0  0.4 361772  4200 ?        Sl   14:45   0:00 /usr/local/apache/bin/httpd -k start
daemon    41405  0.0  0.4 361772  4200 ?        Sl   14:45   0:00 /usr/local/apache/bin/httpd -k start
daemon    41406  0.0  0.4 361772  4200 ?        Sl   14:45   0:00 /usr/local/apache/bin/httpd -k start
root      41509  0.0  0.0 112724   984 pts/0    R+   14:46   0:00 grep --color=auto apache

  不過能夠看到Apache使用的是一個叫daemon的帳戶啓動的,也能夠建立一個專用的用戶

[root@youxi1 httpd-2.4.37]# useradd -M -s /sbin/nologin apache  //-M不自動創建家目錄,-s /sbin/nologin不容許登陸
[root@youxi1 httpd-2.4.37]# vim /usr/local/apache/conf/httpd.conf  //修改配置文件
User apache  //將166和167行修改
Group apache
[root@youxi1 httpd-2.4.37]# chown -R apache.apache /usr/local/apache/  //更改目錄權限

  注意:若是防火牆沒有關閉,請將端口號加到規則中

[root@youxi1 httpd-2.4.37]# firewall-cmd --permanent --zone=public --add-port=80/tcp
success
[root@youxi1 httpd-2.4.37]# firewall-cmd --reload 
success
[root@youxi1 httpd-2.4.37]# firewall-cmd --permanent --zone=public --list-ports 
80/tcp

  4)測試

  Windows上測試:

  Linux上測試:

[root@youxi2 ~]# curl 192.168.5.101
<html><body><h1>It works!</h1></body></html>

(5).編譯安裝mysql

  1)卸載系統自帶的mysql和mariadb,還有boost(這是Mysql5.7版本之後必須的)

[root@youxi1 httpd-2.4.37]# yum -y remove mysql* mariadb* boost-*

  2)安裝依賴包

[root@youxi1 httpd-2.4.37]# yum install -y cmake make gcc gcc-c++ bison ncurses ncurses-devel

  3)添加系統用戶mysql

[root@youxi1 httpd-2.4.37]# useradd -M -s /sbin/nologin -r mysql  //-M不建立主目錄,-s /sbin/nologin不容許登陸,-r建立系統用戶

  網上好多都是先groupadd mysql,而後再useradd -M -s /bin/false -r -g mysql mysql,一開始沒找到緣由,後來發現原來官網是這麼寫的。

  擴展:/bin/false是最嚴格的禁止登陸。而/sbin/nologin只是不容許系統登陸,可是能夠使用ftp等其餘服務登陸。mysql官網使用的就是/bin/false。

  4)回到上傳壓縮包的地址,編譯安裝mysql

[root@youxi1 httpd-2.4.37]# cd
[root@youxi1 ~]# tar zxf boost_1_59_0.tar.gz -C /usr/local/src/  //解壓boost
[root@youxi1 ~]# tar zxf mysql-5.7.19.tar.gz -C /usr/local/src/  //解壓mysql
[root@youxi1 ~]# mkdir -p /var/lib/mysql/data  //準備安裝目錄/var/lib/mysql和數據目錄/var/lib/mysql/data
[root@youxi1 ~]# chown -R mysql.mysql /var/lib/mysql/  //更改目錄所屬主和所屬組
[root@youxi1 ~]# cd /usr/local/src/mysql-5.7.19/
[root@youxi1 mysql-5.7.19]#  cmake -DCMAKE_INSTALL_PREFIX=/var/lib/mysql \
-DMYSQL_DATADIR=/var/lib/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/src/boost_1_59_0
[root@youxi1 mysql-5.7.19]# make -j 4 && make install  //-j [CPU核心數]多線程編譯
[root@youxi1 mysql-5.7.19]# echo $?
0

  注意:編譯是至關的慢,因此最好是使用二進制安裝Mysql。

  參數說明:

    DCMAKE_INSTALL_PREFIX:指定MySQL程序的安裝目錄,默認/usr/local/mysql
    DMYSQL_DATADIR:指定MySQL程序的數據目錄
    DSYSCONFDIR:初始化參數文件目錄
    DWITH_xxx_STORAGE_ENGINE:指定靜態編譯到mysql的存儲引擎,MyISAM,MERGE,MEMBER以及CSV四種引擎默認即被編譯至服務器,不須要特別指定。
    DWITH_READLINE:使用readline功能
    DMYSQL_UNIX_ADDR:socket文件路徑,默認/tmp/mysql.sock
    DMYSQL_TCP_PORT:服務端口號,默認3306
    DENABLED_LOCAL_INFILE:指定是否容許本地執行LOAD DATA INFILE,默認OFF
    DEFAULT_CHARSET:指定服務器默認字符集,默認latin1
    DEFAULT_COLLATION:指定服務器默認的校對規則,默認latin1_general_ci
    DWITH_BOOST:指定boost的地址
    DWITHOUT_xxx_STORAGE_ENGINE:指定不編譯的存儲引擎
    DWITH_COMMENT:指定編譯備註信息

  5)建立並編輯一個配置文件my.cnf:

[root@youxi1 mysql-5.7.19]# vim /etc/my.cnf
[mysqld]
basedir=/var/lib/mysql
datadir=/var/lib/mysql/data
port=3306
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8
log-error=/var/log/mysqld.log
pid-file=/tmp/mysqld.pid
[mysql]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock

  6)配置環境變量,並刷新

[root@youxi1 mysql-5.7.19]# vim /etc/profile.d/mysql.sh
export PATH=/var/lib/mysql/bin:$PATH
[root@youxi1 mysql-5.7.19]# . /etc/profile.d/mysql.sh  //兩種刷新方式,也能夠source /etc/profile.d/mysql.sh

  7)生成啓動腳本。

[root@youxi1 mysql-5.7.19]# cp /var/lib/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@youxi1 mysql-5.7.19]# chmod +x /etc/init.d/mysqld

  因爲搜了一圈沒找到如何寫本地服務,因此用的是官網提供的chkconfig命令,讓mysqld開機自啓

[root@youxi1 mysql-5.7.19]# chkconfig --add mysqld
[root@youxi1 mysql-5.7.19]# chkconfig --list mysqld
注:該輸出結果只顯示 SysV 服務,並不包含
原生 systemd 服務。SysV 配置數據
可能被原生 systemd 配置覆蓋。 

      要列出 systemd 服務,請執行 'systemctl list-unit-files'。
      查看在具體 target 啓用的服務請執行
      'systemctl list-dependencies [target]'。

mysqld          0:關    1:關    2:開    3:開    4:開    5:開    6:關
[root@youxi1 mysql-5.7.19]# chkconfig --level 2345 mysqld on  //若是上面顯示的2345全是關,使用這個命令就行了

  注意:從新啓動服務器或mysqld添加到開機自啓,systemctl start|restart|status|stop mysqld均可以使用,但沒有辦法enbale,由於這不是一個本地服務。

  8)安裝完mysql還須要修改安裝目錄的所屬主和所屬組

[root@youxi1 mysql-5.7.19]# chown -R mysql:mysql /var/lib/mysql

  9)接着就是初始化數據庫,並啓動mysql

[root@youxi1 mysql-5.7.19]# /var/lib/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
[root@youxi1 mysql-5.7.19]# /etc/init.d/mysqld start  //報錯了
Starting MySQL.... ERROR! The server quit without updating PID file (/tmp/mysqld.pid).

  處理這個錯誤須要刪除數據目錄,從新初始化

[root@youxi1 mysql-5.7.19]# rm -rf /var/lib/mysql/data/*
[root@youxi1 mysql-5.7.19]# /var/lib/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
[root@youxi1 mysql-5.7.19]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS! 

  10)此時的mysql是沒有密碼直接能夠登陸的,使用mysql_secure_installation安全設置初始化

[root@youxi1 mysql-5.7.19]# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0  //設置密碼複雜度
Please set the password for root here.

New password:   //默認最小密碼長度爲8

Re-enter new password: 

Estimated strength of the password: 50 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : 

 ... skipping.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : 

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : 

 ... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : 

 ... skipping.
All done! 

  11)測試

[root@youxi1 mysql-5.7.19]# mysql -uroot -p12345678
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.19 Source distribution

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> 

(6).編譯安裝php

  1)安裝依賴包,須要epel源

[root@youxi1 mysql-5.7.19]# yum -y install php-mcrypt libmcrypt libmcrypt-devel  autoconf  freetype gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel re2c php-pear

  2)回到上傳壓縮包的地址,編譯安裝php

[root@youxi1 mysql-5.7.19]# cd 
[root@youxi1 ~]# tar zxf php-7.1.24.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/php-7.1.24/
[root@youxi1 php-7.1.24]# ./configure --prefix=/usr/local/php/ \
--with-apxs2=/usr/local/apache/bin/apxs \
--enable-mbstring \
--with-curl \
--with-gd \
--enable-fpm \
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-config-file-path=/usr/local/php/etc/ \
--with-mysqli=mysqlnd \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--enable-maintainer-zts
[root@youxi1 php-7.1.24]# make -j 4 && make install
[root@youxi1 php-7.1.24]# echo $?
0

  參數說明:

    --with-apxs2 將php編譯爲Apache的一個模塊進行使用
    --enable-mbstring 多字節字符串的支持
    --with-curl 支持cURL
    --with-gd 支持gd庫
    --enable-fpm 支持構建fpm
    --enable-mysqlnd 啓用mysqlnd
    --with-pdo-mysql 支持pdo:MySQL支持
    --with-config-file-path 設置配置文件路徑
    --with-mysqli 支持MySQLi
    --with-mysql-sock 關聯mysql的socket文件
    --enable-maintainer-zts 若是Apache是event模型,那須要指定zts

  3)生成配置文件

[root@youxi1 php-7.1.24]# cp php.ini-production /usr/local/php/etc/php.ini

  4)修改Apache的配置文件,使其支持php,並重啓Apache

[root@youxi1 php-7.1.24]# vim /usr/local/apache/conf/httpd.conf
AddType application/x-httpd-php .php  //大概在393行
AddType application/x-httpd-php-source .phps
[root@youxi1 php-7.1.24]# systemctl restart apache.service

  5)測試

  建立測試界面

[root@youxi1 php-7.1.24]# vim /usr/local/apache/htdocs/index.php
<?php
        phpinfo();
?>

  Windows上查看

相關文章
相關標籤/搜索