在centos中部署后端程序。
# Intro
LAMP 和 LNMP 都是用于搭建 Web 服务器环境的软件栈,其中 LAMP 是使用 Linux 操作系统、Apache Web 服务器、MySQL 数据库和 PHP 编程语言,而 LNMP 则是使用 Linux 操作系统、Nginx Web 服务器、MySQL 数据库和 PHP 编程语言。当然也有组合使用的 LNMPA、LAMN、LEMP 等,关于这些我只谈谈 LNMPA。
# 都是啥东西?
- L 是指 Linux 操作系统:LAMP 中的 L 指的是 Linux 操作系统,通常使用 Ubuntu、Debian、CentOS 等常见的 Linux 发行版。
- A 是指 Apache Web 服务器:Apache 是一个流行的开源 Web 服务器软件,它支持多种操作系统和编程语言,包括 PHP、Perl、Python 等。
- N 是指 Nginx Web 服务器:Nginx 是另一种流行的开源 Web 服务器软件,它与 Apache 相比更轻量级、更高效,并且支持更多的并发连接。
- M 是指 MySQL 数据库:MySQL 是一个流行的关系型数据库管理系统,它支持多种操作系统和编程语言,包括 PHP、Java、Python 等。
- P 是指 PHP 编程语言:PHP 是一种流行的 Web 编程语言,它可以在服务器端生成动态网页内容,与 MySQL 数据库和 Apache Web 服务器紧密集成。
总的来说,LAMP 和 LNMP 的最大区别在于 Web 服务器组件的选择。对于需要处理大量并发连接的 Web 应用程序,LNMP 中的 Nginx 服务器通常比 Apache 性能更好。而对于一些较小的 Web 应用程序,使用 LAMP 也是一种不错的选择。
# LNMPA
LNMPA 同样是由上述的软件组成的。LNMPA 的特点是同时支持 Nginx 和 Apache 两种 Web 服务器,可以灵活地根据实际需求进行选择使用。具体的区别在于 LNMPA 中的 N 和 A 的作用。
- Nginx Web 服务器:Nginx 是 LNMPA 中的主要 Web 服务器,它提供高性能的反向代理和负载均衡功能,可以有效地处理大量并发请求。
- Apache Web 服务器:Apache 是 LNMPA 中的备用 Web 服务器,当需要使用一些只支持 Apache 的模块或应用程序时可以切换到 Apache。
与 LNMP 相比,LNMPA 的主要优点是可以同时支持 Nginx 和 Apache 两种 Web 服务器,从而更好地适应各种 Web 应用程序的需求。同时,LNMPA 还可以通过配置文件灵活地选择使用哪种 Web 服务器,并且可以在不重启服务的情况下切换服务器,提高了系统的可用性和灵活性。
# 其他
是否有 LAMPN 这种组合呢?
LAMPN 并不是一个常见的 Web 服务器软件栈,通常情况下不会使用它来搭建 Web 服务器环境。不过,如果你指的是在 LAMP 中加入 Nginx Web 服务器,也就是使用 Linux 操作系统、Apache Web 服务器、MySQL 数据库和 Nginx Web 服务器,那么这个组合通常被称为 LAMN 或 LEMP。
这里不做详细赘述。
# 环境搭建
其实部署很简单,重要的地方在于部署时出现差错后该如何进行处理。
# 简单使用
使用 apt 或者 yum 安装的方式太过简单所以不做详细描述。我只放出命令提供复制使用。
安装 Nginx:
1 | yum install nginx |
安装 Apache:
1 | yum install httpd |
安装 PHP:
1 | yum install php |
以上命令将会安装最新版本的软件包。如果需要安装特定版本的软件,可以在命令后面加上软件包的版本号,例如:
1 | yum install nginx-1.20.1 |
安装完成后,启动服务并设置开机自启:
1 | systemctl start nginx/httpd/php-fpm # 启动服务 |
# Nginx 的安装
# 使用源码编译安装:
- 访问 Nginx 官网,复制最新版本链接。wget 到本地目录。
1 | cd ~ |
- 解压出来。
1 | tar -zxvf nginx-1.23.1.tar.gz |
- 更新并安装编译所需要的前置。(PS:请使用 root 用户)
1 | yum update && yum -y upgrade |
- 进入解压出来的文件夹,编译安装。
1 | cd nginx-1.23.1 |
- nginx 的启动和关闭
1 | cd /usr/local/nginx/sbin |
- 创建目录
1 | mkdir /var/temp/nginx -p |
建议在执行前先使用 netstat -aux | grep 80 查看是否有端口占用 80。
# 写 Systemd 实现开机自启
- 编辑文件
1 | cd /lib/systemd/system/ |
- 添加内容
1 | [Unit] |
其中, PIDFile
、 ExecStartPre
、 ExecStart
、 ExecReload
、 KillStop
和 ExecStop
等选项需要根据你实际安装的 Nginx 路径进行修改。
- 保存并重新加载
1 | sudo systemctl daemon-reload |
- 启动
1 | // 启动/关闭nginx |
# 编译安装 Apache
# 安装依赖
在开始编译安装 Apache 之前,我们需要先安装一些依赖软件包,以确保编译过程顺利进行。在终端中执行以下命令,如果在安装 nginx 的时候已经安装过的包会自动跳过。
1 | yum install -y gcc make apr-devel apr-util-devel pcre-devel |
# 编译安装 APR 库
APR(Apache Portable Runtime)是 Apache 在不同平台上实现跨平台性的工具库,而 Apache HTTP 服务器就依赖于 APR 库。
- 使用 wget 命令下载 APR 库的源代码包:
1 | wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.6.5.tar.gz |
- 使用 tar 命令解压缩源代码包:
1 | tar -zxvf apr-1.6.5.tar.gz |
- 进入解压后的目录:
1 | cd apr-1.6.5 |
- 执行以下命令编译并安装 APR 库:
1 | ./configure --prefix=/usr/local/apr |
其中, --prefix
选项指定了安装路径。这里我们将 APR 安装到 /usr/local/apr
目录下。
# 编译安装 APR-util 库
APR-util 是 APR 库的补充,它提供了一些 Apache HTTP 服务器所需的额外功能。在编译安装 Apache 时,需要使用 APR-util 库。
- 使用 wget 命令下载 APR-util 库的源代码包:
1 | wget https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz |
- 同上,使用 tar 命令解压缩源代码包:
1 | tar -zxvf apr-util-1.6.3.tar.gz |
- 进入解压后的目录:
1 | cd apr-util-1.6.3 |
- 执行以下命令编译并安装 APR-util 库:
1 | ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config |
其中, --prefix
选项指定了安装路径, --with-apr
选项指定了 APR 库的安装路径。
# 编译安装 PCRE 库
PCRE(Perl Compatible Regular Expressions)是一款正则表达式库,它为 Apache HTTP 服务器提供了正则表达式支持。
- 使用 wget 命令下载 PCRE 库的源代码包:
1 | wget https://nchc.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz |
- 使用 tar 命令解压缩源代码包:
1 | tar -zxvf pcre-8.45.tar.gz |
- 进入解压后的目录:
1 | cd pcre-8.45 |
- 执行以下命令编译并安装 PCRE 库:
1 | ./configure --prefix=/usr/local/pcre --with-apr=/usr/local/apr/bin/apr-1-config |
其中, --prefix
选项指定了安装路径, --with-apr
选项指定了 APR 库的安装路径。
# 安装 Apache
现在,我们已经准备好了编译 Apache 的环境。
- 使用 wget 命令下载 Apache 的源代码包:
1 | wget https://mirrors.aliyun.com/apache/httpd/httpd-2.4.57.tar.gz |
- 使用 tar 命令解压缩源代码包:
1 | tar -zxvf httpd-2.4.57.tar.gz |
- 进入解压后的目录:
1 | cd httpd-2.4.57 |
- 执行以下命令编译并安装 Apache:
1 | ./configure --prefix=/usr/local/httpd --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util |
其中, --prefix
选项指定了安装路径, --with-pcre
选项指定了 PCRE 库的安装路径, --with-apr
和 --with-apr-util
选项分别指定了 APR 库和 APR-util 库的安装路径。
注意:如果在编译过程中出现任何错误,请参考错误提示进行解决。
# 配置开机自启动
为了让 Apache 在服务器启动时自动启动,我们需要将其配置为开机自启动服务。
- 将 apachectl 命令复制到 /etc/init.d/ 目录下:
1 | cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd |
- 将以下命令添加到 /etc/profile 文件末尾:
1 | echo -e '\nexport PATH=/usr/local/httpd/bin:/usr/local/httpd/lib:$PATH\n' >> /etc/profile && source /etc/profile |
- 创建开机自启动服务:
1 | echo "#chkconfig:2345 64 36" > /etc/rc.d/init.d/httpd |
现在,Apache 就已经配置为开机自启动服务了。
# 配置防火墙
为了能够让 Apache 监听 HTTP 和 HTTPS 端口,我们需要在服务器的防火墙中添加相应的规则。在终端中执行以下命令:
1 | // 放行80,443端口 |
这将添加 HTTP 端口(80)和 HTTPS 端口(443)的防火墙规则,并且将规则永久保存。
1 | //使用如下命令展示所有放行的端口。 |
如果你觉得放行端口太麻烦,你也可以直接选择关掉防火墙。
1 | // 关闭防火墙 |
# 配置 Apache
如果上面的步骤都执行完了,并且修复了错误。那么接下来,我们需要对 Apache 进行一些配置,以确保其能够正常工作。
- 使用 vim 或其他编辑器打开 Apache 的配置文件:
1 | vim /usr/local/httpd/conf/httpd.conf |
- 将以下行的注释符号(#)去掉:
1 | #ServerName www.example.com:80 |
这将允许 Apache 监听所有可用的网络接口,并且可以响应来自任何主机的请求。
- 保存并关闭文件。
# 启动 Apache
使用以下命令启动 Apache 服务:
1 | systemctl start httpd |
现在,你可以通过浏览器访问服务器的 IP 地址或域名,验证 Apache 是否已经成功安装和配置。
如果一切正常,你应该能够看到 Apache 的默认欢迎页面。
such as:
# 编译安装 PHP
# 安装依赖
安装 epel-release 源
1 | yum -y install epel-release |
更新系统
1 | yum update |
安装 PHP 所需依赖
1 | yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype gd jpegsrc libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel openssl openssl-devel sqlite-devel |
安装 oniguruma 库
1 | yum -y install http://down.24kplus.com/linux/oniguruma/oniguruma-6.7.0-1.el7.x86_64.rpm |
# 下载 PHP
下载 PHP 源码包
1 | wget https://www.php.net/distributions/php-8.2.5.tar.gz |
解压源码包
1 | tar -zxvf php-8.2.5.tar.gz |
进入源码包目录
1 | cd php-8.2.5 |
# 配置 PHP 并编译安装
使用以下命令配置编译选项:
1 | ./configure --prefix=/usr/local/php8/ --with-config-file-path=/usr/local/php8/etc/ --with-apxs2=/usr/local/httpd/bin/apxs --enable-mbstring --with-curl -with-gd --enable-fpm --enable-mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd |
或者将上述命令分成多行,更易读:
1 | ./configure \ |
编译并安装 PHP
1 | make && make install |
# 配置环境变量和测试
将 PHP 加入系统 PATH 环境变量
1 | echo -e '\nexport PATH=/usr/local/php8/bin:/usr/local/php8/sbin:$PATH\n' >> /etc/profile && source /etc/profile |
测试 PHP-FPM 配置是否正确
1 | php-fpm -t |
如果配置正确,会输出如下信息:
1 | [18-Apr-2023 10:12:57] NOTICE: configuration file /usr/local/php8/etc/php-fpm.conf test is successful |
# 启动和关闭 PHP-FPM
启动 PHP-FPM
1 | /etc/init.d/php-fpm |
关闭 PHP-FPM
1 | pkill php-fpm |
# 配置 Apache
编辑 Apache 配置文件,使其可以解析 php。
1 | vi /usr/local/httpd/conf/httpd.conf |
- 加载 PHP 模块
查看是否已经添加了,如果没有在 loadModule 处添加。正确安装后,应该已经有了。
1 | LoadModule php7_module modules/libphp7.so |
- 设置默认文档
在 <IfModule dir_module>
模块添加 index.php
,作为默认文档。
1 | DirectoryIndex index.html index.php |
- 添加 PHP 文件类型
在 Apache 配置文件中找到以下内容:
1 | AddType application/x-compress .Z |
添加如下内容:
1 | AddType application/x-httpd-php-source .phps |
# 重启 Apache
重启 Apache 使配置生效
1 | systemctl restart httpd |
# 测试
在 Apache 根目录下创建一个 index.php
文件,内容如下:
1 | phpinfo(); |
在浏览器中访问: http://your_domain/index.php
,如果看到 PHP 信息页,说明 PHP 已经成功安装和配置。
# Mysql 的安装
Mysql 我就不用编译安装了,有点折磨。
-
先安装 wget
yum install wget
。 -
下载并安装 mysql。
1 |
|
- 启动 mysql
1 |
|
- 查找日志并找到临时密码。
1 |
|
- 登录 mysql
1 |
|
- 修改密码
我有专门说过这傻逼 mysql 改密码。可以到我的博客上看看。
- 重启 mysql 服务
1 |
|
重启后就可以正常使用 mysql 了。
# 访问之前
上面有提到端口开放,可以用这条命令看看是否放开了:
1 | firewall-cmd --all |
# 安装 web 程序
安装好 LAMP/LNMP 环境后就可以安装和使用对应环境的网页程序了,这里给出一些常见的环境。
# 安装 pma
phpMyAdmin(简称 PMA)是一款基于 PHP 的 MySQL 数据库管理工具,可以通过 Web 界面对 MySQL 数据库进行管理,包括创建、修改和删除数据库、表、字段、索引等操作,同时还支持 SQL 查询和导入导出数据等功能,是 MySQL 管理的重要工具之一。
- 下载 PMA:
1 | wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip |
- 解压 PMA:
1 | unzip phpMyAdmin-5.2.1-all-languages.zip |
- 重命名解压后的目录:
1 | mv phpMyAdmin-5.2.1-all-languages pma |
- 安装 PHP mysqli 扩展:
1 | yum install php-mysqli |
- 进入 PMA 目录:
1 | cd pma |
- 复制配置文件:
1 | cp config.sample.inc.php config.inc.php |
- 修改配置文件:
1 | vi config.inc.php |
在该文件中,您需要修改以下参数:
1 | $cfg['Servers'][$i]['host'] = 'localhost'; // 数据库主机地址 |
将上述参数修改为您的 MySQL 数据库的实际配置即可。如果您的 MySQL 数据库与 PMA 安装在同一台服务器上,那么主机地址可以设置为 localhost
,端口号可以设置为默认的 3306
。如果您的 MySQL 数据库与 PMA 安装在不同的服务器上,那么主机地址应该设置为 MySQL 数据库的 IP 地址,端口号可以根据实际情况进行修改。
- 配置 HTTP 访问:
将 PMA 目录放置在 Apache 或 Nginx 的根目录下,例如 /var/www/html
,然后通过 HTTP 协议访问,例如 http://your_domain/pma
。
如果您使用的是 Apache,还需要在 Apache 配置文件中添加以下内容:
1 | Alias /pma /var/www/html/pma |
- 重启 HTTP 服务器:
1 | systemctl restart httpd/nginx |
至此,PMA 已经安装完成,并可以通过 HTTP 协议访问。请访问 http://your_domain/pma
,使用您的 MySQL 数据库账号和密码登录 PMA。
# PMA
在这里安装时并没有创建如虚拟主机这种配置文件,而是直接放在默认的网站目录里。下面安装 wordpress 我将会创建一个虚拟主机,来安装和使用 wordpress。
# 安装 wordpress
WordPress 是一款流行的开源博客系统,它基于 PHP 和 MySQL 构建,具有简单易用、灵活可扩展等优点,是搭建个人博客、企业网站等的不二之选。
我将详细介绍如何安装 wordpress。
# 创建虚拟网站
为了避免 html 下文件之间的互相影响,可以选择创建虚拟网站来将他们隔开。
# Apache 方法
首先,需要在 Apache 的配置文件中创建一个虚拟主机。假设我们要为 WordPress 创建一个名为 example.com
的虚拟主机,可以按照以下步骤进行配置:
- 创建一个新的配置文件
/etc/httpd/conf.d/example.com.conf
,并添加以下内容:
1 | <VirtualHost *:80> |
上述配置文件中, ServerName
指定了虚拟主机的域名, DocumentRoot
指定了虚拟主机的根目录, <Directory>
定义了虚拟主机的访问控制和索引文件等配置, <FilesMatch>
则用于匹配 PHP 脚本的 URL,并使用 FastCGI 处理 PHP 脚本。需要将其中的 /var/www/example.com
替换为实际的 WordPress 根目录。
- 在
/etc/hosts
文件中添加虚拟主机的 IP 地址和域名的映射关系:
1 | 127.0.0.1 example.com |
- 重启 Apache 服务:
1 | systemctl restart httpd |
需要注意的是,如果需要使用 SSL 证书,还需要进行 SSL 相关的配置,并将虚拟主机的端口从 80 改为 443。
# nginx 方式
与 Apache 类似,需要在 Nginx 的配置文件中创建一个虚拟主机。假设我们要为 WordPress 创建一个名为 example.com
的虚拟主机,可以按照以下步骤进行配置:
- 创建一个新的配置文件
/etc/nginx/conf.d/example.com.conf
,并添加以下内容:
1 | server { |
上述配置文件中, listen
指定了虚拟主机监听的端口, server_name
指定了虚拟主机的域名, root
指定了虚拟主机的根目录, location /
用于定义 URL 的匹配规则和相应的处理方式, location ~ \.php$
则用于匹配 PHP 脚本的 URL,并使用 FastCGI 处理 PHP 脚本。需要将其中的 /var/www/example.com
替换为实际的 WordPress 根目录。
- 在
/etc/hosts
文件中添加虚拟主机的 IP 地址和域名的映射关系:
1 | 127.0.0.1 example.com |
- 重启 Nginx 服务:
1 | systemctl restart nginx |
和 apache 相同,如果需要使用 SSL 证书,还需要进行 SSL 相关的配置,并将虚拟主机的端口从 80 改为 443。
# 安装
- 创建 MySQL 数据库和用户
登录 MySQL 控制台,并创建一个新的数据库和用户:
1 | mysql -u root -p |
其中,'wordpress_db' 是要创建的数据库名,'wordpress_user' 是要创建的数据库用户,'password' 是要设置的数据库密码。需要将这些参数替换为自己的实际值。
- 下载和解压 WordPress
从 WordPress 官网下载最新的 WordPress 压缩包,并解压到 Apache 的 Web 根目录下,例如 /var/www/html/
:
1 | cd /tmp |
- 配置 WordPress
重命名配置文件:
1 | cd /var/www/html/ |
编辑 wp-config.php
文件,并根据之前创建的数据库和用户设置以下参数:
1 | define('DB_NAME', 'wordpress_db'); |
其中,'wordpress_db' 是之前创建的数据库名,'wordpress_user' 是之前创建的数据库用户,'password' 是之前设置的数据库密码。
- 设置文件权限
修改 WordPress 文件的权限,以使得 Apache 可以对其进行读写:
1 | chown -R apache:apache /var/www/html/ |
- 启动 Apache 和 MySQL
启动 Apache 和 MySQL 服务,并设置开机自启:
1 | systemctl start httpd |
- 访问 WordPress
现在,我们可以通过浏览器访问 WordPress,输入服务器 IP 地址或域名,即可开始 WordPress 的安装过程。按照提示,设置网站名称、管理员账号和密码等信息,然后点击 “安装 WordPress” 按钮,即可完成 WordPress 的安装。
需要注意的是,为了保障网站的安全性,我们需要在 WordPress 安装完成后进行一些安全性方面的设置,例如加强访问控制、配置 SSL 证书、定期更新 WordPress 和插件等等。另外,我们也可以根据需要安装并配置一些 WordPress 插件,以扩展 WordPress 的功能。