> [!CAUTION]
> **Caution:** This documentation covers Edge for Private Cloud 4.18.01, which is no longer supported. Google does not provide security patches, bug fixes, or technical support for this version. The current supported version is 4.54.00. See the [Edge for Private Cloud documentation](https://docs.apigee.com/private-cloud/latest/overview) for the current version, or [All versions](https://docs.apigee.com/private-cloud/versions) to compare releases.

*Edge for Private Cloud v4.18.01*

This procedure describes how to upgrade an existing Apigee Developer Channel Services
on-premise installation.

> [!NOTE]
> **Note:** All new installations of the portal from version 4.17.01 onward used Postgres as the database and Nginx as the web server. However, previous releases of the portal use MySQL/MariaDB as the database and Apache web server. That means your current portal can use any one of the following configurations:
>
> - Nginx/Postgres for all new 4.17.0x and 4.18.0x installations
> - Apache/MySQL 5.0.15 or later for all 6.x operating systems previous to 4.17.01
> - Apache/MariaDB 5.1.38 or later for all 7.x operating systems previous to 4.17.01
>
> Before you start the update process, you must determine your current configuration and then
> perform the correct update procedure.

> [!WARNING]
> **Warning:** You cannot update a portal using MySQL/MariaDB and Apache. You must instead convert the installation to use Postgres as the database and Nginx as the web server. As part of this conversion, you also update your portal to 4.18.01. See [Convert a tar-based
> portal to an RPM-based portal](https://docs.apigee.com/private-cloud/v4.17.09/convert-tar-based-portal-rpm-based-portal) for more.

> [!NOTE]
> **Note:** This procedure performs a complete upgrade of Drupal and of the Apigee software that ships with the portal. You might want to upgrade just Drupal itself, possibly because a new version of Drupal is available. A new Drupal version can mean a Drupal feature release, patch, security update, or other type of Drupal update. If you only want to perform an upgrade of Drupal, see [Upgrading the
> Drupal version of a Private Cloud installation](https://docs.apigee.com/private-cloud/v4.17.09/upgrading-drupal-version-private-cloud-installation).

> [!NOTE]
> **Note:** If you share the Postgres server with Edge for the Private Cloud, then you update the Postgres server as part of updating Edge. See [Update Apigee Edge 4.17.0x to 4.18.01](https://docs.apigee.com/private-cloud/v4.18.01/update-apigee-edge-4170x-41801) for more.

## Determining the correct update procedure

The procedure that you use to update the portal is based on your current installation:

- **If your installation uses Nginx/Postgres** , then use [Upgrading a portal using RPMs](https://docs.apigee.com/private-cloud/v4.18.01/upgrading-developer-services-portal#upgradingaportalusingrpms) below.
- **If your installation uses Apache/MySQL or Apache/MariaDB** , then see [Convert a
  tar-based portal to an RPM-based portal](https://docs.apigee.com/private-cloud/v4.17.09/convert-tar-based-portal-rpm-based-portal).

### Determining
your current installation type

If you are unsure about your current installation type, use the following command to determine
it:

- `ls /opt`

  If you are using Nginx/Postgres, you will see the following directories:
  `/opt/apigee` and `/opt/nginx`.

  If you are using Apache/MySQL or Apache/MariaDB, then these directories should not be
  present.
- `/opt/apigee/apigee-service/bin/apigee-all status`

  If you are using Nginx/Postgres, you will see the following output:

  ```
  + apigee-service
  apigee-drupal-devportal status
  OK: apigee-drupal-devportal is up and running
  + apigee-service apigee-lb status
  apigee-service: apigee-lb: OK
  + apigee-service apigee-postgresql status
  apigee-service: apigee-postgresql: OK
  ```
- `apachectl -S`

  If you are using Apache/MySQL or Apache/MariaDB, then this command should return the web
  root directory of the portal, in the form:

  ```
  *:80
  192.168.56.102 (/etc/httpd/conf/vhosts/devportal.conf:1)
  ```

## Default installation directory

The upgrade process assumes that the Developer Portal was installed at:

- 4.17.05 and later: `/opt/apigee/apigee-drupal/wwwroot`
- Prior to 4.17.05: `/opt/apigee/apigee-drupal` (Nginx) or `/var/www/html` (Apache)

If you did not install the portal in the default directory, modify the paths in the procedure
below to use your installation directory.

## Supported upgrade versions

This upgrade procedure is supported for the following versions of the portal:

- OPDK-17-01.x
- OPDK-17-05.x
- OPDK-17-09.x

To determine your portal version, open the following URL in a browser:

`http://yourportal.com/buildInfo`

> [!NOTE]
> **Note:** In 4.17.05 this link was removed. To determine the version, open the **Reports \> Status report** menu entry in Drupal. The portal version appears in the table in the row named **Install profile**.

> [!NOTE]
> **Note:** If nothing is displayed or a version other than one listed above is displayed, then you cannot use this upgrade process. For information on upgrading from any other portal version, contact [Apigee Edge Support](https://docs.apigee.com/api-platform/troubleshoot/support).

> [!NOTE]
> **Note:** If for some reason you removed the `buildInfo` file, then you can determine the version from the `profiles/apigee/apigee.info` file. The default install location is `/var/www/html/profiles/apigee/apigee.info`, but you might have changed it at install time if you installed the portal in a directory other than `/var/www/html`. The `apigee.info` file contains a line in the form below containing the version:
>
> ```
> version = "OPDK-4.17.05"
> ```

## Before you update

For existing installations, if you have modified any code in Drupal core or in any non-custom
modules, your modifications will be overwritten. This includes, among other things, any changes
you may have made to `.htaccess`.
You should assume that anything outside the `/sites` directory is owned by Drupal. An
exception to this rule is `robots.txt`; if this file exists in the web root, it will be
preserved for you.

Before proceeding with the installation, make a backup of your entire Drupal web root
directory. After performing the installation steps described below, you can restore your
customizations from the backup.

## Upgrading a portal using RPMs

To update the portal RPM on a node:

1. Change to the Drupal directory, `/opt/apigee/apigee-drupal` by default:

   ```
   cd /opt/apigee/apigee-drupal
   ```
2. Backup your Drupal database instance. The `pg_dump` command creates a copy of the database:

   ```
   pg_dump --dbname=devportal --host=192.168.56.101 --username=drupaladmin
     --password --format=c > /tmp/portal.dmp
   ```

   where:
   - `dbname` specifies the database name as specified by the `PG_NAME` property in the portal installation configuration file.
   - `host` specifies the IP address of the portal node.
   - `username` specifies the Postgres username used by the portal to access the data base as specified by the `DRUPAL_PG_USER` property in the portal installation configuration file.
   - You are prompted for the Postgres user password as defined by the `DRUPAL_PG_PASS` property in the portal installation configuration file.

   If you later have to restore from the backup, use the command:

   ```
   pg_restore --clean --dbname=devportal --host=localhost  --username=apigee < /tmp/portal.dmp
   ```
3. Make a backup of your entire Drupal web root directory. The default install location is `/opt/apigee/apigee-drupal`, but you might have changed it.

   If you are unsure of the location of this directory, use the `drush status` command or the
   **Configuration \> Media \> File** entry in the Drupal menu to determine
   the location of the public file system and private file system path (for the next
   step).
4. Make a backup of the files in `/opt/apigee/data/apigee-drupal-devportal/private`.
5. Set Drupal to maintenance mode:
   1. Select **Configuration** in the Drupal menu.
   2. On the **Configuration** page, select **Maintenance
      mode** under **Development**.
   3. Select the **Put site into maintenance mode** box.
   4. Enter a message users see during maintenance.
   5. Select **Save configuration**.
6. Disable SELinux as described in [Install the Edge apigee-setup utility](https://docs.apigee.com/private-cloud/v4.17.09/install-edge-apigee-setup-utility).
7. Change to the `/opt` directory:

   ```
   > cd /opt
   ```
8. **For an upgrade on a server with an Internet connection:**
   1. Download the Edge 4.18.01 `bootstrap_4.18.01.sh` file to `/tmp/bootstrap_4.18.01.sh`:

      ```
      curl https://software.apigee.com/bootstrap_4.18.01.sh -o /tmp/bootstrap_4.18.01.sh
      ```
   2. Install the Edge 4.18.01 `apigee-service` utility and dependencies:

      ```
      sudo bash /tmp/bootstrap_4.18.01.sh apigeeuser=uName apigeepassword=pWord
      ```

      where <var translate="no">uName:pWord</var> are the username and password you received from
      Apigee. If you omit <var translate="no">pWord</var>, you will be prompted to enter it.

      By default, the installer checks to see that you have Java 1.8 installed. You can use the
      "C" option to continue without installing Java.
9. **For an upgrade on a server with no Internet connection:**
   1. Create a local 4.18.01 repo as described in "Create a local Apigee repository" at [Install the Edge
      apigee-setup utility](https://docs.apigee.com/private-cloud/v4.17.09/install-edge-apigee-setup-utility).

      > [!NOTE]
      > **Note** : If you already have an existing 4.17.05 repo, you can add the 4.18.01 repo to it as described in "Update a local Apigee repository" at [Install the Edge
      > apigee-setup utility](https://docs.apigee.com/private-cloud/v4.17.09/install-edge-apigee-setup-utility).

   2. **To install apigee-service from a .tar file** :
      1. On the node with the local repo, use the following command to package the local repo into a single .tar file named `/opt/apigee/data/apigee-mirror/apigee-4.18.01.tar.gz`:

         ```
          /opt/apigee/apigee-service/bin/apigee-service apigee-mirror package
         ```
      2. Copy the .tar file to the node where you want to update Edge. For example, copy it to the `/tmp` directory on the new node.
      3. On the new node, untar the file to the /tmp directory:

         ```
         tar -xzf apigee-4.18.01.tar.gz
         ```

         This command creates a new directory, named repos, in the directory containing the .tar
         file. For example /tmp/repos.
      4. Install the Edge `apigee-service` utility and dependencies from `/tmp/repos`:

         ```
         sudo bash /tmp/repos/bootstrap_4.18.01.sh apigeeprotocol="file://" apigeerepobasepath=/tmp/repos
         ```

         Notice that you include the path to the repos directory in this command.
   3. **To install apigee-service using the Nginx webserver:**
      1. Configure the Nginx web server as described in "Install from the repo using the Nginx webserver" at [Install the Edge
         apigee-setup utility](https://docs.apigee.com/private-cloud/v4.17.09/install-edge-apigee-setup-utility).
      2. On the remote node, download the Edge `bootstrap_4.18.01.sh` file to `/tmp/bootstrap_4.18.01.sh`:

         ```
         /usr/bin/curl http://uName:pWord@remoteRepo:3939/bootstrap_4.18.01.sh
           -o /tmp/bootstrap_4.18.01.sh
         ```

         where <var translate="no">uName:pWord</var> are the username and password you set above
         for the repo, and <var translate="no">remoteRepo</var> is the IP address or DNS name of
         the repo node.
      3. On the remote node, install the Edge `apigee-service` utility and dependencies:

         ```
         sudo bash /tmp/bootstrap_4.18.01.sh apigeerepohost=remoteRepo:3939
             apigeeuser=uName apigeepassword=pWord apigeeprotocol=http://
         ```

         where <var translate="no">uName:pWord</var> are the repo username and password.
10. Use `apigee-service` to update the `apigee-setup` utility:

    ```
    /opt/apigee/apigee-service/bin/apigee-service apigee-setup update
    ```
11. Run the update utility on your Postgre node:

    ```
    /opt/apigee/apigee-setup/bin/update.sh -c ps -f configFile
    ```

    where <var translate="no">configFile</var> is the configuration file that you used to install
    the Postgres database. The only requirement on the config file is that the configuration
    file must be accessible or readable by the "apigee" user.
12. Update the Postgres database:

    ```
    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    ```
13. Run the update utility on your node to update the portal:

    ```
    /opt/apigee/apigee-setup/bin/update.sh -c dp -f configFile
    ```

    where <var translate="no">configFile</var> is the configuration file that you used to install
    the portal. The only requirement on the config file is that the configuration file
    must be accessible or readable by the "apigee" user.
14. Run Drupal's `update.php` script by opening the following URL in a browser window:

    ```
    http://portalIP_DNS:8079/update.php
    ```
15. Disable Drupal to maintenance mode:
    1. Select **Configuration** in the Drupal menu.
    2. On the **Configuration** page, select **Maintenance
       mode** under **Development**.
    3. Deselect the **Put site into maintenance mode** box.
    4. Select **Save configuration**.

Note that the root directory after the update is:

```
/opt/apigee/apigee-drupal/wwwroot
```

The upgrade is now complete.