在Linux环境下部署Laravel项目的CI/CD(持续集成/持续部署)流程,可以使用多种工具和技术。以下是一个基本的步骤指南,使用Git作为版本控制系统,Jenkins作为CI/CD工具,以及Docker进行环境隔离。
确保你的Linux服务器上已经安装了以下软件:
创建一个Dockerfile来定义Laravel项目的环境:
# 使用官方PHP镜像
FROM php:7.4-fpm
# 安装必要的扩展
RUN docker-php-ext-install pdo_mysql mbstring xml zip opcache
# 安装Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# 设置工作目录
WORKDIR /var/www/html
# 复制项目文件
COPY . /var/www/html
# 安装依赖
RUN composer install --no-interaction --prefer-dist --optimize-autoloader
# 暴露端口
EXPOSE 9000
# 启动PHP-FPM
CMD ["php-fpm"]
创建一个docker-compose.yml文件来管理Docker容器:
version: '3'
services:
app:
build: .
container_name: laravel_app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www/html
volumes:
- ./:/var/www/html
networks:
- laravel
nginx:
image: nginx:stable-alpine
container_name: nginx
restart: unless-stopped
tty: true
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
networks:
- laravel
networks:
laravel:
driver: bridge
volumes:
laravel_app:
创建一个nginx.conf文件来配置Nginx:
server {
listen 80;
server_name yourdomain.com;
root /var/www/html/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
在Jenkins管理界面中,安装以下插件:
创建一个新的Pipeline Job,并配置以下内容:
H/5 * * * *表示每5分钟检查一次代码变更)。Jenkinsfile)。在你的Laravel项目根目录下创建一个Jenkinsfile,定义CI/CD流程:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git url: 'https://github.com/your-repo/laravel-project.git', branch: 'main'
}
}
stage('Build') {
steps {
script {
dockerImage = docker.build("laravel-app:${env.BUILD_ID}")
}
}
}
stage('Deploy') {
steps {
script {
dockerImage.inside {
sh 'composer install --no-interaction --prefer-dist --optimize-autoloader'
sh 'php artisan migrate'
sh 'php artisan config:cache'
sh 'php artisan route:cache'
sh 'php artisan view:cache'
}
}
}
}
}
post {
always {
cleanWs()
}
}
}
保存并运行Jenkins Job,Jenkins将会自动执行以下步骤:
通过以上步骤,你就可以在Linux环境下实现Laravel项目的CI/CD流程。根据实际需求,你可以进一步优化和扩展这个流程。