Deploying PHP Projects with CelerBuild Pro Using the Symfony Framework Example

This guide demonstrates how to deploy a PHP project using CelerBuild Pro Version, covering branch deployment, tag deployment, and tag version rollback operations with multiple roles. We'll use the celerbuild-example-php (opens in a new tab) project built with the Symfony framework.

Note This tutorial uses the Pro Version. For Standard Version features, please refer to the Standard Version Guide.

Prerequisites

1. System Prerequisites

Complete all Prerequisites setup steps

2. PHP Environment Setup

Installing PHP and PHP-FPM

macOS
# Using Homebrew
brew install php
 
# Verify installation
php -v
Ubuntu/Debian
# Update package list
sudo apt update
 
# Install PHP and PHP-FPM
sudo apt install php php-fpm
 
# Verify installation
php -v
CentOS/RHEL
# Install EPEL repository
sudo yum install epel-release
 
# Install PHP and PHP-FPM
sudo yum install php php-fpm
 
# Verify installation
php -v

Note:

  • PHP and PHP-FPM should be installed on both the CelerBuild machine and the deployment machine.

3. Composer Setup

Installing Composer

macOS, Ubuntu/Debian, CentOS/RHEL
# Download the installer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
 
# Install Composer globally
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
 
# Remove the installer
php -r "unlink('composer-setup.php');"
 
# Verify installation
composer -v

Note:

  • Composer should be installed on the CelerBuild machine for managing PHP dependencies.

4. Web Server Setup

Installing Nginx

Ubuntu/Debian
# Update package list
sudo apt update
 
# Install Nginx
sudo apt install nginx
 
# Start Nginx
sudo systemctl start nginx
 
# Enable Nginx to start on boot
sudo systemctl enable nginx
 
# Verify installation
nginx -v
CentOS/RHEL
# Install Nginx
sudo yum install nginx
 
# Start Nginx
sudo systemctl start nginx
 
# Enable Nginx to start on boot
sudo systemctl enable nginx
 
# Verify installation
nginx -v

Nginx Configuration

  1. Create Site Configuration File:

Create a new configuration file named my_php_project in /etc/nginx/sites-available/:

   server {
       listen 8081;
       server_name your_server_ip_or_domain;
 
       root /home/ubuntu/celerbuild-example-php/public;
       index index.php index.html index.htm;
 
       location / {
           try_files $uri $uri/ /index.php?$query_string;
       }
 
       location ~ \.php$ {
           include snippets/fastcgi-php.conf;
           fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include fastcgi_params;
       }
 
       location ~ /\.ht {
           deny all;
       }
   }
  1. Enable Site Configuration

Create a symbolic link to sites-enabled:

sudo ln -s /etc/nginx/sites-available/my_php_project /etc/nginx/sites-enabled/
  1. Test and Restart Nginx

Test the configuration for syntax errors and restart Nginx:

sudo nginx -t
sudo systemctl restart nginx

These steps will help you configure Nginx to serve your PHP Symfony application.

Note:

  • Nginx should be installed on the deployment machine, typically a Linux server, to serve the PHP Symfony application.
  • Ensure Nginx is configured to work with PHP-FPM for handling PHP requests.

5. Additional Permissions

Before setting permissions, ensure that your project is created under the current user. In this example, the project celerbuild-example-php is created under the ubuntu user. You can adjust this according to your actual setup.

# Allow others to access the home directory
sudo chmod o+x /home/ubuntu
 
# Allow others to access the project directory
sudo chmod o+x /home/ubuntu/celerbuild-example-php
 
# Add www-data to the ubuntu group to allow Nginx access
sudo usermod -aG ubuntu www-data

Role Setup and Permissions

1. Team Structure

2. Initial Setup Process (by Tom)

2.1 Create Users

  1. Navigate to Base/Users
  2. Create team members' accounts:
Create Jerry's account:
- Username: jerry
- Email: [email protected]

Create Bob's account:
- Username: bob
- Email: [email protected]

Note:

  • By default, there is an admin user
  • You can promote yourself (Tom) to admin and then delete the default admin user
  • At least one admin user must exist in the system at all times

create-user-1

create-user-2

2.2 Create Space

  1. Navigate to Global/Spaces
  2. Create new space:
    • Name: php-example-space

php-example-space

2.3 Import Space Members

Import members from the global user pool to ensure team members have access and can collaborate.

  1. Locate the space you just added.
  2. In the corresponding Actions menu, find and click the Members button.
  3. Click on Import Members to proceed with the import.

php-example-import-memers-1

php-example-import-memers-2

php-example-import-memers-3

php-example-import-memers-4

2.4 Set Space Owner

Designate a member as the space owner, responsible for managing resources and permissions within the space. In this example, set Tom as the Space Owner.

  1. Locate the user named Tom.
  2. In the corresponding Actions menu, click Edit.
  3. Change his permissions to Owner.

php-example-import-members-5

php-example-import-members-6

3. Create Server Infrastructure

3.1 Create Server Clusters

  1. Navigate to Global/Server Clusters
  2. Create development cluster:
    • Click "New"
    • Fill in cluster details:
      • Name: pro-example-php-server-cluster(dev)
      • Select Environment: dev
      • Select Status: Available
    • Click "Create"

pro-example-php-dev-server-cluster-1

  1. Create production cluster:
  • Click "New"
  • Fill in cluster details:
    • Name: pro-example-php-server-cluster(prod)
    • Select Environment: prod
    • Select Status: Available
  • Click "Create"

pro-example-php-prod-server-cluster-1

3.2 Add Servers

  1. Navigate to Global/Servers
  2. Add development server:
  • Click "New"
  • Fill in server details:
    • Select cluster: pro-example-php-server-cluster(dev)
    • Server Name: pro-php-dev-server-1
    • Server IP: Your server IP
    • SSH Port: Your SSH port (default: 22)
  • Click "Create"

pro-php-add-dev-server-1

  1. Add production server:
  • Click "New"
  • Fill in server details:
    • Select cluster: pro-example-php-server-cluster(prod)
    • Server Name: pro-php-prod-server-1
    • Server IP: Your server IP
    • SSH Port: Your SSH port (default: 22)
  • Click "Create"

pro-php-add-prod-server-1

Note:

  • Server names are prefixed with "pro-" to distinguish from standard version
  • Ensure SSH access is properly configured for each server
  • Multiple servers can be added to each cluster if needed

3.3 Import Space Server Clusters

  1. Locate the left navigation and select Space Resources, then choose Server Cluster.
  2. Switch to the space you created earlier, php-example-space.
  3. Click the "Import Server Clusters" button and select the existing server cluster from Global to import.

Once imported, the space server cluster can be used as a selectable server cluster list for projects within the current space.

pro-php-import-server-cluster-1

pro-php-import-server-cluster-2

pro-php-import-server-cluster-3

4. Create Projects and Import Project Members

4.1 Development Project

Download Template

image

Import Template

The imported project name, Space, and server cluster need to be changed, and others need to be modified according to your own requirements

  1. Navigate to Projects/Projects
  2. Click "Import YAML"
  3. Upload the downloaded template
  4. Configure development project:
    • Project name: "pro-celerbuild-example-php-dev"
    • Select cluster: "pro-example-php-server-cluster(dev)"
    • The development environment can choose not to enable deployment approval (It is off by default)
  5. Click "Create Project"

php-example-import-yaml-1

php-example-import-yaml-2

php-example-import-yaml-3

Import Project Members
  1. In the newly created project, find Members under the Actions menu and click to import project members.
  2. Click "Import Members" to add project members.
  3. After importing, assign specific roles to the members:
    • Set Tom as the Project Owner
    • Set Jerry as the Project Master
    • Set Bob as the Developer

php-import-project-members-1

php-import-project-members-2

php-import-project-members-3

php-import-project-members-4

php-import-project-members-5

php-import-project-members-6

4.2 Production Project

Download Template

celerbuild-php-project-template

Import Template

The imported project name and server cluster need to be changed, and others need to be modified according to your own requirements

  1. Navigate to Projects/Projects
  2. Click "Import YAML"
  3. Upload the downloaded template
  4. Configure production project:
    • Project name: "pro-celerbuild-example-php-prod"
    • Select cluster: "pro-example-php-server-cluster(prod)"
  5. Click "Create Project"
  6. Enable deployment approval requirement

pro-php-example-import-yaml-1

pro-php-example-import-yaml-2

Import Project Members
  1. In the newly created project, find Members under the Actions menu and click to import project members.
  2. Click "Import Members" to add project members.
  3. After importing, assign specific roles to the members:
    • Set Tom as the Project Owner
    • Set Jerry as the Project Master
    • Set Bob as the Developer

php-pro-import-members-1

php-pro-import-members-2

php-pro-import-members-3

php-pro-import-members-4

php-pro-import-members-5

php-pro-import-members-6

Note:

  • Development project allows direct deployment without approval
  • Production project requires approval from Project Owner (Tom) or Project Master (Jerry)
  • Project templates can be found in the example repository (opens in a new tab)
  • Make sure to review project settings before creation

Deployment Workflows

Development Environment

Note: Development environment deployments don't require approval

Developer Role (Developer A or B)

  1. Create deployment application
  2. Execute deployment directly
  3. Monitor deployment status

Production Environment

1. Regular Deployment

Developer Role (Developer A or B):

  • Create deployment application
  • Fill in deployment details
  • Submit for review
  • Execute approved deployment after review
  • Monitor deployment process

Project Owner/Master Role (Leader/Developer A):

  • Review deployment application
  • Approve/Reject with comments
  • Monitor deployment status

2. Rollback Deployment

Developer Role (Developer A or B):

  • Create rollback application
  • Select version to rollback
  • Submit for review
  • Execute approved rollback after review
  • Monitor rollback process

Project Owner/Master Role (Leader/Developer A):

  • Review rollback application
  • Approve/Reject with comments
  • Monitor rollback status

Note:

  • The developer who creates the deployment/rollback application is responsible for executing it after approval
  • Project Owner/Master can review and approve but typically don't execute the deployment/rollback
  • This workflow ensures that the developer who initiated the change is also responsible for its execution

Example Deployment Scenarios

Scenario 1: Development Branch Deployment

  1. Developer B (Bob) creates deployment for dev environment:

Navigate to Operations/Applications

  • Select the space php-example-space.
  • Select project "pro-celerbuild-example-php-dev"
  • Fill in:
    • Title: "Deploy version update to Dev"
    • Description: "Deploy version update to Dev.Branch: dev"
    • Select dev branch (click the branch sync icon, and select the latest version)
  • Click "Submit Application"

pro-example-php-dev-apply-1

pro-example-php-dev-apply-2

  1. Developer B (Bob) executes deployment:

Navigate to Operations/Tasks

  • Find the deployment task
    • Click "Deploy"
    • Click "Start Deploy"
  • Monitor deployment progress in Operation Logs

pro-php-example-deploy-1

pro-php-example-deploy-2

pro-php-example-deploy-3

  1. Verify deployment:
# Check version endpoint
curl http://server:8081/version
{"version":"1.0.4"}
 
# Check main endpoint
curl http://server:8081/
{"message":"Hello World from CelerBuild!"}

Note:

  • Replace "server" with your actual server IP address
  • A response similar to {"version":"1.0.4"} indicates successful deployment
  • If you cannot access the endpoint, check:
    • Server firewall settings
    • Port 8081 accessibility
    • Application running status

Scenario 2: Production Tag Deployment

  1. Developer B (Bob) creates deployment for prod environment:

Navigate to Operations/Applications

  • Select project "pro-celerbuild-example-java-prod"
  • Fill in:
    • Title: "Deploy v1.0.3 to Production"
    • Description: "Updating production version to v1.0.3"
  • Submit for review

pro-example-php-prod-apply-1

pro-example-php-prod-apply-2

Note:

  • Here we select v1.0.3 as an example
  • The deployment process remains the same regardless of which tag version you select
  1. Developer A (Jerry) reviews and approves:
    1. After logging in, ensure the correct space is selected.
    1. Check the notification icon for new messages. You'll see a new ticket assigned to you; click "View Details".
    1. Click "Review", select "Approved", provide feedback, and finally click "Submit Review".

php-example-pro-review-1

php-example-pro-review-2

  1. Developer B (Bob) executes deployment:
    1. After logging in, ensure the correct space is selected.
    1. Check the notifications for new messages. You'll see your ticket has been reviewed and approved; click "View Details".
    1. In the ticket details, click the "Deploy" button.
    1. Navigate to the specific task page, click "Start Deployment" to begin the deployment.
    1. Monitor the logs and server status. If any issues arise, a prompt will provide guidance.

pro-php-example-deployment-1

pro-php-example-deployment-2

pro-php-example-deployment-3

  1. Verify deployment:
# Check version endpoint
curl http://server:8081/version
{"version":"1.0.3"}
 
# Check main endpoint
curl http://server:8081/
{"message":"Hello World from CelerBuild!"}
 

Rollback Operations

Note:

  • Branch deployment rollback is not demonstrated here because the system only maintains the latest committed version
  • We'll demonstrate rollback using tag deployments instead
  • Rollback can only be performed to previously deployed tags in the system

Tag Deployment Rollback Example

1. Initial Deployment (v1.0.3)

For detailed deployment steps, refer to the Production Tag Deployment section above.

  1. Developer B (Bob) creates deployment:

Navigate to Operations/Applications

  • Select project "pro-celerbuild-example-php-prod"
  • Fill in:
    • Title: "Initial Deploy v1.0.3"
    • Description: "Initial production deployment: Version: v1.0.3"
  • Select tag "v1.0.3"
  • Submit for review
  1. Developer A (Jerry) reviews and approves

  2. Developer B (Bob) executes deployment

  3. Verify deployment:

curl http://server:8081/version
{"version":"1.0.3"}

2. Upgrade to v1.0.4

For detailed deployment steps, refer to the Production Tag Deployment section above.

  1. Developer B (Bob) creates deployment:

Navigate to Operations/Applications

  • Select project "pro-celerbuild-example-php-prod"
  • Fill in:
    • Title: "Upgrade to v1.0.4"
    • Description: "Production version upgrade: From v1.0.3 To v1.0.4"
  • Select tag "v1.0.4"
  • Submit for review
  1. Developer A (Jerry) reviews and approves

  2. Developer B (Bob) executes deployment

  3. Verify upgrade:

curl http://server:8081/version
{"version":"1.0.4"}

3. Rollback to v1.0.3

  1. Developer B (Bob) initiates rollback:

Navigate to Operations/Applications

  • Find project
  • Click Actions → "Apply Rollback"
  • Fill in:
    • Title: "Rollback from v1.0.4 to v1.0.3"
    • Description: "Rolling back production version"
  • Select rollback version v1.0.3
  • Submit for review

pro-php-example-apply-rollback-1

pro-php-example-apply-rollback-2

  1. Leader (Tom) reviews and approves:

Navigate to Operations/Applications

  • Review rollback request
  • Select Review Status "Approved"
  • Add approval comments: "Rollback to v1.0.3 approved."
  • Click "Submit Review"

pro-php-example-apply-rollback-3

pro-php-example-apply-rollback-4

Note:

  • Both Project Owner (Tom) and Project Master (Jerry) have permission to review rollback requests
  • In this example, we demonstrate Tom reviewing the rollback for clarity of role responsibilities
  • In practice, Jerry could also review and approve this rollback request
  1. Developer B (Bob) executes rollback:
  • Check the notifications for new messages. You'll see your ticket has been reviewed and approved; click "View Details".
  • Click "Rollback"
  • Click "Start Rollback"
  • Monitor rollback progress

pro-php-example-apply-rollback-5

pro-php-example-apply-rollback-6

pro-php-example-apply-rollback-7

pro-php-example-apply-rollback-8

  1. Verify rollback:
curl http://server:8081/version
{"version":"1.0.3"}

For detailed rollback instructions, see:

Congratulations! You have successfully learned how to deploy Symfony Framework using CelerBuild Pro Edition, including team-based deployment workflows, approval processes, and version management! 🎉