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 一種使用廣泛的數據庫,
- 使用 C/C++ 編寫, 並且使用了多種編譯器測試, 保證源代碼的可移植性.
- 支持 AIX, FreeBSD, HU-UX, Linux, MacOS, Windows 等等多種操作系統
- 提供了多種變成語言的API, 包含 C, C++, Python, Java, Perl, PHP 等等
- 支持多線程, 充分利用了多線程, 充分使用了CPU 資源
- 優化了 SQL 查詢算法, 有效提高查詢速度
- 可以作爲單一應用程序提供服務, 也可以作爲庫嵌入到其他軟件中.
- 提供TCP/IP, ODBC, JDBC 等多種數據庫 連接途徑
- 提供用於 管理, 檢查, 優化數據操作的管理工具
- 多個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 安裝前準備
- 版本選擇
- MySQL 版本通常有
- Community 社區版, 開源免費, 沒有官方技術支持
- Enterprise 企業版, 需要付費, 官方技術支持
- Cluster 集羣版, 開源免費, 可以將 MySQL Server 封裝成一個Server
- Cluster CGE 高級集羣版, 付費
- GA 通用版(Generally Available) 通常使用在生產環境
- DMR 開發里程碑(Development Milestone Release) 版本
- 下載MySQL
- 下載
- 官網下載:
https://dev.mysql.com/downloads/
- 歷史版本:
- 官網選擇 Archives(歸檔)
- MySQL Community Server(社區版本)
- 常用版本選擇
- rpm 免編譯包
- 源碼包
- 最小化包
- 嵌入式包
- 官網下載:
2.6 安裝
- 這裏使用的是 mysql5.7 源碼包
mysql-boost-5.7.22.tar.gz
- 編譯安裝準備
-
安裝 編譯安裝工具, 以及一些依賴的包
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]#
- 創建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 ~]#
- 編譯安裝
- 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
- 初始化 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
- MySQL5.7 使用的是
[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
- 啓動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)] >
- 設置開機自啓
[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 安裝
- 這裏採用源碼編譯安裝
- 安裝前準備
- 下載需要的需要的包
[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
- 準備安裝包
[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
- 準備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
- 安裝
- 編譯準備
./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]#
- 啓動
[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
- 設置開機自啓
[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]#