{"id":13468899,"url":"https://github.com/cobyism/ghost-on-heroku","last_synced_at":"2025-05-16T02:09:33.777Z","repository":{"id":19923743,"uuid":"23190065","full_name":"cobyism/ghost-on-heroku","owner":"cobyism","description":"One-button Heroku deploy for the Ghost blogging platform.","archived":false,"fork":false,"pushed_at":"2022-12-02T22:33:47.000Z","size":13354,"stargazers_count":743,"open_issues_count":28,"forks_count":683,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-05-08T17:55:29.953Z","etag":null,"topics":["blog","ghost","ghost-blog","heroku"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cobyism.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-08-21T14:25:07.000Z","updated_at":"2025-04-13T15:41:20.000Z","dependencies_parsed_at":"2023-01-11T20:39:25.602Z","dependency_job_id":null,"html_url":"https://github.com/cobyism/ghost-on-heroku","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cobyism%2Fghost-on-heroku","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cobyism%2Fghost-on-heroku/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cobyism%2Fghost-on-heroku/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cobyism%2Fghost-on-heroku/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cobyism","download_url":"https://codeload.github.com/cobyism/ghost-on-heroku/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254453667,"owners_count":22073618,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","ghost","ghost-blog","heroku"],"created_at":"2024-07-31T15:01:21.534Z","updated_at":"2025-05-16T02:09:33.734Z","avatar_url":"https://github.com/cobyism.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# [Ghost](https://github.com/TryGhost/Ghost) on [Heroku](http://heroku.com)\n\nGhost is a free, open, simple blogging platform. Visit the project's website at \u003chttp://ghost.org\u003e, or read the docs on \u003chttp://support.ghost.org\u003e.\n\n## Ghost version 1.X\n\n[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)\n\n### Things you should know\n\nAfter deployment,\n- First, visit Ghost at `https://YOURAPPNAME.herokuapp.com/ghost` to set up your admin account\n- The app may take a few minutes to come to life\n- Your blog will be publicly accessible at `https://YOURAPPNAME.herokuapp.com`\n- If you subsequently set up a [custom domain](https://devcenter.heroku.com/articles/custom-domains) for your blog, you’ll need to update your Ghost blog’s `PUBLIC_URL` environment variable accordingly, `heroku config:set PUBLIC_URL=https://www.example.com`\n\n#### 🚫🔻 Do not scale-up beyond a single dyno\n\n[Ghost does not support multiple processes.](https://docs.ghost.org/faq/clustering-sharding-multi-server/)\n\nIf your Ghost app needs to support substantial traffic, then use a CDN add-on:\n\n  * [Fastly](https://elements.heroku.com/addons/fastly)\n  * [Edge](https://elements.heroku.com/addons/edge).\n\n#### Using with file uploads disabled\n\nHeroku app filesystems [aren’t meant for permanent storage](https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem), so file uploads are disabled by default when using this repository to deploy a Ghost blog to Heroku. If you’re using Ghost on Heroku with S3 file uploads disabled, you should leave all environment variables beginning with `S3_…` blank.\n\n#### Configuring S3 file uploads\n\nTo configure S3 file storage, create an S3 bucket on Amazon AWS, and then specify the following details as environment variables on the Heroku deployment page (or add these environment variables to your app after deployment via the Heroku dashboard):\n\n- `S3_ACCESS_KEY_ID` and `S3_ACCESS_SECRET_KEY`: **Required if using S3 uploads**. These fields are the AWS key/secret pair needed to authenticate with Amazon S3. You must have granted this keypair sufficient permissions on the S3 bucket in question in order for S3 uploads to work.\n\n- `S3_BUCKET_NAME`: **Required if using S3 uploads**. This is the name you gave to your S3 bucket.\n\n- `S3_BUCKET_REGION`: **Required if using S3 uploads**. Specify the region the bucket has been created in, using slug format (e.g. `us-east-1`, `eu-west-1`). A full list of S3 regions is [available here](http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region).\n\n- `S3_ASSET_HOST_URL`: Optional, even if using S3 uploads. Use this variable to specify the S3 bucket URL in virtual host style, path style or using a custom domain. You should also include a trailing slash (example `https://my.custom.domain/`).  See [this page](http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html) for details.\n\nOnce your app is up and running with these variables in place, you should be able to upload images via the Ghost interface and they’ll be stored in Amazon S3. :sparkles:\n\n##### Provisioning an S3 bucket using an add-on\n\nIf you’d prefer not to configure S3 manually, you can provision the [Bucketeer add-on](https://devcenter.heroku.com/articles/bucketeer)\nto get an S3 bucket (Bucketeer starts at $5/mo).\n\nTo configure S3 via Bucketeer, leave all the S3 deployment fields blank and deploy your\nGhost blog. Once your blog is deployed, run the following commands from your terminal:\n\n```bash\n# Provision an Amazon S3 bucket\nheroku addons:create bucketeer --app YOURAPPNAME\n\n# Additionally, the bucket's region must be set to formulate correct URLs\n# (Find the \"Region\" in your Bucketeer Add-on's web dashboard.)\nheroku config:set S3_BUCKET_REGION=us-east-1 --app YOURAPPNAME\n```\n\n### How this works\n\nThis repository is a [Node.js](https://nodejs.org) web application that specifies [Ghost as a dependency](https://docs.ghost.org/v1.0.0/docs/using-ghost-as-an-npm-module), and makes a deploy button available.\n\n  * Ghost and Casper theme versions are declared in the Node app's [`package.json`](package.json)\n  * Scales across processor cores in larger dynos via [Node cluster API](https://nodejs.org/dist/latest-v6.x/docs/api/cluster.html)\n\n## Updating source code\n\nOptionally after deployment, to push Ghost upgrades or work with source code, clone this repo (or a fork) and connect it with the Heroku app:\n\n```bash\ngit clone https://github.com/cobyism/ghost-on-heroku\ncd ghost-on-heroku\n\nheroku git:remote -a YOURAPPNAME\nheroku info\n```\n\nThen you can push commits to the Heroku app, triggering new deployments:\n\n```bash\ngit add .\ngit commit -m \"Important changes\"\ngit push heroku master\n```\n\nWatch the app's server-side behavior to see errors and request traffic:\n\n```bash\nheroku logs -t\n```\n\nSee more about [deploying to Heroku with git](https://devcenter.heroku.com/articles/git).\n\n### Upgrading Ghost\n\nOn each deployment, the Heroku Node/npm build process will **auto-upgrade Ghost to the newest 1.x version**. To prevent this behavior, use npm 5+ (or yarn) to create a lockfile.\n\n```bash\nnpm install\ngit add package-lock.json\ngit commit -m 'Lock dependencies'\ngit push heroku master\n```\n\nNow, future deployments will always use the same set of dependencies.\n\nTo update to newer versions:\n\n```\nnpm update\ngit add package-lock.json\ngit commit -m 'Update dependencies'\ngit push heroku master\n```\n\n### Database migrations\n\nRequires MySQL database, available through either of two add-ons:\n  * [JawsDB](https://elements.heroku.com/addons/jawsdb) (deploy default)\n  * [ClearDB](https://elements.heroku.com/addons/cleardb)\n\nNewer versions of Ghost frequently require changes to the database. These changes are automated with a process called **database migrations**.\n\nAfter upgrading Ghost, you may see errors logged like:\n\n\u003e DatabaseIsNotOkError: Migrations are missing. Please run knex-migrator migrate.\n\nTo resolve this error, run the pending migrations and restart to get the app back on-line:\n\n```bash\nheroku run knex-migrator migrate --mgpath node_modules/ghost\nheroku restart\n```\n\nThis can be automated by adding the following line to `Procfile`:\n\n```\nrelease: knex-migrator migrate --mgpath node_modules/ghost\n```\n\n## Problems?\n\nIf you have problems using your instance of Ghost, you should check the [official documentation](http://support.ghost.org/) or open an issue on [the official issue tracker](https://github.com/TryGhost/Ghost/issues). If you discover an issue with the deployment process provided by *this repository*, then [open an issue here](https://github.com/cobyism/ghost-on-heroku).\n\n## License\n\nReleased under the [MIT license](./LICENSE), just like the Ghost project itself.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcobyism%2Fghost-on-heroku","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcobyism%2Fghost-on-heroku","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcobyism%2Fghost-on-heroku/lists"}