{"id":16024281,"url":"https://github.com/axelson/vps","last_synced_at":"2025-08-12T02:05:18.595Z","repository":{"id":66429097,"uuid":"399288771","full_name":"axelson/vps","owner":"axelson","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-19T06:11:45.000Z","size":174,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-08-01T21:28:48.443Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/axelson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2021-08-24T00:47:02.000Z","updated_at":"2025-06-16T00:44:27.000Z","dependencies_parsed_at":"2024-09-15T04:38:30.895Z","dependency_job_id":"b81fa14a-e4e9-4452-97c3-7a6dc2b3c47d","html_url":"https://github.com/axelson/vps","commit_stats":{"total_commits":67,"total_committers":1,"mean_commits":67.0,"dds":0.0,"last_synced_commit":"3e0c5a7c1280cc1600852c8ada9edbc6a83fa0ab"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/axelson/vps","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axelson%2Fvps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axelson%2Fvps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axelson%2Fvps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axelson%2Fvps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/axelson","download_url":"https://codeload.github.com/axelson/vps/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axelson%2Fvps/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269987123,"owners_count":24508176,"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-08-12T02:00:09.011Z","response_time":80,"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":[],"created_at":"2024-10-08T19:06:25.334Z","updated_at":"2025-08-12T02:05:18.545Z","avatar_url":"https://github.com/axelson.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VPS\n\nThis Elixir project is a meta-project that ties together 4 different Phoenix\napplications and runs them all on a single instance of the BEAM that is running\n[Nerves](https://www.nerves-project.org) on a\n[Vultr](https://www.vultr.com/?ref=8764184) (affiliate link) VM.\n\nIt powers the following Phoenix sites:\n- https://depviz.jasonaxelson.com ([git repo](https://github.com/axelson/dep_viz))\n- https://makeuplive.jasonaxelson.com ([git repo](https://github.com/axelson/makeup_live_format/))\n- https://sketch.jasonaxelson.com ([git repo](https://github.com/axelson/sketchpad/))\n- https://jamroom.jasonaxelson.com ([git repo](https://github.com/axelson/jamroom/))\n\nI spoke about this at CodeBEAM America 2022: https://codebeamamerica.com/participants/Jason-axelson/\n\nAt this time the video is not available, but the slides are available at: https://jasonaxelson.com/talks/codebeam2022\n\n# How does it work?\n\nThe base system runs on Vultr via\n[nerves_system_vultr](https://github.com/nerves-project/nerves_system_vultr).\n[MainProxy](https://github.com/Main-Proxy/main_proxy) allows for multiple\nPhoenix applications to run on a single BEAM instance on the same port (443 in\nthis case). The domain name on the incoming request is what ties a request to a\nspecific Phoenix Endpoint.\n\nNote: I'm currently using my own branch, but I plan to re-integrate that into\nmain_proxy https://github.com/axelson/main_proxy/tree/flexiblity-1\n\n[Site Encrypt](https://github.com/sasa1977/site_encrypt) provides automated\nhttps certificate management via LetsEncrypt.\n\nIt's important to me to not store secrets inside the repository so I use a\nsimple `Config.Provider` to load `/data/.target.secret.exs` at runtime. I manage\nthat file on the VM so I can deploy from multiple computers.\n\n[SSHSubsystemFwup](https://github.com/nerves-project/ssh_subsystem_fwup) allows\nfor easy deploys over SSH with a simple `mix upload` command.\n\n## Why Vultr\n\nHonestly it's primarily because\n[nerves_system_vultr](https://github.com/nerves-project/nerves_system_vultr)\nexists and is the only maintained way to run a nerves instance on a cloud\nprovider. But I have found Vultr to be a good and cost-effective host for my\nhobby projects.\n\n# Running locally\n\nRun locally with:\n\n``` sh\nmix deps.get\niex -S mix phx.server\n```\n\nThen add the following lines to your `/etc/hosts` file:\n\n```\n127.0.0.1 depviz.localhost\n127.0.0.1 makeuplive.localhost\n127.0.0.1 sketch.localhost\n127.0.0.1 jamroom.localhost\n```\n\nThen you can open the following in a web browser:\n- http://depviz.localhost:4102\n- http://makeuplive.localhost:4102\n- http://sketch.localhost:4102\n- http://jamroom.localhost:4102\n\nNote: you can change the port away from the default of 4102 by setting `config\n:main_proxy, http: [:inet6, port: \u003ca new port\u003e]`\n\nIn your `~/.ssh/config` file I recommend setting:\n\n``` ssh-config\nHost vultr\nHostName \u003cyour-vultr-server-ip-address\u003e\n```\n\nMaybe try this locally (nginx SSL passthrough)\nhttps://sxi.io/how-to-configure-nginx-ssl-tls-passthrough-with-tcp-load-balancing/\n\n# Deployment\n\nSee the [Development instructions](./DEVELOPMENT.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxelson%2Fvps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxelson%2Fvps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxelson%2Fvps/lists"}