User Documentation

Deploy TYPO3

Sign up for Upsun

Get your free trial by clicking the link below.

Get your Upsun free trial

Now you have your configuration for deployment and your app set up to run on Make sure all your code is committed to Git and run git push to your environment.

Your code is built, producing a read-only image that’s deployed to a running cluster of containers. If you aren’t using a source integration, the log of the process is returned in your terminal. If you’re using a source integration, you can get the log by running platform activity:log --type environment.push.

When the build finished, you’re given the URL of your deployed environment. Click the URL to see your site.

If your environment wasn’t active and so wasn’t deployed, activate it by running the following command:

platform environment:activate

Post-install (new site) Anchor to this heading

The following section is only relevant when deploying the TYPO3 template or creating a new site from scratch locally using Composer. If you’re migrating an existing site, you can move on to the next step.

    # The deploy hook runs after your application has been deployed and started.
    # Code can't be modified at this point but the database is available.
    # The site isn't accepting requests while this script runs so keep it
    # fast.
    deploy: |
        # Exit hook immediately if a command exits with a non-zero status.
        set -e

        # Set TYPO3 site defaults on first deploy.
        if [ ! -f var/platformsh.installed ]; then
            # Copy the created LocalConfiguration into the writable location.
            cp public/typo3conf/LocalConfiguration.FromSource.php var/LocalConfiguration.php

            # On first install, create an inital admin user with a default password.
            php vendor/bin/typo3cms install:setup \
                --install-steps-config=src/SetupDatabase.yaml \
                --site-setup-type=no \
                --site-name="TYPO3 on" \
                --admin-user-name=admin \
                --admin-password=password \
                --skip-extension-setup \

            # Sets up all extensions that are marked as active in the system.
            php vendor/bin/typo3cms extension:setupactive || true

            # Create file that indicates first deploy and installation has been completed.
            touch var/platformsh.installed

The template is designed to run the TYPO3 installer only on the first deploy by creating a placeholder platformsh.installed on the var mount. You should not remove this file unless you want the next deployment to run through the installer again.

Next, when the deploy hook ran through the installer, it set an initial username and password for the TYPO3 site, which you should update immediately. Visit /typo3 on the generated URL for the environment and login with those temporary admin credentials. Then click on the user icon in the top right of the page and go to User Settings > Password to update.

Migrate your data Anchor to this heading

If you are moving an existing site to, then in addition to code you also need to migrate your data. That means your database and your files.

Import the database Anchor to this heading

First, obtain a database dump from your current site, such as using the

Next, import the database into your site by running the following command:

platform sql < dump.sql

That connects to the database service through an SSH tunnel and imports the SQL.

Import files Anchor to this heading

First, download your files from your current hosting environment. The easiest way is likely with rsync, but consult your host’s documentation.

This guide assumes that you have already downloaded all of your user files to your local files/user directory and your public files to files/public , but adjust accordingly for their actual locations.

Next, upload your files to your mounts using the platform mount:upload command. Run the following command from your local Git repository root, modifying the --source path if needed.

platform mount:upload --mount src/main/resources/files/user --source ./files/user
platform mount:upload --mount src/main/resources/files/public --source ./files/public

This uses an SSH tunnel and rsync to upload your files as efficiently as possible. Note that rsync is picky about its trailing slashes, so be sure to include those.

You’ve now added your files and database to your environment. When you make a new branch environment off of it, all of your data is fully cloned to that new environment so you can test with your complete dataset without impacting production.

Go forth and Deploy (even on Friday)!

Is this page helpful?