{"id":30092774,"url":"https://github.com/thisguymartin/self-hosted-dev-platform","last_synced_at":"2026-05-14T23:37:22.365Z","repository":{"id":306685954,"uuid":"1026918617","full_name":"thisguymartin/self-hosted-dev-platform","owner":"thisguymartin","description":"My Portainer setup with Docker services, monitoring and databases - ready in 2 minutes! No domain needed.","archived":false,"fork":false,"pushed_at":"2025-07-27T02:19:44.000Z","size":46,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-27T03:44:36.861Z","etag":null,"topics":["docker-compose","portainer","selfhosted"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/thisguymartin.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,"zenodo":null}},"created_at":"2025-07-26T22:44:00.000Z","updated_at":"2025-07-27T02:21:49.000Z","dependencies_parsed_at":"2025-07-27T03:54:41.511Z","dependency_job_id":null,"html_url":"https://github.com/thisguymartin/self-hosted-dev-platform","commit_stats":null,"previous_names":["thisguymartin/self-hosted-dev-platform"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/thisguymartin/self-hosted-dev-platform","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisguymartin%2Fself-hosted-dev-platform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisguymartin%2Fself-hosted-dev-platform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisguymartin%2Fself-hosted-dev-platform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisguymartin%2Fself-hosted-dev-platform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thisguymartin","download_url":"https://codeload.github.com/thisguymartin/self-hosted-dev-platform/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisguymartin%2Fself-hosted-dev-platform/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269548500,"owners_count":24436113,"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-09T02:00:10.424Z","response_time":111,"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":["docker-compose","portainer","selfhosted"],"created_at":"2025-08-09T08:04:40.139Z","updated_at":"2026-05-14T23:37:17.341Z","avatar_url":"https://github.com/thisguymartin.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Portainer Setup - Self-Hosted Development Platform\n\nMy Portainer setup with Docker services, monitoring and databases - ready in 2 minutes! No domain needed.\n\n## 🚀 Quick Start\n\n### 1. Clone \u0026 Setup\n\n```bash\ngit clone \u003cyour-repo-url\u003e\ncd self-hosted-dev-platform\n\n# Run setup\n./scripts/setup.sh\n```\n\nThat's it! Your platform is running.\n\n## 📦 What's Included\n\n### Core Services (Main Setup)\n\n| Service | URL | Purpose |\n|---------|-----|---------|\n| **Traefik** | `http://YOUR-IP:8888` | Reverse proxy dashboard |\n| **Portainer** | `http://YOUR-IP:9000` | Docker management UI |\n\n### Additional Services (Template)\n\nThe `docker-compose.template.yml` file includes additional services you can add:\n\n| Service | Default Port | Purpose |\n|---------|-------------|------|\n| **Uptime Kuma** | `:3001` | Service monitoring |\n| **Adminer** | `:8080` | Database management UI |\n| **PostgreSQL** | `:5432` | PostgreSQL database |\n| **MySQL** | `:3306` | MySQL database |\n| **GitLab CE** | `:80`, `:2222` (SSH) | Git repository manager |\n| **Redis** | `:6379` | In-memory data store |\n| **Elasticsearch** | `:9200` | Search engine |\n| **Kibana** | `:5601` | Elasticsearch dashboard |\n| **Nextcloud** | `:80` | File hosting |\n\nReplace `YOUR-IP` with:\n- `localhost` if accessing from the same machine\n- Your server's IP address if accessing remotely\n\n## 🧪 Adding Additional Services\n\n### Using the Template\n\nThe project includes a `docker-compose.template.yml` with many useful services. To add services:\n\n1. **Option 1: Copy services to your main compose file**\n   ```bash\n   # Copy the service definition you need from docker-compose.template.yml\n   # to your docker-compose.yml\n   ```\n\n2. **Option 2: Create an override file**\n   ```bash\n   # Create docker-compose.override.yml with the services you want\n   # Docker Compose will automatically merge both files\n   ```\n\n3. **Option 3: Run template directly**\n   ```bash\n   # For testing purposes\n   docker compose -f docker-compose.yml -f docker-compose.template.yml up -d\n   ```\n\n### Example: Add Uptime Kuma\n\n1. Copy the Uptime Kuma service from `docker-compose.template.yml`\n2. Add it to your `docker-compose.yml` or create a `docker-compose.override.yml`\n3. Run `docker compose up -d`\n4. Access at `http://YOUR-IP:3001`\n\n## 🛠️ Common Commands\n\n```bash\nmake status    # Check service health\nmake logs      # View logs\nmake stop      # Stop everything\nmake start     # Start everything\nmake health    # Quick health check\n```\n\n## 🔧 Database Access\n\n### Default Credentials\n\nWhen using services from the template, edit these in `.env` before first run:\n\n**PostgreSQL:**\n- User: `postgres` (or set `POSTGRES_USER`)\n- Password: `changeme` (set `POSTGRES_PASSWORD`)\n- Database: `myapp` (or set `POSTGRES_DB`)\n- Port: `5432`\n\n**MySQL:**\n- User: `mysql` (or set `MYSQL_USER`)\n- Password: `changeme` (set `MYSQL_PASSWORD`)\n- Database: `myapp` (or set `MYSQL_DATABASE`)\n- Port: `3306`\n\n### Connection Examples\n\n```bash\n# PostgreSQL\npsql -h YOUR-IP -U devuser -d devdb\n\n# MySQL\nmysql -h YOUR-IP -u devuser -p devdb\n\n# From Docker containers\n# Use hostnames: postgres or mysql\n```\n\n### From Adminer UI (if added from template)\n\n1. Visit `http://YOUR-IP:8080`\n2. Select system: PostgreSQL or MySQL\n3. Server: `postgres` or `mysql`\n4. Use credentials from `.env`\n\n## 🐛 Troubleshooting\n\n### Can't access services?\n\n```bash\n# Check if services are running\nmake status\n\n# Check logs\nmake logs\n\n# Check specific service\ndocker logs portainer_main\n```\n\n### Firewall blocking access?\n\n```bash\n# Allow ports (Ubuntu/Debian)\nsudo ufw allow 80    # HTTP\nsudo ufw allow 443   # HTTPS\nsudo ufw allow 8888  # Traefik dashboard\nsudo ufw allow 9000  # Portainer\n\n# If using services from template:\nsudo ufw allow 3001  # Uptime Kuma\nsudo ufw allow 8080  # Adminer\nsudo ufw allow 5432  # PostgreSQL\nsudo ufw allow 3306  # MySQL\n```\n\n### Port already in use?\n\nEdit `docker-compose.yml` and change the port mapping:\n```yaml\nports:\n  - \"9001:9000\"  # Change 9001 to any free port\n```\n\n## 📝 Tips\n\n- **Change passwords** in `.env` before deploying\n- **Use the template file** (`docker-compose.template.yml`) to see available services\n- **Keep core services minimal** - only Traefik and Portainer in main setup\n- **Use Portainer** at `http://YOUR-IP:9000` to manage containers visually\n- **Add monitoring** like Uptime Kuma from the template when needed\n\n## 🚀 Alternative: Pulumi Infrastructure as Code\n\n### Work in Progress: Pulumi v2 Setup\n\nWe're building a Pulumi-based alternative to Docker Compose in the `pulumiv2/` directory. This provides:\n\n- **Type-safe infrastructure** with TypeScript/Python/Go\n- **State management** and rollback capabilities  \n- **Better secrets handling** with encrypted state\n- **Multi-environment support** with stacks\n- **Preview changes** before applying\n\n[Learn more about the Pulumi setup →](./pulumiv2/README.md)\n\n## 🤝 Need Help?\n\n1. Check service logs: `docker logs \u003ccontainer_name\u003e`\n2. Verify ports aren't blocked by firewall\n3. Ensure Docker is running: `docker ps`\n4. Create an issue if stuck!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisguymartin%2Fself-hosted-dev-platform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthisguymartin%2Fself-hosted-dev-platform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisguymartin%2Fself-hosted-dev-platform/lists"}