diff --git a/backend/scripts/_env b/backend/scripts/_env index 1e4408efe8..f5cca5538b 100644 --- a/backend/scripts/_env +++ b/backend/scripts/_env @@ -3,6 +3,7 @@ export PENPOT_MANAGEMENT_API_KEY=super-secret-management-api-key export PENPOT_SECRET_KEY=super-secret-devenv-key export PENPOT_HOST=devenv +export PENPOT_PUBLIC_URI=https://localhost:3449 export PENPOT_FLAGS="\ $PENPOT_FLAGS \ diff --git a/docker/devenv/Dockerfile b/docker/devenv/Dockerfile index b837b19a52..4f2a16115d 100644 --- a/docker/devenv/Dockerfile +++ b/docker/devenv/Dockerfile @@ -101,6 +101,38 @@ RUN set -eux; \ corepack enable; \ rm -rf /tmp/nodejs.tar.gz; + +################################################################################ +## CADDYSERVER SETUP +################################################################################ + +FROM base AS setup-caddy + +ENV CADDY_VERSION=2.10.2 + +RUN set -eux; \ + ARCH="$(dpkg --print-architecture)"; \ + case "${ARCH}" in \ + aarch64|arm64) \ + BINARY_URL="https://github.com/caddyserver/caddy/releases/download/v${CADDY_VERSION}/caddy_${CADDY_VERSION}_linux_arm64.tar.gz"; \ + ;; \ + amd64|x86_64) \ + BINARY_URL="https://github.com/caddyserver/caddy/releases/download/v${CADDY_VERSION}/caddy_${CADDY_VERSION}_linux_amd64.tar.gz"; \ + ;; \ + *) \ + echo "Unsupported arch: ${ARCH}"; \ + exit 1; \ + ;; \ + esac; \ + curl -LfsSo /tmp/caddy.tar.gz ${BINARY_URL}; \ + mkdir -p /tmp/caddy; \ + cd /tmp/caddy; \ + tar -xf /tmp/caddy.tar.gz; \ + chown -R root /tmp/caddy; \ + mv /tmp/caddy/caddy /usr/bin/; \ + rm -rf /tmp/caddy.tar.gz; \ + rm -rf /tmp/caddy; + ################################################################################ ## JVM SETUP ################################################################################ @@ -393,6 +425,7 @@ COPY --from=setup-utils /opt/utils /opt/utils COPY --from=setup-rust /opt/cargo /opt/cargo COPY --from=setup-rust /opt/rustup /opt/rustup COPY --from=setup-rust /opt/emsdk /opt/emsdk +COPY --from=setup-caddy /usr/bin/caddy /usr/bin/caddy COPY files/nginx.conf /etc/nginx/nginx.conf COPY files/nginx-mime.types /etc/nginx/mime.types @@ -403,6 +436,9 @@ COPY files/vimrc /root/.vimrc COPY files/tmux.conf /root/.tmux.conf COPY files/sudoers /etc/sudoers +COPY files/Caddyfile /home/ +COPY files/selfsigned.crt /home/ +COPY files/selfsigned.key /home/ COPY files/start-tmux.sh /home/start-tmux.sh COPY files/start-tmux-back.sh /home/start-tmux-back.sh COPY files/entrypoint.sh /home/entrypoint.sh diff --git a/docker/devenv/docker-compose.yaml b/docker/devenv/docker-compose.yaml index 89580ef8b4..30b0dde4d0 100644 --- a/docker/devenv/docker-compose.yaml +++ b/docker/devenv/docker-compose.yaml @@ -33,6 +33,8 @@ services: - 3447:3447 - 3448:3448 - 3449:3449 + - 3449:3449/udp + - 3450:3450 - 6006:6006 - 6060:6060 - 6061:6061 diff --git a/docker/devenv/files/Caddyfile b/docker/devenv/files/Caddyfile new file mode 100644 index 0000000000..221c93e349 --- /dev/null +++ b/docker/devenv/files/Caddyfile @@ -0,0 +1,29 @@ +{ + auto_https off +} + +localhost:3449 { + reverse_proxy localhost:4449 + tls /home/selfsigned.crt /home/selfsigned.key + + log { + format console + output file /home/penpot/penpot/logs/caddy.access.log { + roll_size 10MB # Create new file when size exceeds 10MB + roll_keep 5 # Keep at most 5 rolled files + roll_keep_for 14d # Delete files older than 14 days + } + } +} + +http://localhost:3450 { + reverse_proxy localhost:4449 + log { + format console + output file /home/penpot/penpot/logs/caddy.access.log { + roll_size 10MB # Create new file when size exceeds 10MB + roll_keep 5 # Keep at most 5 rolled files + roll_keep_for 14d # Delete files older than 14 days + } + } +} diff --git a/docker/devenv/files/init.sh b/docker/devenv/files/init.sh index 2f809ebbb9..f4a7af4978 100755 --- a/docker/devenv/files/init.sh +++ b/docker/devenv/files/init.sh @@ -2,4 +2,6 @@ set -e nginx -tail -f /dev/null +mkdir -p penpot/logs +caddy start -c /home/Caddyfile +tail -f /dev/null; diff --git a/docker/devenv/files/nginx.conf b/docker/devenv/files/nginx.conf index 481ae826aa..6af0fef033 100644 --- a/docker/devenv/files/nginx.conf +++ b/docker/devenv/files/nginx.conf @@ -12,7 +12,7 @@ http { sendfile on; tcp_nopush on; tcp_nodelay on; - keepalive_timeout 0; + keepalive_timeout 100; types_hash_max_size 2048; server_tokens off; @@ -55,7 +55,7 @@ http { proxy_cache_key "$host$request_uri"; server { - listen 3449 default_server; + listen 4449 default_server; server_name _; client_max_body_size 300M; @@ -231,7 +231,6 @@ http { } add_header Cache-Control "no-store"; - add_header Connection close always; # This header is what we need to use on prod # add_header Cache-Control "public, must-revalidate, max-age=0"; try_files $uri /index.html$is_args$args /index.html =404; diff --git a/docker/devenv/files/selfsigned.crt b/docker/devenv/files/selfsigned.crt new file mode 100644 index 0000000000..75023df03e --- /dev/null +++ b/docker/devenv/files/selfsigned.crt @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIUa3THJQSn1+ErK65g1jDL0tjUkBYwDQYJKoZIhvcNAQEL +BQAwXzELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBUxvY2FsMQ4wDAYDVQQHDAVMb2Nh +bDEOMAwGA1UECgwFTG9jYWwxDDAKBgNVBAsMA0RldjESMBAGA1UEAwwJbG9jYWxo +b3N0MB4XDTI1MTIwMjA4MjUyM1oXDTI2MTIwMjA4MjUyM1owXzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBUxvY2FsMQ4wDAYDVQQHDAVMb2NhbDEOMAwGA1UECgwFTG9j +YWwxDDAKBgNVBAsMA0RldjESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyVIlfpIPE+QyL/q7IQOilEA7wEOZ6wbsh2Fr +59H1gSLFvgoCxI6RVUkQ/MFRnw/r1ZbAqRpc2xAl5a9Ml14q20Zlj6dAHsWX6O2J +EwNsD18dQmX3BncnjV3yCZM2iQcMFKuXG4KQNdIQNNvdIgtlrHYp0ohS9s3XC7cj +KxNrm/pW9EAXfn9AYDd/qER090L2E4ipP9m/5l3MjinNc4l2kpH9rLOgb79H0RLt +PK3/KP8ErZhAvzdmDBAdM5Z5K37b+TfB/kSVNUKL6qyw5CCjlShERLhBNprlnRfz +tHNIQ1RHq3qJJN19ZnJrLqICuQ5ztvj7hBDiOSV0LnmyKgXr6wIDAQABo28wbTAd +BgNVHQ4EFgQUPL8WGf6z/wB8TimJBx1zybsIeikwHwYDVR0jBBgwFoAUPL8WGf6z +/wB8TimJBx1zybsIeikwDwYDVR0TAQH/BAUwAwEB/zAaBgNVHREEEzARgglsb2Nh +bGhvc3SHBH8AAAEwDQYJKoZIhvcNAQELBQADggEBACMMVyR3kbNxnzuUc2lahKH4 +cPXVWOsvCvnDtjzm41XmKjUJTbtjn3p5d/ZmLbZ4zzIQULfWXO3XG/HevkvVo0g6 +6pJXTXc6C6ZhFG0rIYMcPPzmGmalDV5n+lUaCVx5XbFFxvRQ7893auwhRATdwGs+ +xiMyYbE2w9otKqyDItmJZJ5nW6vmXJ42YHxlXF18u9U88xqtOSMd5xZahbsmw7Gg +A4/o4TPoAX5QfA306sL443WaczsF7bmsTf9qcYa/3xxQkP5Seyqx8ePWpS22qysE +jG6XPpymxb6sb2mVaFBAzhEMb/eBvE9nRAopxmB7uV4TbqC51K/U3uo6jFX4Jbw= +-----END CERTIFICATE----- diff --git a/docker/devenv/files/selfsigned.key b/docker/devenv/files/selfsigned.key new file mode 100644 index 0000000000..f770216185 --- /dev/null +++ b/docker/devenv/files/selfsigned.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDJUiV+kg8T5DIv ++rshA6KUQDvAQ5nrBuyHYWvn0fWBIsW+CgLEjpFVSRD8wVGfD+vVlsCpGlzbECXl +r0yXXirbRmWPp0AexZfo7YkTA2wPXx1CZfcGdyeNXfIJkzaJBwwUq5cbgpA10hA0 +290iC2WsdinSiFL2zdcLtyMrE2ub+lb0QBd+f0BgN3+oRHT3QvYTiKk/2b/mXcyO +Kc1ziXaSkf2ss6Bvv0fREu08rf8o/wStmEC/N2YMEB0zlnkrftv5N8H+RJU1Qovq +rLDkIKOVKEREuEE2muWdF/O0c0hDVEereokk3X1mcmsuogK5DnO2+PuEEOI5JXQu +ebIqBevrAgMBAAECggEABqtE+LNn8nW9v98jcc2IBjc2g4D5yVJaZYWxqGVJJ7T6 +Lfhw7Qf4AoZAHM9en9FMM7Ahw7hO2SboynoLJHyHGOp1FNQqiJptFNdBkjKr0rqI +4pk0HK+3zLQO/4gz50gne0vP3qZtlorV5Jpf8e/Et3jWm9XOQcTB2e6AKL4k827B +dv4Tld+/7PoZVXjahfrUWuIZr5mzyF1eUkD8sPOpdr3HJxSueqsOMjbG8XMRqCQ+ +5eCWWSW5yPQlMr7M7cXM+a0k73Xn1sKl7fP3/9byji25zxGUaMu5RA1kw0Oqseid +RXuRxGphGZgnx1aFxDAPg3FtmGch7/Cc6WfqboOL0QKBgQD4GZO1gGaE8cg4lvuo +ZUX2YJu6UJuNOmuhfvG3ui4WO9PHy3btc2q+3kutSuBcyIjhi+qbXasBcX/QOOJF +udyTZc5PopNkJojS4JdXAZCiu5sKI3lp4DIt9qNISlXGgrJgdxGUO+DzarBctXdn +BSwXFw5hcjJjl7wsPGQl1tBTQwKBgQDPuz5MEM5ZeUe9CT5sQDq/ld0u4aL5AHmx +aaA2gzDgd9l2R5wHX6wLzjoVWXOmeqaYzJopt2JN4iXrtbjWkyePgZeZMyWoyJ/v +clW9bi8HM9f9EpPr7czSj9sLUnsjd9cuTD+JuXK//jRGbRpw7r7nWtLHImjj6d2v +APZRq0v2OQKBgBcESG/OObSbubeGSlKVEqiIzem7ELNJeDLDVCl3XE8zvbILbj0Z +OA39EYhCKg5xjEFgeaNwTS0VGoZ2wIc3dv81sq4wpvvjl035CBFKU+DFBt0p7Vml +MwKQnxVV0B9agLHyWe8mnvf2LeZr72ffUvfRa8QelA4pRYvVDnV0OF+BAoGAW6rM ++tQPuvwB5DFIEozlX9XKHP4E5MyI5vktceDCmMtKcx92gup9CVif2Pv4ROaqzZK8 +FNyPzL6W7UTrpASb2H/fXgNsAudFbGyP2V/d8Ne34D1qeRoe4GwKxRxIqoYftpZ/ +E096i66pcsqCeINiSsWRbb6JesmgwbEzAScOBkECgYEA6O/Dibc9PaqRpaiE6Qut +S3W/Rr1Pd1jbN4rOVI2TFCgMJQmc6jOdq2fCntR9acsa8HPx+djOlXTUBPKBZ/Ae +p8umRdXVWcNMnwWVWHt7tsEuR/gYkxQ5xjXeS1VDPnEre9+EaevMBuVs8HdRsKQO +uzvNGeAFEfqwIqn7CFQ+ndU= +-----END PRIVATE KEY-----