How to Install Yii PHP Framework on RHEL-Based Systems

Yii is an open-source, high-performance, flexible, efficient, and secure PHP framework for rapidly building modern Web applications. It is a generic and full-stack web programming framework for writing code in an object-oriented fashion and provides many proven and ready-to-use features. It comes with a number of reasonable defaults and built-in tools that help you write solid and secure code.

Yii Features

Here are some of Yii’s key features:

  • A pure OOP-based framework.
  • A component-based architecture.
  • Implements the MVC (Model-View-Controller) architectural pattern.
  • Supports query builders and ActiveRecord for both relational and NoSQL databases.
  • Multi-tier caching support.
  • RESTful API development support.
  • It’s extremely extensible allowing users to customize or replace any piece of code right from the core. Besides, users can use or develop redistributable extensions.

Yii 2.0 is the current generation of the framework (at the time of writing) which requires PHP 5.4.0 or above but runs best with the latest version of PHP 8. It supports some of the latest Web technologies and protocols, including Composer, PSR, namespaces, traits, and others.

Being a generic Web development framework in conjunction with its significant features, Yii can be used to develop nearly any kind of Web application from user/admin portals, forums, and content management systems (CMS), to e-commerce projects, RESTful Web services, and much more at large scale.


In this article, we will show you how to install the Yii PHP Framework on an RHEL-based distribution to start developing PHP applications using Yii.

Install LAMP or LEMP Stack

Yii requires PHP 5.4 or above with Apache or Nginx web server installed on the server as shown.

--------- Install LAMP Stack --------- 
# yum install httpd php php-mysqlnd php-pdo php-gd php-mbstring zip git

--------- Install LEMP Stack ---------
# yum install nginx php php-mysqlnd php-pdo php-gd php-mbstring zip git

Once installed, you can start and enable the Apache or Nginx web server.

# systemctl start httpd
# systemctl enable httpd
# systemctl start nginx
# systemctl enable nginx

Installing Yii Using Composer

There are several ways to install Yii, but the recommended way to install Yii is using Composer package manager, as it allows you to update Yii with a single command and also enables you to install new extensions.

If you do not already have Composer installed on your server, you can install it by running the following commands.

# curl -sS | php
# mv composer.phar /usr/local/bin/composer
# chmod +x /usr/local/bin/composer
Install Composer in CentOS 8
Install Composer in CentOS 8

With Composer installed, you can install the latest stable version of the Yii application template under an Apache or Nginx Web-accessible directory called testapp. You can select a different directory name if you want.

# cd /var/www/html/      [Apache Root Directory]
# cd /usr/share/nginx/html/   [Nginx Root Directory]
# composer create-project --prefer-dist yiisoft/yii2-app-basic testapp
Install Yii PHP Framwork in CentOS 8
Install Yii PHP Framework in CentOS 8

After installation is complete, either configure your web server (see next section) or use the integrated PHP web server by executing the following command in the testapp project root directory.

# cd testapp
# php yii serve

Note: By default, the HTTP server will listen to port 8080. However, if that port is already in use, you can use a different port by adding --port the argument as shown.

# php yii serve --port=8888
Verify Yii Installation
Verify Yii Installation

Now, open your browser and type the following URL to access the installed Yii application.

Yii Application
Yii Application

Configuring Web Servers for Yii

On a production server, you might want to configure your webserver to serve the Yii web application via the URL instead of In that case, you must point your web server document root to the testapp/web directory.

Recommended Nginx Configuration

Create a configuration file called /etc/nginx/conf.d/testapp.conf.

# vi /etc/nginx/conf.d/testapp.conf

Next, copy and paste the following configuration into it. Remember to replace tecmintapp.lan with your domain name and /usr/share/nginx/html/testapp/web with the path where your app files are located.

server {
    charset utf-8;
    client_max_body_size 128M;

    listen 80; ## listen for ipv4
    #listen [::]:80 default_server ipv6only=on; ## listen for ipv6

    server_name tecmintapp.lan;
    root        /usr/share/nginx/html/testapp/web;
    index       index.php;

    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;

    location / {
        # Redirect everything that isn't a real file to index.php
        try_files $uri $uri/ /index.php$is_args$args;

    # uncomment to avoid processing of calls to non-existing static files by Yii
    #location ~ .(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
    #    try_files $uri =404;
    #error_page 404 /404.html;

    # deny accessing php files for the /assets directory
    location ~ ^/assets/.*.php$ {
        deny all;

    location ~ .php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        try_files $uri =404;

    location ~* /. {
        deny all;

Save the file and restart the Nginx to effect the recent changes.

# systemctl restart nginx

Recommended Apache Configuration

Use the following configuration in Apache’s httpd.conf file or within a virtual host configuration.

# Set document root to be "testapp/web"
DocumentRoot "/var/www/html/testapp/web"

<Directory "/var/www/html/testapp/web">
    # use mod_rewrite for pretty URL support
    RewriteEngine on
    # if $showScriptName is false in UrlManager, do not allow accessing URLs with script name
    RewriteRule ^index.php/ - [L,R=404]
    # If a directory or a file exists, use the request directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # Otherwise forward the request to index.php
    RewriteRule . index.php

    # ...other settings...

Save the file and restart the Apache to effect the recent changes.

# systemctl restart httpd

Testing Yii Web Application Via a Browser

Before testing our Yii web application make sure to update the security context of the /web/assets/ directory to make it writable to the web process, by running the following command.

# chcon -R -t httpd_sys_content_rw_t '/usr/share/nginx/html/testapp/web/assets/' [for Nginx]
# chcon -R -t httpd_sys_content_rw_t '/var/www/html/testapp/web/assets/'         [for Apache] 

Next, update your firewalld rules to allow HTTP and HTTPS requests through the firewall to the Nginx server.

# firewall-cmd --zone=public --add-service=http --permanent
# firewall-cmd --zone=public --add-service=https --permanent
# firewall-cmd --reload

Finally, test if your web application working fine and is being served by Nginx or Apache. Open a web browser and point it to the following address:


The default Yii application web page should display as shown in the following screenshot.

Yii Web App Page
Yii Web App Page

Congratulations! You have successfully installed the latest generation of the Yii PHP framework and configured it to work with Nginx or Apache on RHEL systems.

For more information and how to start using Yii for building your web application, see the Yii definitive guide.

Similar Posts