Setting up Apache with Letsencrypt certificates
Since you need a domain name, and I almost always use dynamic domain services, I recommend setting up ddclient so that the dynamic DNS is kept updated.
First create an Apache Virtual Host under /etc/apache2/sites-enabled
Then run
certbot --apache -d fsh.homedns.org
replace “fsh.homedns.org” with your domain name
you can also run
certbot certonly --apache -d <domain>
which will only create the /etc/letsencrypt/live/<domain> files
If you get: “The requested apache plugin does not appear to be installed”
apt install python3-certbot-apache
Set up a virtual host for port 80 that redirects to https:
<VirtualHost *:80> ServerName fsh.homedns.org Redirect / https://fsh.homedns.org --- OR ---- RewriteEngine on RewriteCond %{SERVER_NAME} =swish.homedns.org RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost>
Set up a virtual host for port 443. You can have both VirtualHosts in the same file (I usually do)
<IfModule mod_ssl.c> <VirtualHost *:443> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. ServerName fsh.homedns.org Include /etc/letsencrypt/options-ssl-apache.conf ServerAdmin webmaster@localhost # If this VirtualHost is just a proxy for a local (say Rails) server, # Add statements like these: # ProxyPreserveHost On # ProxyPass / http://127.0.0.1:3001/ # ProxyPassReverse / http://127.0.0.1:3001/ # Point out where you have the actual www-files: DocumentRoot /var/www/html/fsh.homedns.org # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf SSLCertificateFile /etc/letsencrypt/live/fsh.homedns.org/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/fsh.homedns.org/privkey.pem </VirtualHost> </IfModule>