🌱🏠 instant least-authority port-forwarding (with automatic HTTPS) for anyone, anywhere! We **really** don't want your TLS private keys, you can keep them 😃 https://greenhouse.server.garden/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
forest 7dccd36182 wording on cloud service 2 months ago
frontend fixing home page html 3 months ago
greenhouse-daemon ingress service / integrate greenhouse daemon, multiple api tokens 8 months ago
pki splitting out pki into separate module 5 months ago
readme add demo video 3 months ago
schema_versions implementing external domain support for alpha version 4 months ago
threshold fix broken threshold version 🤮 3 months ago
.dockerignore docker deployment and telemetry 3 months ago
.gitignore docker deployment and telemetry 3 months ago
Dockerfile got alpha home page working 3 months ago
LICENSE.md GPL 11 months ago
README.md wording on cloud service 2 months ago
backblaze_b2_service.go update to golang 16 and got digitalocean instance spawner working 10 months ago
backend.go peparing for alpha release and changes based on initial usability test 3 months ago
build-docker.sh fixing home page html 3 months ago
db_model.go implementing external domain support for alpha version 4 months ago
digitalocean_service.go got buttons working on admin panel and rebalance is no longer throwing 10 months ago
easypki_db_adapter.go debugging desktop app registration stuff 9 months ago
email_service.go update to golang 16 and got digitalocean instance spawner working 10 months ago
example_config.json adding telemetry to the user profile page 3 months ago
frontend.go adding mac and windows install pages, ready for pre-alpha testing 3 months ago
frontend_admin_panel.go docker deployment and telemetry 3 months ago
frontend_howto.go adding mac and windows install pages, ready for pre-alpha testing 3 months ago
frontend_login.go bump to release candidate 2 3 months ago
frontend_profile.go more telemetry for sub services 1st draft 3 months ago
gandi_service.go docker deployment and telemetry 3 months ago
go.mod got alpha home page working 3 months ago
go.sum got alpha home page working 3 months ago
ingress_service.go docker deployment and telemetry 3 months ago
main.go more telemetry for sub services 1st draft 3 months ago
public_api.go docker deployment and telemetry 3 months ago
scheduled_tasks.go more telemetry for sub services 1st draft 3 months ago
ssh_service.go debugging desktop app registration stuff 9 months ago
telemetry.go more telemetry for sub services 1st draft 3 months ago
threshold_provisioning_service.go fix broken threshold version 🤮 3 months ago

README.md

greenhouse

greenhouse logo

Greenhouse is a new cloud service designed to break down barriers to entry & make real ownership and production of The Internet accessible to more people.

greenhouse.server.garden

It enables you to self-host internet services / websites on your own computer easily, while retaining exlusive ownership of your processes, data, and your user's data as well.

In the future, Greenhouse will be easy to use with existing self-hosting solutions like yunohost, syncloud, and others.

For more information about the motivation behind greenhouse, see my blog post about it: The "Pragmatic Path" 4-Year Update: Introducing Greenhouse!

This repository only houses the web application for the cloud service. There are many other processes involved in making greenhouse work, and making it easy for anyone to use.

  • 🏔️⛰️🛤️⛰️🏔️ threshold

    • Public Internet facing gateway (TCP reverse tunnel) server/client that greenhouse uses
  • 🔒 caddy

    • A slightly modified fork of the Caddy 2 HTTP server by Matthew Holt / Let's Encrypt
  • 🌱🏠😈 greenhouse-daemon

    • The core of the greenhouse self-hosting software that you run on your server computer.
      • Embedded threshold client makes your server avaliable on the internet through the Greenhouse threshold server(s).
      • Embedded Caddy Server (optional)
        • Handles TLS (HTTPS) encryption keys and certificates for you automatically and securely.
        • It can also serve your files on the internet for you.
  • 🌱🏠🖥️ greenhouse-desktop

    • Cross-platform desktop application for greenhouse -- an interface to the greenhouse daemon. Share your local servers or files on the internet in seconds!
  • 🌱🏠🧑‍💻 greenhouse-cli

    • command line greenhouse client application: an interface to the greenhouse daemon

screenshot

a screenshot of the alpha version of the greenhouse admin panel with "choose your greenhouseusers.com subdomain" feature, a bandwidth usage graph, and cross platform self-hosting software installation options

setup local environment

Write the config file config.json in the root directory:

{
  "FrontendPort": 8080,
  "FrontendDomain": "localhost",
  "DatabaseConnectionString": "host=/var/run/postgresql port=5432 user=postgres password=dev database=postgres",
  "DatabaseType": "postgres",
  "DatabaseSchema": "public",
  "SMTP": {
    "Host": "<my email server>",
    "Port": <587 (SMTP+STARTTLS) or 465 (SMTPS)>,
    "Username": "<my email address>",
    "Password": "<my email password>",
    "Encryption": "<SMTPS or STARTTLS>"
  }
}

Run the database:

mkdir -p postgres-data
docker run --rm -it -e POSTGRES_PASSWORD=dev -v /var/run/postgresql:/var/run/postgresql -v "$PWD/postgres-data":/var/lib/postgresql/data postgres

Run the app:

go run *.go

Inspect the database:

sudo apt-get install postgresql-client
PGPASSWORD=dev psql --host /var/run/postgresql --port 5432 --username postgres -d postgres -c 'select * from session_cookies'

architechture

architechture diagram

This diagram was created with https://app.diagrams.net/. To edit it, download the diagram file and edit it with the https://app.diagrams.net/ web application, or you may run the application from source if you wish.

Features:

  • Threshold (TCP reverse tunnel) as a service (multi-tenant or dedicated IP address)
  • Object Storage
  • free subdomains (like duckdns / freedns.afraid.org)
  • managed domain names (like njalla)