nginx+php+mysql+haproxy+keepalived+NFS,搭建wordpress
實現LNMP
實現環境:
| 系統 | CentOS7.6 |
| Mysql | 5.6.34 |
| Nginx | 1.14.2 |
| PHP | 7.1.30 |
| HAProxy | 1.8.20 |
| Keepalived | 1.3.5 |
| NFS | 1.3.0 |
| Mysql_master | 192.168.37.108 |
| Mysql_slave | 192.168.37.105 |
| Nginx+PHP | 192.168.37.103 |
| Nginx+PHP | 192.168.37.104 |
| HAProxy+Keepalived | 192.168.37.101 |
| HAProxy+Keepalived | 192.168.37.102 |
| VIP | 192.168.37.240 |
| NFS_server | 192.168.37.107 |
1 搭建數據庫 (192.168.37.108)
1.1 安裝Mysql
使用腳本一鍵完成
將數據庫軟件包,腳本,配置文件my.cnf放在同一個目錄中執行
1.2 創建wordpress數據庫并授權
[root@s8 src]#mysql mysql> CREATE DATABASE wordpress; mysql> GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"192.168.37.%" IDENTIFIED BY "123456"; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | wordpress | +--------------------+ 5 rows in set (0.00 sec)1.3 測試數據庫連接
在wordpress服務器或者HAProxy服務器用授權帳號測試遠程連接是否正滿
[root@s0 ~]#mysql -uwordpress -p123456 -h192.168.37.108 MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | | wordpress | +--------------------+2 安裝PHP 分別在兩主機上完成相同的操作(192.168.37.103/104)
2.1 編譯安裝php
創建PHP,Nginx共同使用的系統帳號
[root@s4 ~]#useradd -s /sbin/nologin -u 1001安裝依賴包
[root@s3 src]#yum -y ×××tall wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel json automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel [root@s3 src]#pwd /usr/local/src [root@s3 src]#tar xvf php-7.1.30 [root@s3 src]#cd php-7.1.30/ [root@s3 php-7.1.30]#./configure --prefix=/apps/php --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-pear --with-curl --with-png-dir --with-freetype-dir --with-iconv --with-mhash --with-zlib --with-xmlrpc --with-xsl --with-openssl --with-mysqli --with-pdo-mysql --disable-debug --enable-zip --enable-sockets --enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-exif --enable-wddx --enable-bcmath --enable-calendar --enable-shmop --enable-dba --enable-sysvsem --enable-sysvshm --enable-sysvmsg [root@s3 src]make -j 2 [root@s3 src]make ×××tallPHP安裝時間較長
準備配置文件
編輯配置文件
[root@s3 php-fpm.d]#vim www.conf [www] user = www group = www listen = 127.0.0.1:9000 listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 50 pm.start_servers = 30 pm.min_spare_servers = 30 pm.max_spare_servers = 35 pm.status_path = /pm_status ping.path = /ping ping.response = pong access.log = log/$pool.access.log slowlog = log/$pool.log.slow [root@s3 php-fpm.d]#mkdir /apps/php/log/ root@s3 php-fpm.d]#cd /apps/php/etc/ [root@s3 etc]#ll total 92 -rw-r--r-- 1 www www 1178 Jun 9 13:01 pear.conf -rw-r--r-- 1 www www 4438 Jun 9 13:01 php-fpm.conf.default drwxr-xr-x 2 www www 46 Jun 10 10:20 php-fpm.d -rw-r--r-- 1 www www 72020 Jun 9 13:02 php.ini [root@s3 etc]#cp php-fpm.conf.default php-fpm.conf2.2 啟動,測試PHP
檢測語法 啟動
[root@s3 etc]#/apps/php/sbin/php-fpm -t [10-Jun-2019 10:28:47] NOTICE: configuration file /apps/php/etc/php-fpm.conf test is successful [root@s3 etc]#/apps/php/sbin/php-fpm [root@s3 etc]#/apps/php/sbin/php-fpm -c /apps/php/etc/php.ini [root@s3 etc]#netstat -tanlp |grep php-fpm tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 6386/php-fpm: maste [root@s3 etc]#ps -ef |grep php-fpm root 6386 1 0 06:56 ? 00:00:01 php-fpm: master process (/apps/php/etc/php-fpm.conf) www 6389 6386 0 06:56 ? 00:00:01 php-fpm: pool www www 6390 6386 0 06:56 ? 00:00:01 php-fpm: pool www ...3 安裝Nginx(192.168.37.103/104)
3.1 安裝依賴包
[root@s3 src]#pwd /usr/local/src [root@s3 src]#yum ×××tall -y vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zip unzip zlib-devel bash-completion nfs-utils automake libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed [root@s3 src]#tar xvf nginx-1.14.2 [root@s3 src]#cd nginx-1.14.2/3.2 自定義server信息
[root@s3 nginx-1.14.2]#vim src/core/nginx.h13 #define NGINX_VERSION "000"14 #define NGINX_VER "000" NGINX_VERSION引號""中為Nginx版本信息,修改后安裝會顯示自己定義的Nginxt版本
[root@s3 nginx-1.14.2]#vim src/http/ngx_http_header_filter_module.c 49 static u_char ngx_http_server_string[] = "Server: Myserver" CRLF;Server: 設置為自定義服務器信息
3.3 編譯安裝Nginx
[root@s3 nginx-1.14.2]#./configure --prefix=/apps/nginx --user=www --group=www --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module [root@s3 nginx-1.14.2]#make [root@s3 nginx-1.14.2]#make ×××tall準備一個PHP測試頁面
[root@s3 nginx-1.14.2]#mkdir /data/nginx/wordpress -p [root@s3 nginx-1.14.2]#vim /data/nginx/wordpress/test.php <?php phpinfo(); ?>3.4 配置Nginx
設置啟動帳號
[root@s3 nginx-1.14.2]#vim /apps/nginx/conf/nginx.conf user www www ; worker_processes 1;在http中設置server字段,設置監聽域名www.a.net,主目錄/data/nginx/wordpress index.php
并設置php轉發
3.5 配置Nginx啟動腳本
沒有nginx.service文件就用vim創建一個
[root@s3 nginx-1.14.2]#cat /usr/lib/systemd/system/nginx.service [Unit] Description=The nginx HTTP and reverse proxy server After=network.target remote-fs.target nss-lookup.target[Service] Type=forking PIDFile=/apps/nginx/logs/nginx.pid # Nginx will fail to start if /run/nginx.pid already exists but has the wrong # SELinux context. This might happen when running `nginx -t` from the cmdline. # https://bugzilla.redhat.com/show_bug.cgi?id=1268621 ExecStartPre=/usr/bin/rm -f /apps/nginx/logs/nginx.pid ExecStartPre=/apps/nginx/sbin/nginx -t ExecStart=/apps/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID #KillSignal=SIGQUIT #TimeoutStopSec=5 KillMode=process PrivateTmp=true [Install] WantedBy=multi-user.target啟動Nginx
[root@s3 nginx-1.14.2]#systemctl start nginx [root@s3 nginx-1.14.2]#systemctl status nginx查看服務是否正常啟動
[root@s3 nginx-1.14.2]#ps -ef |grep nginx root 6680 1 0 07:04 ? 00:00:00 nginx: master process /apps/nginx/sbin/nginx www 6681 6680 0 07:04 ? 00:00:02 nginx: worker process root 9495 7297 0 11:22 pts/0 00:00:00 grep --color=auto nginx瀏覽器測試
4 部署WordPress
4.1 創建網站目錄
[root@s3 nginx-1.14.2]#chown -R www.www /data/nginx [root@s3 nginx-1.14.2]#cd /data/nginx/ [root@s3 nginx]#tar xf wordpress-5.0.1-zh_CN.tar.gz [root@s3 nginx]#chown -R www.www /data/ [root@s3 nginx]#cd wordpress [root@s3 wordpress]#cp wp-config-sample.php wp-config.php4.2 設置連接數據庫
使用前的數據庫帳號進行連接,通過keepalive服務器的VIP(192.168.37.240)連接數據庫,不直接連接
[root@s3 wordpress]#vim wp-config.php ... define('DB_NAME', 'wordpress');/** MySQL數據庫用戶名 */ define('DB_USER', 'wordpress');/** MySQL數據庫密碼 */ define('DB_PASSWORD', '123456');/** MySQL主機 */ define('DB_HOST', '192.168.37.240');/** 創建數據表時默認的文字編碼 */ define('DB_CHARSET', 'utf8');/** 數據庫整理類型。如不確定請勿更改 */ define('DB_COLLATE', '');/**#@+* 身份認證密鑰與鹽。** 修改為任意獨一無二的字串!* 或者直接訪問{@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org密鑰生成服務}* 任何修改都會導致所有cookies失效,所有用戶將必須重新登錄。** @since 2.6.0*/ define('AUTH_KEY', '`plxTeyf>=SNRd|)F8PLSLO<Ixw<$}AB_o,ts}3 _-)hW)=Ue@<Ah>B#xl?|WlOG'); define('SECURE_AUTH_KEY', '{Q>.,YBJbZKR.+Msb0RMV&6( P-(4_`zQgj@?{-A[=#<]~*[KVCW1?V!hF2d95:S'); define('LOGGED_IN_KEY', '_N|`YMNp.4{ tBS,/sSP{H4g<-t@^z Afyv41:;=.F,4PPwI_4JGY5zUmsNXDToB'); define('NONCE_KEY', 'mF__L/-fP[2ouP Y&pY^)<S/flq=)Q-m1AwH&O`Sx-3#c? C6gpvK2|3zUgpISGB'); define('AUTH_SALT', 'mNDLO|3Ir:72N Mrdn?xAocUme?8/0K.ax>/Yp|0G18a8Pn8{ r@O$u&k1Z{>uso'); define('SECURE_AUTH_SALT', 'K0)Eb;ShB|4=7I]iAqi>v]cRkU7 #}/CwvcY?OAEwe+mr<T^C(DAA&Inw@u}IsWh'); define('LOGGED_IN_SALT', 'NgBg!C(7UJ>P{3|oS6J#svt3A>CC{m_QKkt?2eqzMI=TMuSw,PDW>!+ qz1e9U$l'); define('NONCE_SALT', 'C2&*P1]9Uo[|%b|fFJgMjIe1_Rs_(pb?:55ZXzjU;[Mutt:o~y1u@HB]eP.]z=Z)'); /**#@-*/訪問https://api.wordpress.org/secret-key/1.1/salt/生成密鑰與鹽
替換文件中的信息
其他的不用再修改
如果有多個wordpress 修改一下數據表前綴(多個wordpress放在一個服務器上才修改為不同的前綴)
5 設置haproxy (192.168.37.101/102)
因為要使用VIP,vip同一時間只能存在一臺服務器上,沒有VIP的一服務器會有故障。所以先打開兩個系統設置,使其在沒有VIP是不報故障
[root@s1 ~]#vim /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv4.ip_nonlocal_bind = 1 [root@s1 ~]#sysctl -p net.ipv4.ip_forward = 1 net.ipv4.ip_nonlocal_bind = 15.1 編譯安裝haproxy
5.1.1 安裝依賴的工具包
yum ×××tall -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate5.1.2 安裝haproxy
[root@s1 src]#pwd /usr/local/src [root@s1 src]#tar xvf haproxy-1.8.20.tar.gz [root@s1 src]#cd haproxy-1.8.20/ [root@s1 haproxy-1.8.20]#make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy [root@s1 haproxy-1.8.20]#make ×××tall PREFIX=/usr/local/haproxy [root@s1 haproxy-1.8.20]#useradd -s /sbin/nologin -u 2001 haproxy5.1.3 設置啟動腳本
[root@s1 haproxy-1.8.20]#cp haproxy /usr/sbin [root@s1 haproxy-1.8.20]#vim /usr/lib/systemd/system/haproxy.service [Unit] Description=HAProxy Load Balancer After=syslog.target network.target[Service] ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pi d ExecReload=/bin/kill -USR2 $MAINPID[Install] WantedBy=multi-user.target5.1.4 配置haproxy
[root@s1 haproxy-1.8.20]#vim /etc/haproxy/haproxy.cfg global maxconn 100000 chroot /usr/local/haproxy #stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin uid 2001 gid 2001 daemon #nbproc 4 #cpu-map 1 0 #cpu-map 2 1 #cpu-map 3 2 #cpu-map 4 3 pidfile /usr/local/haproxy/run/haproxy.pid log 127.0.0.1 local3 infodefaults option http-keep-alive option forwardfor maxconn 100000 mode http timeout connect 300000ms timeout client 300000ms timeout server 300000mslisten statsmode httpbind 0.0.0.0:9999stats enablelog globalstats uri /haproxy-statusstats auth haadmin:123456listen wordpressbind 192.168.37.240:80mode http # log globalserver 192.168.37.103 192.168.37.103:80 check inter 3000 fall 2 rise 5server 192.168.37.104 192.168.37.104:80 check inter 3000 fall 2 rise 5listen mysqlbind 192.168.37.240:3306mode tcpserver 192.168.37.108 192.168.37.108:3306 check inter 3000 fall 2 rise 5啟動haproxy
[root@s1 haproxy-1.8.20]#systemctl start haproxy.service [root@s1 haproxy-1.8.20]#ps -ef |grep haproxy root 6306 1 0 13:24 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid haproxy 6336 6306 0 13:24 ? 00:00:02 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid root 6843 6580 0 14:10 pts/0 00:00:00 grep --color=auto haproxy6 設置keepalived (192.168.37.101/102)
6.1 yum安裝keepalived
[root@s1 ~]#yum ×××tall keepalived -y [root@s1 ~]#cat /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr# vrrp_strictvrrp_iptablesvrrp_garp_interval 0vrrp_gna_interval 0 } vrrp_×××tance VIP1 {state MASTER #一臺為MASTER,一臺為BACKUPinterface eth1virtual_router_id 55priority 100unicast_src_ip 192.168.37.101unicast_peer {192.168.37.102}authentication { auth_type PASSauth_pass abcd }virtual_ipaddress { 192.168.37.240 dev eth1 label eth1:0} }6.2 啟動
[root@s1 ~]#systemctl start keepalived [root@s1 ~]#ps -ef |grep keepalived root 6309 1 0 13:24 ? 00:00:00 /usr/sbin/keepalived -D root 6312 6309 0 13:24 ? 00:00:00 /usr/sbin/keepalived -D root 6313 6309 0 13:24 ? 00:00:01 /usr/sbin/keepalived -D root 6980 6580 0 14:23 pts/0 00:00:00 grep --color=auto keepalived7 掛載NFS文件存儲
7.1 安裝nfs-utils(192.168.37.107/103/104)
[root@s7 ~]#yum ×××tall nfs-utils7.2 設置NFS同享
[root@s7 ~]#mkdir /data/nginx/wordpress [root@s7 ~]#vim /etc/exports /data/nginx/wordpress *(rw,no_root_squash) [root@s7 ~]#exportfs -f7.3 掛載NFS(192.168.37.103/104)
[root@s3 ~]#showmount -e 192.168.37.107 Export list for 192.168.37.107: /data/nginx/wordpress * [root@s3 ~]#mount 192.168.37.107:/data/nginx/wordpress /data/nginx/wordpress/wp-content/uploads/驗證
將自定義的域名在主機中解析為192.168.37.240
打開瀏覽器輸入www.a.net
設置正常就應該會出現wordpress的注冊界面
轉載于:https://blog.51cto.com/13749470/2406818
總結
以上是生活随笔為你收集整理的nginx+php+mysql+haproxy+keepalived+NFS,搭建wordpress的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA_HOME系统环境变量
- 下一篇: VMware Fusion虚拟机的低分辨