Перейти к основному содержимому

CloudPub SDK для Python и Rust

· 4 мин. чтения

SDK для CloudPub

Рады представить официальные SDK для CloudPub! Теперь вы можете интегрировать функциональность CloudPub прямо в свои приложения на Rust и Python. Больше не нужно запускать отдельный клиент — всё управление туннелями доступно программно.

Зачем нужен SDK?

До сегодняшнего дня CloudPub работал через отдельное приложение — GUI или CLI. Это отлично для ручного управления, но что если вам нужно:

  • Встроить туннели прямо в ваше приложение
  • Динамически управлять доступом к сервисам
  • Программно получать информцию и управлять туннелями

SDK решает все эти задачи элегантно и эффективно.

Python SDK: простота и гибкость

Python SDK идеально подходит для скриптов, автоматизации и интеграции с существующими Python-приложениями.

Установка

pip install cloudpub-python-sdk

Быстрый старт

from cloudpub_python_sdk import Connection, Protocol, Auth

def main():
# Создаём соединение
conn = Connection(
email="user@example.com",
password="password"
)

# Публикуем Django приложение
endpoint = conn.publish(
Protocol.HTTP,
"localhost:8000",
"Django App",
Auth.NONE
)

print(f"✅ Приложение доступно: {endpoint.url}")

# Держим туннель открытым
input("Нажмите Enter для завершения...")

if __name__ == "__main__":
main()

Интеграция с фреймворками

SDK отлично интегрируется с популярными Python фреймворками:

# FastAPI + CloudPub
from fastapi import FastAPI
from cloudpub_python_sdk import Connection, Protocol, Auth
import uvicorn

app = FastAPI()

@app.get("/")
def read_root():
return {"message": "Hello from CloudPub!"}

def publish_app():
conn = Connection(
email="user@example.com",
password="password"
)

endpoint = conn.publish(
Protocol.HTTP,
"localhost:8000",
"FastAPI через CloudPub",
Auth.NONE
)

print(f"API доступен: {endpoint.url}")
return conn

if __name__ == "__main__":
# Запускаем публикацию
publish_app()

# Запускаем FastAPI
uvicorn.run(app, host="localhost", port=8000)

Реальные сценарии использования

1. Временные туннели для тестирования WebHook

// Создаём туннель на время теста
async fn test_webhook() {
let mut conn = Connection::builder()
.credentials("test@example.com", "password")
.build()
.await?;

// Публикуем mock-сервер
let endpoint = conn.publish(
Protocol::Http,
"localhost:9999".to_string(),
Some("Webhook Test".to_string()),
Some(Auth::None),
None, None, None
).await?;

// Тестируем webhook
test_external_service(endpoint.as_url()).await?;

// Автоматически убираем туннель
conn.unpublish(endpoint.guid).await?;
}

2. Динамическое управление доступом

def update_access_rules(service_guid, blocked_ips):
conn = Connection(
email="admin@example.com",
password="secure_password"
)

# Получаем текущий сервис
services = conn.ls()
service = next(s for s in services if s.guid == service_guid)

# Обновляем правила
new_rules = [
{
"name": "Блокировка IP",
"filter": f"ip.src in {{{','.join(blocked_ips)}}}",
"action": "block"
}
]

conn.publish(
service.protocol,
service.local_address,
service.name,
service.auth,
rules=new_rules
)

Rust SDK: cтатическая компиляция и безопасность

Rust SDK построен на той же кодовой базе, что и основной клиент CloudPub. Это позволяет встроить его непосредственно в бинарный файл вашего приложения, статическую типизацию, безопасность и другие преимущества характерный для языка Rust.

Установка

Добавьте в ваш Cargo.toml:

[dependencies]
cloudpub-sdk = "2"
tokio = { version = "1", features = ["full"] }
anyhow = "1"

Простейший пример

use cloudpub_sdk::Connection;
use cloudpub_sdk::protocol::{Protocol, Auth};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Подключаемся к CloudPub
let mut conn = Connection::builder()
.credentials("user@example.com", "password")
.build()
.await?;

// Публикуем локальный веб-сервер
let endpoint = conn.publish(
Protocol::Http,
"localhost:3000".to_string(),
Some("Dev сервер".to_string()),
Some(Auth::None),
None, None, None
).await?;

println!("Сервис доступен по адресу: {}", endpoint.as_url());

// Держим туннель открытым
tokio::signal::ctrl_c().await?;
Ok(())
}

Продвинутые возможности

SDK поддерживает все функции CloudPub:

// Настройка с файлом конфигурации
let mut conn = Connection::builder()
.config_path(Path::new("/etc/cloudpub/config.toml"))
.log_level("debug")
.timeout_secs(30)
.build()
.await?;

// Публикация с контролем доступа
let endpoint = conn.publish(
Protocol::Tcp,
"localhost:22".to_string(),
Some("SSH сервер".to_string()),
Some(Auth::Password("secret123".to_string())),
Some(vec!["192.168.1.0/24".to_string()]), // ACL
None,
Some(vec![
Rule::new(
"Блокировать подозрительные IP".to_string(),
"ip.src in {1.2.3.4, 5.6.7.8}".to_string(),
Action::Block
)
])
).await?;

// Управление туннелями
let tunnes = conn.ls().await?;
for tunnel in tunnels {
println!("Сервис: {} - {}", service.name, service.endpoint);

// Остановка/запуск
tunnel.stop(service.guid.clone()).await?;
tunnel.start(service.guid.clone()).await?;
}

// Остановка и удаление всех сервисов
tunnels.clean().await?;

Документация и примеры

Полная документация и примеры доступны:

Начните прямо сейчас

SDK доступны для установки через стандартные менеджеры пакетов:

# Rust
cargo add cloudpub-sdk

# Python
pip install cloudpub-python-sdk

Оба SDK имеют лицензию Apache 2.0 и доступны с открытым исходным кодом на GitHub.

Что дальше?

Мы активно развиваем SDK и планируем:

  • Node.js SDK — для JavaScript/TypeScript разработчиков
  • Go SDK — для облачных приложений

Пробуйте новые SDK и делитесь обратной связью! Если у вас есть вопросы или предложения, присоединяйтесь к нашей группе поддержки в Telegram.


Команда CloudPub