本部分将详细介绍如何将 Yii 应用部署到生产环境,涉及常见的 Web 服务器配置(Nginx/Apache)、使用 Docker 部署、代码管理与持续集成(CI/CD)以及备份与迁移等方面。这些步骤可以确保你的应用稳定、可维护,并且能够快速进行版本迭代。
1. 项目部署
部署 Yii 应用涉及将开发环境中的项目移至生产环境,并确保服务器配置和依赖正确。以下是部署过程的几个关键步骤。
1.1 部署到 Nginx/Apache 环境
Nginx 配置:
- 首先,确保已安装 Nginx。
- 在
nginx.conf或者你的站点配置文件中添加以下配置:
server {
listen 80;
server_name example.com; # 你的域名
root /var/www/html/yii-app/web; # Yii 项目的 public 目录
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # PHP-FPM
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_log /var/log/nginx/yii-error.log;
access_log /var/log/nginx/yii-access.log;
}
Apache 配置:
- 确保启用了
mod_rewrite。 - 在 Apache 配置文件中,设置虚拟主机:
<VirtualHost *:80>
DocumentRoot "/var/www/html/yii-app/web" # Yii 项目的 public 目录
ServerName example.com
<Directory "/var/www/html/yii-app/web">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
- 启动或重启 Apache:
sudo systemctl restart apache2
1.2 配置环境变量和敏感信息
在部署到生产环境时,敏感信息(如数据库密码、API 密钥等)不应直接存储在代码中。你可以通过环境变量来管理这些信息。
使用 .env 文件:
- 在项目根目录创建
.env文件并添加环境变量:
DB_HOST=localhost
DB_USER=root
DB_PASS=secret
- 在
config/web.php或config/console.php文件中读取这些环境变量:
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=' . getenv('DB_HOST') . ';dbname=mydb',
'username' => getenv('DB_USER'),
'password' => getenv('DB_PASS'),
'charset' => 'utf8',
],
],
配置 Yii 环境:
确保在生产环境中禁用调试和 gii 模块:
'modules' => [
'gii' => [
'class' => 'yii\gii\Module',
'allowedIPs' => ['127.0.0.1', '::1'], // 只允许本地访问 Gii
],
],
1.3 使用 Docker 部署 Yii 应用
Docker 是一种流行的容器化技术,可以帮助你在一致的环境中部署应用。使用 Docker 可以避免在不同环境中出现 “它在我电脑上运行” 的问题。
创建 Dockerfile:
FROM php:7.4-fpm
# 安装必要的扩展
RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev libzip-dev unzip git \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd zip pdo pdo_mysql
# 设置工作目录
WORKDIR /var/www
# 复制本地文件到容器
COPY . /var/www
# 安装 Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# 安装依赖
RUN composer install
# 公开端口
EXPOSE 9000
CMD ["php-fpm"]
创建 docker-compose.yml 文件:
version: '3.7'
services:
web:
build: .
volumes:
- .:/var/www
ports:
- "9000:9000"
networks:
- yii-network
nginx:
image: nginx:alpine
volumes:
- .:/var/www
- ./nginx.conf:/etc/nginx/nginx.conf
ports:
- "80:80"
networks:
- yii-network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: mydb
volumes:
- db-data:/var/lib/mysql
networks:
- yii-network
networks:
yii-network:
driver: bridge
volumes:
db-data:
启动 Docker 容器:
docker-compose up --build
此时,Yii 应用将运行在 Docker 容器内,Nginx 提供 Web 服务,PHP-FPM 处理 PHP 请求,MySQL 数据库也在容器中运行。
2. 版本控制与 CI/CD
2.1 使用 Git 管理代码
Git 是版本控制系统,用于跟踪代码的历史版本。确保你将代码托管在 Git 仓库中(如 GitHub、GitLab、Bitbucket 等)。
基本 Git 操作:
git init # 初始化 Git 仓库
git add . # 添加所有变更
git commit -m "commit message" # 提交代码
git push origin master # 推送到远程仓库
2.2 配置持续集成与自动化部署
持续集成(CI)和持续交付(CD)是现代 DevOps 流程的核心,能够实现代码的快速交付与自动部署。
使用 GitHub Actions 配置 CI/CD:
- 在项目根目录下创建
.github/workflows/ci.yml文件:
name: CI Workflow
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
- name: Install dependencies
run: |
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
composer install
- name: Run tests
run: vendor/bin/codecept run
- 每次推送到 GitHub 仓库时,CI 工具会自动运行测试、安装依赖并部署应用。
2.3 备份与迁移
在生产环境中,定期备份数据库和项目文件至关重要。你可以使用 Yii 的迁移工具来管理数据库架构的变化。
数据库备份:
- 使用
mysqldump进行数据库备份:
mysqldump -u root -p mydb > backup.sql
- 恢复数据库:
mysql -u root -p mydb < backup.sql
使用 Yii 的数据库迁移工具:
- 生成迁移文件:
php yii migrate/create add_column_to_table
- 执行迁移:
php yii migrate
通过合理配置备份和迁移机制,确保你的应用在数据损坏或服务器故障时能够恢复。
小结
在本部分中,我们讲解了如何将 Yii 应用部署到 Nginx/Apache 环境、使用 Docker 容器化部署、配置 CI/CD 流程进行持续集成、备份与迁移操作。掌握这些部署与发布技巧后,你将能够确保 Yii 应用在生产环境中的稳定运行,同时加速开发和发布周期。