LAMP 環境

1. LAMP 架構

1.1 簡介

LAMP 是基於 Linux 系統的Web 架構, 由 Linux 系統, Apache web服務器, MySQL(MariaDB) , PHP(Python, Perl, ruby..) 一門服務端語言.

  • L Linux 操作系統
  • A Apache Web服務器
  • M MySQL 或 MariaDB 數據庫服務
  • P PHP, Python 或其它編程語言

cgi

2. MySQL

2.1 簡介httpd

  • MySQL 是一個輕量級的關係型數據庫管理系統, 目前屬於Oracle 公司.

  • MySQL 被廣泛應用在了各種互聯網網站上, 應爲體積小, 速度快, 成本低, 開放源代碼,免費.

  • MySQL 是一種關係型數據庫系統, 相關聯的數據被存放在了不同的數據表中, 可以通過數據之間的關係, 靈活調用.

2.2 MySQL 特點

  • MySQL 一種使用廣泛的數據庫,
  1. 使用 C/C++ 編寫, 並且使用了多種編譯器測試, 保證源代碼的可移植性.
  2. 支持 AIX, FreeBSD, HU-UX, Linux, MacOS, Windows 等等多種操作系統
  3. 提供了多種變成語言的API, 包含 C, C++, Python, Java, Perl, PHP 等等
  4. 支持多線程, 充分利用了多線程, 充分使用了CPU 資源
  5. 優化了 SQL 查詢算法, 有效提高查詢速度
  6. 可以作爲單一應用程序提供服務, 也可以作爲庫嵌入到其他軟件中.
  7. 提供TCP/IP, ODBC, JDBC 等多種數據庫 連接途徑
  8. 提供用於 管理, 檢查, 優化數據操作的管理工具
  9. 多個MySQL服務 可以提供集羣服務, 以應對更加複雜的需求

2.3 MySQL 應用

  • 和其他數據庫(Oracle, DB2, SQL Server)相比, MySQL 確實有一定不足, 如規模小, 功能有限(MYSQL Cluster 的工鞥你和效率 都相比較差)但是對於常規的中小企業和個人用戶來說, MySQL 功能都是綽綽有餘的, 且MYSQL 開放原發, 可以大大降低成本, 網絡流行的網站架構大多是有使用 MySQL.

2.4 MySQL 管理

  • 常用的是 命令行管理工具 mysql, mysqladmin
  • 圖形管理工具 MySQL Adminitor, MySQL Query Browser
  • phpMyAdmin 由PHP 編寫的MySQL 管理程序, 提供Web 管理界面, 用於管理MySQL 數據庫
  • phpMyBackupPro 可以通過Web 界面創建管理數據庫, 可以用於在摸個時間或週期備份 MySQL 數據庫

2.5 MySQL 安裝前準備

  1. 版本選擇
  • MySQL 版本通常有
    • Community 社區版, 開源免費, 沒有官方技術支持
    • Enterprise 企業版, 需要付費, 官方技術支持
    • Cluster 集羣版, 開源免費, 可以將 MySQL Server 封裝成一個Server
    • Cluster CGE 高級集羣版, 付費
    • GA 通用版(Generally Available) 通常使用在生產環境
    • DMR 開發里程碑(Development Milestone Release) 版本
  1. 下載MySQL
  • 下載
    • 官網下載: https://dev.mysql.com/downloads/
    • 歷史版本:
      • 官網選擇 Archives(歸檔)
      • MySQL Community Server(社區版本)
    • 常用版本選擇
      • rpm 免編譯包
      • 源碼包
      • 最小化包
      • 嵌入式包

2.6 安裝

  • 這裏使用的是 mysql5.7 源碼包 mysql-boost-5.7.22.tar.gz
  1. 編譯安裝準備
  • 安裝 編譯安裝工具, 以及一些依賴的包

    • yum -y install gcc-c++ gcc openssl-devel zlib-devel cmake ncurses-devel libaio-devel
  • 準備安裝目錄

    • mkdir -p /opt/{app,src}
  • 將源碼包下載到src目錄

  • 解壓並進入目錄

[root@node10009 src]# tar zxf ./mysql-boost-5.7.22.tar.gz 
[root@node10009 src]# ls
mysql-5.7.22  mysql-boost-5.7.22.tar.gz
[root@node10009 src]# pwd
/opt/src
[root@node10009 src]# cd mysql-5.7.22/
[root@node10009 mysql-5.7.22]# 
  1. 創建MySQL 管理組合用戶
[root@node10009 ~]# groupadd  -r mysql
[root@node10009 ~]# useradd -M -g mysql -r -d /dev/null -s /sbin/nologin mysql
[root@node10009 ~]# cat /etc/passwd | grep mysql
mysql:x:959:100::/home/mysql:/sbin/nologin
[root@node10009 ~]# cat /etc/group | grep mysql
mysql:x:994:mysql
[root@node10009 ~]# 
  1. 編譯安裝
  • mysql5.5 之後採用cmake 進行編譯
  • 編譯準備
cmake . \
    -DBUILD_CONFIG=mysql_release \
    -DCMAKE_INSTALL_PREFIX="/opt/app/mysql57/" \
    -DINSTALL_SBINDIR=bin \
    -DINSTALL_SCRIPTDIR=bin \
    -DINSTALL_LIBDIR=lib/mysql \
    -DINSTALL_PLUGINDIR=lib/plugin \
    -DINSTALL_INCLUDEDIR=include \
    -DINSTALL_INFODIR=share/info \
    -DINSTALL_MANDIR=share/man \
    -DINSTALL_MYSQLSHAREDIR=share/mysql \
    -DINSTALL_SUPPORTFILESDIR=share/mysql \
    -DINSTALL_MYSQLTESTDIR=mysql-test \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DEXTRA_CHARSETS=all \
    -DWITH_BOOST=boost \

--------------------------------------
## 選項解析
- 查看可用的編譯選項:
    + cmake . -LH
    + 或 ccmake .
- 配置解析
    + -DBUILD_CONFIG:       編譯器按照 oracle 生成官方版本的選項來編譯
    + -DCMAKE_INSTALL_PREFIX:   項目主目錄
    + -DINSTALL 開頭: 表示配置對應項 的地址
    + -DDEFAULT_CHARSET=utf8    默認字符集, 
    + -DDEFAULT_COLLATION       默認排序規則
    + -DEXTRA_CHARSETS          支持的字符集
    + -DWITH_BOOST              boost庫的位置, (boost 是 C++ 的擴展庫, 5.7 需要使用該庫)

  • 編譯並安裝 make && make install

  1. 初始化 MySQL
  • 創建目錄, 設置權限
[root@node10009 mysql57]# mkdir -p /opt/app/mysql57/data/{data,logs,binlog,relaylog,redolog,undolog,tmp}
[root@node10009 mysql57]# chown mysql:mysql ./data/*
[root@node10009 mysql57]# 
  • 準備配置文件
    • 5.7 開始包內不提供配置文件, 需要自己寫, 或拷貝
[root@node10009 mysql57]# ls /opt/app/mysql57/etc/my.cnf 
/opt/app/mysql57/etc/my.cnf
  • 初始化數據庫
    • MySQL5.7 使用的是 mysqld --initalize 進行初始化的
    • 顯示的信息中有MySQL root 用戶的初始密碼, 如果沒有看到, 可以在 mysql
[root@node10009 mysql57]# ./bin/mysqld --initialize --datadir=/opt/app/mysql57/data/data/ --user=mysql --basedir=/opt/app/mysql57/
2018-12-01T11:39:02.704423Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-12-01T11:39:02.839755Z 0 [Warning] InnoDB: New log files created, LSN=45790
2018-12-01T11:39:02.865625Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-12-01T11:39:02.923910Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: b3a108e9-f55d-11e8-b5a8-000c298f4e4a.
2018-12-01T11:39:02.924968Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2018-12-01T11:39:02.925953Z 1 [Note] A temporary password is generated for root@localhost: 1z-V-/dIN8el
  1. 啓動MySQL
[root@node10009 mysql57]# ./bin/mysqld_safe  --defaults-file=/opt/app/mysql57/etc/my.cnf &
[1] 27050
[root@node10009 mysql57]# 2018-12-01T17:26:47.231094Z mysqld_safe Logging to '/opt/app/mysql57/data/logs/error_mysqld.log'.
2018-12-01T17:26:47.262668Z mysqld_safe Starting mysqld daemon with databases from /opt/app/mysql57/data/data
[root@node10009 mysql57]# ss -tan | grep 3306
LISTEN     0      128    127.0.0.1:3306                     *:*                  
  • 登陸 並修改密碼
[root@node10009 mysql57]# ./bin/mysql  -hlocalhost -P3306 -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.22-log

Copyright (c) 2000, 2018, 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 [(none)] > 
MySQL [(none)] > ALTER USER 'root'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

MySQL [(none)] > flush privileges;
Query OK, 0 rows affected (0.01 sec)
MySQL [(none)] > 
  1. 設置開機自啓
[root@node10009 mysql57]# cp  /opt/src/mysql-5.7.22/scripts/systemd/mysqld.service.in /usr/lib/systemd/system/mysqld.service
[root@node10009 mysql57]# vim /usr/lib/systemd/system/mysqld.service
....
[root@node10009 mysql57]# systemctl start mysqld.service
[root@node10009 mysql57]# systemctl enable mysqld.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
[root@node10009 mysql57]# systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2018-12-02 02:00:07 CST; 44s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
 Main PID: 28844 (mysqld)
   CGroup: /system.slice/mysqld.service
           └─28844 /opt/app/mysql57/bin/mysqld --daemonize --pid-file=/opt/app/mysql57/data/logs/mysqld.pid

Dec 02 02:00:06 node10009 systemd[1]: Starting MySQL Server...
Dec 02 02:00:07 node10009 systemd[1]: Started MySQL Server.

[root@node10009 mysql57]# 

3. Apache

3.1 簡介

  • Apache HTTP Server 是一個高性能模塊化的 web 服務器, 是使用最廣泛的web服務器之一,

  • Apache 意思是衝滿補丁的服務器, 應爲他是自由軟件, 會不斷有人爲其開發新功能, 新特性.

  • 特點是 簡單, 速度快, 性能穩定, 可以作爲簡單的代理服務器.

  • 2.4 新特性:

    • 支持多個編譯時添加多個 MPM 可以運行時通過 LoadModule 指令 配置
    • 支持 event MPM(處理活動鏈接是效率更高)
    • 支持異步讀寫

3.2 下載

  • 官網地址:
    • http://httpd.apache.org/download.cgi

3.3 安裝

  • 這裏採用源碼編譯安裝
  1. 安裝前準備
  • 下載需要的需要的包
[root@node10009 src]# yum -y install zlib-devel openssl-devel expat-devel
[root@node10009 src]# useradd -u2000 -d /dev/null -M -s /sbin/nologin httpd 
  1. 準備安裝包
[root@node10009 src]# ll ./
total 687704
-rw-r--r--  1 root root    1073556 Oct 25 11:46 apr-1.6.5.tar.gz
-rw-r--r--  1 root root     554301 Oct 25 11:46 apr-util-1.6.1.tar.gz
-rw-r--r--  1 root root    9177278 Oct 25 11:40 httpd-2.4.37.tar.gz
------
# apahce 2.4 需要有apr 工具的支持, 所以需要單獨安裝或者指定apr 
  1. 準備apr 和 apr-unit
[root@node10009 httpd-2.4.37]# tar -zxf  /opt/src/apr-1.6.5.tar.gz -C ./srclib/
[root@node10009 httpd-2.4.37]# tar -zxf  /opt/src/apr-util-1.6.1.tar.gz -C ./srclib/
[root@node10009 httpd-2.4.37]# ls srclib
apr-1.6.5  apr-util-1.6.1
[root@node10009 httpd-2.4.37]# cd ./srclib/
[root@node10009 srclib]# mv apr-1.6.5/ apr 
[root@node10009 srclib]# mv apr-util-1.6.1/ apr-util
  1. 安裝
  • 編譯準備
./configure \
    --prefix=/opt/app/apache2 \
    --enable-authn-anon \
    --enable-deflate \
    --enable-expires \
    --enable-mods-shared=all \
    --enable-rewrite \
    --enable-so \
    --enable-mpms-shared=all
    --enable-ssl \
    --with-included-apr \
    --with-mpm=prefork \
    --with-z

---------------------------
--prefix:       指定安裝目錄
--enable-authn-anon     匿名用戶權限
--enable-deflate        啓用 deflate 算法
  • 編譯並安裝包
[root@node10009 httpd-2.4.37]# make && make install
....
[root@node10009 httpd-2.4.37]# cd /opt/app/apache24/
[root@node10009 apache24]# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  lib  logs  man  manual  modules
[root@node10009 apache24]# 
  1. 啓動
[root@node10009 apache24]# ./bin/apachectl 
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe8f:4e4a. Set the 'ServerName' directive globally to suppress this message
[root@node10009 apache24]# ss -tan | grep 80
LISTEN     0      128         :::80                      :::*                  
TIME-WAIT  0      0          ::1:53376                  ::1:80                 
[root@node10009 apache24]# curl localhost:80 -I
HTTP/1.1 200 OK
Date: Sat, 01 Dec 2018 18:30:35 GMT
Server: Apache/2.4.37 (Unix)
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html
  1. 設置開機自啓
[root@node10009 apache24]# vim /usr/lib/systemd/system/httpd.service
    [Unit]
    Description=Apache HTTP Server
    After=network.target
    [Service]
    Type=forking
    ExecStart=/opt/app/apache24/bin/apachectl
    ExecReload=/opt/app/apache24/bin/apachectl -k graceful
    ExecStop=/opt/app/apache24/bin/apachectl -k stop
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
[root@node10009 apache24]# systemctl daemon-reload
[root@node10009 apache24]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@node10009 apache24]# 

4. PHP

4.1 簡介

  • php 是一種高級編程語言, 常用於動態交互性的web服務器.
  • PHP 是免費, 且被廣泛使用的, 相較於其他語言, 更適合用於快速的web 開發, 開發效率高, 運行效率良好.

4.2 安裝

  • 安裝前準備
[root@node10009 src]# yum -y install libmcrypt-devel freetype-devel libpng-devel libjpeg-devel curl-devel libxml2-devel openssl-devel openldap-devel libtidy-devel gmp-devel gcc make
  • 解壓縮
[root@node10009 src]# tar jxf php-5.6.36.tar.bz2 
[root@node10009 src]# cd php-5.6.36
[root@node10009 php-5.6.36]# ./configure --help

  • 編譯準備
./configure \
    --prefix=/opt/app/php56 \
    --with-config-file-path=/opt/app/php56/etc \
    --disable-ipv6 \
    --enable-bcmath \
    --enable-dba \
    --enable-ftp \
    --enable-mbstring \
    --enable-sockets \
    --enable-exif \
    --enable-pcntl \
    --enable-soap \
    --enable-zip \
    --with-curl \
    --with-iconv \
    --with-gettext \
    --with-gd \
    --with-gmp \
    --with-freetype-dir \
    --with-jpeg-dir \
    --with-png-dir \
    --with-mcrypt \
    --with-mhash \
    --with-openssl \
    --with-tidy \
    --with-zlib \
    --with-mysqli=mysqlnd \
    --with-pdo-mysql=mysqlnd \
    --enable-fpm --with-apxs2=/opt/app/apache24/bin/apxs

------------------
# 解析
--prefix    安裝目錄
--with-config-file-path     指定安裝目錄
--enable-bcmath             啓用 bc 風格精準數學函數
--enable-dba                動態加載模塊
--enable-ftp                啓用ftp 支持
--enable-mbstring           啓用 mbstring
--enable-sockets            支持socket
--enable-exif               圖片的元數據支持
--enable-pcntl              php進程控制支持
--enable-soap               用於提供和使用 web sevices, php該模塊可以單獨提供 web service
--enable-zip                zip 支持, 用於壓縮
--enable-curl               curl 支持
--with-iconv                字符串按要求的字符編碼來轉換
--with-gettext              程序國際化, 該庫可以根據配置, 對不同的輸出顯示不同語言
--with-gd                   gd庫的支持, 用於圖像處理
--with-gmp                  該庫提供函數用於 處理任意長度的整數, 高進度運算
--with-freetype-dir         gd庫的的一種字體引擎
--with-jpeg-dir             jpeg 的支持
--with-png-dir              png 支持
--with-mcrypt               提供多種加密擴展
--with-mhash                mhash 擴展, 可用於創建校驗和, 消息摘要, 消息驗證等等
--with-openssl              非對稱加密,很重要
--with-tidy                 可用於操作 HTML,XML, 可遍歷文檔樹, 包含腳本(PHP, JSP)
--with-zlib                 .gz 格式的壓縮支持
--with-mysqli=mysqlnd       mysqli 的地址
--with-pdo-mysql=mysqlnd    mysql pdo 的位置
--enable-fpm --with-apxs2=/opt/app/apache24/bin/apxs         apache 的 apxs 地址

  • 查看
[root@node10009 php56]# 
[root@node10009 php56]# ll  /opt/app/apache24/modules/ | grep php
-rwxr-xr-x 1 root root 41145680 Dec  2 04:12 libphp5.so
[root@node10009 php56]# 
  • 準備配置文件
[root@node10009 php56]# cp /opt/src/php-5.6.36/php.ini-development /opt/app/php56/etc/php.ini
  • 設置apache 的php 支持
vim http.conf
    # 在AddType application 下面追加
    AddType application/x-httpd-php .php .html .htm

    # 搜索 DirectoryIndex ,在該行後面添加 index.php
    index.php
  • 測試php
1. 寫一個php 程序
vim /opt/app/apache2/htdocs/index.php
    <?php
        echo 'hello world';
    ?>

2. 重啓httpd 服務
/opt/app/apache2/bin/apachectl -k restart
[root@node10009 apache24]# curl localhost/index.php
hello world
[root@node10009 apache24]# curl localhost/index.php -I
HTTP/1.1 200 OK
Date: Sat, 01 Dec 2018 20:59:51 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.36
X-Powered-By: PHP/5.6.36
Content-Type: text/html; charset=UTF-8

[root@node10009 apache24]# 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章