{"id":26533651,"url":"https://github.com/hasirciogli/xdatabase-proxy","last_synced_at":"2025-03-21T19:19:18.582Z","repository":{"id":282639231,"uuid":"949217446","full_name":"hasirciogli/xdatabase-proxy","owner":"hasirciogli","description":"A high-performance database proxy service built with Go, designed for Kubernetes environments. Provides secure and scalable database connection management with support for multiple database types.","archived":false,"fork":false,"pushed_at":"2025-03-16T00:11:57.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-16T00:24:56.053Z","etag":null,"topics":["database","database-proxy","golang","k8s","kubernetes","microservices"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hasirciogli.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2025-03-15T23:51:25.000Z","updated_at":"2025-03-16T00:20:28.000Z","dependencies_parsed_at":"2025-03-16T00:36:20.840Z","dependency_job_id":null,"html_url":"https://github.com/hasirciogli/xdatabase-proxy","commit_stats":null,"previous_names":["hasirciogli/xdatabase-proxy"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasirciogli%2Fxdatabase-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasirciogli%2Fxdatabase-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasirciogli%2Fxdatabase-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasirciogli%2Fxdatabase-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hasirciogli","download_url":"https://codeload.github.com/hasirciogli/xdatabase-proxy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244852683,"owners_count":20521160,"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":["database","database-proxy","golang","k8s","kubernetes","microservices"],"created_at":"2025-03-21T19:19:17.950Z","updated_at":"2025-03-21T19:19:18.550Z","avatar_url":"https://github.com/hasirciogli.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# XDatabase Proxy\n\nXDatabase Proxy is a smart proxy solution for your database deployments running in Kubernetes environments. This proxy is designed to manage and route connections between different database deployments.\n\n## Features\n\n- 🔄 Dynamic service discovery and routing\n- 🎯 Deployment-based routing\n- 🌊 Connection pooling support (via pgbouncer)\n- 🚀 Kubernetes integration\n- 📊 Smart load balancing\n- 🔍 Real-time service monitoring\n- 🔀 Multi-node cluster support (via pgpool-II)\n\n## Supported Databases\n\nCurrently, the following databases are supported:\n\n- PostgreSQL (Full Support)\n- MySQL (In Development)\n- MongoDB (In Development)\n\n## Requirements\n\n- Go 1.19 or higher\n- Kubernetes cluster or local test environment\n- kubectl configuration\n\n## Installation\n\n```bash\n# Clone the project\ngit clone https://github.com/hasirciogli/xdatabase-proxy.git\ncd xdatabase-proxy\n\n# Install dependencies\ngo mod download\n\n# Build the project\ngo build -o xdatabase-proxy\n```\n\n## Configuration\n\n### Environment Variables\n\n| Variable     | Description             | Default Value |\n| ------------ | ----------------------- | ------------- |\n| KUBE_CONTEXT | Kubernetes context name | local-test    |\n\n### Kubernetes Labels\n\nThe following labels are required for the proxy to identify database services:\n\n| Label                         | Description                                                  | Example Value   |\n| ----------------------------- | ------------------------------------------------------------ | --------------- |\n| xdatabase-proxy-enabled       | Whether the service should be managed by the proxy           | true            |\n| xdatabase-proxy-deployment-id | Database deployment ID                                       | db-deployment-1 |\n| xdatabase-proxy-database-type | Database type                                                | postgresql      |\n| xdatabase-proxy-pooled        | Whether this is a pgbouncer service (for connection pooling) | true/false      |\n| xdatabase-proxy-destination-port | Target port for the database connection                   | 5432            |\n\n## Connection Scenarios\n\nThe proxy supports three connection scenarios:\n\n1. **Direct Connection**\n   - Client → PostgreSQL\n   - Simple, direct connection to a single PostgreSQL instance\n   - Use when connection pooling is not needed\n\n2. **Connection Pooling**\n   - Client → PgBouncer → PostgreSQL\n   - Efficient connection management\n   - Recommended for applications with many connections\n\n3. **Multi-Node Cluster**\n   - Client → PgBouncer → Pgpool-II → [Master + Follower Nodes]\n   - High availability and load balancing\n   - Required for multi-node PostgreSQL clusters\n\n## Usage\n\n### Service Definition Examples\n\n#### 1. Direct PostgreSQL Service\n```yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: postgres-db\n  labels:\n    xdatabase-proxy-enabled: \"true\"\n    xdatabase-proxy-deployment-id: \"db-deployment-1\"\n    xdatabase-proxy-database-type: \"postgresql\"\n    xdatabase-proxy-pooled: \"false\"  # Direct PostgreSQL connection\n    xdatabase-proxy-destination-port: \"5432\"  # Target PostgreSQL port\nspec:\n  ports:\n    - port: 5432\n      name: postgresql\n```\n\n#### 2. PgBouncer Service (Connection Pooling)\n```yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: pgbouncer-pool\n  labels:\n    xdatabase-proxy-enabled: \"true\"\n    xdatabase-proxy-deployment-id: \"db-deployment-1\"\n    xdatabase-proxy-database-type: \"postgresql\"\n    xdatabase-proxy-pooled: \"true\"  # This indicates it's a pgbouncer service\n    xdatabase-proxy-destination-port: \"6432\"  # Target PgBouncer port\nspec:\n  ports:\n    - port: 6432  # Common pgbouncer port\n      name: postgresql\n```\n\n#### 3. Multi-Node Cluster Setup\n```yaml\n# PgBouncer Service (Required for multi-node)\napiVersion: v1\nkind: Service\nmetadata:\n  name: pgbouncer-pool\n  labels:\n    xdatabase-proxy-enabled: \"true\"\n    xdatabase-proxy-deployment-id: \"db-deployment-1\"\n    xdatabase-proxy-database-type: \"postgresql\"\n    xdatabase-proxy-pooled: \"true\"  # Required for multi-node setup\nspec:\n  ports:\n    - port: 6432\n      name: postgresql\n---\n# Pgpool-II Service\napiVersion: v1\nkind: Service\nmetadata:\n  name: pgpool-cluster\n  labels:\n    xdatabase-proxy-enabled: \"true\"\n    xdatabase-proxy-deployment-id: \"db-deployment-1\"\n    xdatabase-proxy-database-type: \"postgresql\"\n    xdatabase-proxy-pooled: \"true\"  # Must be true for pgpool\nspec:\n  ports:\n    - port: 9999  # Common pgpool port\n      name: postgresql\n```\n\n### Connection String Format\n\n```\npostgresql://username.deployment_id[.pool]@proxy-host:port/dbname\n```\n\nExamples:\n```\n# 1. Direct PostgreSQL Connection\npostgresql://myuser.db-deployment-1@localhost:3001/mydb\n\n# 2. Connection through PgBouncer\npostgresql://myuser.db-deployment-1.pool@localhost:3001/mydb\n\n# 3. Multi-node Cluster Connection (automatically uses PgBouncer → Pgpool-II)\npostgresql://myuser.db-deployment-1.pool@localhost:3001/mydb\n```\n\n## Features and Limitations\n\n- Separate database services for each deployment\n- Automatic load balancing and routing\n- Works with or without connection pooling\n- Real-time service discovery and updates\n- Kubernetes service discovery integration\n\n## Security\n\n- Isolation between deployments\n- Connection parameter validation\n- Secure connection routing\n\n## Contributing\n\n1. Fork it\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Create a Pull Request\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Contact\n\nIf you have any questions or suggestions, please reach out through GitHub Issues.\n\n---\n\n# XDatabase Proxy (Türkçe)\n\nXDatabase Proxy, Kubernetes ortamında çalışan veritabanı deployment'larınız için akıllı bir proxy çözümüdür. Bu proxy, farklı veritabanı deployment'ları arasında bağlantıları yönetmek ve yönlendirmek için tasarlanmıştır.\n\n## Özellikler\n\n- 🔄 Dinamik servis keşfi ve yönlendirme\n- 🎯 Deployment bazlı yönlendirme\n- 🌊 Bağlantı havuzu (connection pooling) desteği\n- 🚀 Kubernetes entegrasyonu\n- 📊 Akıllı yük dengeleme\n- 🔍 Gerçek zamanlı servis izleme\n- 🔀 Çoklu düğüm kümesi desteği (via pgpool-II)\n\n## Desteklenen Veritabanları\n\nŞu anda aşağıdaki veritabanları desteklenmektedir:\n\n- PostgreSQL (Tam Destek)\n- MySQL (Geliştirme Aşamasında)\n- MongoDB (Geliştirme Aşamasında)\n\n## Gereksinimler\n\n- Go 1.19 veya üzeri\n- Kubernetes cluster veya local test ortamı\n- kubectl yapılandırması\n\n## Kurulum\n\n```bash\n# Projeyi klonlayın\ngit clone https://github.com/hasirciogli/xdatabase-proxy.git\ncd xdatabase-proxy\n\n# Bağımlılıkları yükleyin\ngo mod download\n\n# Projeyi derleyin\ngo build -o xdatabase-proxy\n```\n\n## Yapılandırma\n\n### Ortam Değişkenleri\n\n| Değişken     | Açıklama               | Varsayılan Değer |\n| ------------ | ---------------------- | ---------------- |\n| KUBE_CONTEXT | Kubernetes context adı | local-test       |\n\n### Kubernetes Etiketleri\n\nProxy'nin veritabanı servislerini tanıması için aşağıdaki etiketleri kullanmanız gerekmektedir:\n\n| Etiket                        | Açıklama                                                           | Örnek Değer     |\n| ----------------------------- | ------------------------------------------------------------------ | --------------- |\n| xdatabase-proxy-enabled       | Servisin proxy tarafından yönetilip yönetilmeyeceği                | true            |\n| xdatabase-proxy-deployment-id | Veritabanı deployment ID'si                                        | db-deployment-1 |\n| xdatabase-proxy-database-type | Veritabanı tipi                                                    | postgresql      |\n| xdatabase-proxy-pooled        | Bu servisin pgbouncer servisi olup olmadığı (bağlantı havuzu için) | true/false      |\n| xdatabase-proxy-destination-port | Target port for the database connection                   | 5432            |\n\n## Bağlantı Senaryoları\n\nThe proxy supports three connection scenarios:\n\n1. **Direct Connection**\n   - Client → PostgreSQL\n   - Simple, direct connection to a single PostgreSQL instance\n   - Use when connection pooling is not needed\n\n2. **Connection Pooling**\n   - Client → PgBouncer → PostgreSQL\n   - Efficient connection management\n   - Recommended for applications with many connections\n\n3. **Multi-Node Cluster**\n   - Client → PgBouncer → Pgpool-II → [Master + Follower Nodes]\n   - High availability and load balancing\n   - Required for multi-node PostgreSQL clusters\n\n## Kullanım\n\n### Servis Tanımlama Örnekleri\n\n#### 1. Direkt PostgreSQL Servisi\n```yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: postgres-db\n  labels:\n    xdatabase-proxy-enabled: \"true\"\n    xdatabase-proxy-deployment-id: \"db-deployment-1\"\n    xdatabase-proxy-database-type: \"postgresql\"\n    xdatabase-proxy-pooled: \"false\"  # Direkt PostgreSQL bağlantısı\n    xdatabase-proxy-destination-port: \"5432\"  # Target PostgreSQL port\nspec:\n  ports:\n    - port: 5432\n      name: postgresql\n```\n\n#### 2. PgBouncer Servisi (Bağlantı Havuzu)\n```yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: pgbouncer-pool\n  labels:\n    xdatabase-proxy-enabled: \"true\"\n    xdatabase-proxy-deployment-id: \"db-deployment-1\"\n    xdatabase-proxy-database-type: \"postgresql\"\n    xdatabase-proxy-pooled: \"true\"  # PgBouncer servisi olduğunu belirtir\n    xdatabase-proxy-destination-port: \"6432\"  # Target PgBouncer port\nspec:\n  ports:\n    - port: 6432  # Yaygın pgbouncer portu\n      name: postgresql\n```\n\n#### 3. Çoklu Düğüm Küme Kurulumu\n```yaml\n# PgBouncer Servisi (Çoklu düğüm için gerekli)\napiVersion: v1\nkind: Service\nmetadata:\n  name: pgbouncer-pool\n  labels:\n    xdatabase-proxy-enabled: \"true\"\n    xdatabase-proxy-deployment-id: \"db-deployment-1\"\n    xdatabase-proxy-database-type: \"postgresql\"\n    xdatabase-proxy-pooled: \"true\"  # Çoklu düğüm kurulumu için gerekli\nspec:\n  ports:\n    - port: 6432\n      name: postgresql\n---\n# Pgpool-II Servisi\napiVersion: v1\nkind: Service\nmetadata:\n  name: pgpool-cluster\n  labels:\n    xdatabase-proxy-enabled: \"true\"\n    xdatabase-proxy-deployment-id: \"db-deployment-1\"\n    xdatabase-proxy-database-type: \"postgresql\"\n    xdatabase-proxy-pooled: \"true\"  # Pgpool için true olmalı\nspec:\n  ports:\n    - port: 9999  # Yaygın pgpool portu\n      name: postgresql\n```\n\n### Bağlantı Dizesi Formatı\n\n```\npostgresql://username.deployment_id[.pool]@proxy-host:port/dbname\n```\n\nÖrnekler:\n```\n# 1. Direkt PostgreSQL Bağlantısı\npostgresql://myuser.db-deployment-1@localhost:3001/mydb\n\n# 2. PgBouncer Üzerinden Bağlantı\npostgresql://myuser.db-deployment-1.pool@localhost:3001/mydb\n\n# 3. Çoklu Düğüm Küme Bağlantısı (Otomatik olarak PgBouncer → Pgpool-II kullanır)\npostgresql://myuser.db-deployment-1.pool@localhost:3001/mydb\n```\n\n## Özellikler ve Kısıtlamalar\n\n- Her deployment için ayrı veritabanı servisleri desteklenir\n- Otomatik yük dengeleme ve yönlendirme\n- Bağlantı havuzu ile veya havuzsuz çalışabilme\n- Gerçek zamanlı servis keşfi ve güncelleme\n- Kubernetes service discovery entegrasyonu\n\n## Güvenlik\n\n- Deployment'lar arası izolasyon\n- Bağlantı parametrelerinin doğrulanması\n- Güvenli bağlantı yönlendirme\n\n## Katkıda Bulunma\n\n1. Fork edin\n2. Feature branch oluşturun (`git checkout -b feature/amazing-feature`)\n3. Değişikliklerinizi commit edin (`git commit -m 'Add some amazing feature'`)\n4. Branch'inizi push edin (`git push origin feature/amazing-feature`)\n5. Pull Request oluşturun\n\n## Lisans\n\nBu proje MIT lisansı altında lisanslanmıştır. Detaylar için [LICENSE](LICENSE) dosyasına bakın.\n\n## İletişim\n\nEğer herhangi bir sorunuz veya öneriniz varsa, lütfen GitHub Issues üzerinden iletişime geçin.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhasirciogli%2Fxdatabase-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhasirciogli%2Fxdatabase-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhasirciogli%2Fxdatabase-proxy/lists"}