Files & SFTP
Folder layout
What each folder in your FiniteHost storage is for, where your website and app files go, and what the web server can see.
On this page
When you connect with SFTP you see your own private storage. Nobody else's files are visible, and you cannot see the server's system folders. This guide explains the three folders you will find there and what goes in each.
Before you start#
- Connect once with SFTP so you can follow along: see Connect with SFTP.
- Add at least one website in the panel. Its folder is created for you when you add it.
The map#
| Folder | What it is for | Created |
|---|---|---|
/sites | One folder per website. You start here when you connect. | With your plan |
/sites/acme.in/public | The web root of acme.in: what visitors see at https://acme.in and https://www.acme.in | When you add the website |
/apps | One folder per Python app | With your plan |
/apps/price-bot | Code, requirements.txt and data files of the app price-bot | When you create the app |
/tmp | Temporary files: PHP uploads in progress and PHP sessions | With your plan |
The very top folder (/) belongs to the system and is read-only. You work inside sites, apps and tmp.
Websites: the public folder#
Everything in /sites/<domain>/public can be opened in a browser. A file at /sites/acme.in/public/about.html is the page https://acme.in/about.html.
- The home page is
index.phporindex.html, in that order. - Files and folders whose names start with a dot (like
.envor.git) are never served, except.well-known, which certificate checks use. .htaccessfiles are ignored: the web server is nginx, not Apache. WordPress pretty permalinks work without one.
Upload a site by copying its files into public, not the folder that contains them. If you upload a folder called mysite, your home page ends up at https://acme.in/mysite/.
Keeping private files outside public#
You can create your own folders next to public, inside the site's folder. Files there are not reachable from the web, but your PHP code can still read them. This is a good place for configuration with secrets, private downloads or a log your code writes.
- Connect with SFTP and open
/sites/acme.in. - Create a folder next to
public, for exampleprivate. - Upload the file there, for example
/sites/acme.in/private/config.php. - Load it from PHP with a path relative to your script:
<?php
require __DIR__ . '/../private/config.php';PHP can read anywhere inside your own storage, but never outside it.
Python apps#
Each app has its own folder in /apps, named after the app. Its entry file (for example main.py) and its requirements.txt go at the top of that folder. When the app runs, it sees only its own folder: not your websites, not your other apps. Files your app writes, such as a CSV report, are saved in its folder, and you can download them over SFTP.
You can upload app code in the panel too, as a single .py file or a .zip of the folder. See Python apps.
Ownership and permissions#
You do not need to set permissions by hand. New files you upload to sites automatically belong to a group the web server can read, and PHP runs as your own account, so it can write where your code needs to (for example WordPress's wp-content/uploads).
If you change permissions yourself, keep folders at 750 or 755 and files at 640 or 644. Never use 777.
Disk space#
Everything counts towards your plan's storage: site files, app files, temporary files and the Python packages your apps install. When storage is full, new files cannot be written. You get an email at 80% and at 100%. Check usage under Overview → Resource usage, and see Plan limits.
Troubleshooting#
- My site shows a 403 or the default page: the files are probably in the wrong folder.
index.phporindex.htmlmust be directly insidepublic. - I cannot create a file at the top level: that is expected. Work inside
/sites,/appsor/tmp. - My site folder is missing: it is created when you add the website in the panel. Wait a minute after adding it, then reconnect.
What's next#
Was this helpful?
Still stuck?
Email support@finitehost.com with your subscription ID (it starts with t, shown on the panel's Dashboard) and what you tried. A person replies, usually within one business day.
Last updated 27 October 2026. Found something wrong? Tell support@finitehost.com.