{"id":31287885,"url":"https://github.com/plark-inc/hostship","last_synced_at":"2025-09-24T11:29:10.882Z","repository":{"id":316114467,"uuid":"1061377715","full_name":"plark-inc/hostship","owner":"plark-inc","description":"Open-Source, Lightweight PaaS for Self-hosting — Alternative to Dokku","archived":false,"fork":false,"pushed_at":"2025-09-22T18:00:04.000Z","size":32,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-22T20:11:29.446Z","etag":null,"topics":["caprover","containers","deployment","docker","dokku","heroku","paas","self-hosted","selfhosted"],"latest_commit_sha":null,"homepage":"","language":"Go","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/plark-inc.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-21T19:34:53.000Z","updated_at":"2025-09-22T18:00:08.000Z","dependencies_parsed_at":"2025-09-22T20:11:32.315Z","dependency_job_id":"03f6b5da-1b7f-4e3e-8c97-51b9a1adaab2","html_url":"https://github.com/plark-inc/hostship","commit_stats":null,"previous_names":["plark-inc/hostship"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/plark-inc/hostship","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plark-inc%2Fhostship","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plark-inc%2Fhostship/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plark-inc%2Fhostship/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plark-inc%2Fhostship/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plark-inc","download_url":"https://codeload.github.com/plark-inc/hostship/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plark-inc%2Fhostship/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276738709,"owners_count":25695964,"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","status":"online","status_checked_at":"2025-09-24T02:00:09.776Z","response_time":97,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["caprover","containers","deployment","docker","dokku","heroku","paas","self-hosted","selfhosted"],"created_at":"2025-09-24T11:29:09.266Z","updated_at":"2025-09-24T11:29:10.867Z","avatar_url":"https://github.com/plark-inc.png","language":"Go","readme":"# Hostship\n\nA Go-based CLI tool to run an application defined in a Docker Compose JSON file. \nIt installs Docker, runs the containers, and exposes an endpoint to update the  compose services on request. \n\nCurious about the motivations behind Hostship? Check out the full story in the blog post: [Why I built Hostship](https://plark.com/hostship-dokku-alternative)\n \n## Prerequisites\n\n* Go 1.24+ installed\n\n## Docker Compose definition \nFirst, define a single compose.json file and upload it to an S3 bucket. When an update is triggered, the CLI fetches the file and overrides the local one.\n\n```json\n{\n  \"x-metadata\": {\n    \"url\": \"https://cli.plark.com/compose.json\",\n    \"version\": \"0.9.8\"\n  },\n  \"services\": {\n    \"app\": {\n      \"image\": \"ghcr.io/myorg/hostship:latest\",\n      \"restart\": \"unless-stopped\",\n      \"environment\": {\n        \"LOG_LEVEL\": \"debug\",\n        \"MAX_CONN\": \"10\"\n      }\n    }\n  }\n}\n```\n\n\n## The CLI\n\n```Shell\nhostship setup \u003ccompose-url\u003e\n```\n\n- Installs Docker (if missing).\n- Downloads compose.json\n- Writes a `.env` that includes an DEPLOY_URL (ex: `DEPLOY_URL=http://172.17.0.1:8080/update/\u003cKEY\u003e`). Hitting this endpoint will update your compose.json file to the latest version.\n\n\n```Shell\nhostship start\n```\n- Starts the service\n\n```Shell\nhostship hotreload\n```\n- Runs the HTTP listener to trigger updates.\n- The server listener validates the key before updating.\n\n```Shell\nhostship systemd install\n```\n- To ensure the service listener runs in the background and persists across reboots, this configures a systemd service.\n\n## Usage\n```bash\n# Show help\nhostship -h\n\n# Print the version\nhostship -v\n\n# Run setup with a compose file\nhostship setup https://example.com/compose.json\n\n# Start the container\nhostship start\n\n# Dry-run\nhostship start --dry-run\n\n# Verbose logging\nhostship start --verbose\n\n# Hot-reload service listener (hidden command)\nhostship hotreload --verbose\n\n# Installs the hotreload as a systems service\nhostship systemd install\n\n# Removes the systemd service\nhostship systemd remove\n\n# View live logs of your service\nhostship logs caddy\n```\n\n\n## Installing the CLI\n\nA shell script is provided to download the latest CLI and installs `hostship` binary to `/usr/local/bin`. \n\n```bash\nbash \u003c(curl -fsSL https://cli.hostship.com/install.sh)\n```\n\nOnce installed, you can run `hostship update` at any time to update the CLI.\n\n## Releasing\n\nThis project uses [goreleaser](https://goreleaser.com/) to build binaries for Linux and upload them to an S3 bucket.\n\n1. Install goreleaser [installation-guide](https://goreleaser.com/install/#npm).\n2. Create a .env file and at minimum set `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` for an IAM user with write access to the bucket. Optionally set `AWS_REGION`. The S3 endpoint and bucket name are configured in `.goreleaser.yaml`.\n\n3. Run the release command specifying the version number, and the target channel (`prod` or `dev`):\n\n   ```bash\n   ./scripts/release.sh 1.0.0 prod\n   ```\n\nGoReleaser uploads each release to either the `prod/` or `dev/` directory along with a `metadata.json` file that the `hostship update` command reads to determine the newest version.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplark-inc%2Fhostship","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplark-inc%2Fhostship","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplark-inc%2Fhostship/lists"}