基于CentOS7.9部署LAMP(二)基于域名的虚拟主机配置wordpress和discuz
环境准备
配置阿里云yum和epel源
CentOS 7- 配置阿里镜像源
https://developer.aliyun.com/article/704987
curl-o/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoCentOS 7- 配置阿里镜像源 -epel
curl-o/etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo前置约定
系统参数
系统:CentOS 7.9 (kernel 3.10+)
内存建议 ≥ 2G,硬盘 ≥ 20G,务必能联网
资源部署
把 5 个源码包统一放到 /usr/local/src/lamp放源码的目录(文章已附带资源)
mkdir-pv/usr/local/src/lampcd/usr/local/src/lamp关闭 SELinux(否则容易 403/权限诡异)
setenforce0sed-i's/^SELINUX=.*/SELINUX=disabled/'/etc/selinux/config防火墙放行 80/443(如果用 firewalld)
systemctl stop firewalld如果你坚持开防火墙,至少:
firewall-cmd --add-service={http,https}--permanent&&firewall-cmd--reload环境准备(必须先执行)
关闭防火墙与SELinux
systemctl stop firewalld systemctl disable firewalldsed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config setenforce0安装基础编译依赖
yum-yinstallgcc gcc-c++makeautoconf automake libtool yum-yinstallpcre pcre-devel zlib zlib-devel openssl openssl-devel yum-yinstalllibxml2 libxml2-develcurlcurl-devel libpng libpng-devel yum-yinstallfreetype freetype-devel libjpeg libjpeg-devel yum-yinstalllibmcrypt libmcrypt-develbzip2bzip2-develyum-yinstall\gcc gcc-c++make\pcre-devel openssl-devel expat-devel\bzip2-devel libxml2-devel\curl-devel libpng-devel libjpeg-devel freetype-devel\libzip-devel\wget创建运行用户(Apache/PHP-FPM 都用它):
useradd-r-M-s/sbin/nologin apache||true【编译安装Apache】
装编译基础依赖(必须)
yum-yinstall\gcc gcc-c++make\pcre-devel openssl-devel expat-devel\bzip2-devel libxml2-devel\curl-devel libpng-devel libjpeg-devel freetype-devel\libzip-devel\wget编译安装 APR + APR-UTIL(Apache 依赖)
在/usr/local/src/lamp解压
tar-zxfapr-1.7.6.tar.gztar-zxfapr-util-1.6.3.tar.gztar-jxfhttpd-2.4.67.tar.bz2如果缺少bzip2就安装bzip2解压工具
yum-yinstallbzip2安装 APR
cdapr-1.7.6 ./configure--prefix=/usr/local/apr;echo$?make-j$(nproc)&&makeinstall;echo$?安装 APR-UTIL
cd../apr-util-1.6.3 ./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr;echo$?make-j$(nproc)&&makeinstall;echo$?编译安装 Apache 2.4.67
cd../httpd-2.4.67 ./configure\--prefix=/usr/local/apache\--with-apr=/usr/local/apr\--with-apr-util=/usr/local/apr-util\--enable-so\--enable-ssl\--enable-cgi\--enable-rewrite\--enable-modules=most\--enable-mpms-shared=all\--with-pcre\--with-zlib\--with-mpm=event;echo$?
make -j$(nproc) && make install; echo $?
修改配置文件用户组
sed-i's/^User daemon/User apache/'/usr/local/apache/conf/httpd.confsed-i's/^Group daemon/Group apache/'/usr/local/apache/conf/httpd.conf启动 Apache 并设置开机自启
/usr/local/apache/bin/apachectl startecho"/usr/local/apache/bin/apachectl start">>/etc/rc.localchmod+700 /etc/rc.local测试访问
浏览器打开 http://服务器IP,看到 It works! 说明 Apache 安装成功。
【二进制安装 MySQL 8.0.12】
在/usr/local/src/lamp解压
tar-zxfmysql-8.0.12-el7-x86_64.tar.gz-C/usr/local/mv-v/usr/local/mysql-8.0.12-el7-x86_64 /usr/local/mysql创建用户与数据目录
useradd-r-M-s/sbin/nologin mysqlmkdir-pv/data/mysql/mysql3306chown-Rmysql:mysql /data/mysql/mysql3306 /usr/local/mysqlchmod-R755/data/mysql/mysql3306ls-lhrt-d/data/mysql/mysql3306配置 my.cnf
cat>/etc/my.cnf<<EOF [mysqld] basedir=/usr/local/mysql datadir=/data/mysql/mysql3306 socket=/data/mysql/mysql3306/mysql3306.sock user=mysql port=3306 character-set-server=utf8mb4 default-storage-engine=INNODB max_connections=1000 lower_case_table_names=1 [mysql] socket=/data/mysql/mysql3306/mysql3306.sock EOF初始化与启动
【记住:初始化只能初始化一次,如果初始化多次,你的元数据信息就被冲了,必须删除数据目录,重新来做】
【若是生产环境有数据,那么,赶紧提桶跑路把!!!】
初始化(生成临时密码)—初始化(会生成一个临时 root 密码,务必记下)
/usr/local/mysql/bin/mysqld\--initialize\--user=mysql\--basedir=/usr/local/mysql\--datadir=/data/mysql/mysql3306;echo$?
其中的临时密码一定要记好!后面要用
复制启动脚本
cp-av/usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchmod+x /etc/init.d/mysqld配置basedir和datadir
sed-i'2i\basedir=/usr/local/mysql'/etc/init.d/mysqldsed-i'3i\datadir=/data/mysql/mysql3306'/etc/init.d/mysqldgrep-En'basedir|datadir'/etc/init.d/mysqldchkconfig--addmysqldchkconfigmysqld on启动 MySQL
systemctl start mysqld查看进程和端口
ss-tulanp|grepmysqldpsaux|grepmysqld修改 MySQL 密码
/usr/local/mysql/bin/mysql -uroot -p’临时密码’(这里推荐使用单引号,双引号大概率进不去会报错)
进入MySQL后执行:
ALTERUSER'root'@'localhost'IDENTIFIEDBY'你的新密码';FLUSHPRIVILEGES;exit测试MySQL新密码登录
/usr/local/mysql/bin/mysql-uroot-p'1'-e"\s"【编译安装PHP】
编译安装 PHP 8.2.26
先装 PHP 额外依赖(不然 ./configure 一定会少扩展)
yum-yinstall\oniguruma-devel\sqlite-develPHP-FPM + Apache ProxyFCGI
优点:PHP 与 Apache 解耦、升级 PHP 不用动 httpd;Discuz/WP 都跑得很稳。
缺点:需要多配几行 httpd 的代理规则(我给你现成的)。
编译 PHP-FPM
cd/usr/local/src/lamptarxf php-8.2.0.tar.bz2cdphp-8.2.0 ./configure\--prefix=/usr/local/php82\--with-config-file-path=/usr/local/php82/etc\--enable-fpm\--with-fpm-user=apache\--with-fpm-group=apache\--with-openssl\--with-curl\--with-zlib\--with-gd\--with-jpeg\--with-freetype\--with-mysqli=mysqlnd\--with-pdo-mysql=mysqlnd\--enable-mbstring\--enable-xml\--enable-session\--enable-opcache\--disable-rpath;echo$?make-j$(nproc)&&makeinstall;echo$?基础 php.ini & php-fpm.conf
cp-avphp.ini-production /usr/local/php82/etc/php.iniphp-fpm.conf
cp-av/usr/local/php82/etc/php-fpm.conf.default /usr/local/php82/etc/php-fpm.confcp-av/usr/local/php82/etc/php-fpm.d/www.conf.default /usr/local/php82/etc/php-fpm.d/www.conf编辑 /usr/local/php82/etc/php-fpm.d/www.conf(至少核对这几项):
user=apache group=apache listen=127.0.0.1:9000 listen.owner=apache listen.group=apache pm=dynamic pm.max_children=50pm.start_servers=10pm.min_spare_servers=5pm.max_spare_servers=20grep-nE"^user|^group|^listen|^;listen"/usr/local/php82/etc/php-fpm.d/www.confgrep-nE"^pm|^pm.max_children|^pm.start_servers|^pm.min_spare_servers|^pm.max_spare_servers"/usr/local/php82/etc/php-fpm.d/www.conf启动 php-fpm:
/usr/local/php82/sbin/php-fpm -t
/usr/local/php82/sbin/php-fpm
psaxu|grepphp-fpmApache 侧启用 proxy_fcgi,并把 .php 交给 PHP-FPM
在 /etc/httpd/conf/httpd.conf确保加载(一般编译时已带):
#LoadModule proxy_module modules/mod_proxy.so#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.sogrep-En'proxy_module|proxy_fcgi_module'/usr/local/apache/conf/httpd.conf
若没有按照上图显示,执行这几条命令
sed-i's@#LoadModule proxy_module modules/mod_proxy.so@LoadModule proxy_module modules/mod_proxy.so@g'/usr/local/apache/conf/httpd.confsed-i's@#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@g'/usr/local/apache/conf/httpd.confgrep-En'proxy_module|proxy_fcgi_module'/usr/local/apache/conf/httpd.conf
然后在你的 (或全局 Directory 之后)加:
<FilesMatch\.php$>SetHandler"proxy:fcgi://127.0.0.1:9000"</FilesMatch>DirectoryIndex index.php index.htmlvim+254 /usr/local/apache/conf/httpd.conf编辑Apache解析PHP动态脚本
cat/usr/local/apache/htdocs/index.php<?php phpinfo();?>重启apache服务,使用浏览器访问你的ip,可以看到php的版本,环境变量,各种配置等信息。
【配置基于域名的虚拟主机】
修改 httpd-vhosts.conf
cd/usr/local/apache/conf/extracp-avhttpd-vhosts.conf /opt/httpd-vhosts.conf.bak配置基于域名的虚拟主机
在主配置文件中将虚拟主机那行之前的注释#去掉
sed-i's@#Include conf/extra/httpd-vhosts.conf@Include conf/extra/httpd-vhosts.conf@g'/usr/local/apache/conf/httpd.confgrep-nhttpd-vhosts /usr/local/apache/conf/httpd.conf /usr/local/apache/bin/apachectl-krestart实际生产环境,建议一个虚拟主机,使用一个单独的配置文件进行控制。【解耦】
touchweb3.fanzc.com.conf web4.fanzc.com.conf然后将以下内容写入虚拟主机配置文件中:
cat>/usr/local/apache/conf/extra/httpd-vhosts.conf<<'EOF' # ====== Virtual Hosts ====== # 基于域名(name-based)的虚拟主机 # 服务器: 192.168.30.169 # ---------- web3: PHP 站点 ---------- <VirtualHost *:80> ServerName web3.fanzc.com # 你自己的域名(配置时将注释删掉) ServerAdmin admin@fanzc.com # 以下内容同理填写你自己的域名 DocumentRoot "/usr/local/apache/htdocs/web3.fanzc.com" DirectoryIndex index.php index.html <Directory "/usr/local/apache/htdocs/web3.fanzc.com"> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog "logs/web1-error_log" CustomLog "logs/web1-access_log" common </VirtualHost> # ---------- web4: HTML 站点 ---------- <VirtualHost *:80> ServerName web4.fanzc.com ServerAdmin admin@fanzc.com DocumentRoot "/usr/local/apache/htdocs/web4.fanzc.com" DirectoryIndex index.html index.php <Directory "/usr/local/apache/htdocs/web4.fanzc.com"> Options -Indexes +FollowSymLinks AllowOverride None Require all granted </Directory> ErrorLog "logs/web4-error_log" CustomLog "logs/web4-access_log" common </VirtualHost> EOF创建网站目录
mkdir-pv/usr/local/apache/htdocs/web{3..4}.fanzc.comweb3:PHP 页面(能解析 PHP = 环境成功)
cat>/usr/local/apache/htdocs/web3.fanzc.com/index.php<<'EOF' <?php echo "<h1>Web3 fanzc.com - PHP 环境正常</h1>"; phpinfo(); EOFweb4:HTML 页面
cat>/usr/local/apache/htdocs/web4.fanzc.com/index.html<<'EOF' <h1>Web2 fanzc.com - HTML 页面正常</h1> EOF修改权限
chown-Rapache:apache /usr/local/apache/htdocs/web{3..4}.fanzc.com ll-d/usr/local/apache/htdocs/web{3..4}.fanzc.comLinux 本机 /etc/hosts 配置
cat>>/etc/hosts<<'EOF' ##### apache vhosts by fanzc $(date +%F_%T) ##### 192.168.30.169 web3.fanzc.com 192.168.30.169 web4.fanzc.com ##### apache vhosts by fanzc $(date +%F_%T) ##### EOFcat/etc/hostsping-c2web3.fanzc.com&>/dev/null;echo$?ping-c2web4.fanzc.com&>/dev/null;echo$?Windows 客户端写 hosts 文件
修改方法
hosts 文件位置:
C:\Windows\System32\drivers\etc\hosts
⚠️ 必须用管理员权限编辑,否则保存会失败。
1.开始菜单搜索 记事本
2.右键 → 以管理员身份运行
3.文件 → 打开 → 路径粘贴 C:\Windows\System32\drivers\etc\hosts(右下角文件类型选"所有文件")
4.末尾追加:
192.168.30.169 web3.fanzc.com
192.168.30.169 web4.fanzc.com
浏览器访问验证
web3.fanzc.com
web4.fanzc.com
【给web3.fanzc.com配置wordpress】
确定 Web 根目录
编译安装的 Apache 默认根目录通常在 /usr/local/apache/htdocs,为了方便管理,建议你在该目录下创建子目录。
解压并部署程序
部署 WordPress
下载依赖包
yuminstallphp-gd php-curl php-mbstring php-xml php-zip php-intl php-json-y解压
cd/usr/local/src/lamp/wgethttps://cn.wordpress.org/latest-zh_CN.tar.gztar-zxvflatest-zh_CN.tar.gz移动文件
mvwordpress/* /usr/local/apache/htdocs/web3.fanzc.com赋予权限
chown-Rdaemon:daemon /usr/local/apache/htdocs/web3.fanzc.com创建数据库
这一步和安装方式无关,直接登录数据库操作:
创建数据库(推荐使用 utf8mb4 字符集,完美兼容中文和特殊符号)
CREATEDATABASEwordpress_dbCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;创建专属用户并授权
CREATEUSER'wp_user'@'localhost'IDENTIFIEDBY'你的数据库密码';GRANTALLPRIVILEGESONwordpress_db.*TO'wp_user'@'localhost';FLUSHPRIVILEGES;EXIT;重启 Apache
编译安装的服务不能用 systemctl,必须用绝对路径。
检查配置语法是否正确(非常重要,防止配错导致起不来)
/usr/local/apache/bin/apachectl-t如果显示Syntax OK,继续下一步。
重启服务
/usr/local/apache/bin/apachectl restart浏览器访问web3.fanzc.com
将wp-config.php手动创建在/usr/local/apache/htdocs/web3.fanzc.com目录下即可,之后重复一遍填写数据库连接信息
【给web4.fanzc.com部署Discuz】
确定 Web 根目录
编译安装的 Apache 默认根目录通常在 /usr/local/apache/htdocs。为了方便管理,建议你在该目录下创建子目录。
解压并部署程序
部署 discuz
下载依赖包
yum-yinstallunzipwget解压
cd/usr/local/src/lamp/wgethttps://gitee.com/Discuz/DiscuzX/attach_files/2714621/downloadmvdownload discuz.zipunzipdiscuz.zip移动文件 (upload目录里才是程序本体)
mvupload/* /usr/local/apache/htdocs/web4.fanzc.com赋予权限
chmod-R755/usr/local/apache/htdocs/web4.fanzc.com如果755权限不够就先给777,后续所有操作完成并正常访问站点之后再改回来
修改虚拟主机配置文件
按照如图所示修改即可
将index.php放在第一位
重启 Apache
编译安装的服务不能用 systemctl,必须用绝对路径。
检查配置语法是否正确(非常重要,防止配错导致起不来)
/usr/local/apache/bin/apachectl-t如果显示Syntax OK,继续下一步。
重启服务
/usr/local/apache/bin/apachectl restart创建数据库准备
这一步和安装方式无关,直接登录数据库操作:
创建数据库(推荐使用 utf8mb4 字符集,完美兼容中文和特殊符号)
CREATEDATABASEdiscuz_dbCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;创建专属用户并授权
GRANTALLPRIVILEGESONdiscuz_db.*TO'discuz_user'@'localhost'IDENTIFIEDBY'你的密码';如果报错,执行以下命令
CREATEUSER'discuz_user'@'localhost'IDENTIFIEDBY'你的密码';GRANTALLPRIVILEGESONdiscuz_db.*TO'discuz_user'@'localhost';刷新权限并退出
FLUSHPRIVILEGES;EXIT;