Alma Linux Apache Install for Certbot

in #almalast year

Alright, so now that I have an Alma Linux VPS. Next, for no good reason, I want to be able to use this VPS remotely. It has Cockpit, so I enabled that, but then I tried to use HTTPS:// to connect, and it threws a TLS error. Enter Certbot, which should enable me to get SSL for my cockpit URL.

However, drum roll, The Certbot instructions are here and it requires Apache to already be installed. Alrighty, then, I will install Apache, using these instructions

sudo dnf update  

That took a hot minute, but it did complete.

sudo dnf install httpd httpd-tools

That was a lot faster. Yay. Now we can start Apache and make sure it starts when the server gets rebooted. Haha. Like this is Windows or something. Why aren't people laughing?

sudo systemctl start httpd
sudo systemctl enable httpd

Now just going to open ports 80 and 443:

sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --reload

Then a quick test to make sure it is working (http://your-ip or http://host-name)... my site is working:

That's great, we also want the SSL Module, or else later when using Certbot you might see this error

To avoid that version of our future, lets install the module now and restart apache

sudo dnf install mod_ssl
sudo service httpd restart

Adding Virtual Hosts to Apache

In my use case, I want Certbot for Cockpit, but eventually I am sure I will use it for websites as well. I am trying to avoid using a wildcard domain, but we will see. In any event, I will want at least one SSL site in Apache to test Certbot, then we'll figure out what Cockpit wants.

Based on this Stock Overflow post, I am going to add both the port 80 and port 443 entries for my top level TLD ( e.g. toplevel.com) and for a FQDN with a subdomain (e.g. myserver.toplevel.com). Here is a great post with a few extra details I might want to think about later (one of those is being able to enable/disable a virtual host using a symbolic link - pretty clever!)

cd /etc/httpd/conf.d
sudo nano yourDomainName.conf

Not going to explain using nano, and feel free to use emacs or vi or whatever - no judgment here, you can even use (gasp) a graphical user interface-based integrated development environment! Amazing. Paste all this juicy stuff into your conf file

<VirtualHost *:80>
    ServerName yourDomainName.com
    DocumentRoot /var/www/html
    ServerAlias www.yourDomainName.com
    ErrorLog /var/www/error.log
    CustomLog /var/www/requests.log combined
</VirtualHost>
#<IfModule mod_ssl.c>
#<VirtualHost *:443>
#    ServerName yourDomainName.com
#    DocumentRoot /var/www/html
#    ServerAlias www.yourDomainName.com
#    ErrorLog /var/www/error.log
#    CustomLog /var/www/requests.log combined
#Include /etc/letsencrypt/options-ssl-apache.conf
#LogLevel alert rewrite:trace3
#SSLCertificateFile /etc/letsencrypt/live/yourDomainName.com/fullchain.pem
#SSLCertificateKeyFile /etc/letsencrypt/live/yourDomainName.com/privkey.pem
#</VirtualHost>
#</IfModule>

Note that the port 80 version has to be running in order to setup for the 443 version (SSL) later. Hence, the 443 conf is commented out. The Stack Overflow post specifically adds them later, after you have your certs from Certbot.

Then restart Apache and check it out

sudo service httpd restart
httpd -D DUMP_VHOSTS

That should do it for now with Apache.