---
id: 33b4cfbec34c4d839daf853bf4a39b3e
author: Lemon Mint
title: 'Portalite: monen releen sidonta ja standardin net.Listener-rajapintaan perustuva kevyt Portal Go SDK'
description: Go:n standardin net.Listener-rajapinnan kanssa yhteensopiva, useiden relayden samanaikaisen sidonnan, päästä päähän salauksen (E2EE) ja automaattisen istunnon palautuksen tukeva kevyt Portal-asiakasohjelma ja komentorivityökalu.
language: fi
date: 2026-08-26T14:05:55.212694445Z
path: /portalite
go_package: gosuda.org/portalite
go_repourl: https://github.com/gosuda/portalite.git
category: network
---

Aiemmin esitellessämme [Portalia](https://github.com/gosuda/portal) keskustelimme nykyaikaisen verkon ongelmista. Tekoälyavusteisten koodaustyökalujen myötä kuka tahansa voi nyt luoda verkkosivuston, mutta sen julkaiseminen maailmalle on edelleen suurten alustojen ja pilvipalveluiden yksinoikeusalue. Portal erottaa verkon isännöinnin ja sisällöntuotannon toisistaan ja yhdistää yksittäisen henkilön paikallisen palvelun maailmanlaajuisesti päästä päähän salattujen releiden kautta. Näin julkaisuoikeus palautuu takaisin yksilölle.

## Esittelyssä Portalite

Tänään esittelen [Portalite](https://github.com/gosuda/portalite)-ohjelmiston. Portalite on **vähimmäisriippuvuuksin rakennettu erittäin kevyt Portal-asiakasohjelma ja Go SDK**.

Jos Portal on filosofia siitä, miten verkkoa voidaan muuttaa, Portalite on ohut liima, jolla tuo filosofia liitetään kehittäjän sovellukseen. Kehittäjän ei tarvitse tehdä monimutkaisia pilvikonfiguraatioita tai rakentaa julkaisuputkia. Riittää, että hän tuo SDK:n ja lisää muutaman rivin koodia, jolloin sovellukseen saadaan portaalin ingress. Heti kun sovellus käynnistyy, sen paikallisesti toimiva palvelin muuttuu julkiseksi palveluksi, johon pääsee käsiksi mistä tahansa Internetissä.

## 1. Julkinen Ingress kahdella koodirivillä

Portalite tukee Go-kielen vakiorajapintaa [`net.Listener`](https://pkg.go.dev/net#Listener). Riittää, että korvaa olemassa olevan web-kehyksen tai palvelimen kuuntelijan, jolloin ratkaisu toimii välittömästi.

```go
// Luo palvelun tunniste
identity, err := portalite.GenerateIdentity("my-service")

// Avaa julkinen kuuntelija releiden kautta
listener, err := portalite.Expose(ctx, portalite.ExposeConfig{
    Relays:   portalite.DefaultRelays(),
    Identity: identity,
})

// Käynnistä HTTP-palvelin kuuntelijalla
http.Serve(listener, handler)
```

- **Nollakonfiguraatio (Zero-config):** Porttien ohjausta, kiinteää IP-osoitetta tai palomuurin saapuvia sääntöjä ei tarvita lainkaan.
- **Standardiyhteensopivuus:** Yhteensopiva 100 prosentin tarkkuudella kaikkien Go-kirjastojen kanssa, jotka käyttävät vakiomuotoista `net.Listener`-rajapintaa, kuten `http.Server`, `grpc.Server`, Gin, Echo ja Chi.

## 2. Ydinominaisuus: useiden releiden samanaikainen sitominen (Multi-Relay Binding)

Useimmat tunnelointityökalut luottavat yhteen päätepisteeseen, joten jos relepalvelin kaatuu, myös palvelu katkeaa. **Portalite toimii yhdistämällä useisiin relepalvelimiin samanaikaisesti.**

- **Katkeamaton vikaeristys (Failover):** Vaikka osa releistä kaatuisi tai niissä ilmenisi verkkoviivettä, jäljellä olevat toimivat releet jatkavat liikenteen välittämistä saman virtuaalisen kuuntelijan kautta.
- **Yksittäisen vikapisteen (SPOF) poistaminen:** Sovelluksen `Accept()`-silmukka ei pysähdy,ellei kaikki releyhteydet katkea samanaikaisesti.
- **Päästä päähän salaus (E2EE):** Liikenne välitetään salattuna, joten relepalvelin ei voi tarkastella tai muokata dataa.
- **Automaattinen uudelleenyhdistäminen ja itseparantuminen (Self-Healing):** Myös tilapäisen verkkokatkon tai releen uudelleenkäynnistyksen yhteydessä yhteys palautuu, kun taustalla neuvotellaan istunto ja tunnus automaattisesti uudelleen.

## 3. Välitön käyttö yhdellä CLI-komennolla

Jos et käytä Go-koodia tai tarvitset nopean testin, riittää, että välität CLI-työkalulle pelkän porttinumeron.

```sh
# Asenna ja avaa portti 3000 julkisesti
$ go install gosuda.org/portalite/cmd/portalite@latest && portalite expose --name "my-service" 3000
URL https://my-service.rly.best
URL https://my-service.s-h.day

```

Komennon suorituksen jälkeen useita releiden URL-osoitteita luodaan välittömästi, ja palvelu on heti saavutettavissa ulkopuolelta.

## 4. Kevyt mutta tehokas

- **Vähimmäisriippuvuudet:** Kolmannen osapuolen riippuvuuksia on karsittu, joten binääri on kevyt ja käännös nopea.
- **TLS- ja UDP-tuki:** HTTP- ja gRPC-liikenteen kaltaisen TLS-liikenteen lisäksi QUIC-datagrammien takaisinkytkennän avulla voidaan helposti julkaista myös UDP-palveluita, kuten pelipalvelimia.

## Aloittaminen

- GitHub-arkisto: [https://github.com/gosuda/portalite](https://github.com/gosuda/portalite)
- Go-paketti: `go get gosuda.org/portalite`
