LNAMP搭建屬於自己的WordPress博客系統

WordPress及phpMyadmin服務搭建

拓撲規劃:

摘要信息 IP地址 作用 系統版本
Nginx 192.168.2.128 負載均衡,反向代理 CentOS7.2
Apache+PHP5.6.36 192.168.2.129 解析wordpress,phpmyadmin動態頁面 CentOS7.2
Nginx+PHP5.6.36 192.168.2.130 解析wordpress,phpmyadmin動態頁面 CentOS7.2
Nginx+MySQL 192.168.2.133 解析靜態頁面,提供MySQL數據庫 CentOS7.2

目錄順序:

LNAMP搭建屬於自己的WordPress博客系統


本次博客涉及所有程序包提供:鏈接:https://pan.baidu.com/s/1-xBK6Ti5IL_KxyQNjzKd1A
提取碼:1ano

基礎環境配置

1. 禁用iptables,selinux,配置epel源
2. 安裝開發工具包
Centos7:    yum groupinstall "Development Tools" 
Centos6:    yum groupinstall "Development Tools" "Server Platform Development"

192.168.2.128(調度器)配置:

安裝pcre正則支持及openssl支持:
[root@nginx ~]# yum -y install pcre-devel openssl-devel
[root@nginx ~]# useradd -r nginx

編譯參數:
[root@nginx nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --user=nginx --group=nginx --with-http_ssl_module  --with-http_stub_status_module --with-http_flv_module --with-http_mp4_module --with-threads --with-file-aio
[root@nginx nginx-1.14.2]# make && make install

配置PATH:
[root@nginx nginx-1.14.2]# echo "export PATH=/usr/local/nginx/sbin:$PATH" >> /etc/profile.d/nginx.sh
[root@nginx nginx-1.14.2]# . /etc/profile.d/nginx.sh

配置nginx目錄:
[root@nginx nginx-1.14.2]# mkdir -p /data/nginx

192.168.2.129(Apache+PHP)配置:

Httpd2.4.38編譯安裝:

(1) apr-1.50
[root@ap apr-1.5.0]# ./configure  --prefix=/usr/local/apr
[root@ap apr-1.5.0]# make -j 4&& make install

(2) apr-util-1.5.3
[root@ap apr-util-1.5.3]# ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr
[root@ap apr-util-1.5.3]# make -j 4&& make install

(3) httpd-2.4.38
[root@ap httpd-2.4.38]# yum install pcre-devel openssl-devel

worker,event模塊:
[root@ap httpd-2.4.38]# ./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd24  --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=event

注意:--with-mpm=xxx ##apahce有三種模型prefork,worker,event根據需要填寫,但是需要注意的是如果是worker/event那麼編譯php時則需要添加 --enable-maintainer-zts 參數

[root@ap httpd-2.4.38]# make -j 4 && make install
[root@ap httpd-2.4.38]# echo "export PATH=/usr/local/apache24/bin:$PATH" >> /etc/profile.d/apache24.sh
[root@ap httpd-2.4.38]# . /etc/profile.d/apache24.sh

添加php支持,準備測試頁:
[root@ap httpd-2.4.38]# vim /etc/httpd/httpd.conf
    ...
    AddType application/x-httpd-php .php            ##添加對.php文件的支持
    AddType application/x-httpd-php-source .phps

    <IfModule dir_module>
        DirectoryIndex index.html index.php         ##配置默認識別主文件
    </IfModule>

        Options Indexes FollowSymLinks              ##註釋掉這一行,禁止顯示apache目錄表
    ...

配置php測試頁面,配置遠端數據庫的連接信息
[root@ap httpd-2.4.38]# vim /usr/local/apache24/htdocs/index.php
    <?php
    // 當數據庫連接正常頁面輸出OK,否則Failure
        $conn = mysql_connect('192.168.2.133','wordpress','123');  
        if ($conn)
        echo "OK";
        else
        echo "Failure";

        phpinfo();
    ?>

### 啓動腳本:CentOS6複製epel安裝腳本修改即可,7先用apachectl來管理
[root@ap httpd-2.4.38]# apachectl start

編譯安裝的模塊很少,在配置文件httpd.conf自行啓用即可

Php5.6.36(DSO)編譯安裝:

###解決依賴關係
[root@ap php-5.6.36]# yum install bzip2-devel libmcrypt-devel libxml2-devel -y

###編譯安裝PHP(DSO模式)
-- 安裝M->P模式(php和MySQL不在一臺主機時)
[root@ap php-5.6.36]# ./configure --prefix=/usr/local/php --with-mysql --with-openssl --with-mysqli=mysqlnd --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache24/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
注意:
    --enable-maintainer-zts 如果httpd編譯的是prefork不需要該項,若爲worker,event則需要
    --with-apxs2    apxs是一個爲Apache服務器編譯和安裝擴展模塊的工具,DSO模式需要指定,FPM模式不需要    

[root@ap php-5.6.36]# make -j4 && make install 
[root@ap php-5.6.36]# echo "export PATH=/usr/local/php/bin:$PATH" > /etc/profile.d/php.sh
[root@ap php-5.6.36]# . /etc/profile.d/php.sh
[root@ap php-5.6.36]# httpd -M  ##查看是否有libphp5模塊,有則php編譯完成

配置文件準備:
[root@ap php-5.6.36]# cp php.ini-production /etc/php.ini
[root@ap php-5.6.36]# mkdir -p /etc/php.d/

-- 安裝M+P模式(php和MySQL在一臺主機時)
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache24/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts

-- 關於PHP如何多版本共存:DSO+FPM兩種形式存在,將編譯目錄稍加區分即可
# ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php5 --with-bz2 --enable-fpm

xcache3.2.0編譯安裝:

### xcache準備:
[root@ap xcache-3.2.0]# phpize --clean && phpize        ##執行此步,生成configure文件
[root@ap xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config 
[root@ap xcache-3.2.0]# make -j4 && make install
注意:編譯最後會得到so的地址:/usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so

### 將xcache的庫添加到php擴展:
[root@ap xcache-3.2.0]# mkdir /etc/php.d -p
[root@ap xcache-3.2.0]# cp xcache.ini /etc/php.d/ 

### 修改xcache的.so的詳細路徑
[root@ap xcache-3.2.0]# vim /etc/php.d/xcache.ini 
...
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so
xcache.admin.enable_auth = Off
xcache.size  =               60M
...

### 編譯完成重啓apache或重載
[root@ap xcache-3.2.0]# pkill httpd
[root@ap xcache-3.2.0]# apachectl start

192.168.2.130(Nginx+PHP)配置:

Nginx1.14.2編譯安裝:

### 安裝pcre正則支持及openssl支持:
[root@np nginx-1.14.2]# yum install -y pcre-devel openssl-devel
[root@np nginx-1.14.2]# useradd -r nginx

### 編譯參數:
[root@np nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --user=nginx --group=nginx --with-http_ssl_module  --with-http_stub_status_module --with-http_flv_module --with-http_mp4_module --with-threads --with-file-aio
[root@np nginx-1.14.2]# make && make install

### 配置PATH:
[root@np nginx-1.14.2]# echo "export PATH=/usr/local/nginx/sbin:$PATH" >> /etc/profile.d/nginx.sh
[root@np nginx-1.14.2]# . /etc/profile.d/nginx.sh

### 配置nginx目錄:
[root@np nginx-1.14.2]# mkdir -p /data/nginx

PHP5.6.36(FPM)編譯安裝:

### 解決依賴關係:
[root@np php-5.6.36]# yum install bzip2-devel libmcrypt-devel libxml2-devel -y

### 編譯參數:
[root@np php-5.6.36]# ./configure --prefix=/usr/local/php --with-mysql --with-openssl --with-mysqli=mysqlnd --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php5 --with-bz2 --enable-fpm
[root@np php-5.6.36]# make -j4 && make install 

### 配置PATH:
[root@np php-5.6.36]# echo "export PATH=/usr/local/php/bin:$PATH" > /etc/profile.d/php.sh
[root@np php-5.6.36]# . /etc/profile.d/php.sh
[root@np php-5.6.36]# httpd -M  ##查看是否有libphp5模塊,有則php編譯完成

### 配置文件準備:
[root@np php-5.6.36]# cp php.ini-production /etc/php.ini
[root@np php-5.6.36]# mkdir -p /etc/php.d/
[root@np php-5.6.36]# cp sapi/fpm/php-fpm /usr/local/bin
[root@np php-5.6.36]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@np php-5.6.36]# mkdir -p /var/lib/php/session;chown -R nginx.nginx /var/lib/php/session
[root@np php-5.6.36]# vim /usr/local/php/etc/php-fpm.conf
    ...
    [www]
    listen = 127.0.0.1:9000     ##不建議對外開放,可以開放局域網,這裏僅偵聽127.0.0.1
    listen.allowed_clients = 127.0.0.1
    user = nginx    ##以nginx用戶啓動,否則nginx無權訪問fpm
    group = nginx
    pm = dynamic     ##動態管理
    slowlog = /var/log/php-fpm/www-slow.log
    php_admin_value[error_log] = /var/log/php-fpm/www-error.log
    php_admin_flag[log_errors] = on
    php_value[session.save_handler] = files
    php_value[session.save_path] = /var/lib/php/session    ##創建目錄並賦予nginx權限
    ...

### 配置php測試頁面,配置遠端數據庫的連接信息
[root@ap httpd-2.4.38]# vim /data/nginx/index.php
    <?php
    // 當數據庫連接正常頁面輸出OK,否則Failure
        $conn = mysql_connect('192.168.2.133','wordpress','123');  
        if ($conn)
        echo "OK";
        else
        echo "Failure";

        phpinfo();
    ?>

192.168.2.133(Nginx+MySQL)配置:

Nginx1.14.2編譯安裝:

### 安裝pcre正則支持及openssl支持:
[root@mysql nginx-1.14.2]# yum -y install pcre-devel openssl-devel
[root@mysql nginx-1.14.2]# useradd -r nginx         
### 編譯參數:
[root@mysql nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --user=nginx --group=nginx --with-http_ssl_module  --with-http_stub_status_module --with-http_flv_module --with-http_mp4_module --with-threads --with-file-aio
[root@mysql nginx-1.14.2]# make -j4 && make install

### 配置PATH:
[root@mysql nginx-1.14.2]# echo "export PATH=/usr/local/nginx/sbin:$PATH" >> /etc/profile.d/nginx.sh
[root@mysql nginx-1.14.2]# . /etc/profile.d/nginx.sh

### 配置nginx目錄:
[root@mysql nginx-1.14.2]# mkdir -p /data/nginx

MySQL5.6.36編譯安裝:

[root@mysql pkg]# tar xf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
[root@mysql local]# ln -s mysql-5.6.36-linux-glibc2.5-x86_64 mysql
[root@mysql local]# mkdir -pv /data/mysql
[root@mysql local]# useradd -r mysql
[root@mysql local]# chown -R mysql.mysql /usr/local/mysql-5.6.36-linux-glibc2.5-x86_64
[root@mysql local]# chown -R mysql.mysql /data/mysql
[root@mysql mysql]# ./scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql
[root@mysql mysql]# cp support-files/my-default.cnf /etc/my.cnf ##my.cnf主要修改datadir,socket位置等常規選項
[root@mysql mysql]# cp support-files/mysql.server /etc/init.d/mysqld   ##改pid位置
[root@mysql mysql]# echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
[root@mysql mysql]# . /etc/profile.d/mysql.sh
[root@mysql mysql]# chkconfig --add mysqld
[root@mysql mysql]# service mysqld restart
[root@mysql mysql]# ln -sv /usr/local/mysql/mysql.sock /tmp/mysql.sock  
[root@mysql mysql]# mysql_secure_installation   ##初始化安全設置並配置root密碼
[root@mysql mysql]# mysql -uroot -proot         ##配置wordpress庫及用戶、密碼
    mysql> CREATE DATABASE wordpress;
    mysql> GRANT  ALL ON wordpress.* TO 'wordpress'@'192.168.2.%' IDENTIFIED BY '123';

wordpress和phpadmin配置修改:

192.168.2.128

[root@nginx pkg]# unzip phpMyAdmin-4.8.5-all-languages.zip
[root@nginx pkg]# unzip wordpress-5.0.3-zh_CN.zip

 ### 配置phpMyadmin
[root@nginx pkg]# cd phpMyAdmin-4.8.5-all-languages
[root@nginx phpMyAdmin-4.8.5-all-languages]# cp config.sample.inc.php config.inc.php
[root@nginx phpMyAdmin-4.8.5-all-languages]# vim config.inc.php +17
    ...
    $cfg['blowfish_secret'] = 'asfusd87fsdfgbsdfbkjsdfsd5513wefasdfbsuf763jwegfway6adgfa'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
    $cfg['Servers'][$i]['host'] = '192.168.2.133';
    ...
[root@nginx phpMyAdmin-4.8.5-all-languages]# mkdir tmp
[root@nginx phpMyAdmin-4.8.5-all-languages]# chmod 777 tmp

 ### 配置wordpress
[root@nginx pkg]# cd wordpress
[root@nginx wordpress]# cp wp-config-sample.php wp-config.php
[root@nginx wordpress]# vim wp-config.php 
    ...
     /** WordPress數據庫的名稱 */
    define('DB_NAME', 'wordpress');

    /** MySQL數據庫用戶名 */
    define('DB_USER', 'wordpress');

    /** MySQL數據庫密碼 */
    define('DB_PASSWORD', '123');

    /** MySQL主機 */
    define('DB_HOST', '192.168.2.133');
    ...

### 將修改好的項目文件分別發給ap,np的Document目錄
[root@nginx pkg]# rsync -az phpMyAdmin-4.8.5-all-languages wordpress [email protected]:/usr/local/apache24/htdocs/
[root@nginx pkg]# rsync -az phpMyAdmin-4.8.5-all-languages wordpress [email protected]:/data/nginx/
[root@nginx pkg]# rsync -az phpMyAdmin-4.8.5-all-languages wordpress [email protected]:/data/nginx/

配置各個組件配置信息:

### 192.168.2.128
[root@nginx ~]# vim /etc/nginx/nginx.conf
    ...
    include conf.d/*.conf;  ##在http標籤內添加
    upstream websrv_php {   ##添加php動態解析服務器
        #ip_hash;
    server 192.168.2.129:80 weight=1;
    server 192.168.2.130:80 weight=1;
    }
    upstream websrv_static { ##添加static靜態文件解析服務器
    server 192.168.2.133:80 weight=1;
    }
    ...
[root@nginx ~]# mkdir /etc/nginx/conf.d/    ##創建虛擬主機目錄

[root@nginx ~]# vim /etc/nginx/conf.d/upstream.conf
    server {

            listen 80;
            server_name www.ifan.com;
            root /data/nginx;
            index index.html;

            location ~* \.(jpeg|gif|jpg|png|html|css)$ {
            proxy_pass http://websrv_static;
            }

            location / {
            proxy_pass http://websrv_php;
            }
    }

[root@nginx ~]# nginx -t    ##沒有報錯,則下一步啓動即可
[root@nginx ~]# nginx

 ## 配置192.168.2.129
 ap主機我們就使用默認主機提供服務,注意上面配置ap主機時已經完成了index.php文件的默認識別及目錄顯示功能一關閉,若未進行配置則返回配置,以下只改名
[root@ap htdocs]# mv phpMyAdmin-4.8.5-all-languages pam
[root@ap htdocs]# mv wordpress blog

## 配置192.168.2.130
[root@nginx ~]# vim /etc/nginx/nginx.conf
    ...
    include conf.d/*.conf;  ##在http標籤內添加
    ...
[root@nginx ~]# mkdir /etc/nginx/conf.d/    ##創建虛擬主機目錄
[root@nginx ~]# vim /etc/nginx/conf.d/project.conf
     server {

            listen 80;
            server_name www.ifan.com;
            root /data/nginx;
            index index.html index.php;

            location / {
            }

            location ~* \.php$ {
            fastcgi_index   index.php;
            fastcgi_pass    127.0.0.1:9000;
            include         fastcgi_params;
            fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
            #fastcgi_param   SCRIPT_FILENAME    /data/nginx$fastcgi_script_name;
            fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
            }

    }
[root@np nginx]# mv phpMyAdmin-4.8.5-all-languages pam
[root@np nginx]# mv wordpress blog
[root@np nginx]# nginx -t && nginx

 ## 192.168.2.133
  [root@nginx ~]# vim /etc/nginx/nginx.conf
    ...
    include conf.d/*.conf;  ##在http標籤內添加
    ...
[root@nginx ~]# mkdir /etc/nginx/conf.d/    ##創建虛擬主機目錄
[root@nginx ~]# vim /etc/nginx/conf.d/project.conf
    server {

            listen 80;
            server_name www.ifan.com;
            root /data/nginx;
            index index.html index.php;

            location / {
            }

    }
[root@np nginx]# mv phpMyAdmin-4.8.5-all-languages pam
[root@np nginx]# mv wordpress blog
[root@np nginx]# nginx -t && nginx

最終測試效果:

配置本地hosts信息:

cat /etc/hosts
...
192.168.2.128 www.ifan.com
...

測試效果:

由於Firefox和Chrom總是加載緩存,測試出效果很不易,我訪問的是php的測試文件,正常頁面會顯示phpinfo的基本信息及php的擴展信息,這裏可以看出我nginx設置的是基本輪詢,可以根據需求設置成基於源地址綁定訪問

LNAMP搭建屬於自己的WordPress博客系統
LNAMP搭建屬於自己的WordPress博客系統

訪問blog系統:默認安裝好不是這個界面,是需要自行配置的界面
LNAMP搭建屬於自己的WordPress博客系統

訪問pam系統:
LNAMP搭建屬於自己的WordPress博客系統
這個並非錯誤,原因是使用負載均衡輪詢的時候,第一次請求phpMyAdmin主頁的時ap進行處理,頁面返回的cookie存放在ap上.填寫用戶名密碼提交之後,是np進行處理的,此時給頁面的cookie不是ap上的cookie,所以會報錯,解決方案很簡單,在nginx代理時使用 ip_hash 即可(配置文件中我已添加,只需要打開即可註釋即可)

查看192.168.2.133Nginx日誌,均是靜態頁面的訪問:
LNAMP搭建屬於自己的WordPress博客系統

總結:

  1. 篇幅較大,此次操作主要以記錄和實踐爲主,並非生產環境使用
  2. 編譯參數並非一定要指定,默認編譯會自動尋找,但若依賴是編譯安裝則需要指定詳細路徑
  3. 對於服務的安裝,推薦一切從簡,以RPM包的形式安裝,若非必要不建議參考本篇文章進行編譯安裝
  4. 對於Apache和Nginx大部分未做安全和優化,後期會對Nginx的優化篇專門形成一篇文檔進行分享
  5. 目前本篇文檔僅僅添加了xcache,對於目前代理層前端仍然可以增加一層varnish緩存層
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章