Skip to content

Instantly share code, notes, and snippets.

@wh1tney
Last active September 15, 2024 22:48
Show Gist options
  • Save wh1tney/2ad13aa5fbdd83f6a489 to your computer and use it in GitHub Desktop.
Save wh1tney/2ad13aa5fbdd83f6a489 to your computer and use it in GitHub Desktop.
How to deploy a static website to Heroku

Gist

This is a quick tutorial explaining how to get a static website hosted on Heroku.

Why do this?

Heroku hosts apps on the internet, not static websites. To get it to run your static portfolio, personal blog, etc., you need to trick Heroku into thinking your website is a PHP app. This 6-step tutorial will teach you how.

Basic Assumptions

  • You want to deploy some straight-up HTML, CSS, JS, maybe a few images. Nothing fancy here.
  • You are in the root directory of your site (i.e. the directory that contains all subdirectories and files for the site)
  • The root directory contains a main HTML page, e.g. index.html
  • A Heroku app and remote are set up and ready to go

Steps

  1. Add a file called composer.json to the root directory by running touch composer.json
  2. Add a file called index.php to the root directory by running touch index.php
  3. Rename the homepage (e.g. index.html) to home.html
  4. In index.php, add the following line: <?php include_once("home.html"); ?>
  5. In composer.json, add the following line: {}
  6. Run git push heroku master

Done! Visit your deployed single-page website, hosted by Heroku (as a fake PHP app ☺).

@tachyon83
Copy link

Beautiful. Just Beautiful!

@glaksmono
Copy link

Thanks for sharing this!

@kyudorimj
Copy link

Wow!, works like a charm. Thanks for this @wh1tney

@gabrielareia
Copy link

It works but when I open the app I get an error, I need to manually type the path on the url /home.html to see my web page, is there a way to make home.html be the default page of my application, so when I click on "open app" it will open directly on home.html?

My php file:
<?php include_once(“home.html”); ?>

I also tried with "./" befor home.html:
<?php include_once(“./home.html”); ?>

and my composer.json:
{}

@chaika-sv
Copy link

It works but when I open the app I get an error, I need to manually type the path on the url /home.html to see my web page, is there a way to make home.html be the default page of my application, so when I click on "open app" it will open directly on home.html?

My php file: <?php include_once(“home.html”); ?>

I also tried with "./" befor home.html: <?php include_once(“./home.html”); ?>

and my composer.json: {}

I have exactly the same issue. Please let me know if you were able to resolve it.

@HarivardhanK
Copy link

But why not my app is not getting deployed.
it is giving an error i.e..,
remote: ! ERROR: Basic validation for 'composer.json' failed! remote: ! remote: ! It must be a valid JSON document compatible with Composer. remote: ! remote: ! You most likely created or edited the file by hand, and it now remote: ! contains a syntax error. Please refer to the documentation at remote: ! https://getcomposer.org/doc/ for information on the format. remote: ! remote: ! You can run 'composer validate' locally on your computer for remote: ! further diagnosis. Remember to also always keep your lock file remote: ! up to date with any changes according to the instructions at remote: ! https://getcomposer.org/doc/01-basic-usage.md remote: remote: ! Push rejected, failed to compile PHP app. remote: remote: ! Push failed

@HarivardhanK
Copy link

please help me out!!

@HarivardhanK
Copy link

But why not my app is not getting deployed. it is giving an error i.e.., remote: ! ERROR: Basic validation for 'composer.json' failed! remote: ! remote: ! It must be a valid JSON document compatible with Composer. remote: ! remote: ! You most likely created or edited the file by hand, and it now remote: ! contains a syntax error. Please refer to the documentation at remote: ! https://getcomposer.org/doc/ for information on the format. remote: ! remote: ! You can run 'composer validate' locally on your computer for remote: ! further diagnosis. Remember to also always keep your lock file remote: ! up to date with any changes according to the instructions at remote: ! https://getcomposer.org/doc/01-basic-usage.md remote: remote: ! Push rejected, failed to compile PHP app. remote: remote: ! Push failed

###Solution

The error can be solved by renaming your composer.json file to app.json
and in app.json write this
{ "formation": { "web": { "size": "free" } } }

then push it to heroku it works
and go to the link and at the end of the url type this ./home.html
and your static app is here!!!

@Ashley440
Copy link

Ashley440 commented Nov 6, 2021

I am constantly having the error of "Failed to build"

Now login to heroku.
Create an application and go to it's settings.
3rd option is buildpack.
Select it and add php in the options.

@cipherwithadot
Copy link

Thanks you!

my man got a star and a follow!

@kiefer136
Copy link

For those getting a blank page check in the .gitignore that it does not include * or it will exclude all files. Re git add, commit, push. Then go to "your-app-url.com"/home.html to see your files

@Nasah-Kuma
Copy link

Thanks

@airspeed
Copy link

It even works without steps 2., 3. and 4.

@bernardoadc
Copy link

I followed 6 steps rules. Heroku was successfully build. image

But deployed heroku app doesn't work for me. image

How can I solve this problem?

@best-lucky1030 I had the same problem, my index.php had home without quotes

@kiefer136
Copy link

kiefer136 commented Apr 28, 2022

@bernardoadc I visited your site @ https://aloomic-animation.herokuapp.com/home.html and I was able to view your website.

Your main file being served is set to home.html.
I set mine to be accessible from the "/" by changing home.html to be named index.html, & changing the index.php include_once("./index.html")

@bernardoadc
Copy link

@kiefer136 nope, that's not mine

Anyway, I've followed @airspeed tip (no index.php and home.html) and it worked, so, even better!

@maswerdna
Copy link

But why not my app is not getting deployed. it is giving an error i.e.., remote: ! ERROR: Basic validation for 'composer.json' failed! remote: ! remote: ! It must be a valid JSON document compatible with Composer. remote: ! remote: ! You most likely created or edited the file by hand, and it now remote: ! contains a syntax error. Please refer to the documentation at remote: ! https://getcomposer.org/doc/ for information on the format. remote: ! remote: ! You can run 'composer validate' locally on your computer for remote: ! further diagnosis. Remember to also always keep your lock file remote: ! up to date with any changes according to the instructions at remote: ! https://getcomposer.org/doc/01-basic-usage.md remote: remote: ! Push rejected, failed to compile PHP app. remote: remote: ! Push failed

###Solution

The error can be solved by renaming your composer.json file to app.json and in app.json write this { "formation": { "web": { "size": "free" } } }

then push it to heroku it works and go to the link and at the end of the url type this ./home.html and your static app is here!!!

Awesome! You saved my day.

@Aabha1
Copy link

Aabha1 commented May 21, 2022

But why not my app is not getting deployed. it is giving an error i.e.., remote: ! ERROR: Basic validation for 'composer.json' failed! remote: ! remote: ! It must be a valid JSON document compatible with Composer. remote: ! remote: ! You most likely created or edited the file by hand, and it now remote: ! contains a syntax error. Please refer to the documentation at remote: ! https://getcomposer.org/doc/ for information on the format. remote: ! remote: ! You can run 'composer validate' locally on your computer for remote: ! further diagnosis. Remember to also always keep your lock file remote: ! up to date with any changes according to the instructions at remote: ! https://getcomposer.org/doc/01-basic-usage.md remote: remote: ! Push rejected, failed to compile PHP app. remote: remote: ! Push failed

###Solution

The error can be solved by renaming your composer.json file to app.json and in app.json write this { "formation": { "web": { "size": "free" } } }

then push it to heroku it works and go to the link and at the end of the url type this ./home.html and your static app is here!!!

The above solution really works. I was trying for 4hours and was stuck. Thank you very much.

@ckelly17
Copy link

ckelly17 commented Jun 3, 2022

Does anyone know how to do this but with an HTML document produced by another language? I have an RMarkdown script that I can render into HTML in a job scheduled on Heroku, but I don't have a way of displaying the HTML.

@ber9795
Copy link

ber9795 commented Jun 14, 2022

I follow these exact steps, but the page for me is showing blank. How can I solve this?

@ManideepPaul
Copy link

@ber9795 just add /home.html at the end of the URL

@asaadjawed
Copy link

Thanks

@ccedacero
Copy link

Hello World 🤓 !For anyone simply looking to deploy a static site, it's probably more convenient these days to use digitalocean's app platform. It's free and you can push directly from github for continuous deploys. You can also connect to custom domains without issues. I highly recommend you follow that if all you need is a static site. Instructions are here

@ber9795
Copy link

ber9795 commented Jun 28, 2022 via email

@jsolly
Copy link

jsolly commented Jul 6, 2022

Wonderful. Thanks!

@quangdutran
Copy link

@kiefer136 nope, that's not mine

Anyway, I've followed @airspeed tip (no index.php and home.html) and it worked, so, even better!

Same

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment