mirror of
https://github.com/jbowdre/runtimeterror.git
synced 2024-11-22 15:02:18 +00:00
Compare commits
16 commits
dd8cc8bf4f
...
dd38650d00
Author | SHA1 | Date | |
---|---|---|---|
dd38650d00 | |||
ff03204ef8 | |||
502a1cba44 | |||
d00045e3a7 | |||
85d0e3070e | |||
62dd04f7e8 | |||
f9a7c93897 | |||
0a2795e74d | |||
3536f61fc9 | |||
f42fb4d223 | |||
e7763e0932 | |||
dbd744b16e | |||
be65101f0f | |||
20b3ce4635 | |||
9703b65ac6 | |||
45da3eeee0 |
38 changed files with 303 additions and 51 deletions
|
@ -7,7 +7,7 @@ description: "This is a new post about..."
|
||||||
featured: false
|
featured: false
|
||||||
toc: true
|
toc: true
|
||||||
comment: true
|
comment: true
|
||||||
series: Tips # Projects, Scripts
|
series: Tips # Projects, Code
|
||||||
tags:
|
tags:
|
||||||
- 3dprinting
|
- 3dprinting
|
||||||
- activedirectory
|
- activedirectory
|
||||||
|
|
|
@ -11,7 +11,16 @@ enableInlineShortcodes = true
|
||||||
# sectionPagesMenu = "main"
|
# sectionPagesMenu = "main"
|
||||||
|
|
||||||
[outputs]
|
[outputs]
|
||||||
home = ["HTML", "RSS", "JSON"]
|
home = ['html', 'rss', 'json']
|
||||||
|
section = ['html']
|
||||||
|
taxonomy = ['html',]
|
||||||
|
term = ['html', 'rss']
|
||||||
|
|
||||||
|
# rename rss output from index.xml to feed.xml
|
||||||
|
[outputFormats]
|
||||||
|
[outputFormats.rss]
|
||||||
|
mediatype = "application/rss"
|
||||||
|
baseName = "feed"
|
||||||
|
|
||||||
[permalinks]
|
[permalinks]
|
||||||
posts = ":filename"
|
posts = ":filename"
|
||||||
|
@ -41,6 +50,9 @@ enableInlineShortcodes = true
|
||||||
[services.instagram]
|
[services.instagram]
|
||||||
disableInlineCSS = true
|
disableInlineCSS = true
|
||||||
|
|
||||||
|
[services.rss]
|
||||||
|
limit = 20
|
||||||
|
|
||||||
[services.twitter]
|
[services.twitter]
|
||||||
disableInlineCSS = true
|
disableInlineCSS = true
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,9 @@
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
identifier = "scripts"
|
identifier = "code"
|
||||||
name = "scripts"
|
name = "code"
|
||||||
url = "/series/scripts/"
|
url = "/series/code/"
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
|
|
|
@ -2,7 +2,7 @@ noindex = false
|
||||||
usePageBundles = true
|
usePageBundles = true
|
||||||
description = "while (true) { bugs++; }"
|
description = "while (true) { bugs++; }"
|
||||||
mainSections = ["posts"]
|
mainSections = ["posts"]
|
||||||
fallBackOgImage = "images/broken-computer.svg"
|
fallBackOgImage = "images/broken-computer.png"
|
||||||
numberOfFeaturedPosts = 5
|
numberOfFeaturedPosts = 5
|
||||||
numberOfRelatedPosts = 5
|
numberOfRelatedPosts = 5
|
||||||
author = "jbowdre"
|
author = "jbowdre"
|
||||||
|
@ -140,7 +140,7 @@ url = "https://jbowdre.omg.lol"
|
||||||
[[socialLinks]]
|
[[socialLinks]]
|
||||||
icon = "fa-solid fa-comments"
|
icon = "fa-solid fa-comments"
|
||||||
title = "SimpleX Chat"
|
title = "SimpleX Chat"
|
||||||
url = "https://runtimeterror.dev/simplex"
|
url = "/simplex"
|
||||||
|
|
||||||
[[socialLinks]]
|
[[socialLinks]]
|
||||||
icon = "fa fa-matrix-org"
|
icon = "fa fa-matrix-org"
|
||||||
|
@ -171,3 +171,19 @@ url = "https://torchlight.dev"
|
||||||
[[powerLinks]]
|
[[powerLinks]]
|
||||||
title = "cabin"
|
title = "cabin"
|
||||||
url = "https://withcabin.com/privacy/runtimeterror.dev"
|
url = "https://withcabin.com/privacy/runtimeterror.dev"
|
||||||
|
|
||||||
|
[[verifyLinks]]
|
||||||
|
title = "omg.lol"
|
||||||
|
url = "https://proven.lol/cd10d3"
|
||||||
|
|
||||||
|
[[verifyLinks]]
|
||||||
|
title = "CounterSocial"
|
||||||
|
url = "https://counter.social/@john_b"
|
||||||
|
|
||||||
|
[[verifyLinks]]
|
||||||
|
title = "Mastodon"
|
||||||
|
url = "https://social.lol/@jbowdre"
|
||||||
|
|
||||||
|
[[verifyLinks]]
|
||||||
|
title = "GitHub"
|
||||||
|
url = "https://github.com/jbowdre"
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
---
|
|
||||||
date: 2019-05-28
|
|
||||||
type: section
|
|
||||||
layout: "archives"
|
|
||||||
---
|
|
|
@ -1,5 +1,4 @@
|
||||||
+++
|
+++
|
||||||
aliases = ["all_posts", "articles"]
|
aliases = ["all_posts", "articles"]
|
||||||
title = "Index of Posts"
|
title = "Index of Posts"
|
||||||
tags = ["index"]
|
|
||||||
+++
|
+++
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
series: Scripts
|
series: Code
|
||||||
date: "2021-04-29T08:34:30Z"
|
date: "2021-04-29T08:34:30Z"
|
||||||
usePageBundles: true
|
usePageBundles: true
|
||||||
thumbnail: 20210723-script.png
|
thumbnail: 20210723-script.png
|
||||||
|
|
|
@ -14,7 +14,7 @@ usePageBundles: true
|
||||||
thumbnail: "code.png" # Sets thumbnail image appearing inside card on homepage.
|
thumbnail: "code.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: Scripts
|
series: Code
|
||||||
tags:
|
tags:
|
||||||
- vmware
|
- vmware
|
||||||
- powercli
|
- powercli
|
||||||
|
|
|
@ -14,7 +14,7 @@ usePageBundles: true
|
||||||
# thumbnail: "thumbnail.png" # Sets thumbnail image appearing inside card on homepage.
|
# thumbnail: "thumbnail.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: Tips # Projects, Scripts, vRA8, K8s on vSphere
|
series: Tips # Projects, Code, vRA8, K8s on vSphere
|
||||||
tags:
|
tags:
|
||||||
- linux
|
- linux
|
||||||
- shell
|
- shell
|
||||||
|
|
|
@ -5,7 +5,7 @@ description: "I moved my homelab from VMware vSphere to Proxmox VE, and my only
|
||||||
featured: false
|
featured: false
|
||||||
toc: true
|
toc: true
|
||||||
comment: true
|
comment: true
|
||||||
series: Tips # Projects, Scripts
|
series: Tips # Projects, Code
|
||||||
tags:
|
tags:
|
||||||
- homelab
|
- homelab
|
||||||
- linux
|
- linux
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Easy Push Notifications With ntfy.sh"
|
title: "Easy Push Notifications With ntfy.sh"
|
||||||
date: 2023-09-17
|
date: 2023-09-17
|
||||||
lastmod: 2023-10-21
|
lastmod: 2023-12-22
|
||||||
description: "Deploying and configuring a self-hosted pub-sub notification handler, getting another server to send a notifcation when it boots, and integrating the notification handler into Home Assistant."
|
description: "Deploying and configuring a self-hosted pub-sub notification handler, getting another server to send a notifcation when it boots, and integrating the notification handler into Home Assistant."
|
||||||
featured: false
|
featured: false
|
||||||
toc: true
|
toc: true
|
||||||
|
@ -66,10 +66,10 @@ services:
|
||||||
- ./lib/ntf:/var/lib/ntfy
|
- ./lib/ntf:/var/lib/ntfy
|
||||||
ports:
|
ports:
|
||||||
- 2586:80
|
- 2586:80
|
||||||
healthcheck: # optional, remember to adapt the host and port to your environment
|
healthcheck: # this should be the port inside the container, not the host port
|
||||||
test: [
|
test: [
|
||||||
"CMD-SHELL",
|
"CMD-SHELL",
|
||||||
"wget -q --tries=1 http://localhost:8080/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"
|
"wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"
|
||||||
]
|
]
|
||||||
interval: 60s
|
interval: 60s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
|
|
|
@ -14,7 +14,7 @@ usePageBundles: true
|
||||||
thumbnail: "thumbnail.png" # Sets thumbnail image appearing inside card on homepage.
|
thumbnail: "thumbnail.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: vRA8 # Projects, Scripts, vRA8
|
series: vRA8 # Projects, Code, vRA8
|
||||||
tags:
|
tags:
|
||||||
- vmware
|
- vmware
|
||||||
- vra
|
- vra
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
series: Scripts
|
series: Code
|
||||||
date: "2020-09-16T08:34:30Z"
|
date: "2020-09-16T08:34:30Z"
|
||||||
thumbnail: LJOcy2oqc.png
|
thumbnail: LJOcy2oqc.png
|
||||||
usePageBundles: true
|
usePageBundles: true
|
||||||
|
|
|
@ -14,7 +14,7 @@ usePageBundles: true
|
||||||
thumbnail: "nessus_login.png" # Sets thumbnail image appearing inside card on homepage.
|
thumbnail: "nessus_login.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: Tips # Projects, Scripts, vRA8
|
series: Tips # Projects, Code, vRA8
|
||||||
tags:
|
tags:
|
||||||
- vmware
|
- vmware
|
||||||
- kubernetes
|
- kubernetes
|
||||||
|
|
|
@ -14,7 +14,7 @@ usePageBundles: true
|
||||||
thumbnail: "PowerCLI.png" # Sets thumbnail image appearing inside card on homepage.
|
thumbnail: "PowerCLI.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: Scripts
|
series: Code
|
||||||
tags:
|
tags:
|
||||||
- vmware
|
- vmware
|
||||||
- powercli
|
- powercli
|
||||||
|
|
|
@ -14,7 +14,7 @@ usePageBundles: true
|
||||||
# thumbnail: "thumbnail.png" # Sets thumbnail image appearing inside card on homepage.
|
# thumbnail: "thumbnail.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: Scripts
|
series: Code
|
||||||
tags:
|
tags:
|
||||||
- powershell
|
- powershell
|
||||||
- windows
|
- windows
|
||||||
|
|
|
@ -14,7 +14,7 @@ usePageBundles: true
|
||||||
# thumbnail: "thumbnail.png" # Sets thumbnail image appearing inside card on homepage.
|
# thumbnail: "thumbnail.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: Tips # Projects, Scripts, vRA8, K8s on vSphere
|
series: Tips # Projects, Code, vRA8, K8s on vSphere
|
||||||
tags:
|
tags:
|
||||||
- vmware
|
- vmware
|
||||||
- powershell
|
- powershell
|
||||||
|
|
|
@ -286,8 +286,8 @@ main:
|
||||||
url: /series/vra8
|
url: /series/vra8
|
||||||
- title: "Projects"
|
- title: "Projects"
|
||||||
url: /series/projects
|
url: /series/projects
|
||||||
- title: "Scripts"
|
- title: "Code"
|
||||||
url: /series/scripts
|
url: /series/code
|
||||||
- title: "Tips & Tricks"
|
- title: "Tips & Tricks"
|
||||||
url: /series/tips
|
url: /series/tips
|
||||||
- title: "Tags"
|
- title: "Tags"
|
||||||
|
|
|
@ -14,7 +14,7 @@ featureImage: "basic-architecture.png" # Sets featured image on blog post.
|
||||||
thumbnail: "basic-architecture.png" # Sets thumbnail image appearing inside card on homepage.
|
thumbnail: "basic-architecture.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: Tips # Projects, Scripts, vRA8
|
series: Tips # Projects, Code, vRA8
|
||||||
tags:
|
tags:
|
||||||
- vmware
|
- vmware
|
||||||
- vsphere
|
- vsphere
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
---
|
---
|
||||||
title: "Quick Salt State to Deploy Netdata"
|
title: "Quick Salt State to Deploy Netdata"
|
||||||
date: 2023-12-21
|
date: 2023-12-21
|
||||||
# lastmod: 2023-12-21
|
lastmod: 2023-12-22
|
||||||
description: "A hasty Salt state to deploy netdata monitoring and publish it internally on my tailnet with Tailscale Serve"
|
description: "A hasty Salt state to deploy netdata monitoring and publish it internally on my tailnet with Tailscale Serve"
|
||||||
featured: false
|
featured: false
|
||||||
toc: true
|
toc: true
|
||||||
comment: true
|
comment: true
|
||||||
series: Scripts
|
series: Code
|
||||||
tags:
|
tags:
|
||||||
- homelab
|
- homelab
|
||||||
- iac
|
- iac
|
||||||
|
@ -25,7 +25,7 @@ It simply installs netdata using the [handy-dandy kickstart script](https://lear
|
||||||
# torchlight! {"lineNumbers": true}
|
# torchlight! {"lineNumbers": true}
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: ft=sls
|
# vim: ft=sls
|
||||||
# Hasty Salt config to install Netdata and make it available within a Tailscale tailnet
|
# Hasty Salt config to install Netdata and make it available within a tailnet
|
||||||
# at https://[hostname].[tailnet-name].ts.net:8443/netdata
|
# at https://[hostname].[tailnet-name].ts.net:8443/netdata
|
||||||
|
|
||||||
curl:
|
curl:
|
||||||
|
|
|
@ -15,7 +15,7 @@ thumbnail: "thumbnail.png" # Sets thumbnail image appearing inside card on homep
|
||||||
# shareImage: "/images/path/share.png" # Designate a separate image for social media sharing.
|
# shareImage: "/images/path/share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
codeMaxLines: 30
|
codeMaxLines: 30
|
||||||
series: Scripts
|
series: Code
|
||||||
tags:
|
tags:
|
||||||
- hugo
|
- hugo
|
||||||
- meta
|
- meta
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
series: Scripts
|
series: Code
|
||||||
date: "2021-07-19T16:03:30Z"
|
date: "2021-07-19T16:03:30Z"
|
||||||
usePageBundles: true
|
usePageBundles: true
|
||||||
tags:
|
tags:
|
||||||
|
|
|
@ -6,7 +6,7 @@ description: "Syntax highlighting powered by the Torchlight.dev API makes it eas
|
||||||
featured: false
|
featured: false
|
||||||
toc: true
|
toc: true
|
||||||
comment: true
|
comment: true
|
||||||
series: Projects # Projects, Scripts
|
series: Projects # Projects, Code
|
||||||
tags:
|
tags:
|
||||||
- javascript
|
- javascript
|
||||||
- hugo
|
- hugo
|
||||||
|
|
|
@ -6,7 +6,7 @@ description: "Quick notes on using `systemctl edit` to override a systemd servic
|
||||||
featured: false
|
featured: false
|
||||||
toc: false
|
toc: false
|
||||||
comment: true
|
comment: true
|
||||||
series: Tips # Projects, Scripts
|
series: Tips # Projects, Code
|
||||||
tags:
|
tags:
|
||||||
- crostini
|
- crostini
|
||||||
- linux
|
- linux
|
||||||
|
|
|
@ -14,7 +14,7 @@ usePageBundles: true
|
||||||
thumbnail: "golinks.png" # Sets thumbnail image appearing inside card on homepage.
|
thumbnail: "golinks.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: Projects # Projects, Scripts, vRA8, K8s on vSphere
|
series: Projects # Projects, Code, vRA8, K8s on vSphere
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
- vpn
|
- vpn
|
||||||
|
|
|
@ -14,7 +14,7 @@ usePageBundles: true
|
||||||
thumbnail: "Tailscale-AppIcon.png" # Sets thumbnail image appearing inside card on homepage.
|
thumbnail: "Tailscale-AppIcon.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: Tips # Projects, Scripts, vRA8, K8s on vSphere
|
series: Tips # Projects, Code, vRA8, K8s on vSphere
|
||||||
tags:
|
tags:
|
||||||
- vmware
|
- vmware
|
||||||
- linux
|
- linux
|
||||||
|
|
166
content/posts/tailscale-serve-docker-compose-sidecar/index.md
Normal file
166
content/posts/tailscale-serve-docker-compose-sidecar/index.md
Normal file
|
@ -0,0 +1,166 @@
|
||||||
|
---
|
||||||
|
title: "Tailscale Serve in a Docker Compose Sidecar"
|
||||||
|
date: 2023-12-28
|
||||||
|
# lastmod: 2023-12-28
|
||||||
|
draft: true
|
||||||
|
description: "This is a new post about..."
|
||||||
|
featured: false
|
||||||
|
toc: true
|
||||||
|
comment: true
|
||||||
|
series: Tips # Projects, Code
|
||||||
|
tags:
|
||||||
|
- containers
|
||||||
|
- docker
|
||||||
|
- selfhosting
|
||||||
|
- tailscale
|
||||||
|
---
|
||||||
|
Hi, and welcome back to what has become my [Tailscale blog](/tags/tailscale/).
|
||||||
|
|
||||||
|
I have a few servers that I use for running multiple container workloads. My approach in the past had been to use [Caddy webserver](https://caddyserver.com/) on the host to proxy the various containers. With this setup, each app would have its own DNS record, and Caddy would be configured to route traffic to the appropriate internal port based on that. For instance:
|
||||||
|
|
||||||
|
```text
|
||||||
|
# torchlight! {"lineNumbers": true}
|
||||||
|
cyberchef.runtimeterror.dev {
|
||||||
|
reverse_proxy localhost:8000
|
||||||
|
}
|
||||||
|
|
||||||
|
ntfy.runtimeterror.dev, http://ntfy.runtimeterror.dev {
|
||||||
|
reverse_proxy localhost:8080
|
||||||
|
@httpget {
|
||||||
|
protocol http
|
||||||
|
method GET
|
||||||
|
path_regexp ^/([-_a-z0-9]{0,64}$|docs/|static/)
|
||||||
|
}
|
||||||
|
redir @httpget https://{host}{uri}
|
||||||
|
}
|
||||||
|
|
||||||
|
uptime.runtimeterror.dev, status.vpota.to {
|
||||||
|
reverse_proxy localhost:3001
|
||||||
|
}
|
||||||
|
|
||||||
|
miniflux.runtimeterror.dev {
|
||||||
|
reverse_proxy localhost:8080
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
*and so on...* You get the idea. This approach works well for services I want/need to be public, but it does require me to manage those DNS records and keep track of which app is on which port. That can be kind of tedious.
|
||||||
|
|
||||||
|
And I don't really need all of these services to be public. Not because they're particularly sensitive, but I just don't really have a reason to share my personal [Miniflux](https://github.com/miniflux/v2) or [CyberChef](https://github.com/gchq/CyberChef) instance with the world at large. Those would be great candidates to serve with [Tailscale Serve](/tailscale-ssh-serve-funnel#tailscale-serve) so they'd only be available on my tailnet. Of course, with that setup I'd have to differentiate the services based on external port numbers since they'd all be served with the same hostname. That's not ideal either.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo tailscale serve --bg --https 8443 8180 # [tl! .cmd]
|
||||||
|
Available within your tailnet: # [tl! .nocopy:6]
|
||||||
|
|
||||||
|
https://tsdemo.tailnet-name.ts.net/
|
||||||
|
|-- proxy http://127.0.0.1:8000
|
||||||
|
|
||||||
|
https://tsdemo.tailnet-name.ts.net:8443/
|
||||||
|
|-- proxy http://127.0.0.1:8080
|
||||||
|
```
|
||||||
|
|
||||||
|
It would be really great if I could directly attach each container to my tailnet and then access the apps with addresses like `https://miniflux.tailnet-name.ts.net` or `https://cyberchef.tailnet-name.ts.net`. Tailscale does provide an [official Tailscale image](https://hub.docker.com/r/tailscale/tailscale) which seems like it should make this a really easy problem to address. It runs in userspace by default (neat!), and [even seems to accept a `TS_SERVE_CONFIG` parameter](https://github.com/tailscale/tailscale/blob/5812093d31c8a7f9c5e3a455f0fd20dcc011d8cd/cmd/containerboot/main.go#L43) to configure Tailscale Serve... unfortunately, I haven't been able to find any documentation about how to create the required `ipn.ServeConfig` file to be able to use of that. I also struggled to find guidance on how to actually connect a Tailscale sidecar to an app container in the first place.
|
||||||
|
|
||||||
|
And then I came across [Louis-Philippe Asselin's post](https://asselin.engineer/tailscale-docker) about how he set up Tailscale in Docker Compose. When he wrote his post, there was even less documentation on how to do this stuff, so he used a [modified Tailscale docker image](https://github.com/lpasselin/tailscale-docker) with a [startup script](https://github.com/lpasselin/tailscale-docker/blob/c6f8d75b5e1235b8dbeee849df9321f515c526e5/images/tailscale/start.sh) to handle some of the configuration steps. His repo also includes a [helpful docker-compose example](https://github.com/lpasselin/tailscale-docker/blob/c6f8d75b5e1235b8dbeee849df9321f515c526e5/docker-compose/stateful-example/docker-compose.yml) of how to connect it together.
|
||||||
|
|
||||||
|
I quickly realized I could probably modified his startup script to take care of my Tailscale Serve need. So here's how I did it.
|
||||||
|
|
||||||
|
### Docker Image
|
||||||
|
My image will start out the same as Louis-Philippe's, with just adding a startup script to the official Tailscale image:
|
||||||
|
|
||||||
|
```Dockerfile
|
||||||
|
# torchlight! {"lineNumbers": true}
|
||||||
|
FROM tailscale/tailscale:v1.56.1
|
||||||
|
COPY start.sh /usr/bin/start.sh
|
||||||
|
RUN chmod +x /usr/bin/start.sh
|
||||||
|
CMD "start.sh"
|
||||||
|
```
|
||||||
|
|
||||||
|
The `start.sh` script has a few tweaks for brevity/clarity, and also adds a block for conditionally enabling a basic Tailscale Serve configuration:
|
||||||
|
```shell
|
||||||
|
#!/bin/ash
|
||||||
|
# torchlight! {"lineNumbers": true}
|
||||||
|
trap 'kill -TERM $PID' TERM INT
|
||||||
|
echo "Starting Tailscale daemon"
|
||||||
|
tailscaled --tun=userspace-networking --state=${TS_STATE} ${TS_OPT} &
|
||||||
|
PID=$!
|
||||||
|
until tailscale up --authkey="${TS_AUTHKEY}" --hostname="${TS_HOSTNAME}"; do
|
||||||
|
sleep 0.1
|
||||||
|
done
|
||||||
|
tailscale status
|
||||||
|
if [ -n "${TS_SERVE_PORT}" ]; then # [tl! ++:4]
|
||||||
|
if ! tailscale serve status | grep -q "${TS_SERVE_PORT}"; then
|
||||||
|
tailscale serve --bg "${TS_SERVE_PORT}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
wait ${PID}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
tailscale:
|
||||||
|
build:
|
||||||
|
context: ./image/
|
||||||
|
container_name: tailscale
|
||||||
|
environment:
|
||||||
|
TS_AUTH_KEY: ${TS_AUTH_KEY:?err} # from https://login.tailscale.com/admin/settings/authkeys
|
||||||
|
TS_HOSTNAME: ${TS_HOSTNAME:-ts-docker}
|
||||||
|
TS_STATE_ARG: "/var/lib/tailscale/tailscale.state" # store ts state in a local volume
|
||||||
|
TS_SERVE_PORT: ${TS_SERVE_PORT:-} # optional port to proxy with tailscale serve (ex: '80')
|
||||||
|
volumes:
|
||||||
|
- ./ts_data:/var/lib/tailscale/
|
||||||
|
cyberchef:
|
||||||
|
container_name: cyberchef
|
||||||
|
image: mpepping/cyberchef:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
network_mode: service:tailscale
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
DB_USER=my_db_user
|
||||||
|
DB_PASS=my_db_password
|
||||||
|
ADMIN_USER=my_admin_user
|
||||||
|
ADMIN_PASS=my_admin_password
|
||||||
|
TS_AUTH_KEY=tskey-auth-my_auth_key
|
||||||
|
TS_HOSTNAME=miniflux
|
||||||
|
TS_SERVE_PORT=8080
|
||||||
|
```
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
tailscale:
|
||||||
|
image: ghcr.io/jbowdre/tailscale-docker:latest
|
||||||
|
container_name: miniflux-tailscaled
|
||||||
|
environment:
|
||||||
|
TS_AUTH_KEY: ${TS_AUTH_KEY:?err} # from https://login.tailscale.com/admin/settings/authkeys
|
||||||
|
TS_HOSTNAME: ${TS_HOSTNAME:-ts-docker}
|
||||||
|
TS_STATE_ARG: "/var/lib/tailscale/tailscale.state" # store ts state in a local volume
|
||||||
|
TS_SERVE_PORT: ${TS_SERVE_PORT:-} # optional port to proxy with tailscale serve (ex: '80')
|
||||||
|
volumes:
|
||||||
|
- ./ts_data:/var/lib/tailscale/
|
||||||
|
miniflux:
|
||||||
|
image: miniflux/miniflux:latest
|
||||||
|
container_name: miniflux
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
environment:
|
||||||
|
- DATABASE_URL=postgres://${DB_USER}:${DB_PASS}@db/miniflux?sslmode=disable
|
||||||
|
- RUN_MIGRATIONS=1
|
||||||
|
- CREATE_ADMIN=1
|
||||||
|
- ADMIN_USERNAME=${ADMIN_USER}
|
||||||
|
- ADMIN_PASSWORD=${ADMIN_PASS}
|
||||||
|
network_mode: "service:tailscale"
|
||||||
|
db:
|
||||||
|
image: postgres:15
|
||||||
|
container_name: miniflux-db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=${DB_USER}
|
||||||
|
- POSTGRES_PASSWORD=${DB_PASS}
|
||||||
|
volumes:
|
||||||
|
- ./mf_data:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "pg_isready", "-U", "${DB_USER}"]
|
||||||
|
interval: 10s
|
||||||
|
start_period: 30s
|
||||||
|
```
|
|
@ -6,7 +6,7 @@ description: "Exploring some of my favorite Tailscale addon features: SSH, Serve
|
||||||
featured: false
|
featured: false
|
||||||
toc: true
|
toc: true
|
||||||
comment: true
|
comment: true
|
||||||
series: Tips # Projects, Scripts
|
series: Tips # Projects, Code
|
||||||
tags:
|
tags:
|
||||||
- homelab
|
- homelab
|
||||||
- networking
|
- networking
|
||||||
|
|
|
@ -14,7 +14,7 @@ featureImage: "esxi8.png" # Sets featured image on blog post.
|
||||||
# thumbnail: "thumbnail.png" # Sets thumbnail image appearing inside card on homepage.
|
# thumbnail: "thumbnail.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: Tips # Projects, Scripts, vRA8
|
series: Tips # Projects, Code, vRA8
|
||||||
tags:
|
tags:
|
||||||
- vmware
|
- vmware
|
||||||
- homelab
|
- homelab
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
series: Scripts
|
series: Code
|
||||||
date: "2021-04-29T08:34:30Z"
|
date: "2021-04-29T08:34:30Z"
|
||||||
usePageBundles: true
|
usePageBundles: true
|
||||||
tags:
|
tags:
|
||||||
|
|
|
@ -14,7 +14,7 @@ featureImage: "vdt.png" # Sets featured image on blog post.
|
||||||
thumbnail: "pulse2.png" # Sets thumbnail image appearing inside card on homepage.
|
thumbnail: "pulse2.png" # Sets thumbnail image appearing inside card on homepage.
|
||||||
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
# shareImage: "share.png" # Designate a separate image for social media sharing.
|
||||||
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
codeLineNumbers: false # Override global value for showing of line numbers within code block.
|
||||||
series: Tips # Projects, Scripts, vRA8
|
series: Tips # Projects, Code, vRA8
|
||||||
tags:
|
tags:
|
||||||
- vmware
|
- vmware
|
||||||
- vsphere
|
- vsphere
|
||||||
|
|
|
@ -19,18 +19,37 @@ Incoming messages are routed through a pool of servers so that your conversation
|
||||||
The app is also packed with other features like disappearing messages, encrypted file transfers, encrypted voice messages, encrypted audio and video calls, decentralized private groups, and a cool incognito mode which connects new conversations to a randomly-generated profile instead of your primary one. There's even a [CLI client](https://github.com/simplex-chat/simplex-chat/blob/stable/docs/CLI.md)!
|
The app is also packed with other features like disappearing messages, encrypted file transfers, encrypted voice messages, encrypted audio and video calls, decentralized private groups, and a cool incognito mode which connects new conversations to a randomly-generated profile instead of your primary one. There's even a [CLI client](https://github.com/simplex-chat/simplex-chat/blob/stable/docs/CLI.md)!
|
||||||
|
|
||||||
## Servers
|
## Servers
|
||||||
|
[![](https://status.vpota.to/api/badge/11/status)](https://status.vpota.to/status/simplex)
|
||||||
|
|
||||||
You can easily host your own [simplexmq server](https://github.com/simplex-chat/simplexmq) for handling your inbound message queue, and I've done just that; in fact, I've deployed three! And, as one of my closest internet friends, *you're welcome to use them as well.*
|
You can easily host your own [simplexmq server](https://github.com/simplex-chat/simplexmq) for handling your inbound message queue, and I've done just that; in fact, I've deployed three! And, as one of my closest internet friends, *you're welcome to use them as well.*
|
||||||
|
|
||||||
Just add these in the SimpleX app at **Settings > Network & servers > SMP servers > + Add server...**. Enable the option to use them for new connections, and they'll be added to the pool used for incoming messages in new conversations. If you want to use them immediately for existing conversations, go into each conversation's options menu and use the **Switch receiving address** option. You can also *disable* the option to use the default servers for new conversations if you only want messages to be routed through specific servers, but that does increase the likelikhood of concurrent conversations being routed the same way. More servers, more path options, less metadata in any one place.
|
Just add these in the SimpleX app at **Settings > Network & servers > SMP servers > + Add server...**. Enable the option to use them for new connections, and they'll be added to the pool used for incoming messages in new conversations. If you want to use them immediately for existing conversations, go into each conversation's options menu and use the **Switch receiving address** option. You can also *disable* the option to use the default servers for new conversations if you only want messages to be routed through specific servers, but that does increase the likelikhood of concurrent conversations being routed the same way. More servers, more path options, less metadata in any one place.
|
||||||
|
|
||||||
|
---
|
||||||
![](/images/smp-vpota-to.png)
|
![](/images/smp-vpota-to.png)
|
||||||
|
|
||||||
`smp://kYx5LmVD9FMM8hJN4BQqL4WmeUNZn8ipXsX2UkBoiHE=@smp.vpota.to`
|
`smp://kYx5LmVD9FMM8hJN4BQqL4WmeUNZn8ipXsX2UkBoiHE=@smp.vpota.to`
|
||||||
|
|
||||||
|
| | |
|
||||||
|
| --- | --- |
|
||||||
|
| [![](https://status.vpota.to/api/badge/6/uptime)](https://status.vpota.to/status/simplex) | [[details](https://smp-vpota-to.tetra-gamma.ts.net/netdata/)] |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
![](/images/smp1-vpota-to.png)
|
![](/images/smp1-vpota-to.png)
|
||||||
|
|
||||||
`smp://TbUrGydawdVKID0Lvix14UkaN-WarFgqXx4kaEG8Trw=@smp1.vpota.to`
|
`smp://TbUrGydawdVKID0Lvix14UkaN-WarFgqXx4kaEG8Trw=@smp1.vpota.to`
|
||||||
|
|
||||||
|
| | |
|
||||||
|
| --- | --- |
|
||||||
|
| [![](https://status.vpota.to/api/badge/4/uptime)](https://status.vpota.to/status/simplex) | [[details](https://smp1-vpota-to.tetra-gamma.ts.net/netdata/)] |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
![](/images/smp2-vpota-to.png)
|
![](/images/smp2-vpota-to.png)
|
||||||
|
|
||||||
`smp://tNfQisxTQ9MhKpFDTbx9RnjgWigtxF1a26jroy5-rR4=@smp2.vpota.to`
|
`smp://tNfQisxTQ9MhKpFDTbx9RnjgWigtxF1a26jroy5-rR4=@smp2.vpota.to`
|
||||||
|
|
||||||
|
| | |
|
||||||
|
| --- | --- |
|
||||||
|
| [![](https://status.vpota.to/api/badge/5/uptime)](https://status.vpota.to/status/simplex) | [[details](https://smp2-vpota-to.tetra-gamma.ts.net/netdata/)] |
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{{ with .Site.Params.about }}
|
{{ with .Site.Params.about }}
|
||||||
<div class="aside__about">
|
<div class="aside__about">
|
||||||
{{ with .logo }}<img class="about__logo" src="{{ . | absURL }}" alt="Logo">{{ end }}
|
{{ with .logo }}<img class="about__logo" src="{{ . | absURL }}" alt="Logo">{{ end }}
|
||||||
<h1 class="about__title">{{ .title }}</h1>
|
<h1 class="about__title">{{ .title }} <a target="_blank" href="/feed.xml" aria-label="RSS"><i class="fa-solid fa-square-rss"></i></a> </h1>
|
||||||
{{ partial "tagline.html" . }}
|
{{ partial "tagline.html" . }}
|
||||||
<br>
|
<br>
|
||||||
<a href="about"><i class="fa-regular fa-user"></i></a> <a href="/about">{{ site.Params.Author }}</a>
|
<a href="about"><i class="fa-regular fa-user"></i></a> <a href="/about">{{ site.Params.Author }}</a>
|
||||||
|
|
|
@ -6,11 +6,12 @@
|
||||||
{{ if .IsHome }}
|
{{ if .IsHome }}
|
||||||
<h1>{{ site.Params.indexTitle | markdownify }}</h1>
|
<h1>{{ site.Params.indexTitle | markdownify }}</h1>
|
||||||
{{ else }}
|
{{ else }}
|
||||||
<h1>{{ .Title | markdownify }}</h1>
|
<h1>{{ .Title | markdownify }}{{ if eq .Kind "term" }} <a target="_blank" href="feed.xml" aria-label="Category RSS"><i class="fa-solid fa-square-rss"></i></a> </h1>{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ .Content }}
|
{{ .Content }}
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
{{- if ne .Title "Tags"}}
|
||||||
{{- range (.Paginate $pages).Pages }}
|
{{- range (.Paginate $pages).Pages }}
|
||||||
{{- $postDate := .Date.Format "2006-01-02" }}
|
{{- $postDate := .Date.Format "2006-01-02" }}
|
||||||
{{- $updateDate := .Lastmod.Format "2006-01-02" }}
|
{{- $updateDate := .Lastmod.Format "2006-01-02" }}
|
||||||
|
@ -29,3 +30,8 @@
|
||||||
</article>
|
</article>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{- template "_internal/pagination.html" . }}
|
{{- template "_internal/pagination.html" . }}
|
||||||
|
{{- else }}
|
||||||
|
{{- range .Pages.ByTitle }}
|
||||||
|
[<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>]
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
|
@ -61,4 +61,4 @@
|
||||||
{{- end }}
|
{{- end }}
|
||||||
<hr>
|
<hr>
|
||||||
<h3>status.lol</h3>
|
<h3>status.lol</h3>
|
||||||
<script src="https://status.lol/jbowdre.js?time&link&no-emoji"></script>
|
<script src="https://status.lol/jbowdre.js?time&link&fluent&pretty"></script>
|
||||||
|
|
|
@ -5,6 +5,18 @@
|
||||||
<meta charset="UTF-8"/>
|
<meta charset="UTF-8"/>
|
||||||
{{ if or (.Site.Params.noindex) (.Params.noindex) }}<meta name="robots" content="noindex" /> {{ end }}
|
{{ if or (.Site.Params.noindex) (.Params.noindex) }}<meta name="robots" content="noindex" /> {{ end }}
|
||||||
|
|
||||||
|
<!-- RSS -->
|
||||||
|
{{ with .OutputFormats.Get "rss" -}}
|
||||||
|
{{ printf `<link rel=%q type=%q href=%q title=%q>` .Rel .MediaType.Type .Permalink site.Title | safeHTML }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<!-- verification links -->
|
||||||
|
{{ if .IsHome }}
|
||||||
|
{{ range $item := .Site.Params.verifyLinks }}
|
||||||
|
<link rel="me" title="{{ $item.title }}" href="{{ $item.url }}">
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
{{ partialCached "favicon" . }}
|
{{ partialCached "favicon" . }}
|
||||||
{{ partial "opengraph" . }}
|
{{ partial "opengraph" . }}
|
||||||
|
|
||||||
|
|
|
@ -169,3 +169,30 @@ ul.pagination li {
|
||||||
display:flex;
|
display:flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* statuslol overrides */
|
||||||
|
.statuslol {
|
||||||
|
background: var(--inner-bg) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.statuslol_content p,
|
||||||
|
.statuslol_content li,
|
||||||
|
.statuslol_content em,
|
||||||
|
.statuslol_content strong {
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
font-size: 0.8em;
|
||||||
|
line-height:normal;
|
||||||
|
margin: 0.2em auto;
|
||||||
|
color: var(--fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.statuslol_time a:link,
|
||||||
|
.statuslol_time a:visited {
|
||||||
|
color: var(--link) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.statuslol_time a:hover,
|
||||||
|
.statuslol_time a:active,
|
||||||
|
.statuslol_time a.active {
|
||||||
|
color: var(--hover) !important;
|
||||||
|
}
|
BIN
static/images/broken-computer.png
Normal file
BIN
static/images/broken-computer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.3 KiB |
Loading…
Reference in a new issue