Yii

To run apps based on the Yii framework versions 1.1 or 2.0 using Unit:

  1. Install Unit with a PHP language module.

  2. Next, install Yii and create or deploy your app.

    Here, we use Yii’s basic project template and Composer:

    console
    $ cd /path/to/ # Partial path to the application directory; use a real path in your configuration
    
    console
    $ composer create-project --prefer-dist yiisoft/yii2-app-basic app # Arbitrary app name
    

    This creates the app’s directory tree at /path/to/app/. Its web/ subdirectory contains both the root index.php and the static files; if your app requires additional .php scripts, also store them here.

  3. Change ownership:

    Run the following command (as root) so Unit can access the application directory (If the application uses several directories, run the command for each one):

    console
    # chown -R unit:unit /path/to/app/  # User and group that Unit's router runs as by default
    
    The unit:unit user-group pair is available only with official packages , Docker images, and some third-party repos. Otherwise, account names may differ; run the ps aux | grep unitd command to be sure.

    For further details, including permissions, see the security checklist.

  4. Next, prepare the Yii configuration for Unit (use real values for share and root):

    json
    {
       "listeners": {
          "*:80": {
             "pass": "routes"
          }
       },
       "routes": [
          {
             "match": {
             "uri": [
                "!/assets/*",
                "*.php",
                "*.php/*"
             ],
             "uri_comment": "This path stores application data that shouldn't be run as code"
             },
             "action": {
             "pass": "applications/yii/direct"
             }
          },
          {
             "action": {
             "share": "/path/to/app/web$uri",
             "share_comment": "Serves static files",
             "fallback": {
                "pass": "applications/yii/index"
             }
             }
          }
       ],
       "applications": {
          "yii": {
             "type": "php",
             "targets": {
             "direct": {
                "root": "/path/to/app/web/",
                "root_comment": "Path to the application directory; use a real path in your configuration"
             },
             "index": {
                "root": "/path/to/app/web/",
                "root_comment": "Path to the application directory; use a real path in your configuration",
                "script": "index.php",
                "script_comment": "All requests are handled by a single script"
             }
             }
          }
       }
    }

    For a detailed discussion, see Configuring Web Servers and Running Applications in Yii 2.0 docs.

The difference between the pass targets is their usage of the script setting:

  • The direct target runs the .php script from the URI or index.php if the URI omits it.

  • The index target specifies the script that Unit runs for any URIs the target receives.

</div>
  1. Upload the updated configuration.

    Assuming the JSON above was added to config.json. Run the following command as root:

    console
    # curl -X PUT --data-binary @config.json --unix-socket \
       /path/to/control.unit.sock \  # Path to Unit's control socket in your installation
       http://localhost/config/      # Path to the config section in Unit's control API
    
    The control socket path may vary; run unitd -h or see Startup and shutdown for details.

    After a successful update, your app should be available on the listener’s IP address and port:

    Yii Basic Template App on Unit

  1. Install Unit with a PHP language module.

  2. Next, install Yii and create or deploy your app.

    Here, we use Yii’s basic project template and yiic:

    console
    $ git clone git@github.com:yiisoft/yii.git /path/to/yii1.1/ # Arbitrary framework path
    
    $ /path/to/yii1.1/ framework/yiic webapp /path/to/app/ #Path to the application directory; use a real path in your configuration

    This creates the app’s directory tree at /path/to/app/.

  3. Next, prepare the Yii configuration for Unit (use real values for share and root):

    json
    {
    "listeners": {
       "*:80": {
          "pass": "routes"
       }
    },
    "routes": [
       {
          "match": {
          "uri": [
             "!/assets/*",
             "!/protected/*",
             "!/themes/*",
             "*.php",
             "*.php/*"
          ],
          "uri_comment": "This path stores application data that shouldn't be run as code"
          },
          "action": {
          "pass": "applications/yii/direct"
          }
       },
       {
          "action": {
          "share": "/path/to/app$uri",
          "share_comment": "Serves static files",
          "fallback": {
             "pass": "applications/yii/index"
          }
          }
       }
    ],
    "applications": {
       "yii": {
          "type": "php",
          "targets": {
          "direct": {
             "root": "/path/to/app/",
             "root_comment": "Path to the application directory; use a real path in your configuration"
          },
          "index": {
             "root": "/path/to/app/",
             "root_comment": "Path to the application directory; use a real path in your configuration",
             "script": "index.php",
             "script_comment": "All requests are handled by a single script"
          }
          }
       }
    }
    }

    For a detailed discussion, see Yii 1.1 docs.

The difference between the pass targets is their usage of the script setting:

  • The direct target runs the .php script from the URI or index.php if the URI omits it.

  • The index target specifies the script that Unit runs for any URIs the target receives.

</div>
  1. Upload the updated configuration.

    Assuming the JSON above was added to config.json. Run the following command as root:

    console
    # curl -X PUT --data-binary @config.json --unix-socket \
          /path/to/control.unit.sock \  # Path to Unit's control socket in your installation
          http://localhost/config/      # Path to the config section in Unit's control API
       
    The control socket path may vary; run unitd -h or see Startup and shutdown for details.

    After a successful update, your app should be available on the listener’s IP address and port:

    Yii Basic Template App on Unit