1. 程式人生 > >Apache2.4.37+mysql5.7+PHP7.31最新版LAMP架構+Discuz論壇

Apache2.4.37+mysql5.7+PHP7.31最新版LAMP架構+Discuz論壇

sysv int mes 連接數 fix 編譯註解 啟動數據庫 bic xmlrpc

最新版LAMP架構+Discuz論壇

LAMP指的Linux(操作系統)、ApacheHTTP 服務器,MySQL(有時也指MariaDB,數據庫軟件) 和PHP(有時也是指Perl或Python) 的第一個字母,一般用來建立web應用平臺。
這個架構經過了漫長時間的考驗,但隨著時間更叠,各個軟件也進行了版本的更新升級,因為公司也有Discuz論壇,但版本比較老,所以想著搭建一套最新版的論壇。下面就為大家介紹當下最新版的LAMP+Discuz論壇。

系統環境介紹

系統 IP地址 內存 cpu
centos7.6 192.168.70.133 5G 4核

使用軟件包地址
http://mirrors.hust.edu.cn/apache//httpd/httpd-2.4.37.tar.gz

http://mirrors.hust.edu.cn/apache//apr/apr-1.6.5.tar.gz
http://mirrors.hust.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
http://am1.php.net/distributions/php-7.3.1.tar.gz
discuz論壇包https://pan.baidu.com/s/14ZPFy35pnpYpKeePDFoArw 密碼:2olg
mysql解壓版https://pan.baidu.com/s/11b_ccrosT0IPdnXhRrU4yQ
密碼:ruh5

一、搭建httpd2.4.37

1、安裝環境依賴包

yum -y install \

gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl \
zlib-devel \
libxml2-devel \
openssl \
openssl-devel \
bzip2-devel

2、解壓httpd2.4.37

[root@localhost opt]# tar zxf httpd-2.4.37.tar.gz

3、解壓apr-1.6.5、apr-util-1.6.1到httpd-2.4.37/srclib/目錄中並更名

[root@localhost opt]# tar zxf apr-1.6.5.tar.gz -C httpd-2.4.37/srclib/

[root@localhost opt]# tar zxf apr-util-1.6.1.tar.gz -C httpd-2.4.37/srclib/
[root@localhost opt]# cd httpd-2.4.37/srclib/
[root@localhost srclib]# mv apr-1.6.5/ apr
[root@localhost srclib]# mv apr-util-1.6.1/ apr-util
[root@localhost srclib]# ls
apr apr-util Makefile.in
以上步驟將apr-1.65和apr-util-1.61包解壓並且放到了httpd2.4.37/srclib/下並且更名為apr和apr-util

4、編譯

[root@localhost srclib]# cd /opt/httpd-2.4.37/
[root@localhost httpd-2.4.37]#
./configure \
--prefix=/usr/local/httpd \
--enable-deflate \
--enable-expires \
--enable-rewrite \
--enable-charset-lite \
--with-mpm=event \
--enable-mpms-shared=all \
--enable-so \
--enable-modules=most \
--enable-cgi \
--quiet

編譯註解
--enable-deflate   #壓縮模塊
--enable-expires  #緩存模塊
--enable-so   #讓apache核心裝載DSO
--enable-mods-shared=most  #采用動態編譯進來大多數模塊
--enable-modules=most  #安裝大多數模塊
--enable-modules-shared=most  #安裝大多數共享模塊
--enable-mpms-shared=all  #支持全部多道處理方式
--with-mpm=prefork  #prefork工作模式,派生子進程提供服務
--enable-cgi 啟動CGI腳本支持,便於擴展網站的用於訪問能力
--enable-rewirte :支持URL重寫
--with-mpm=worker  #worker工作模式,核心線程處理,使用於使用人群少的場景
--with-mpm=event  Apache最新的工作模式,它和worker模式很像
優點:不同的是在於它解決了keep-alive長連接的時候占用線程資源被浪費的問題(HTTP的Keepalive方式能減少TCP連接數量和網絡負載),在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務器的線程,執行完畢後,又允許它釋放。這增強了在高並發場景下的請求處理    
--quiet 安靜的輸出編譯信息

5、正式安裝

[root@localhost httpd-2.4.37]# make && make install

6、修改配置文件

[root@localhost httpd-2.4.37]# cd /usr/local/httpd/conf/
[root@localhost conf]# vim httpd.conf #去掉如下行的註釋
LoadModule include_module modules/mod_include.so #服務器端的包過濾
LoadModule logio_module modules/mod_logio.so #修改日誌格式需要開啟
LoadModule filter_module modules/mod_filter.so #過濾器模塊
LoadModule rewrite_module modules/mod_rewrite.so #重寫模塊
LoadModule deflate_module modules/mod_deflate.so #壓縮模塊
LoadModule expires_module modules/mod_expires.so #緩存模塊


在#LoadModule info_module modules/mod_info.so該行下添加如下優化語句
#連接超時時間
TraceEnable off
Timeout 600
KeepAlive Off
KeepAliveTimeout 20
MaxKeepAliveRequests 100
HostnameLookups Off
ServerSignature Off
ServerTokens Prod
#pid文件格式
#PidFile                        pid/httpd.pid
#防止被點擊劫持 SAMEORIGIN為拒絕,ALLOW-FROM為允許
Header always append X-Frame-Options "SAMEORIGIN "
Header always append Frame-Options "SAMEORIGIN"
#設定接收請求的超時時間和最低數據速率
<IfModule reqtimeout_module>
        RequestReadTimeout header=5-40,MinRate=500 body=20,MinRate=500
</IfModule>
#壓縮模塊,壓縮級別6,可調DeflateCompressionLevel
<IfModule mod_deflate.c>
                DeflateCompressionLevel 6
                SetOutputFilter DEFLATE
                AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascriptapplication/x-httpd-php
                AddOutputFilterByType DEFLATE *.js
                AddOutputFilterByType DEFLATE *.css
                AddOutputFilterByType DEFLATE *.htm
                AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscriptapplication/javascript application/x-javascript
                AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
                SetEnvIfNoCase Request_URI .(?:gif|jpeg|png)$ no-gzip dont-vary
                SetEnvIfNoCase Request_URI .(?:exe|tgz|zip|bz2|sit|rar)$ no-gzip dont-vary
                SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
</IfModule>
#緩存模塊
<IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault                                      A86400
        ExpiresByType   image/x-icon                        A2592000
        ExpiresByType   application/x-javascript            A2592000
        ExpiresByType   text/css                            A2592000
        ExpiresByType   image/gif                           A604800
        ExpiresByType   image/png                           A604800
        ExpiresByType   image/jpeg                          A604800
        ExpiresByType   text/plain                          A604800
        ExpiresByType   application/x-shockwave-flash       A604800
        ExpiresByType   video/x-flv                         A604800
        ExpiresByType   application/pdf                     A604800
        ExpiresByType   text/html                           A900
</IfModule>
#工作模式
<IfModule mpm_prefork_module>
        ServerLimit     1200
        StartServers        5
        MinSpareServers     5
        MaxSpareServers     10
        MaxRequestWorkers   1200
        MaxConnectionsPerChild   2000
</IfModule>

<IfModule mpm_worker_module>
        ServerLimit     20
        StartServers        3
        MinSpareThreads     75
        MaxSpareThreads     100 
        ThreadsPerChild     64
        MaxRequestWorkers   1280
        MaxConnectionsPerChild   20000
</IfModule>

<IfModule mpm_event_module>
        ServerLimit     20
        StartServers        3
        MinSpareThreads     75
        MaxSpareThreads     100 
        ThreadsPerChild     64
        MaxRequestWorkers   1280
        MaxConnectionsPerChild   20000
</IfModule>

#解決中文亂碼
<Files ~ "\.html?$">
         Header set Content-Type "text/html; charset=utf-8"
</Files>

修改ServerName,去掉註釋並進行修改
ServerName www.bbstest.com:80

7、創建httpd命令軟鏈接並查看配置文件語法正確性

[root@localhost conf]# ln -s /usr/local/httpd/bin/apachectl /usr/bin/httpd
[root@localhost conf]# httpd -t
Syntax OK
[root@localhost conf]# httpd start

這個時候我們可以去網頁中訪問我們的apache的默認主頁了,可以先暫時關閉防火墻和selinux,不然無法訪問80端口。因為設置了域名在本地主機中進行解析,方便用域名訪問。
windows添加本地解析步驟如下:win+r調出這個界面
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
保存退出就好了。下面我們就能用我們指定的域名去訪問網頁了。

技術分享圖片

到這裏httpd就搭建完成了。

二、搭建Mysql5.7

從mysql5.7開始,源碼編譯的mysql5.7時間巨長,所以我使用公司mysql5.7的解壓版,但這裏我會為大家提供mysql5.7編譯的鏈接?源碼編譯mysql5.7

這是我公司安裝mysql5.7的一下相關操作和優化
[root@localhost conf]# cd /opt/
[root@localhost opt]# tar zxf mysql-5.7.21-linux-glibc2.12-x86_64.tgz
[root@localhost opt]# mv mysql-5.7.21-linux-glibc2.12-x86_64 mysql   #這裏是更名解壓包為mysql,方便配置文件修改
[root@localhost opt]# vim /etc/my.cnf  #刪除裏面原有的內容,加入如下
[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]

character-set-server = utf8mb4
skip_name_resolve = 1
user = mysql
port = 3306
socket = /tmp/mysql.sock
basedir = /opt/mysql/     #從這行到realy-log行,修改路徑為mysql存放位置的路徑
datadir = /opt/mysql/data
log-error = /opt/mysql/data/log-error.log
pid-file = /opt/mysql/data/mysql.pid
innodb_data_home_dir = /opt/mysql/data
slow-query-log-file=/opt/mysql/data/slow.log
relay-log-index = /opt/mysql/data/relaylog
relay-log-info-file = /opt/mysql/data/relaylog
relay-log = /opt/mysql/data/relaylog

open_files_limit = 10240
table_open_cache = 2048
back_log = 300
max_connections = 10000
max_connect_errors = 20
explicit_defaults_for_timestamp = 1
max_allowed_packet = 64M
thread_cache_size = 300
query_cache_size = 256M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
default-storage-engine = InnoDB
thread_stack = 512K
transaction_isolation = READ-COMMITTED
tmp_table_size = 256M
max_heap_table_size = 256M
key_buffer_size = 2G
sort_buffer_size = 2M
join_buffer_size = 6M
read_buffer_size = 4M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 15G
myisam_repair_threads = 1
interactive_timeout = 1800
wait_timeout = 28800
innodb_data_file_path = ibdata1:120M;ibdata2:200M;ibdata3:200M:autoextend
innodb_buffer_pool_size = 2G
innodb_thread_concurrency = 0
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_purge_threads = 0
slow_query_log = 1
long_query_time = 3
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = information_schema
#slave-skip-errors = 1032,1062,1026,1114,1146,1048,1396
server-id = 1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[mysqldump]
quick
max_allowed_packet = 64M

初始化數據庫並啟動

ln -s /usr/local/mysql/bin/* /usr/bin #優化命令路徑
adduser -s /sbin/nologin mysql #創建mysql用戶
mysqld --initialize-insecure #初始化mysql
mysqld_safe & #啟動數據庫
mysqladmin -uroot -p ‘123123’ #設置數據庫密碼

三、搭建PHP7.31

搭建之前解決幾個小問題,是我編譯的時候遇到的

●configure:?error:?off_t undefined; check your library configuration
解決方法:
echo ‘/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64‘>>/etc/ld.so.conf&&ldconfig -v
●configure: error: Please reinstall the libzip distribution
解決方法
wget https://nih.at/libzip/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make
make install
●/usr/local/include/zip.h:59:21: 致命錯誤:zipconf.h:沒有那個文件或目錄
解決方法
cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h

1、解壓

[root@localhost opt]# tar zxf php-7.3.1.tar.gz

2、安裝依賴包,因為報錯很多因為缺包,所以幹脆一起裝

yum -y install 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 openldap-servers openldap-client nss_ldap jemalloc-devel cmake boost-devel bison 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

3、編譯

[root@localhost opt]# cd php-7.3.1/
./configure \
--prefix=/usr/local/php7 \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-pdo-mysql=/opt/mysql \
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
-with-mysqli=mysqlnd \
--with-mysql-sock=/tmp/mysql.sock \
--with-config-file-path=/usr/local/php7 \
--enable-fpm \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-soap \
--with-libxml-dir \
--with-xmlrpc \
--with-openssl \
--with-mhash \
--with-pcre-regex \
--with-sqlite3 \
--with-zlib \
--enable-bcmath \
--with-iconv \
--with-bz2 \
--enable-calendar \
--with-curl \
--with-cdb \
--enable-dom \
--enable-exif \
--enable-fileinfo \
--enable-filter \
--with-pcre-dir \
--enable-ftp \
--with-gd \
--with-openssl-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-freetype-dir \
--enable-gd-jis-conv \
--with-gettext \
--with-gmp \
--with-mhash \
--enable-json \
--enable-mbstring \
--enable-mbregex \
--enable-mbregex-backtrack \
--with-onig \
--enable-pdo \
--with-zlib-dir \
--with-pdo-sqlite \
--with-readline \
--enable-session \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-libxml-dir \
--with-xsl \
--enable-zip \
--with-pear \
--enable-opcache

#這裏需要註意,從php5.6之後,編譯擴展mysql的語句 --with-mysql=path已經不能使用了。應該添加的是如下幾條語句。
--with-pdo-mysql=/opt/mysql \
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
-with-mysqli=mysqlnd \
--with-mysql-sock=/tmp/mysql.sock \
擴展指向apache的沒變,如下:
--with-apxs2=/usr/local/httpd/bin/apxs

3、安裝

make && make install

4、檢查httpd.conf文件下有沒有php7.so模塊,並加以修改

LoadModule php7_module        modules/libphp7.so
添加如下位置添加兩行
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps

技術分享圖片
添加首頁識別
技術分享圖片

5、重啟httpd,修改主頁信息。

cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# httpd restart
[root@localhost htdocs]# vim index.php #添加如下幾行
<?php
phpinfo();
?>

6、網頁中查看
www.bbstest.com/index.php
技術分享圖片
在網頁中查找如下內容
技術分享圖片
技術分享圖片
有這兩個模塊說明支持mysql的擴展。

7、php連接mysql

[root@localhost htdocs]# mysql -uroot -p123123
mysql> create database bbs;
mysql> grant all privileges on bbs.* to ‘bbsuser‘@‘192.168.70.%‘ identified by ‘123123‘ with grant option;
mysql> flush privileges;

8、再次修改主頁,php連接mysql
vim index.php

<?php
$link=mysqli_connect(‘192.168.70.133‘,‘bbsuser‘,‘123123‘);
if($link) echo "<h1>PHP-link-MYSQL  Success!!</h1>";
else echo "PHP-link-MYSQL Fail!!";
?>

網頁中直接刷新網頁,出現PHP-link-MYSQL Success!!則連接成功。7以前的php連接語句mysql_connect已經被廢棄,現使用mysqli_connect。
技術分享圖片

這樣php連接mysql就OK了,下面搭建discuz論壇。

四、搭建Discuz論壇

1、修改httpd配置文件

vim /usr/local/httpd/conf/httpd.conf #去掉下行的註釋
Include conf/extra/httpd-vhosts.conf

2、重啟httpd

httpd restart #會報兩個warning,不用管

3、設置虛擬目錄

cd /usr/local/httpd/conf/extra
[root@localhost extra]# cp httpd-vhosts.conf httpd-vhosts.conf.bk #先備份下

[root@localhost extra]# vim httpd-vhosts.conf  #末行添加如下內容
<VirtualHost *:80>

    DocumentRoot "/usr/local/httpd/htdocs/data/www"   #這裏指定bbs的目錄位置,需要創建
    ServerName www.bbstest.com
    ServerAlias www.bbstest.com

</VirtualHost>

4、解壓Discuz論壇包

unzip Discuz_X3.3_SC_UTF8.zip
[root@localhost abc]# ls     #會看到如下3個包
Discuz_X3.3_SC_UTF8.zip  readme  upload  utility
cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# mkdir -p data/www/  #創建discuz文件目錄
[root@localhost htdocs]# cd data/www/
[root@localhost www]# mv /opt/abc/upload/* .   #移動discuz項目內容到當前目錄
chown -R daemon config data uc_client/data uc_server/data/    #改變屬主

5、重啟httpd,網頁中訪問
httpd restart
www.bbstest.com/install
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片

好了,到這裏LAMP最新版的Discuz論壇搭建完成了,呼呼~

Apache2.4.37+mysql5.7+PHP7.31最新版LAMP架構+Discuz論壇