PHP网站基于CodeIgniter的API接口部署与配置教程
很多开发者在开发完基于CodeIgniter框架的PHP网站API接口后,都会遇到部署到服务器的问题。本文将详细讲解从环境准备到接口验证的完整部署流程,帮助大家快速完成配置。
一、部署前环境准备
部署CodeIgniter API接口前,需要确保服务器满足以下基础环境要求:
- PHP版本:建议7.4及以上,CodeIgniter 4.x版本要求PHP 7.3+,CodeIgniter 3.x版本要求PHP 5.6+
- Web服务器:Nginx或Apache,本文以Nginx为例演示
- 数据库:如果需要存储数据,需提前安装MySQL或MariaDB,并创建好对应的数据库和用户
- 必要PHP扩展:curl、mbstring、json、pdo_mysql等,可通过
php -m命令查看已安装扩展
二、上传项目文件到服务器
首先我们需要将本地开发好的CodeIgniter项目打包上传到服务器,推荐将项目放在/var/www/目录下,避免权限问题。
假设我们的项目名为ci_api_demo,上传完成后目录结构大致如下:
/var/www/ci_api_demo/ ├── app/ ├── public/ ├── system/ ├── .env ├── composer.json └── composer.lock
如果是通过Git管理项目,也可以直接在服务器上clone代码仓库,执行composer install安装依赖,这样更方便后续更新。
三、配置CodeIgniter核心参数
CodeIgniter的配置文件主要集中在app/Config/目录下,我们需要根据实际部署环境调整几个关键配置。
1. 环境配置
如果是CodeIgniter 4项目,复制env文件为.env,修改环境标识:
# 开发环境设置为development,生产环境设置为production CI_ENVIRONMENT = production
如果是CodeIgniter 3项目,修改application/config/config.php中的$config['environment']参数即可。
2. 数据库配置
打开app/Config/Database.php(CodeIgniter 3对应application/config/database.php),填写服务器的数据库连接信息:
// CodeIgniter 4 数据库配置示例
namespace Config;
use CodeIgniter\Database\Config;
class Database extends Config
{
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // 数据库地址,本地为127.0.0.1
'username' => 'ci_api_user', // 数据库用户名
'password' => 'your_password', // 数据库密码
'database' => 'ci_api_db', // 数据库名称
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => false, // 生产环境建议关闭调试
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
}3. 基础URL配置
在app/Config/App.php(CodeIgniter 3为application/config/config.php)中设置正确的站点基础URL:
// CodeIgniter 4 基础URL配置
namespace Config;
use CodeIgniter\Config\BaseConfig;
class App extends BaseConfig
{
// 替换为你的服务器域名或IP,例如http://api.ipipp.com
public $baseURL = 'http://api.ipipp.com';
// 如果你使用HTTPS,设置为https://api.ipipp.com
}四、配置Nginx服务器
Nginx需要正确配置URL重写规则,才能让CodeIgniter的路由正常工作。以下是针对CodeIgniter 4的Nginx配置示例:
server {
listen 80;
server_name api.ipipp.com; # 替换为你的域名
root /var/www/ci_api_demo/public; # 指向public目录,不要指向项目根目录
index index.php index.html index.htm;
# 处理静态资源
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
expires 30d;
access_log off;
}
# 重写规则,将所有请求指向index.php
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP处理配置
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 根据你的PHP版本调整
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 禁止访问敏感目录
location ~ /\.(env|git|svn) {
deny all;
}
}配置完成后,执行nginx -t检查配置是否有误,然后执行systemctl reload nginx重启Nginx服务。
五、设置文件权限
需要确保Web服务器用户(通常是www-data)对项目目录有正确的读写权限,避免写入日志、缓存时出现权限错误:
# 修改项目所有者为www-data
chown -R www-data:www-data /var/www/ci_api_demo/
# 设置目录权限为755,文件权限为644
find /var/www/ci_api_demo/ -type d -exec chmod 755 {} \;
find /var/www/ci_api_demo/ -type f -exec chmod 644 {} \;
# 如果需要可写的目录(如缓存、日志),单独设置写权限
chmod -R 775 /var/www/ci_api_demo/writable/六、API接口测试验证
部署完成后,我们可以编写一个简单的测试接口验证是否部署成功。在app/Controllers/目录下创建Test.php:
// CodeIgniter 4 测试控制器示例
namespace App\Controllers;
use CodeIgniter\RESTful\ResourceController;
class Test extends ResourceController
{
public function index()
{
return $this->respond([
'code' => 200,
'msg' => 'API部署成功',
'data' => [
'time' => date('Y-m-d H:i:s')
]
]);
}
}然后在app/Config/Routes.php中添加路由规则:
// 添加测试路由
$routes->get('test', 'Test::index');打开浏览器访问http://api.ipipp.com/test,如果返回如下JSON数据,说明部署成功:
{
"code": 200,
"msg": "API部署成功",
"data": {
"time": "2024-05-20 14:30:00"
}
}七、常见问题排查
- 如果出现404错误,检查Nginx的root是否指向
public目录,路由配置是否正确 - 如果出现500错误,查看
writable/logs/目录下的日志文件,定位具体错误原因 - 如果数据库无法连接,检查数据库用户权限,确认数据库地址、端口是否正确,防火墙是否开放了数据库端口
- 如果接口返回格式异常,检查是否开启了调试模式,生产环境建议关闭
CI_ENVIRONMENT的调试配置