Skip to content

Storage

Disk layout

Most of the Cloudron code and data is sandboxed in /home/yellowtent (For the curious, yellowtent was the code name for Cloudron). The subdirectories are:

  • box - This contains the Cloudron code. The Cloudron code does not run as root.
  • boxdata - This contains data that is generated by the Cloudron code including certs. This also contains all user emails in the mail/vmail directory in the maildir format.
  • appsdata - This contains the data generated by each app. Each directory here corresponds to the application id.
  • platformdata - This contains 'runtime' data of the platform for mysql, postgres, mongodb, nginx.

boxdata, appsdata and platformdata are relocatable.

The other important locations on the server are:

  • /var/lib/docker - This contains docker images. This is relocatable.
  • /etc/nginx - These contains the reverse proxy configuration. It is not meant to be edited manually.
  • /apps.swap - This is a swap file that is dynamically resized by Cloudron. It will be no more than 4GB.

Docker image location

Cloudron uses Docker for containerizing applications and docker images tend to consume a lot of space. The docker images are stored by default at /var/lib/docker. They can be moved to an external storage as follows:

  • Stop docker
systemctl stop docker
  • Move existing contents to external storage. Any external storage must be formatted as ext4. Assuming, /mnt/docker is the new location:
rsync -aHSX /var/lib/docker /mnt/docker
  • Link /var/lib/docker to the new location
rm -rf /var/lib/docker
ln -s /mnt/docker /var/lib/docker 

Alternately, you can bind mount mount --bind /mnt/docker /var/lib/docker. This, however, requires adding an entry in /etc/fstab to persist across reboots.

  • Start docker
systemctl start docker

Moving a single app's data directory to another location

Please make sure you have a complete backup before following the procedure below.

Apps store their data under /home/yellowtent/appsdata. Each subdirectory is the app id. To move a single app to another location, simply create a symlink of this subdirectory to the alternate location. Note that the new location must be on an ext4 file system.

  • Stop all the containers of the app. To find all the container for an app at domain files.smartserver.io:
# docker ps -q -f label=fqdn=files.smartserver.io --format 'table {{.ID}}\t{{.Label "appId"}}'
CONTAINER ID        APPID
12465cd72d01        217f33a5-f4a8-4abe-bc32-76256906818f
cf9ae0ad5808

# docker stop 12465cd72d01 cf9ae0ad5808
  • Move the app's data directory to an alternate location:
    APP_ID="217f33a5-f4a8-4abe-bc32-76256906818f"  # identified above
    NEW_LOC="/mnt/appdata"                         # we will move the app's data under this EXT4 directory

    mv "/home/yellowtent/appsdata/${APP_ID}" "${NEW_LOC}"
    ln -s "${NEW_LOC}/${APP_ID}" "/home/yellowtent/appsdata/${APP_ID}"
  • Start the app containers:
# docker start 12465cd72d01 cf9ae0ad5808

Move the data directory to another location

Please make sure you have a complete backup before following the procedure below.

Apps store their data under /home/yellowtent/appsdata. Cloudron itself stores it's data (users, groups, certs, mails etc) under /home/yellowtent/boxdata.

If the server is running out of disk space, one or more of these directories can be moved to another ext4 disk/location as follows:

    systemctl stop cloudron.target
    systemctl stop docker
    DATA_DIR="/var/data"  # this is the external disk location
    mkdir -p "${DATA_DIR}"

    # (optional) move out apps data to the external disk
    mv /home/yellowtent/appsdata "${DATA_DIR}"
    ln -s "${DATA_DIR}/appsdata" /home/yellowtent/appsdata

    # (optional) move out box data to the external disk
    mv /home/yellowtent/boxdata "${DATA_DIR}"
    ln -s "${DATA_DIR}/boxdata " /home/yellowtent/boxdata

    # (optional) move out app database storage to the external disk
    mv /home/yellowtent/platformdata "${DATA_DIR}"
    ln -s "${DATA_DIR}/platformdata" /home/yellowtent/platformdata

    systemctl start docker
    systemctl start cloudron.target

If the disk graph does not display properly, do a systemctl restart collectd.

Note: data directory must be an ext4 filesystem.

Resizing the server

For VPS providers that support it, the server (cpu/disk/memory) can be resized and Cloudron will automatically adapt to the available resources after a server restart.

IP changes

Some VPS providers change the IP address of the virtual machine after a resize. You will have to change the IP address in your DNS, if this is the case.

AWS EBS

On AWS, the partition and the filesystem must be resized after resizing the EBS volume. This can be done by following the AWS Guide.