{"id":49898090,"url":"https://github.com/parisikosto/vps-stack-mate","last_synced_at":"2026-05-16T01:36:20.775Z","repository":{"id":356623385,"uuid":"1233340213","full_name":"parisikosto/vps-stack-mate","owner":"parisikosto","description":"A Bash CLI for deploying Docker Compose services on a VPS with NGINX reverse proxy and automatic Let's Encrypt SSL","archived":false,"fork":false,"pushed_at":"2026-05-08T22:03:19.000Z","size":2,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-09T00:12:05.236Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"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/parisikosto.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":"2026-05-08T21:17:51.000Z","updated_at":"2026-05-08T22:03:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/parisikosto/vps-stack-mate","commit_stats":null,"previous_names":["parisikosto/vps-stack-mate"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/parisikosto/vps-stack-mate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parisikosto%2Fvps-stack-mate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parisikosto%2Fvps-stack-mate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parisikosto%2Fvps-stack-mate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parisikosto%2Fvps-stack-mate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/parisikosto","download_url":"https://codeload.github.com/parisikosto/vps-stack-mate/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parisikosto%2Fvps-stack-mate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33087028,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T20:25:35.270Z","status":"ssl_error","status_checked_at":"2026-05-15T20:25:34.732Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2026-05-16T01:36:20.108Z","updated_at":"2026-05-16T01:36:20.765Z","avatar_url":"https://github.com/parisikosto.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# vps-stack-mate\n\n\u003e A Bash CLI for deploying Docker Compose services on a VPS with NGINX reverse proxy and automatic Let's Encrypt SSL\n\n## Contents\n\n- [Getting Started](#getting-started)\n  - [Clone the repository](#clone-the-repository)\n  - [Make scripts executable](#make-scripts-executable)\n  - [Generate the configuration files](#generate-the-configuration-files)\n  - [Deploy the stack](#deploy-the-stack)\n- [Adding services and domains](#adding-services-and-domains)\n- [Commands](#commands)\n- [License](#license)\n- [Support](#support)\n\nWith just a few commands you'll have NGINX, SSL certificates, and your Docker services up and running on your VPS.\n\n---\n\n## Getting Started\n\n### Clone the repository\n\nClone this repository on your VPS:\n\n```sh\ngit clone git@github.com:parisikosto/vps-stack-mate.git\ncd vps-stack-mate\n```\n\n### Make scripts executable\n\n```sh\nchmod +x mate.sh \u0026\u0026 chmod -R +x scripts/\n```\n\n### Generate the configuration files\n\n```sh\n./mate.sh generate-config-files\n```\n\nThis creates two files:\n\n- `.env` — service names and Certbot settings. You will be asked for your email address (used for SSL certificate expiry notifications).\n- `domains.json` — the list of domains to deploy. Edit it with your real domains before deploying.\n\n```sh\n# Edit domains.json with your real domains\nnano domains.json\n\n# Format: a JSON array of domain strings\n# [\"yourdomain.com\", \"api.yourdomain.com\"]\n```\n\n\u003e **Before deploying**, make sure your domains have an A record pointing to your VPS IP. Let's Encrypt needs to reach your server on port 80 to verify ownership.\n\n### Deploy the stack\n\n```sh\nsudo ./mate.sh deploy-stack\n```\n\nThis will:\n\n1. Start the NGINX and Certbot containers\n2. Provision a Let's Encrypt SSL certificate for each domain\n3. Write the NGINX configs and reload NGINX\n\n---\n\n## Adding services and domains\n\n### Add a new service\n\nCreate a `docker-compose.override.yml` file in the repo root. Docker Compose automatically merges it with `docker-compose.yml` — no need to edit the base file.\n\n```yaml\nservices:\n  my-service:\n    container_name: my-service\n    image: my-image:latest\n    restart: unless-stopped\n```\n\n### Add a custom nginx config\n\nFor each domain that should proxy to a service, create a file in `nginx/conf/` named after the domain:\n\n```\nnginx/conf/yourdomain.com.conf\n```\n\nExample with `proxy_pass`:\n\n```nginx\nserver {\n    listen 80;\n    server_name yourdomain.com;\n    server_tokens off;\n\n    location /.well-known/acme-challenge/ {\n        root /var/www/certbot;\n    }\n\n    location / {\n        return 301 https://$host$request_uri;\n    }\n}\n\nserver {\n    listen 443 ssl;\n    server_name yourdomain.com;\n    server_tokens off;\n\n    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;\n    include /etc/letsencrypt/options-ssl-nginx.conf;\n    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;\n\n    location / {\n        proxy_pass http://my-service/;\n    }\n}\n```\n\nIf no custom conf file exists for a domain, the default template is used (serves static files).\n\n### Reload after changes\n\n| Situation                        | Command                         |\n| -------------------------------- | ------------------------------- |\n| New domain that needs SSL        | `sudo ./mate.sh deploy-domains` |\n| Changed an nginx conf file       | `sudo ./mate.sh reload-domains` |\n| Updated a Docker image           | `./mate.sh reload-service`      |\n| Added a new service + new domain | `sudo ./mate.sh reload-stack`   |\n| Everything from scratch          | `sudo ./mate.sh deploy-stack`   |\n\n---\n\n## Commands\n\n| Command                           | Description                                                          |\n| --------------------------------- | -------------------------------------------------------------------- |\n| `./mate.sh generate-env-file`     | Generate the `.env` file                                             |\n| `./mate.sh generate-domains-file` | Generate the `domains.json` file                                     |\n| `./mate.sh generate-config-files` | Generate both config files at once                                   |\n| `sudo ./mate.sh deploy-domains`   | Provision SSL certs and write nginx configs                          |\n| `sudo ./mate.sh deploy-services`  | Start the Docker Compose stack                                       |\n| `sudo ./mate.sh deploy-stack`     | Full deploy: services + domains                                      |\n| `sudo ./mate.sh reload-domains`   | Rebuild nginx configs and restart NGINX                              |\n| `./mate.sh reload-service`        | Pull and recreate a single service                                   |\n| `sudo ./mate.sh reload-stack`     | Redeploy all services and reload domains                             |\n| `./mate.sh clean-stack`           | Remove generated files (certbot/, nginx/conf.d/, .env, domains.json) |\n| `./mate.sh --help`                | Show the help message                                                |\n\n---\n\n## License\n\nThis repository is licensed under the [MIT License](https://opensource.org/licenses/MIT).\n\n## Support\n\nFor support and questions, please open an issue in the repository or contact the author directly.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparisikosto%2Fvps-stack-mate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparisikosto%2Fvps-stack-mate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparisikosto%2Fvps-stack-mate/lists"}