温馨提示×

Linux环境下Laravel如何部署CI/CD

小樊
41
2025-11-16 17:59:07
栏目: 智能运维

在Linux环境下部署Laravel项目的CI/CD(持续集成/持续部署)流程,可以使用多种工具和技术。以下是一个基本的步骤指南,使用Git作为版本控制系统,Jenkins作为CI/CD工具,以及Docker进行环境隔离。

1. 准备工作

1.1 安装必要的软件

确保你的Linux服务器上已经安装了以下软件:

  • Git
  • Docker
  • Docker Compose
  • Jenkins
  • PHP
  • Composer

1.2 配置Docker

创建一个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;
    }
}

2. 配置Jenkins

2.1 安装Jenkins插件

在Jenkins管理界面中,安装以下插件:

  • Git Plugin
  • Docker Plugin
  • Docker Pipeline Plugin
  • Publish Over SSH Plugin

2.2 配置Jenkins Job

创建一个新的Pipeline Job,并配置以下内容:

  • Source Code Management: 选择Git,并填写你的仓库URL和凭证。
  • Build Triggers: 选择Poll SCM,并设置定时任务(例如H/5 * * * *表示每5分钟检查一次代码变更)。
  • Pipeline: 选择Pipeline script from SCM,并填写你的仓库路径和脚本路径(例如Jenkinsfile)。

3. 创建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()
        }
    }
}

4. 运行Jenkins Job

保存并运行Jenkins Job,Jenkins将会自动执行以下步骤:

  1. 从Git仓库拉取最新代码。
  2. 构建Docker镜像。
  3. 将Docker镜像部署到目标服务器。

通过以上步骤,你就可以在Linux环境下实现Laravel项目的CI/CD流程。根据实际需求,你可以进一步优化和扩展这个流程。

0