{"id":19383971,"url":"https://github.com/leandro-bertoluzzi/remote-cnc-api","last_synced_at":"2025-06-18T23:36:05.620Z","repository":{"id":159504431,"uuid":"631422650","full_name":"Leandro-Bertoluzzi/remote-cnc-api","owner":"Leandro-Bertoluzzi","description":"Web API to monitor and manage a GRBL-based CNC machine","archived":false,"fork":false,"pushed_at":"2024-05-22T22:07:21.000Z","size":122,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-05-22T23:24:57.967Z","etag":null,"topics":["alembic","cnc-controller","docker","docker-compose","flask","mysql-database","python","raspberry-pi"],"latest_commit_sha":null,"homepage":"","language":"Python","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/Leandro-Bertoluzzi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2023-04-23T01:17:57.000Z","updated_at":"2024-05-22T23:24:58.040Z","dependencies_parsed_at":null,"dependency_job_id":"fee19ac2-b20e-473b-b2ce-71c713f94cfe","html_url":"https://github.com/Leandro-Bertoluzzi/remote-cnc-api","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/Leandro-Bertoluzzi%2Fremote-cnc-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Leandro-Bertoluzzi%2Fremote-cnc-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Leandro-Bertoluzzi%2Fremote-cnc-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Leandro-Bertoluzzi%2Fremote-cnc-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Leandro-Bertoluzzi","download_url":"https://codeload.github.com/Leandro-Bertoluzzi/remote-cnc-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240521037,"owners_count":19814694,"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":["alembic","cnc-controller","docker","docker-compose","flask","mysql-database","python","raspberry-pi"],"created_at":"2024-11-10T09:28:33.142Z","updated_at":"2025-02-24T17:20:30.212Z","avatar_url":"https://github.com/Leandro-Bertoluzzi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eRemote CNC API\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Github top language\" src=\"https://img.shields.io/github/languages/top/Leandro-Bertoluzzi/remote-cnc-api?color=56BEB8\"\u003e\n\n  \u003cimg alt=\"Github language count\" src=\"https://img.shields.io/github/languages/count/Leandro-Bertoluzzi/remote-cnc-api?color=56BEB8\"\u003e\n\n  \u003cimg alt=\"Repository size\" src=\"https://img.shields.io/github/repo-size/Leandro-Bertoluzzi/remote-cnc-api?color=56BEB8\"\u003e\n\n  \u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/Leandro-Bertoluzzi/remote-cnc-api?color=56BEB8\"\u003e\n\u003c/p\u003e\n\n\u003c!-- Status --\u003e\n\n\u003ch4 align=\"center\"\u003e\n\t🚧 Remote CNC API 🚀 Under construction...  🚧\n\u003c/h4\u003e\n\n\u003chr\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#dart-about\"\u003eAbout\u003c/a\u003e \u0026#xa0; | \u0026#xa0;\n  \u003ca href=\"#sparkles-features\"\u003eFeatures\u003c/a\u003e \u0026#xa0; | \u0026#xa0;\n  \u003ca href=\"#rocket-technologies\"\u003eTechnologies\u003c/a\u003e \u0026#xa0; | \u0026#xa0;\n  \u003ca href=\"#white_check_mark-requirements\"\u003eRequirements\u003c/a\u003e \u0026#xa0; | \u0026#xa0;\n  \u003ca href=\"#checkered_flag-starting\"\u003eStarting\u003c/a\u003e \u0026#xa0; | \u0026#xa0;\n  \u003ca href=\"#rocket-access-outside-local-intranet\"\u003eAccess outside local intranet\u003c/a\u003e \u0026#xa0; | \u0026#xa0;\n  \u003ca href=\"#memo-license\"\u003eLicense\u003c/a\u003e \u0026#xa0; | \u0026#xa0;\n  \u003ca href=\"https://github.com/Leandro-Bertoluzzi\" target=\"_blank\"\u003eAuthors\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n## :warning: Notice\n**ARCHIVED** -- This repo is not longer being maintained and its content was moved [here](https://github.com/Leandro-Bertoluzzi/remote-cnc).\n\n## :dart: About\n\nAPI to monitor and manage an Arduino-based CNC machine.\n\n## :sparkles: Features\n\n:heavy_check_mark: G-code files management\\\n:heavy_check_mark: Real time monitoring of CNC status\\\n:heavy_check_mark: Tasks management and scheduling\n\n## :rocket: Technologies\n\nThe following tools were used in this project:\n\n-   [Python](https://www.python.org/)\n-   [FastAPI](https://fastapi.tiangolo.com/)\n-   [PostgreSQL](https://www.postgresql.org/)\n-   [SQLAlchemy](https://www.sqlalchemy.org/) and [Alembic](https://alembic.sqlalchemy.org/en/latest/)\n-   [Celery](https://docs.celeryq.dev/en/stable/)\n-   [Adminer](https://www.adminer.org//)\n-   [Redis](https://redis.io/)\n-   [Docker](https://www.docker.com/)\n\n## :white_check_mark: Requirements\n\nBefore starting :checkered_flag:, you need to have [Python](https://www.python.org/) installed.\n\n## :checkered_flag: Development\n\nSee [Development](./docs/development.md) docs.\n\n## :checkered_flag: Installation\n\nSee [Server setup](./docs/server-setup.md) docs.\n\n## :rocket: Deploy changes\n\nSee [Deployment](./docs/deployment.md) docs.\n\n## :rocket: Access outside local intranet\n\nAs the API will almost certainly be hosted in a private network, behind a NAT router, we need a way to expose it to the outside world, in order for the cloud-hosted web app (or any external user) to access it. To do that, maybe the easiest option is to use a tunneling service like [Ngrok](https://ngrok.com).\n\n```bash\n$ ngrok http 8000 --scheme http,https\n```\n\nThe command above will open a secure tunnel via one of the Ngrok servers and we'll be given a randomly generated URL (in Ngrok terminology, *ephemeral domain*), which we shall set as environment variable in our remote app server. Take into account that you will have to update your app server's environment each time you init the Ngrok tunnel.\n\nAn option to circumvent that problem, is to set up a *static domain* in your [Ngrok dashboard](https://dashboard.ngrok.com/cloud-edge/domains). You can read more about Ngrok domains in the [docs](https://ngrok.com/docs/network-edge/domains-and-tcp-addresses/#domains).\n\n```bash\n$ ngrok http --domain={{my-static-domain}} 8000 --scheme http,https\n```\n\n**NOTE:** We recommend using a static domain for production, and ephemeral domains to test the connection between the web app and the API in development environment/branches.\n\n### Docker\n\nWe provide an optional service for `Ngrok` to run with `docker compose`. To run it, you must allow the services with [profile](https://docs.docker.com/compose/profiles/) *ngrok* when running `docker compose up`.\n\n```bash\n$ docker compose --profile=ngrok up -d\n```\n\nTo know the ephemeral URL generated by Ngrok, you can access [Ngrok dashboard](http://localhost:4040/status) in your browser or, if you are using Linux, run the following command:\n\n```bash\n$ curl -s localhost:4040/api/tunnels | jq -r '.tunnels[0].public_url'\n```\n\n## :memo: License\n\nThis project is under license from MIT. For more details, see the [LICENSE](LICENSE.md) file.\n\n## :writing_hand: Authors\n\nMade with :heart: by \u003ca href=\"https://github.com/Leandro-Bertoluzzi\" target=\"_blank\"\u003eLeandro Bertoluzzi\u003c/a\u003e and Martín Sellart.\n\n\u003ca href=\"#top\"\u003eBack to top\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleandro-bertoluzzi%2Fremote-cnc-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleandro-bertoluzzi%2Fremote-cnc-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleandro-bertoluzzi%2Fremote-cnc-api/lists"}