From f5e216bdcfbd261e098057b78c0a1fef25d624fd Mon Sep 17 00:00:00 2001 From: abdulhade Date: Mon, 7 Apr 2025 14:18:43 +0300 Subject: [PATCH] Added Apache support. --- README.md | 116 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 97 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 7906f26..4c3dfbf 100644 --- a/README.md +++ b/README.md @@ -30,10 +30,10 @@ This repository includes: - [Test your setup](#test-your-setup) - [Using the `status` command:](#using-the-status-command) - [Using the `test_setup` command:](#using-the-test_setup-command) - - [Run it and make it available to use](#run-it-and-make-it-available-to-use) - - [Create your first admin user](#create-your-first-admin-user) - - [Expose the API](#expose-the-api) - - [Using Nginx](#using-nginx) + - [Create your first admin user](#create-your-first-admin-user) + - [Expose the API](#expose-the-api) + - [Using Nginx](#using-nginx) + - [Using Apache](#using-apache) - [Legal \& Licensing](#legal--licensing) - [⚠️ Important Legal Notice](#️-important-legal-notice) @@ -226,11 +226,11 @@ Config file loaded successfully. +-------------------------------------------+ ``` -## Run it and make it available to use + +## Create your first admin user First make sure it is running by calling the `db-middleware start` command. -### Create your first admin user We have two types of users, admin and regular (called just user), the admin can add/update/delete database connections, and create/delete normal users. @@ -253,7 +253,7 @@ Enter role (admin/user): admin You don't need passwords for this, just the username and role. -### Expose the API +## Expose the API This app currently runs on your local network only, we need to expose it so the data consumer on the Data Analysis product can access it and consume the data it provides. @@ -263,7 +263,7 @@ You can use a dedicated domain, or a sub-domain of yours. You can use any reverse proxy you prefer, we will guide you through Nginx and Apache. -#### Using Nginx +### Using Nginx Nginx is a great reverse-proxy that supports connection polling and real-time connections like Webhook and Server Site Events. @@ -328,22 +328,22 @@ sudo systemctl restart nginx 3. Implement TLS Encryption -You can use and certificate provided, we'll show you how to use Certbot Setup (Let’s Encrypt TLS) to obtain a free certificate. + You can use any certificate provider, we'll show you how to use Certbot Setup (Let’s Encrypt TLS) to obtain a free certificate. -Run this after Nginx is live on port 80 (ensure DNS points to your server!): + Run this after Nginx is live on port 80 (ensure DNS points to your server!): -```bash -sudo apt install -y certbot python3-certbot-nginx -sudo certbot --nginx -d your_domain.com # Replace with your domain -``` + ```bash + sudo apt install -y certbot python3-certbot-nginx + sudo certbot --nginx -d your_domain.com # Replace with your domain + ``` -Certbot will auto-configure Nginx to use HTTPS and redirect HTTP → HTTPS. + Certbot will auto-configure Nginx to use HTTPS and redirect HTTP → HTTPS. -Certificates auto-renew (add a cron job if not existing): + Certificates auto-renew (add a cron job if not existing): -```bash -sudo certbot renew --dry-run -``` + ```bash + sudo certbot renew --dry-run + ``` 4. Test the API (HTTP/TLS) @@ -353,6 +353,84 @@ sudo certbot renew --dry-run > Notice the **s** in http**s** +### Using Apache + +1. Make sure apache is installed and upgraded + + `sudo apt install apache2 --upgrade -y ` + +2. Create a new config file for your domain + + `sudo nano /etc/apache2/sites-available/your_domain.conf` + + > Adjust `your_domain.com` and port `8080` if needed. + + ``` + + # Adjust your domain + ServerName your_domain.com + + LimitRequestBody 10737418240 + + Timeout 604800 + ProxyTimeout 604800 + KeepAlive On + KeepAliveTimeout 604800 + + ProxyPreserveHost On + + # Adjust the port if needed + ProxyPass / http://localhost:8080/ + ProxyPassReverse / http://localhost:8080/ + + # Headers for WebSockets/real IP + RequestHeader set Upgrade %{HTTP_UPGRADE}e + RequestHeader set Connection "upgrade" + RequestHeader set Host "%{Host}i" + RequestHeader set X-Real-IP "%{REMOTE_ADDR}e" + RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e" + + # Disable compression (if needed for SSE) + RequestHeader unset Accept-Encoding + + # Buffer optimizations (similar to Nginx) + ProxyIOBufferSize 131072 + + + ``` + +3. Enable required Apache modules + + `sudo a2enmod proxy proxy_http headers` + +4. Enable your site + + `sudo a2ensite your_domain.conf` + +5. Test & Reload Apache + + ``` + sudo apache2ctl configtest # Should say "Syntax OK" + sudo systemctl reload apache2 + ``` + +6. Implement TLS Encryption + + You can use any certificate provider, we'll show you how to use Certbot Setup (Let’s Encrypt TLS) to obtain a free certificate. + + + ```bash + sudo apt install certbot python3-certbot-apache -y + sudo certbot --apache -d your_domain.com # Replace with your domain + ``` + + Certbot will auto-configure Nginx to use HTTPS and redirect HTTP → HTTPS. + + Certificates auto-renew (add a cron job if not existing): + + ```bash + sudo certbot renew --dry-run + ``` ## Legal & Licensing ### ⚠️ Important Legal Notice