Deploy Fractal Platform to your cloud

Run your own Fractal Runtime on AWS, Azure, DigitalOcean or any other cloud provider.

Why You Might Need a Dedicated Cloud

  • Your project has grown beyond the limits of free sandbox hosting.
  • You need more performance or scaling.
  • Security policies require isolated environments.

Step 1: Choose a Cloud Instance

Fractal Platform runs efficiently on low-cost instances like Amazon EC2 t2.micro. These come with 1GB RAM and Amazon Linux.

Amazon offers 750 hours free per month for the first year. After that, it costs around $0.0058/hour (~$4.18/month).

Step 2: Launch Your EC2 Instance


Go to EC2 instances section of AWS Console

Launch Instance

Name it MyTestInstance, choose Amazon Linux and t2.micro type.

Choose Instance Type

Create/select a key pair, enable HTTP/HTTPS, then click "Launch".

Enable Traffic

Step 3: Allocate a Static IP

Go to Manage IP Addresses in the AWS menu.

Manage IP

Click Allocate to reserve an IP.

Allocate IP

Click Allocate Elastic IP Address.

Elastic IP

Copy the IP and update your domain DNS settings.

Step 4: Configure the Instance

Click Connect in EC2 to open the terminal.

Connect EC2

Install Docker

sudo yum update -y
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
newgrp docker
        

Run Fractal Docker Container

sudo docker pull fraplat/image:v1.0
sudo docker run -d \
  --name mycontainer \
  --restart always \
  -v app_databases:/app/Databases \
  -v app_layouts:/app/Layouts \
  -v app_deployments:/app/Deployments \
  -v app_files:/app/wwwroot/files \
  -p 8080:8080 \
  -p 8081:8081 \
  fraplat/image:v1.0
        

Install NGINX

sudo yum install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
        

Configure NGINX Proxy (replace mydomain.com on your own domain)

Save config: Ctrl+O, Enter, Ctrl+X

sudo nano /etc/nginx/conf.d/kestrel.conf
        
server {
    listen 80;
    server_name mydomain.com www.mydomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 80;
    server_name *.mydomain.com;
    return 301 https://$host$request_uri;
}
        

Install "Let’s Encrypt" SSL (replace mydomain.com on your own domain)

sudo yum install -y certbot python-certbot-nginx
sudo certbot --nginx -d mydomain.com -d www.mydomain.com
sudo systemctl restart nginx
        

Full NGINX HTTPS Config (replace mydomain.com on your own domain)

a. Remove exising config

b. Past config with replace mydomain.com on your own domain

c. Save config: Ctrl+O, Enter, Ctrl+X

sudo nano /etc/nginx/conf.d/kestrel.conf
            
server {
    listen 443 ssl;
    server_name mydomain.com www.mydomain.com;
    client_max_body_size 100M;
    ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 443 ssl;
    server_name *.mydomain.com;
    client_max_body_size 100M;
    ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        if ($host ~* ^([^.]+)\.fraplat\.com$) {
            set $subdomain $1;
        }

        proxy_pass http://127.0.0.1:8080/$subdomain/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
        

Restart NGINX

sudo systemctl restart nginx
        

Configure NGINX Proxy (replace mydomain.com on your own domain)

Save config: Ctrl+O, Enter, Ctrl+X

sudo nano /etc/nginx/conf.d/kestrel.conf
        
server {
    listen 80;
    server_name mydomain.com www.mydomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 80;
    server_name *.mydomain.com;
    return 301 https://$host$request_uri;
}
        

Step 5: Done! (replace mydomain.com on your own domain)

Your Fractal Platform is now live on https://mydomain.com


Fractal Portal admin panel

Open Site: https://mydomain.com/FractalPortal

Login: Admin

Password: admin


Deploy your own FP web site

Open Site: https://fractal.tech/FractalStudio/?tag=MyAppName

Click "Transfer application" in the top header

BaseUrl: https://mydomain.com

DeploymentKey: sandbox

IsRecreateDatabase: true

Click Transfer button


Configure server to open default web app

Open and login to https://mydomain.com/FractalPortal

Click Environment => Environments button

Set MyAppName as DefaultAppName in the opened form

Click Save button

Your MyAppName is now live on https://mydomain.com

Step 6: Update Fractal Platform runtime to latest version (if needed)

sudo docker stop mycontainer
sudo docker rm mycontainer
sudo docker pull fraplat/image:v1.0
sudo docker run -d \
  --name mycontainer \
  --restart always \
  -v app_databases:/app/Databases \
  -v app_layouts:/app/Layouts \
  -v app_deployments:/app/Deployments \
  -v app_files:/app/wwwroot/files \
  -p 8080:8080 \
  -p 8081:8081 \
  fraplat/image:v1.0