PHP进阶-在Ubuntu上搭建LAMP环境教程

本文将为您提供一个在Ubuntu服务器上搭建LAMP(Linux, Apache, MySQL, PHP)环境的完整指南。通过本文,您将学习如何安装和配置Apache、MySQL、PHP,并将您的PHP项目部署到服务器上。本文适用于Ubuntu 20.04及更高版本。


一、系统更新

在开始之前,确保您的系统软件包是最新的。

复制代码
sudo apt update
sudo apt upgrade -y

二、安装Apache

1. 安装Apache Web服务器
复制代码
sudo apt install apache2 -y
2. 启动并设置Apache开机自启
复制代码
sudo systemctl start apache2
sudo systemctl enable apache2
3. 验证Apache是否正常运行

在浏览器中访问 http://<您的服务器IP>/,应显示Apache默认的欢迎页面。如果无法访问,请检查防火墙设置(后续步骤将涵盖防火墙配置)。


三、安装MySQL

1. 安装MySQL服务器
复制代码
sudo apt install mysql-server -y
2. 启动并设置MySQL开机自启
复制代码
sudo systemctl start mysql
sudo systemctl enable mysql
3. 验证MySQL安装

登录MySQL以确认安装成功。

复制代码
sudo mysql -u root -p

MySQL默认密码是root,直接登录即可。

4. 修改初始密码
复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
5. 创建库和表

这里我们用SQL语句把项目需要的数据库建好即可。


四、安装PHP及必要模块

1. 添加Ondej Sury的PHP PPA(提供最新的PHP版本)
复制代码
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php
sudo apt update
2. 安装PHP 8.3和相关模块

这里以8.3为例,其他版本只需要替换这个版本号。

复制代码
sudo apt install php8.3 php8.3-fpm php8.3-mysql php8.3-xml php8.3-curl php8.3-mbstring php8.3-zip php8.3-gd -y

其中,PHP FastCGI Process Manager,用于与Apache配合。

3. 启动并设置PHP-FPM开机自启
复制代码
sudo systemctl start php8.3-fpm
sudo systemctl enable php8.3-fpm
4. 验证PHP安装
复制代码
php -v

预期输出示例:

复制代码
PHP 8.3.0 (cli) (built: ...)

五、配置Apache与PHP-FPM集成

1. 启用必要的Apache模块

确保启用了proxyproxy_fcgirewrite模块,这对于PHP-FPM的集成和URL重写非常重要。

复制代码
sudo a2enmod proxy proxy_fcgi rewrite
2. 配置虚拟主机

创建一个新的Apache虚拟主机配置文件,例如dco.conf

复制代码
sudo nano /etc/apache2/sites-available/dco.conf
3. 编写虚拟主机配置

将以下内容粘贴到dco.conf文件中:

复制代码
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot xxxxx 

    ServerName xx.xxx.xxx.xxx 

    <Directory /var/www/dco>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/dco.error.log
    CustomLog ${APACHE_LOG_DIR}/dco.access.log combined

    <FilesMatch .php$>
        SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>

说明:

  • ServerName:设置为您的服务器IP地址。
  • DocumentRoot:指向您的PHP项目目录。
  • <Directory> :允许.htaccess文件覆盖配置,并授予访问权限。
  • <FilesMatch .php$> :配置Apache通过PHP-FPM处理PHP文件。确保php8.3-fpm.sock路径正确。
4. 启用虚拟主机并禁用默认配置

启用新创建的虚拟主机:

复制代码
sudo a2ensite dco.conf

禁用默认虚拟主机(可选,但推荐以避免配置冲突):

复制代码
sudo a2dissite 000-default.conf
5. 测试Apache配置并重新加载

测试配置文件语法是否正确:

复制代码
sudo apache2ctl configtest

预期输出:

复制代码
Syntax OK

这里warning不用管,显示 Syntax OK 即可。

重新加载Apache服务以应用更改:

复制代码
sudo systemctl reload apache2

六、配置防火墙

确保服务器防火墙允许HTTP(80)和HTTPS(443)流量。

1. 安装UFW(如果尚未安装)
复制代码
sudo apt install ufw -y
2. 允许Apache通过防火墙
复制代码
sudo ufw allow 'Apache Full'
3. 启用防火墙
复制代码
sudo ufw enable
4. 检查防火墙状态
复制代码
sudo ufw status

预期输出示例:

复制代码
Status: active

To                         Action      From
--                         ------      ----
Apache Full                ALLOW       Anywhere
Apache Full (v6)           ALLOW       Anywhere (v6)

七、部署PHP项目

1. 创建项目目录
复制代码
sudo mkdir -p /var/www/dco
2. 上传项目文件

将您的PHP项目文件上传到服务器上的 /var/www/dco 目录。

3. 设置文件权限

确保Apache用户(www-data)对项目文件有适当的读写权限。

这里我直接给全权限。

复制代码
sudo chmod -R 777 /var/www/dco

八、创建测试PHP文件

为了确认PHP是否正常工作,创建一个简单的 info.php 文件进行测试。

复制代码
sudo nano /var/www/dco/info.php

添加以下内容:

复制代码
<?php
phpinfo();
?>

保存并退出编辑器。


九、测试访问

1. 在浏览器中访问测试文件

打开浏览器,访问以下URL:

复制代码
http://39.106.146.13/info.php

预期结果:

  • 显示PHP配置信息页面,包含PHP版本、已安装的模块等信息。
2. 删除测试文件(安全性考虑)

测试完成后,建议删除 info.php 文件以防止泄露服务器信息。

复制代码
sudo rm /var/www/dco/info.php

十、错误排查

如果按照上述步骤操作后仍然无法解决问题,可以去查看各块的日志:

  1. Apache错误日志的相关条目

    复制代码
    sudo tail -n 50 /var/log/apache2/dco.error.log
  2. PHP-FPM错误日志的相关条目

    复制代码
    sudo tail -n 50 /var/log/php8.3-fpm.log
    # 或
    sudo tail -n 50 /var/log/php8.3-fpm/error.log
相关推荐
Scott9999HH5 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社6 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海6 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖7 小时前
JDK 26 新特性详解
java·开发语言
马优晨8 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区10 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大10 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai10 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜11 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa11 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio