  You're browsing the documentation for an old version of SupportPal. Consider upgrading to the [latest version](https://docs.supportpal.com/current/New+Installation). 

# New Installation

## Downloading SupportPal

A license with valid support and upgrade coverage is required to download SupportPal. Owned licenses include 6 months from date of purchase and leased licenses include lifetime support & upgrades. Once you have a valid license please login to the members area at <http://www.supportpal.com/manage/> select an active license and choose the latest version you wish to download.

## Checking Requirements

In order for SupportPal to function correctly a number of [System Requirements](System+Requirements) need to be met. Before attempting an installation, please ensure these are in place.

## Installation Steps

The SupportPal installation process is fairly simple, follow the following steps to get started:

1. Download a copy of SupportPal from our members area at <http://www.supportpal.com/manage/>.
2. Unzip the contents of the downloaded zip file.
3. Upload the entire contents of the SupportPal folder to your web server (If you are using FTP use Binary Mode).
4. Start the install process by visiting the URL where you have uploaded SupportPal, e.g. http://yourdomain.com/support. 
    1. If you are receiving an IonCube encoder error please check the[System Requirements](System+Requirements).
5. Follow the instructions provided by the installer.
6. Enjoy SupportPal!

## Post Installation Steps

  **nginx / IIS web servers**  
 Please ensure your server is configured to allow HTTP GET, POST, PUT and DELETE requests. If using IIS web server, our web.config below should configure this for you. 

### Cron Job

  **File Permission Conflicts**  
 The cron job **must** run as the web server user in order to avoid file permission conflicts. 

  We recommend to specify an email address to send cron output to, which may be helpful in the unusual event an error occurs. 

The cron job is used to perform background tasks such as sending emails and closing inactive tickets. To setup the cronjob please create the below cron entry, replacing `<supportpal_base_path>` with your own path:

#### cPanel

Select *Cron Jobs* from the dashboard, browse down the page to *Add New Cron Job*. Then, select *Once per minute* from the *Common Settings* dropdown, and input the following into the *Command* box:

```
php -q /<supportpal_base_path>/cron
```

#### Linux

To ensure that the cron job runs as the web server user, please add the following entry to the `/etc/crontab` file replacing `<web_server_user>` and `<supportpal_base_path>` with your servers details:

```
* * * * * <web_server_user> php -q /<supportpal_base_path>/cron
```

#### Windows

The cron should be setup through the [Windows Task Scheduler](https://technet.microsoft.com/en-us/library/cc721931(v=ws.11).aspx), using a command *similar* to the below (you may need to change the file paths):

```
C:\Program Files (x86)\PHP\v7.0\php-cgi.exe -q c:\inetpub\wwwroot\cron
```

### Pretty URLs

SupportPal ships with a `.htaccess` file that is used to allow URLs without `index.php`.

#### Apache

If you use Apache please ensure that the `mod_rewrite` module is enabled.

#### nginx

On nginx, please create a new virtual host for SupportPal. The below is an example virtual host but will need editing for your specific environment (paths may vary):

 supportpal.conf  Expand  Collapse

```

server {
    listen 80;
    listen [::]:80;

    server_name supportpal.app;

    root /var/www/supportpal;
    index index.php;

    # Remove index.php from GET requests.
    set $user_request 0;
    if ($request_method = GET) {
        set $user_request "GET";
    }
    if ($request_uri ~* "^(.*/)index\.php/?(.*)$") {
        set $user_request "${user_request}-index.php";
    }
    if ($user_request = "GET-index.php") {
        return 301 $1$2;
    }

    # Send all requests to SupportPal.
    location / {
        try_files /notexistent @backend;
    }

    # Allow direct access to asset files, if they don't exist show SupportPal 404 error page.
    location ~* \.(css|gif|ico|je?pg|js|png|swf|txt|eot|ttf|woff|woff2|svg|map)$ {
        try_files $uri $uri/ @backend;
    }

    # Allow direct access to resources/assets files, if they don't exist show SupportPal 404 error page.
    location resources/assets/ {
        try_files $uri $uri/ @backend;
    }

    # All SupportPal requests must be sent through index.php.
    location @backend {
        rewrite ^(.*)$ /index.php last;
    }

    location ~ \.php($|/) {
        include snippets/fastcgi-php.conf;

        # With php-fpm:
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    }
}

```

#### IIS

On IIS, please create a `web.config` file in the root of your installation directory with the below contents:

  **Required Extension(s)**  
 The [URL Rewrite extension](https://www.iis.net/downloads/microsoft/url-rewrite) is required for the below web.config file to function correctly, otherwise a 500.19 error is likely to be shown when visiting SupportPal (see [Understanding HTTP Error 500.19](https://support.microsoft.com/en-gb/help/942055/-http-error-500-19-error-when-you-open-an-iis-7-0-webpage)). 

  Please replace the follow constants in the below code snippet: - `<supportpal_base_url>` with your installation base URL
- `<absolute_path_to_php_cgi.exe>` with the absolute path to your PHP cgi executable
 


 web.config  Expand  Collapse

```

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <staticContent>
            <remove fileExtension=".woff" />
            <remove fileExtension=".woff2" />
            <remove fileExtension=".json" />
            <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
            <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
            <mimeMap fileExtension=".json" mimeType="application/json" />
        </staticContent>
        <rewrite>
            <rules>
                <rule name="Add trailing slash to base" stopProcessing="true">
                    <match url="^$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{URL}" pattern="[^\/]$" />
                    </conditions>
                    <action type="Redirect" url="<supportpal_base_url>/" />
                </rule>
                <rule name="Remove index.php" stopProcessing="true">
                    <match url="^index.php/?(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_METHOD}" pattern="GET" />
                        <add input="{URL}" pattern="^.*/index\.php" />
                    </conditions>
                    <action type="Redirect" redirectType="Permanent" url="<supportpal_base_url>/{R:1}" appendQueryString="true" />
                </rule>
                <rule name="Allow assets" stopProcessing="true">
                    <match url="^" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
                        <add input="{URL}" pattern="(resources/assets/|\.(css|gif|ico|je?pg|js|png|swf|txt|eot|ttf|woff|woff2|svg|map)$)" />
                    </conditions>
                    <action type="None" />
                </rule>
                <rule name="Rewrite all else to index.php" stopProcessing="true">
                    <match url="^" ignoreCase="false" />
                    <action type="Rewrite" url="index.php" />
                </rule>
            </rules>
            <outboundRules>
                <rule name="fix content-type" preCondition="PHPRequest">
                    <match serverVariable="RESPONSE_CONTENT_TYPE" pattern="text/html; charset=UTF-8,([^\/]+\/.+$)" ignoreCase="true" />
                    <action type="Rewrite" value="{R:1}" />
                </rule>
                <preConditions>
                    <preCondition name="PHPRequest">
                        <add input="{REQUEST_URI}" pattern=".*\.php" />
                    </preCondition>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
        <handlers>
            <remove name="WebDAV" />
            <remove name="PHP-php" />
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
            <add name="PHP-php" path="*.php" verb="GET,HEAD,POST,PUT,DELETE" modules="FastCgiModule" scriptProcessor="<absolute_path_to_php_cgi.exe>" resourceType="Either" requireAccess="Script" />
        </handlers>
        <httpErrors errorMode="Detailed" />
        <modules>
            <remove name="WebDAVModule" />
        </modules>
    </system.webServer>
    <system.web>
        <authentication mode="Forms" />
    </system.web>
</configuration>

```

### Rename the Admin Folder

From a security point of view, it is a good idea to change the default operator URL prefix from *admin* to something that only your staff know. The prefix can be updated in the operator *General Settings* area under *Admin Folder*.

## Common Issues

For common issues please see our [Frequently Asked Questions](Frequently+Asked+Questions).