lamp
lamp简介
所谓lamp,其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为经常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。
LAMP指的是Linux(操作系统)、Apache(HTTP服务器)、MySQL(也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的第一个字母,一般用来建立web应用平台。
lamp平台构建
环境说明:
系统平台 | IP | 需要安装的服务 |
---|---|---|
centos8 | 192.168.159.158 | httpd-2.4 mysql-5.7 php php-mysql |
lamp平台软件安装次序:
httpd --> mysql --> php
注意:php要求httpd使用prefork MPM
安装httpd
//YUM源配置
[root@zjq ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@zjq ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@zjq ~]# yum makecache
//epel源配置
[root@zjq ~]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@zjq ~]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@zjq ~]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
//安装依赖包
[root@zjq ~]# yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ make vim wget
//创建apache服务的用户
[root@zjq ~]# useradd -Mrs /sbin/nologin apache
[root@zjq ~]# id apache
uid=995(apache) gid=992(apache) groups=992(apache)
//下载和安装httpd和apr以及apr-util
[root@zjq ~]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz https://downloads.apache.org/httpd/httpd-2.4.54.tar.gz
[root@zjq ~]# tar xf apr-1.7.0.tar.gz
[root@zjq ~]# tar xf apr-util-1.6.1.tar.gz
//编译安装apr
[root@zjq ~]# cd apr-1.7.0/
[root@zjq apr-1.7.0]# vim configure
cfgfile=${ofile}T
trap "$RM \"$cfgfile\"; exit 1" 1 2 15
# $RM "$cfgfile //注释或删除这一行
[root@zjq apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@zjq apr-1.7.0]# make && make install
//编译安装apr-util
[root@zjq ~]# cd apr-util-1.6.1/
[root@zjq apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@zjq apr-util-1.6.1]# make && make install
//编译安装httpd
[root@zjq ~]# tar xf httpd-2.4.54.tar.gz
[root@zjq ~]# cd httpd-2.4.54/
[root@zjq httpd-2.4.54]# ./configure --prefix=/usr/local/apache \
> --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=prefork
[root@zjq httpd-2.4.54]# makes
[root@zjq httpd-2.4.54]# make install
//安装后配置
[root@zjq ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/httpd.sh
[root@zjq ~]# source /etc/profile.d/httpd.sh
[root@zjq ~]# ln -s /usr/local/apache/include/ /usr/include/httpd
[root@zjq ~]# vim /etc/man_db.conf
MANDATORY_MANPATH /usr/man
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/local/share/man
MANDATORY_MANPATH /usr/local/apache/man
//配置开机自启配置文件并启动apache
[root@zjq ~]# cd /usr/lib/systemd/system
[root@zjq system]# cp sshd.service httpd.service
[root@zjq system]# vim httpd.service
[root@zjq system]# cat httpd.service
[Unit]
Description=web server daemon
Documentation=man:httpd(5)
After=network.target sshd-keygen.target
[Service]
Type=forking
ExecStart=/usr/local/apache/bin/apachectl start
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/usr/local/apache/bin/apachectl stop
[Install]
WantedBy=multi-user.target
[root@zjq ~]# systemctl daemon-reload
[root@zjq ~]# systemctl start httpd.service
[root@zjq ~]# systemctl enable httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@zjq ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
安装mysql
//安装依赖包
[root@zjq ~]# yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel
//创建用户
[root@zjq ~]# useradd -Mrs /sbin/nologin mysql
[root@zjq ~]# id mysql
uid=994(mysql) gid=991(mysql) groups=991(mysql)
//下载二进制格式的mysql软件包
[root@zjq ~]# cd /usr/src/
[root@zjq src]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
//解压软件至/usr/local/
[root@zjq src]# tar xf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@zjq src]# cd /usr/local/
[root@zjq local]# mv mysql-5.7.38-linux-glibc2.12-x86_64/ mysql
[root@zjq local]# ls
apache apr-util etc include lib64 mysql share
apr bin games lib libexec sbin src
//修改mysql的属主属组
[root@zjq local]# chown -R mysql.mysql mysql
//配置mysql
[root@zjq local]# ls /usr/local/mysql
bin docs include lib LICENSE man README share support-files
[root@zjq local]# ln -s /usr/local/mysql/include/ /usr/include/mysql
[root@zjq local]# echo '/usr/local/mysql/lib/' > /etc/ld.so.conf.d/mysql.conf
[root@zjq local]# vim /etc/man_db.conf
MANDATORY_MANPATH /usr/man
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/local/share/man
MANDATORY_MANPATH /usr/local/apache/man
MANDATORY_MANPATH /usr/local/mysql/man
//添加环境变量
[root@zjq ~]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@zjq ~]# source /etc/profile.d/mysql.sh
[root@zjq ~]# which mysql
/usr/local/mysql/bin/mysql
//初始化数据库
[root@zjq ~]# mkdir -p /opt/data
[root@zjq ~]# chown -R mysql.mysql /opt/data/
[root@zjq ~]# mysqld --initialize --user mysql --datadir /opt/data/
2022-08-02T12:13:11.015589Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2022-08-02T12:13:11.247148Z 0 [Warning] InnoDB: New log files created, LSN=45790
2022-08-02T12:13:11.279148Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2022-08-02T12:13:11.334260Z 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: 7a1ca64a-125c-11ed-b89a-000c29795f8d.
2022-08-02T12:13:11.335409Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2022-08-02T12:13:11.487590Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2022-08-02T12:13:11.487608Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2022-08-02T12:13:11.487955Z 0 [Warning] CA certificate ca.pem is self signed.
2022-08-02T12:13:11.586698Z 1 [Note] A temporary password is generated for root@localhost: 0!#egl/wkj5E
[root@zjq ~]# echo '0!#egl/wkj5E' > pass
//删除原有的mariadb服务
[root@zjq ~]# rpm -qa|grep mariadb
mariadb-connector-c-config-3.1.11-2.el8_3.noarch
mariadb-connector-c-3.1.11-2.el8_3.x86_64
mariadb-connector-c-devel-3.1.11-2.el8_3.x86_64
mariadb-devel-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
[root@zjq ~]# yum -y remove mariadb*
//生成配置文件
[root@zjq ~]# vim /etc/my.cnf
[root@zjq ~]# cat /etc/my.cnf
4[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
//配置服务启动脚本
[root@zjq ~]# cd /usr/local/mysql/
[root@zjq mysql]# ls
bin docs include lib LICENSE man README share support-files
[root@zjq mysql]# cd support-files/
[root@zjq support-files]# ls
magic mysqld_multi.server mysql-log-rotate mysql.server
[root@zjq support-files]# cp mysql.server /etc/init.d/mysqld
[root@zjq support-files]# vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/opt/data
[root@zjq support-files]# chmod +x /etc/init.d/mysqld
//启动mysql
[root@zjq ~]# service mysqld start
Starting MySQL.Logging to '/opt/data/zjq.err'.
SUCCESS!
[root@zjq ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 80 *:3306 *:*
[root@zjq ~]# chkconfig --add mysqld
[root@zjq ~]# chkconfig --list
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
//关闭防火墙与selinux
[root@zjq ~]# systemctl stop firewalld.service
[root@zjq ~]# systemctl disable firewalld.service
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@zjq ~]# setenforce 0
[root@zjq ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
//进入数据库,如遇到错误演示完下方有解决方案
[root@zjq ~]# mysql -uroot -p'0!#egl/wkj5E'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.38
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
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>
mysql> set password = password('123');
Query OK, 0 rows affected, 1 warning (0.00 sec)
解决方法
[root@zjq ~]# mysql -uroot -p'0!#egl/wkj5E'
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
[root@zjq ~]# dnf provides libncurses.so.5
Last metadata expiration check: 1:18:14 ago on Tue 02 Aug 2022 07:08:59 PM CST.
ncurses-compat-libs-6.1-9.20180224.el8.i686 : Ncurses compatibility libraries
Repo : base
Matched from:
Provide : libncurses.so.5
[root@zjq ~]# dnf -y install ncurses-compat-libs
安装php
//下载php
[root@zjq ~]# wget https://www.php.net/distributions/php-7.4.30.tar.xz
[root@zjq ~]# sha256sum php-7.4.30.tar.xz
ea72a34f32c67e79ac2da7dfe96177f3c451c3eefae5810ba13312ed398ba70d php-7.4.30.tar.xz
[root@zjq ~]# tar xf php-7.4.30.tar.xz
//安装依赖包
[root@zjq ~]# yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libicu-devel libjpeg libjpeg-devel libpng libpng-devel openldap-devel pcre-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel mhash mhash-devel php-mysqlnd
//编译安装php,如需下载依赖包,依次下载我新添的三个包
[root@zjq ~]# cd php-7.4.30/
[root@zjq php-7.4.30]# dnf -y install libsqlite3x-devel
[root@zjq php-7.4.30]# dnf -y install http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/oniguruma-devel-6.8.2-2.el8.x86_64.rpm
[root@zjq php-7.4.30]# dnf -y install libzip-devel
[root@zjq php-7.4.30]# ./configure --prefix=/usr/local/php7 \
> --with-config-file-path=/etc \
> --enable-fpm \
> --enable-inline-optimization \
> --disable-debug \
> --disable-rpath \
> --enable-shared \
> --enable-soap \
> --with-openssl \
> --enable-bcmath \
> --with-iconv \
> --with-bz2 \
> --enable-calendar \
> --with-curl \
> --enable-exif \
> --enable-ftp \
> --enable-gd \
> --with-jpeg \
> --with-zlib-dir \
> --with-freetype \
> --with-gettext \
> --enable-json \
> --enable-mbstring \
> --enable-pdo \
> --with-mysqli=mysqlnd \
> --with-pdo-mysql=mysqlnd \
> --with-readline \
> --enable-shmop \
> --enable-simplexml \
> --enable-sockets \
> --with-zip \
> --enable-mysqlnd-compression-support \
> --with-pear \
> --enable-pcntl \
> --enable-posix
[root@zjq php-7.4.30]# make && make install
//安装后配置
[root@zjq php-7.4.30]# echo 'export PATH=/usr/local/php7/bin:$PATH' > /etc/profile.d/php7.sh
[root@zjq php-7.4.30]# source /etc/profile.d/php7.sh
[root@zjq php-7.4.30]# which php
/usr/local/php7/bin/php
[root@zjq php-7.4.30]# php -v
PHP 7.4.30 (cli) (built: Aug 2 2022 21:07:26) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
//配置php-fpm
[root@zjq php-7.4.30]# cd sapi/
[root@zjq sapi]# cd fpm/
[root@zjq fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
[root@zjq fpm]# chmod +x /etc/init.d/php-fpm
[root@zjq ~]# cd /usr/local/php7/etc/
[root@zjq etc]# cp php-fpm.conf.default php-fpm.conf
[root@zjq etc]# cd php-fpm.d/
[root@zjq php-fpm.d]# cp www.conf.default www.conf
//启动php-fpm
[root@zjq php-fpm.d]# service php-fpm start
Starting php-fpm done
[root@zjq php-fpm.d]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 127.0.0.1:9000 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 80 *:3306 *:*
[root@zjq php-fpm.d]# cd
[root@zjq ~]# chkconfig --add php-fpm
[root@zjq ~]# chkconfig --list
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
php-fpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off
配置apache
启用代理模块
在apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩展,因此,这两个模块都要加载,编辑httpd.conf文件,取消以下两行内容的注释:
- [root@zjq ~]# vim //usr/local/apache/conf/httpd.conf
- LoadModule proxy_module modules/mod_proxy.so
- LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
配置虚拟主机
//创建虚拟主机目录并生成php测试页面
[root@zjq ~]# mkdir /usr/local/apache/htdocs/zhang
[root@zjq ~]# vim /usr/local/apache/htdocs/zhang/index.php
[root@zjq ~]# cat /usr/local/apache/htdocs/zhang/index.php
<?php
phpinfo();
?>
[root@zjq ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs/zhang"
ServerName zhang.example.com
ErrorLog "logs/zhang.example.com-error_log"
CustomLog "logs/zhang.example.com-access_log" common
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/zhang/$1
<Directory "/usr/local/apache/htdocs/zhang">
Options none
AllowOverride none
Require all granted
</Directory>
</VirtualHost>
[root@zjq ~]# vim /usr/local/apache/conf/httpd.conf
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php #添加此行
AddType application/x-httpd-php-source .phps #添加此行
<IfModule dir_module>
DirectoryIndex index.php index.html //添加index.php
</IfModule>
[root@zjq ~]# vim /usr/local/apache/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf //取消注释
[root@zjq ~]# systemctl restart httpd.service
- 验证
- 安装phpmyadmin
//下载phpmyadmin包
[root@zjq ~]# wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.tar.xz
//解压
[root@zjq ~]# tar xf phpMyAdmin-5.2.0-all-languages.tar.xz
[root@zjq ~]# mv phpmyadmin/ /usr/local/apache/htdocs/zhang/
[root@zjq ~]# cd /usr/local/apache/htdocs/zhang/
[root@zjq zhang]# ls
index.php phpmyadmin
[root@zjq zhang]# cd phpmyadmin/
//复制样本文件到config.int.php
[root@zjq phpmyadmin]# cp config.sample.inc.php config.inc.php
//重启httpd
[root@zjq phpmyadmin]# systemctl restart httpd.service
- 测试登录