From 04055de23cf448190786e78e9a4b2061a56d7f3f Mon Sep 17 00:00:00 2001 From: Dominic Ricottone Date: Thu, 25 May 2023 00:14:49 -0500 Subject: [PATCH] Initial commit with my core utilities --- .gitmodules | 3 + dnsmasq/Dockerfile | 12 +++ dnsmasq/Makefile | 14 ++++ dnsmasq/README.md | 34 ++++++++ dnsmasq/dnsmasq.conf | 6 ++ haproxy/Dockerfile | 8 ++ haproxy/Makefile | 14 ++++ haproxy/README.md | 46 +++++++++++ haproxy/haproxy.cfg | 19 +++++ nginx/Dockerfile | 5 ++ nginx/Makefile | 14 ++++ nginx/README.md | 149 +++++++++++++++++++++++++++++++++++ nginx/error_pages.d/403.html | 12 +++ nginx/error_pages.d/404.html | 12 +++ nginx/error_pages.d/500.html | 12 +++ nginx/error_pages.d/502.html | 12 +++ nginx/error_pages.d/503.html | 12 +++ nginx/error_pages.d/504.html | 12 +++ nginx/errorpages.conf | 36 +++++++++ nginx/fastcgi.conf | 28 +++++++ nginx/graphql.conf | 18 +++++ nginx/headers.conf | 3 + nginx/letsencrypt.conf | 6 ++ nginx/nginx.conf | 36 +++++++++ nginx/proxy.conf | 5 ++ nginx/uwsgi.conf | 22 ++++++ nitter/Makefile | 31 ++++++++ nitter/README.md | 75 ++++++++++++++++++ nitter/src | 1 + 29 files changed, 657 insertions(+) create mode 100644 .gitmodules create mode 100644 dnsmasq/Dockerfile create mode 100644 dnsmasq/Makefile create mode 100644 dnsmasq/README.md create mode 100644 dnsmasq/dnsmasq.conf create mode 100644 haproxy/Dockerfile create mode 100644 haproxy/Makefile create mode 100644 haproxy/README.md create mode 100644 haproxy/haproxy.cfg create mode 100644 nginx/Dockerfile create mode 100644 nginx/Makefile create mode 100644 nginx/README.md create mode 100644 nginx/error_pages.d/403.html create mode 100644 nginx/error_pages.d/404.html create mode 100644 nginx/error_pages.d/500.html create mode 100644 nginx/error_pages.d/502.html create mode 100644 nginx/error_pages.d/503.html create mode 100644 nginx/error_pages.d/504.html create mode 100644 nginx/errorpages.conf create mode 100644 nginx/fastcgi.conf create mode 100644 nginx/graphql.conf create mode 100644 nginx/headers.conf create mode 100644 nginx/letsencrypt.conf create mode 100644 nginx/nginx.conf create mode 100644 nginx/proxy.conf create mode 100644 nginx/uwsgi.conf create mode 100644 nitter/Makefile create mode 100644 nitter/README.md create mode 160000 nitter/src diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..67bf4f2 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "nitter/src"] + path = nitter/src + url = https://github.com/PrivacyDevel/nitter diff --git a/dnsmasq/Dockerfile b/dnsmasq/Dockerfile new file mode 100644 index 0000000..f193475 --- /dev/null +++ b/dnsmasq/Dockerfile @@ -0,0 +1,12 @@ +FROM docker.io/library/alpine:latest + +COPY dnsmasq.conf /etc/dnsmasq.conf + +RUN apk add --no-cache dnsmasq dumb-init + +EXPOSE 53 53/udp + +ENTRYPOINT ["/usr/bin/dumb-init", "--"] + +CMD ["dnsmasq", "--keep-in-foreground"] + diff --git a/dnsmasq/Makefile b/dnsmasq/Makefile new file mode 100644 index 0000000..82a95ac --- /dev/null +++ b/dnsmasq/Makefile @@ -0,0 +1,14 @@ +CONMAN=sudo docker +COLORIZE=| { GREP_COLORS="ms=01;32" grep -e '.*' --color=always || true; } + +REGISTRY=registry.intra.dominic-ricottone.com +IMAGE=dnsmasq +TAG=latest + +image: + $(CONMAN) buildx build --push \ + --platform linux/arm64,linux/amd64 \ + --tag $(REGISTRY)/$(IMAGE):$(TAG) \ + . + +.PHONY: image diff --git a/dnsmasq/README.md b/dnsmasq/README.md new file mode 100644 index 0000000..44b826c --- /dev/null +++ b/dnsmasq/README.md @@ -0,0 +1,34 @@ +# dnsmasq + + +## Build and Deploy + +``` +make image +``` + + +### Tags + + + `latest` + +---- + +## Use + +Can be used with any container manager toolchain. + +Create a hosts file in `$hostsfile`. It should look like: + +``` +1.2.3.4 example.com www.example.com +``` + +Try: + +``` +$conman run --detach --name dnsmasq --restart always \ + --mount type=bind,src=$hostsfile,target=/etc/dnsmasq-hosts,readonly \ + registry.intra.dominic-ricottone.com/dnsmasq:latest +``` + diff --git a/dnsmasq/dnsmasq.conf b/dnsmasq/dnsmasq.conf new file mode 100644 index 0000000..ce8983a --- /dev/null +++ b/dnsmasq/dnsmasq.conf @@ -0,0 +1,6 @@ +no-hosts +addn-hosts=/etc/dnsmasq-hosts +no-resolv +server=8.8.4.4 +server=8.8.8.8 + diff --git a/haproxy/Dockerfile b/haproxy/Dockerfile new file mode 100644 index 0000000..32daa1f --- /dev/null +++ b/haproxy/Dockerfile @@ -0,0 +1,8 @@ +FROM docker.io/library/haproxy:alpine + +COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg + +# Overriding the CMD to load all '*.cfg' files in '/usr/local/etc/haproxy.d'; +# lexical order, newer files overriding older files +CMD ["haproxy", "-f", "/usr/local/etc/haproxy/haproxy.cfg", "-f", "/usr/local/etc/haproxy.d"] + diff --git a/haproxy/Makefile b/haproxy/Makefile new file mode 100644 index 0000000..561de5d --- /dev/null +++ b/haproxy/Makefile @@ -0,0 +1,14 @@ +CONMAN=sudo docker +COLORIZE=| { GREP_COLORS="ms=01;32" grep -e '.*' --color=always || true; } + +REGISTRY=registry.intra.dominic-ricottone.com +IMAGE=haproxy +TAG=latest + +image: + $(CONMAN) buildx build --push \ + --platform linux/arm64,linux/amd64 \ + --tag $(REGISTRY)/$(IMAGE):$(TAG) \ + . + +.PHONY: image diff --git a/haproxy/README.md b/haproxy/README.md new file mode 100644 index 0000000..7f627fa --- /dev/null +++ b/haproxy/README.md @@ -0,0 +1,46 @@ +# haproxy + + +## Build and Deploy + +``` +make image +``` + + +### Tags + + + `latest` + +---- + +## Use + +Can be used with any container manager toolchain. + +Create configuration files in `$confdir`. They should look like: + +``` +resolvers docker_dns + nameserver docker 127.0.0.11:53 + +backend www_backend + server web1 nginx:80 check resolvers docker_dns + +frontend http_frontend + bind :8080 + bind :8443 ssl crt /var/letsencrypt/example.com.pem alpn h2,http1.1 + mode http + http-request redirect scheme https unless { ssl_fc } + + default_backend web_backend +``` + +Try: + +``` +$conman run --detach --name haproxy --restart always \ + --mount type=bind,src=$confdir,dst=/usr/local/etc/haproxy.d,readonly \ + registry.intra.dominic-ricottone.com/haproxy:latest +``` + diff --git a/haproxy/haproxy.cfg b/haproxy/haproxy.cfg new file mode 100644 index 0000000..cd70a0d --- /dev/null +++ b/haproxy/haproxy.cfg @@ -0,0 +1,19 @@ +global + ssl-default-bind-options ssl-min-ver TLSv1.2 + log stdout format raw local0 + maxconn 1024 + +defaults + timeout connect 10s + timeout client 30s + timeout server 30s + mode http + log global + default-server init-addr none + +#frontend stats_frontend +# bind :8404 +# http-request use-service prometheus-exporter if { path /metrics } +# stats enable +# stats uri /stats +# stats refresh 10s diff --git a/nginx/Dockerfile b/nginx/Dockerfile new file mode 100644 index 0000000..d2e19f2 --- /dev/null +++ b/nginx/Dockerfile @@ -0,0 +1,5 @@ +FROM docker.io/library/nginx:alpine + +COPY *.conf /etc/nginx/ +COPY error_pages.d/ /etc/nginx/conf.d/error_pages.d/ + diff --git a/nginx/Makefile b/nginx/Makefile new file mode 100644 index 0000000..9c6960a --- /dev/null +++ b/nginx/Makefile @@ -0,0 +1,14 @@ +CONMAN=sudo docker +COLORIZE=| { GREP_COLORS="ms=01;32" grep -e '.*' --color=always || true; } + +REGISTRY=registry.intra.dominic-ricottone.com +IMAGE=nginx +TAG=latest + +image: + $(CONMAN) buildx build --push \ + --platform linux/arm64,linux/amd64 \ + --tag $(REGISTRY)/$(IMAGE):$(TAG) \ + . + +.PHONY: image diff --git a/nginx/README.md b/nginx/README.md new file mode 100644 index 0000000..8181563 --- /dev/null +++ b/nginx/README.md @@ -0,0 +1,149 @@ +# nginx + + +## Build and Deploy + +``` +make image +``` + + +### Tags + + + `latest` + +---- + +## Use + +Can be used with any container manager toolchain. + +Create server files in `$confdir`. They should look like: + +``` +server { + listen 80 default_server; + server_name _; + + location / { + root /usr/share/nginx/html; + } +} +``` + +Try: + +``` +$conman run --detach --name nginx --restart always \ + --mount type=bind,src=$confdir,dst=/etc/nginx/conf.d,readonly \ + registry.intra.dominic-ricottone.com/nginx:latest +``` + +---- + +## How to use... + + +### errorpages.conf + +`errorpages.conf` adds custom error pages and locations. +Consider adding these to all server. + +``` +server { + list 80; + server_name example.com; + + include errorpages.conf; +} +``` + + +### headers.conf + +`headers.conf` adds a set of very common and generally useful headers. +Consider adding these to all locations except on the default server, +and any internal redirect locations. + +``` +location / { + include headers.conf; +} +``` + + +### proxy.conf + +`proxy.conf` adds a set of headers and enables a set of options that are +useful for redirects and proxies. + +``` +location / { + proxy_read_timeout 300s; + proxy_connect_timeout 75s; + proxy_pass http://localhost:8080; + include proxy.conf; +} +``` + + +### fastcgi.conf + +`uwsgi.conf` adds a set of headers and enables a set of options that are +useful for FastCGI proxies. + +``` +location / { + include fastcgi.conf; + fastcgi_param SCRIPT_FILENAME /app.cgi; + fastcgi_param PATH_INFO $uri; + fastcgi_param QUERY_STRING $args; + fastcgi_param HTTP_HOST $server_name; + fastcgi_pass localhost:9000; +} +``` + + + +### uwsgi.conf + +`uwsgi.conf` adds a set of headers and enables a set of options that are +useful for uWSGI proxies. + +``` +location / { + include uwsgi.conf; + uwsgi_pass localhost:9000; +} +``` + + +### graphql.conf + +`graphql.conf` adds a set of headers and enables a set of options that are +useful for GraphQL proxies. + +``` +location /query { + proxy_read_timeout 300s; + proxy_connect_timeout 75s; + proxy_pass http://localhost:8081; + include graphql.conf; +} +``` + + +### letsencrypt.conf + +`letsencrypt.conf` adds a location for `certbot(8)` integration. + +``` +server { + listen 80; + server_name example.com; + + include letsencrypt.conf; +} +``` + + diff --git a/nginx/error_pages.d/403.html b/nginx/error_pages.d/403.html new file mode 100644 index 0000000..427bcb0 --- /dev/null +++ b/nginx/error_pages.d/403.html @@ -0,0 +1,12 @@ + + + + + 403 - Forbidden + + +

403 - Forbidden

+

You reached an instance of `nginx(8)`

+ + + diff --git a/nginx/error_pages.d/404.html b/nginx/error_pages.d/404.html new file mode 100644 index 0000000..d7f227d --- /dev/null +++ b/nginx/error_pages.d/404.html @@ -0,0 +1,12 @@ + + + + + 404 - Not Found + + +

404 - Not Found

+

You reached an instance of `nginx(8)`

+ + + diff --git a/nginx/error_pages.d/500.html b/nginx/error_pages.d/500.html new file mode 100644 index 0000000..0cb9c55 --- /dev/null +++ b/nginx/error_pages.d/500.html @@ -0,0 +1,12 @@ + + + + + 500 - Internal Server Error + + +

500 - Internal Server Error

+

You reached an instance of `nginx(8)`

+ + + diff --git a/nginx/error_pages.d/502.html b/nginx/error_pages.d/502.html new file mode 100644 index 0000000..30981fc --- /dev/null +++ b/nginx/error_pages.d/502.html @@ -0,0 +1,12 @@ + + + + + 502 - Bad Gateway + + +

502 - Bad Gateway

+

You reached an instance of `nginx(8)`

+ + + diff --git a/nginx/error_pages.d/503.html b/nginx/error_pages.d/503.html new file mode 100644 index 0000000..78b6c7b --- /dev/null +++ b/nginx/error_pages.d/503.html @@ -0,0 +1,12 @@ + + + + + 503 - Service Unavailable + + +

503 - Service Unavailable

+

You reached an instance of `nginx(8)`

+ + + diff --git a/nginx/error_pages.d/504.html b/nginx/error_pages.d/504.html new file mode 100644 index 0000000..1e5d08f --- /dev/null +++ b/nginx/error_pages.d/504.html @@ -0,0 +1,12 @@ + + + + + 504 - Gateway Timeout + + +

504 - Gateway Timeout

+

You reached an instance of `nginx(8)`

+ + + diff --git a/nginx/errorpages.conf b/nginx/errorpages.conf new file mode 100644 index 0000000..08093b9 --- /dev/null +++ b/nginx/errorpages.conf @@ -0,0 +1,36 @@ +error_page 403 /403.html; +location = /403.html { + root /etc/nginx/conf.d/error_pages.d; + internal; +} + +error_page 404 /404.html; +location = /404.html { + root /etc/nginx/conf.d/error_pages.d; + internal; +} + +error_page 500 /500.html; +location = /500.html { + root /etc/nginx/conf.d/error_pages.d; + internal; +} + +error_page 502 /502.html; +location = /502.html { + root /etc/nginx/conf.d/error_pages.d; + internal; +} + +error_page 503 /503.html; +location = /503.html { + root /etc/nginx/conf.d/error_pages.d; + internal; +} + +error_page 504 /504.html; +location = /504.html { + root /etc/nginx/conf.d/error_pages.d; + internal; +} + diff --git a/nginx/fastcgi.conf b/nginx/fastcgi.conf new file mode 100644 index 0000000..3e95693 --- /dev/null +++ b/nginx/fastcgi.conf @@ -0,0 +1,28 @@ +# mitigate crafted URLs +fastcgi_param REDIRECT_STATUS 200; + +# mitigate httpoxy.com +fastcgi_param HTTP_PROXY ""; + +fastcgi_param QUERY_STRING $query_string; +fastcgi_param REQUEST_METHOD $request_method; +fastcgi_param CONTENT_TYPE $content_type; +fastcgi_param CONTENT_LENGTH $content_length; + +fastcgi_param SCRIPT_NAME $fastcgi_script_name; +fastcgi_param REQUEST_URI $request_uri; +fastcgi_param DOCUMENT_URI $document_uri; +fastcgi_param DOCUMENT_ROOT $document_root; +fastcgi_param SERVER_PROTOCOL $server_protocol; +fastcgi_param REQUEST_SCHEME $scheme; +fastcgi_param HTTPS $https if_not_empty; + +fastcgi_param GATEWAY_INTERFACE CGI/1.1; +fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + +fastcgi_param REMOTE_ADDR $remote_addr; +fastcgi_param REMOTE_PORT $remote_port; +fastcgi_param SERVER_ADDR $server_addr; +fastcgi_param SERVER_PORT $server_port; +fastcgi_param SERVER_NAME $server_name; + diff --git a/nginx/graphql.conf b/nginx/graphql.conf new file mode 100644 index 0000000..619fb3e --- /dev/null +++ b/nginx/graphql.conf @@ -0,0 +1,18 @@ +real_ip_header X-Forwarded-For; +real_ip_recursive on; +proxy_set_header Host $host; +proxy_set_header X-Forwarded-Proto https; +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; + add_header 'Access-Control-Allow-Headers' 'User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + return 204; +} +add_header 'Access-Control-Allow-Origin' '*'; +add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; +add_header 'Access-Control-Allow-Headers' 'User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; +add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; diff --git a/nginx/headers.conf b/nginx/headers.conf new file mode 100644 index 0000000..45e8bcb --- /dev/null +++ b/nginx/headers.conf @@ -0,0 +1,3 @@ +add_header X-Clacks-Overhead "GNU Terry Pratchett"; +add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; +add_header Permissions-Policy interest-cohort=(); diff --git a/nginx/letsencrypt.conf b/nginx/letsencrypt.conf new file mode 100644 index 0000000..4465c17 --- /dev/null +++ b/nginx/letsencrypt.conf @@ -0,0 +1,6 @@ +location ^~ /.well-known/acme-challenge/ { + allow all; + root /usr/share/nginx/html/letsencrypt; + default_type "text/plain"; + try_files $uri =404; +} diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..be0dfc5 --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,36 @@ +user nginx; +worker_processes auto; +pcre_jit on; +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; +include /etc/nginx/modules/*.conf; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + server_tokens off; + client_max_body_size 1m; + sendfile on; + tcp_nopush on; + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:2m; + ssl_session_timeout 1h; + ssl_session_tickets off; + gzip_vary on; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + include /etc/nginx/http.d/*.conf; +} + + diff --git a/nginx/proxy.conf b/nginx/proxy.conf new file mode 100644 index 0000000..a89f03b --- /dev/null +++ b/nginx/proxy.conf @@ -0,0 +1,5 @@ +real_ip_header X-Forwarded-For; +real_ip_recursive on; +proxy_set_header Host $host; +proxy_set_header X-Forwarded-Proto https; +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; diff --git a/nginx/uwsgi.conf b/nginx/uwsgi.conf new file mode 100644 index 0000000..dc97b90 --- /dev/null +++ b/nginx/uwsgi.conf @@ -0,0 +1,22 @@ +real_ip_header X-Forwarded-For; +real_ip_recursive on; +proxy_set_header Host $host; +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + +uwsgi_param QUERY_STRING $query_string; +uwsgi_param REQUEST_METHOD $request_method; +uwsgi_param CONTENT_TYPE $content_type; +uwsgi_param CONTENT_LENGTH $content_length; + +uwsgi_param REQUEST_URI $request_uri; +uwsgi_param PATH_INFO $document_uri; +uwsgi_param DOCUMENT_ROOT $document_root; +uwsgi_param SERVER_PROTOCOL $server_protocol; +uwsgi_param REQUEST_SCHEME $scheme; +uwsgi_param HTTPS $https if_not_empty; + +uwsgi_param REMOTE_ADDR $remote_addr; +uwsgi_param REMOTE_PORT $remote_port; +uwsgi_param SERVER_PORT $server_port; +uwsgi_param SERVER_NAME $server_name; + diff --git a/nitter/Makefile b/nitter/Makefile new file mode 100644 index 0000000..f5d5260 --- /dev/null +++ b/nitter/Makefile @@ -0,0 +1,31 @@ +CONMAN=sudo docker +COLORIZE=| { GREP_COLORS="ms=01;32" grep -e '.*' --color=always || true; } + +REGISTRY=registry.intra.dominic-ricottone.com +IMAGE=nitter +TAG_AMD64=amd64 +TAG_ARM64=arm64 + +image: image-amd64 image-arm64 + +image-amd64: + cd src && $(CONMAN) buildx build --push \ + --platform linux/amd64 \ + --tag $(REGISTRY)/$(IMAGE):$(TAG_AMD64) \ + . + +image-arm64: + cd src && $(CONMAN) buildx build --push \ + --platform linux/arm64 \ + --tag $(REGISTRY)/$(IMAGE):$(TAG_ARM64) \ + . -f Dockerfile.arm64 + +sync: + $(CONMAN) image push $(REGISTRY)/$(IMAGE):$(TAG_AMD64) $(COLORIZE) + $(CONMAN) image push $(REGISTRY)/$(IMAGE):$(TAG_ARM64) $(COLORIZE) + +clean: + $(CONMAN) image rm $(REGISTRY)/$(IMAGE):$(TAG_AMD64) $(COLORIZE) + $(CONMAN) image rm $(REGISTRY)/$(IMAGE):$(TAG_ARM64) $(COLORIZE) + +.PHONY: image sync clean diff --git a/nitter/README.md b/nitter/README.md new file mode 100644 index 0000000..b6cd8f6 --- /dev/null +++ b/nitter/README.md @@ -0,0 +1,75 @@ +# nitter + + +## Build and Deploy + +``` +make image +``` + + +### Tags + + + `amd64` + + `arm64` + +---- + +## Use + +Can be used with any container manager toolchain. + +Create a configuration file in `$conffile`. It should look like: + +``` +[Server] +address = "0.0.0.0" +port = 8080 +https = false +httpMaxConnections = 10 +staticDir = "./public" +title = "nitter" +hostname = "nitter.example.com" + +[Cache] +listMinutes = 240 +rssMinutes = 10 +redisHost = "redis" +redisPort = 6379 +redisPassword = "" +redisConnections = 20 +redisMaxConnections = 30 + +[Config] +hmacKey = "random key for cryptographic signing of video urls" +base64Media = false +enableRSS = false +enableDebug = false +proxy = "" +proxyAuth = "" +tokenCount = 10 + +cookieHeader = "ct0=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; auth_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +xCsrfToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + +[Preferences] +theme = "Nitter" +replaceTwitter = "nitter.example.com" +replaceYouTube = "" +replaceReddit = "" +replaceInstagram = "" +proxyVideos = true +hlsPlayback = false +infiniteScroll = false +``` + +Try: + +``` +$conman run --detach --name redis --restart always \ + docker.io/library/redis:6-alpine redis-server +$conman run --detach --name nitter --restart always \ + --mount type=bind,src=$conffile,dst=/src/nitter.conf \ + registry.intra.dominic-ricottone.com/nitter:latest +``` + diff --git a/nitter/src b/nitter/src new file mode 160000 index 0000000..892caaf --- /dev/null +++ b/nitter/src @@ -0,0 +1 @@ +Subproject commit 892caaf7962f2a6df6addf37cf26db28fe73f7fd -- 2.45.2