detached 87f6515

docs: update README with Docker examples and Cloudflare HTTPS note

- Replace podman with docker in all example commands
- Add note that podman works as drop-in replacement
- Document HTTPS architecture (Cloudflare proxy → Gordon HTTP)
- Clarify Cloudflare is required for HTTPS (no Let's Encrypt yet)
- Update setup guide header to mention Docker compatibility
commit
87f65150cfa8ab5bef5a34ee6c838bbb8bd1f25e
author
brice · · 2026-01-12 20:46 UTC
committer
brice · · 2026-01-12 20:48 UTC
parent
d7f7c17
signature
unsigned
1 file · +27 -22
M README.md +27 -22
@@ -33,17 +33,19 @@ Gordon is a lightweight deployment system that turns any VPS into a container ho
3333 ## How It Works
3434
3535 ```bash
36-# 1. Build & test locally
37-podman build -t myapp .
38-podman run -p 8080:8080 myapp # Works? Great!
36+# 1. Build & test locally (Docker or Podman)
37+docker build -t myapp .
38+docker run -p 8080:8080 myapp # Works? Great!
3939
4040 # 2. Push to deploy
41-podman tag myapp registry.mydomain.com/myapp:latest
42-podman push registry.mydomain.com/myapp:latest
41+docker tag myapp registry.mydomain.com/myapp:latest
42+docker push registry.mydomain.com/myapp:latest
4343
4444 # 3. That's it. Gordon handles the rest.
4545 ```
4646
47+> **Note:** All examples use `docker` commands, but `podman` works as a drop-in replacement. Just substitute `docker` with `podman` in any command.
48+
4749 **Your machine is the build server. If it runs locally, it runs in production.**
4850
4951 ## Quick Start (5 minutes)
@@ -51,7 +53,9 @@ podman push registry.mydomain.com/myapp:latest
5153 ### Prerequisites
5254 - Ubuntu/Debian VPS with root access
5355 - Domain pointing to your VPS
54-- Cloudflare account (free tier works)
56+- Cloudflare account (free tier works) - **Required for HTTPS**
57+
58+> **HTTPS Architecture:** Cloudflare terminates HTTPS and proxies to Gordon over HTTP internally. Gordon doesn't handle TLS certificates directly (no Let's Encrypt support yet).
5559
5660 ### Installation
5761
@@ -79,13 +83,13 @@ Your dev machine likely has 8-16 cores and 16-32GB RAM. Your VPS has 1-2 cores a
7983 ### Push-to-Deploy Workflow
8084 ```bash
8185 # Initial deployment
82-podman build -t myapp .
83-podman push registry.mydomain.com/myapp:latest
86+docker build -t myapp .
87+docker push registry.mydomain.com/myapp:latest
8488 # Visit https://app.mydomain.com
8589
8690 # Update deployment
87-podman build -t myapp .
88-podman push registry.mydomain.com/myapp:latest
91+docker build -t myapp .
92+docker push registry.mydomain.com/myapp:latest
8993 # Zero-downtime update applied automatically
9094 ```
9195
@@ -151,8 +155,9 @@ password = "your-secure-password"
151155
152156 See [examples/](examples/) for advanced configurations including network groups and more.
153157
154-## Detailed Setup Guide (Using podman in rootless mode)
155-Note: Refer to Quick Start for the binary installation.
158+## Detailed Setup Guide (Podman Rootless Mode)
159+
160+> **Note:** This guide uses Podman in rootless mode for enhanced security. Docker users can follow similar steps - Gordon works with any OCI-compatible runtime. Refer to Quick Start for the binary installation.
156161
157162 ### 1. VPS Preparation
158163 ```bash
@@ -235,14 +240,14 @@ systemctl --user status gordon
235240 ### Simple Deployment
236241 ```bash
237242 # Build locally
238-podman build -t myapp .
243+docker build -t myapp .
239244
240245 # Test locally
241-podman run -p 8080:8080 myapp
246+docker run -p 8080:8080 myapp
242247
243248 # Push to registry
244-podman tag myapp registry.mydomain.com/myapp:latest
245-podman push registry.mydomain.com/myapp:latest
249+docker tag myapp registry.mydomain.com/myapp:latest
250+docker push registry.mydomain.com/myapp:latest
246251
247252 # Profit!
248253 ```
@@ -250,8 +255,8 @@ podman push registry.mydomain.com/myapp:latest
250255 ### Versioned Deployment
251256 ```bash
252257 # Deploy specific version
253-podman tag myapp:v1.2.0 registry.mydomain.com/myapp:v1.2.0
254-podman push registry.mydomain.com/myapp:v1.2.0
258+docker tag myapp:v1.2.0 registry.mydomain.com/myapp:v1.2.0
259+docker push registry.mydomain.com/myapp:v1.2.0
255260
256261 # Update route in gordon.toml
257262 # "app.mydomain.com" = "myapp:v1.2.0"
@@ -261,10 +266,10 @@ podman push registry.mydomain.com/myapp:v1.2.0
261266 ```bash
262267 # Deploy with metadata
263268 export VERSION=v1.2.0
264-podman manifest create myapp:latest
265-podman manifest add myapp:latest registry.mydomain.com/myapp:$VERSION
266-podman manifest annotate myapp:latest --annotation version=$VERSION registry.mydomain.com/myapp:$VERSION
267-podman manifest push myapp:latest registry.mydomain.com/myapp:latest
269+docker manifest create myapp:latest
270+docker manifest add myapp:latest registry.mydomain.com/myapp:$VERSION
271+docker manifest annotate myapp:latest --annotation version=$VERSION registry.mydomain.com/myapp:$VERSION
272+docker manifest push myapp:latest registry.mydomain.com/myapp:latest
268273 ```
269274
270275 ## Community
@@ -33,17 +33,19 @@ Gordon is a lightweight deployment system that turns any VPS into a container ho
33 ## How It Works33 ## How It Works
34 34
35 ```bash35 ```bash
36-# 1. Build & test locally36+# 1. Build & test locally (Docker or Podman)
37-podman build -t myapp .37+docker build -t myapp .
38-podman run -p 8080:8080 myapp # Works? Great!38+docker run -p 8080:8080 myapp # Works? Great!
39 39
40 # 2. Push to deploy40 # 2. Push to deploy
41-podman tag myapp registry.mydomain.com/myapp:latest41+docker tag myapp registry.mydomain.com/myapp:latest
42-podman push registry.mydomain.com/myapp:latest42+docker push registry.mydomain.com/myapp:latest
43 43
44 # 3. That's it. Gordon handles the rest.44 # 3. That's it. Gordon handles the rest.
45 ```45 ```
46 46
47+> **Note:** All examples use `docker` commands, but `podman` works as a drop-in replacement. Just substitute `docker` with `podman` in any command.
48+
47 **Your machine is the build server. If it runs locally, it runs in production.**49 **Your machine is the build server. If it runs locally, it runs in production.**
48 50
49 ## Quick Start (5 minutes)51 ## Quick Start (5 minutes)
@@ -51,7 +53,9 @@ podman push registry.mydomain.com/myapp:latest
51 ### Prerequisites53 ### Prerequisites
52 - Ubuntu/Debian VPS with root access54 - Ubuntu/Debian VPS with root access
53 - Domain pointing to your VPS55 - Domain pointing to your VPS
54-- Cloudflare account (free tier works)56+- Cloudflare account (free tier works) - **Required for HTTPS**
57+
58+> **HTTPS Architecture:** Cloudflare terminates HTTPS and proxies to Gordon over HTTP internally. Gordon doesn't handle TLS certificates directly (no Let's Encrypt support yet).
55 59
56 ### Installation60 ### Installation
57 61
@@ -79,13 +83,13 @@ Your dev machine likely has 8-16 cores and 16-32GB RAM. Your VPS has 1-2 cores a
79 ### Push-to-Deploy Workflow83 ### Push-to-Deploy Workflow
80 ```bash84 ```bash
81 # Initial deployment85 # Initial deployment
82-podman build -t myapp .86+docker build -t myapp .
83-podman push registry.mydomain.com/myapp:latest87+docker push registry.mydomain.com/myapp:latest
84 # Visit https://app.mydomain.com88 # Visit https://app.mydomain.com
85 89
86 # Update deployment90 # Update deployment
87-podman build -t myapp .91+docker build -t myapp .
88-podman push registry.mydomain.com/myapp:latest92+docker push registry.mydomain.com/myapp:latest
89 # Zero-downtime update applied automatically93 # Zero-downtime update applied automatically
90 ```94 ```
91 95
@@ -151,8 +155,9 @@ password = "your-secure-password"
151 155
152 See [examples/](examples/) for advanced configurations including network groups and more.156 See [examples/](examples/) for advanced configurations including network groups and more.
153 157
154-## Detailed Setup Guide (Using podman in rootless mode)158+## Detailed Setup Guide (Podman Rootless Mode)
155-Note: Refer to Quick Start for the binary installation.159+
160+> **Note:** This guide uses Podman in rootless mode for enhanced security. Docker users can follow similar steps - Gordon works with any OCI-compatible runtime. Refer to Quick Start for the binary installation.
156 161
157 ### 1. VPS Preparation162 ### 1. VPS Preparation
158 ```bash163 ```bash
@@ -235,14 +240,14 @@ systemctl --user status gordon
235 ### Simple Deployment240 ### Simple Deployment
236 ```bash241 ```bash
237 # Build locally242 # Build locally
238-podman build -t myapp .243+docker build -t myapp .
239 244
240 # Test locally245 # Test locally
241-podman run -p 8080:8080 myapp246+docker run -p 8080:8080 myapp
242 247
243 # Push to registry248 # Push to registry
244-podman tag myapp registry.mydomain.com/myapp:latest249+docker tag myapp registry.mydomain.com/myapp:latest
245-podman push registry.mydomain.com/myapp:latest250+docker push registry.mydomain.com/myapp:latest
246 251
247 # Profit!252 # Profit!
248 ```253 ```
@@ -250,8 +255,8 @@ podman push registry.mydomain.com/myapp:latest
250 ### Versioned Deployment255 ### Versioned Deployment
251 ```bash256 ```bash
252 # Deploy specific version257 # Deploy specific version
253-podman tag myapp:v1.2.0 registry.mydomain.com/myapp:v1.2.0258+docker tag myapp:v1.2.0 registry.mydomain.com/myapp:v1.2.0
254-podman push registry.mydomain.com/myapp:v1.2.0259+docker push registry.mydomain.com/myapp:v1.2.0
255 260
256 # Update route in gordon.toml261 # Update route in gordon.toml
257 # "app.mydomain.com" = "myapp:v1.2.0"262 # "app.mydomain.com" = "myapp:v1.2.0"
@@ -261,10 +266,10 @@ podman push registry.mydomain.com/myapp:v1.2.0
261 ```bash266 ```bash
262 # Deploy with metadata267 # Deploy with metadata
263 export VERSION=v1.2.0268 export VERSION=v1.2.0
264-podman manifest create myapp:latest269+docker manifest create myapp:latest
265-podman manifest add myapp:latest registry.mydomain.com/myapp:$VERSION270+docker manifest add myapp:latest registry.mydomain.com/myapp:$VERSION
266-podman manifest annotate myapp:latest --annotation version=$VERSION registry.mydomain.com/myapp:$VERSION271+docker manifest annotate myapp:latest --annotation version=$VERSION registry.mydomain.com/myapp:$VERSION
267-podman manifest push myapp:latest registry.mydomain.com/myapp:latest272+docker manifest push myapp:latest registry.mydomain.com/myapp:latest
268 ```273 ```
269 274
270 ## Community275 ## Community

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close