in theory make LE work

This commit is contained in:
Matthew Hodgson
2024-11-08 10:19:32 +00:00
parent 78fd054943
commit 483f71d58f
16 changed files with 32 additions and 50 deletions

View File

@@ -7,7 +7,6 @@
# n.b. SECRETS_* env variables get pulled in on demand from files in ./secrets
# XXX: how do we interpolate this in?
USER_ID=
GROUP_ID=

View File

@@ -11,22 +11,7 @@ into their ESS counterparts, and rehoming the postgres).
## To run
```
# pick a domain name:
DOMAIN=shadowfax.local
# grab a TLS certificate for the server:
brew install mkcert || apt-get install mkcert
mkcert -install
mkcert $DOMAIN '*.'$DOMAIN
mkdir -p data/nginx/ssl
mv ${DOMAIN}+1.pem data/nginx/ssl/cert.pem
mv ${DOMAIN}+1-key.pem data/nginx/ssl/key.pem
cp "$(mkcert -CAROOT)"/rootCA.pem data/nginx/ssl
# make an .env to configure your environment
cp .env-sample .env
sed -ir s/example.com/$DOMAIN/ .env
./setup.sh
docker compose up
```
@@ -55,7 +40,7 @@ docker compose exec mas mas-cli -c /data/config.yaml doctor
* [x] sort out the networking
* [x] make nginx do something useful when running on a local workstation
* [ ] hook up letsencrypt to nginx properly
* [x] hook up letsencrypt to nginx properly
* [x] hook up livekit properly
* [x] make it work

View File

@@ -72,9 +72,7 @@ services:
volumes:
- ${VOLUME_PATH}/data/nginx/conf.d:/etc/nginx/conf.d
- ${VOLUME_PATH}/data/nginx/www:/var/www
- ${VOLUME_PATH}/data/nginx/ssl:/etc/nginx/ssl
# - ${VOLUME_PATH}/data/certbot/conf:/etc/letsencrypt
# - ${VOLUME_PATH}/data/certbot/www:/var/www/certbot
- ${VOLUME_PATH}/data/ssl:/etc/nginx/ssl
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
networks:
backend:
@@ -90,16 +88,18 @@ services:
synapse:
condition: service_started
# certbot:
# image: certbot/certbot:latest
# restart: unless-stopped
# volumes:
# - ${VOLUME_PATH}/data/certbot/conf:/etc/letsencrypt
# - ${VOLUME_PATH}/data/certbot/www:/var/www/certbot
# entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
# depends_on:
# init:
# condition: service_completed_successfully
certbot:
image: certbot/certbot:latest
restart: unless-stopped
volumes:
- ${VOLUME_PATH}/data/certbot/conf:/etc/letsencrypt
- ${VOLUME_PATH}/data/certbot/www:/var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
depends_on:
init:
condition: service_completed_successfully
nginx:
condition: service_started
postgres:
image: postgres:latest
@@ -143,7 +143,7 @@ services:
restart: unless-stopped
volumes:
- ${VOLUME_PATH}/data/synapse:/data:rw
- ${VOLUME_PATH}/data/nginx/ssl/rootCA.pem:/etc/ssl/certs/ca-certificates.crt
- ${VOLUME_PATH}/data/nginx/ssl/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt
# ports:
# - 8008:8008
networks:
@@ -175,7 +175,7 @@ services:
- backend
volumes:
- ${VOLUME_PATH}/data/synapse:/data:rw
- ${VOLUME_PATH}/data/nginx/ssl/rootCA.pem:/etc/ssl/certs/ca-certificates.crt
- ${VOLUME_PATH}/data/nginx/ssl/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt
environment:
SYNAPSE_WORKER: synapse.app.generic_worker
# Expose port if required so your reverse proxy can send requests to this worker
@@ -198,7 +198,7 @@ services:
- backend
volumes:
- ${VOLUME_PATH}/data/synapse:/data:rw # Replace VOLUME_PATH with the path to your Synapse volume
- ${VOLUME_PATH}/data/nginx/ssl/rootCA.pem:/etc/ssl/certs/ca-certificates.crt
- ${VOLUME_PATH}/data/nginx/ssl/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt
environment:
SYNAPSE_WORKER: synapse.app.federation_sender
# ports:
@@ -215,7 +215,7 @@ services:
# - 8083:8080
volumes:
- ${VOLUME_PATH}/data/mas:/data:rw
- ${VOLUME_PATH}/data/nginx/ssl/rootCA.pem:/etc/ssl/certs/ca-certificates.crt
- ${VOLUME_PATH}/data/nginx/ssl/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt
networks:
- backend
# FIXME: do we also need to sync the db?
@@ -305,7 +305,7 @@ services:
COPY --from=builder /lk-jwt-service /
restart: unless-stopped
volumes:
- ${VOLUME_PATH}/data/nginx/ssl/rootCA.pem:/etc/ssl/certs/ca-certificates.crt
- ${VOLUME_PATH}/data/nginx/ssl/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt
- ${VOLUME_PATH}/init/livekit-jwt-entrypoint.sh:/entrypoint.sh
entrypoint: /entrypoint.sh
env_file: .env

View File

@@ -1,10 +1,8 @@
listen 443 ssl;
listen [::]:443 ssl;
# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# include /etc/letsencrypt/options-ssl-nginx.conf;
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
include /etc/nginx/ssl/options-ssl-nginx.conf;
ssl_dhparam /etc/nginx/ssl/ssl-dhparams.pem;

View File

View File

View File

View File

@@ -8,10 +8,10 @@ if ! [ -x "$(command -v docker-compose)" ]; then
fi
. .env
domains=($DOMAIN $HOMESERVER_FQDN $ELEMENT_FQDN $CALL_FQDN $MAS_FQDN)
domains=$DOMAINS
rsa_key_size=4096
data_path="./data/certbot"
email="" # Adding a valid address is strongly recommended
read -p "admin email address for letsencrypt: " email
staging=0 # Set to 1 if you're testing your setup to avoid hitting request limits
if [ -d "$data_path" ]; then
@@ -21,26 +21,26 @@ if [ -d "$data_path" ]; then
fi
fi
if [ ! -e "$data_path/conf/options-ssl-nginx.conf" ] || [ ! -e "$data_path/conf/ssl-dhparams.pem" ]; then
if [ ! -e "data/ssl/options-ssl-nginx.conf" ] || [ ! -e "data/ssl/ssl-dhparams.pem" ]; then
echo "### Downloading recommended TLS parameters ..."
mkdir -p "$data_path/conf"
curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf > "$data_path/conf/options-ssl-nginx.conf"
curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem > "$data_path/conf/ssl-dhparams.pem"
curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf > "data/ssl/options-ssl-nginx.conf"
curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem > "data/ssl/ssl-dhparams.pem"
echo
fi
echo "### Creating dummy certificate for $domains ..."
# N.B. in bash, $domains will return the first value of the array in string context, so this is not a bug:
path="/etc/letsencrypt/live/$domains"
mkdir -p "$data_path/conf/live/$domains"
docker-compose run --rm --entrypoint "\
openssl req -x509 -nodes -newkey rsa:$rsa_key_size -days 1\
-keyout '$path/privkey.pem' \
-out '$path/fullchain.pem' \
-subj '/CN=localhost'" certbot
-subj '/CN=localhost'; \
cp /etc/ssl/certs/ca-certificates.crt '$path'" certbot
echo
echo "### Starting nginx ..."
docker-compose up --force-recreate -d nginx
echo