Search code examples
dockerubuntudocker-composedigital-oceanletsencrypt-nginx-proxy-companion

Docker jrcs/letsencrypt-nginx-proxy-companion doesn't generate a proper certificate


I'm following a tutorial to deploy Wordpress using Docker on a Ubuntu server. The tutorial is in this website.

It's important to mention that I already have two subdomains at this point, one for the Wordpress site and another for the phpMyAdmin site.

However the letsencrypt certificates seem to not be generated properly. I can access the website via http, but not https, and when I look at the certificate it doesn't look correct. In fact it doesn't seem to have one for my website.

Screenshoot of how the "cert" looks in the browser

To make everything easier I created a script to run all the steps fast:

#!/bin/bash

web_dir=/srv/www
myusername=root
domain_name=subdomain.domain.com
website_folder=/srv/www/$domain_name

nginx_proxy_repo=https://github.com/kassambara/nginx-multiple-https-websites-on-one-server
nginx_folder=/srv/www/nginx-multiple-https-websites-on-one-server/nginx-proxy
final_nginx_folder=/srv/www/nginx-proxy

echo ---INSTALL REQUIRED COMPONENTS----
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce docker-compose git
sudo systemctl status docker

echo ---CREATE AND GIVE PERMISSIONS TO WEBSITES DIR----
sudo mkdir -p $web_dir
# 2. set your user as the owner
sudo chown -R $myusername $web_dir
# 3. set the web server as the group owner
sudo chgrp -R www-data $web_dir
# 4. 755 permissions for everything
sudo chmod -R 755 $web_dir
# 5. New files and folders inherit 
# group ownership from the parent folder
chmod g+s $web_dir

echo ---INSTALL NGINX PROXY----
git clone $nginx_proxy_repo $web_dir
rm -rf $web_dir/nginx-proxy/nginx.tmpl
curl -s https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl > $web_dir/nginx-proxy/nginx.tmpl
cd $web_dir
rm -rf your-website-one.com your-website-two.com README.Rmd .gitignore .Rbuildignore .git README.md

echo ---INSTALL WORDPRESS----
cd $web_dir
git clone https://github.com/kassambara/wordpress-docker-compose $domain_name

echo ---CONFIGURE DOCKER COMPOSE FOR ONLINEHOST----
cd $website_folder
mv docker-compose-onlinehost.yml docker-compose.yml

echo ---FINAL TOUCHES----
cd $website_folder
vi ./setup-onlinehost.sh
chmod +x setup-onlinehost.sh && ./setup-onlinehost.sh
vi .env
vi docker-compose.yml

cd $final_nginx_folder
docker network create nginx-proxy
docker-compose up -d

cd $final_nginx_folder
cd vhost.d
echo "client_max_body_size 64M;" > $domain_name

cd $website_folder
docker-compose up -d --build
docker-compose -f docker-compose.yml -f wp-auto-config.yml run --rm wp-auto-config

When the time comes I setup the setup-onlinehost.sh like this:

project_name="wordpress"
user_name="wordpress"
pass_word="wordpress"
email="[email protected]"
website_title="My Blog"
website_url="https://subdomain.domain.com"
phmyadmin_url="sqlsubdomain.domain.com"
env_file=".env"
compose_file="docker-compose.yml"

Then I remove the redirectnonwww container from the docker-compose.yml file since I don't want the redirect non-www to www behavior.

Then after everything is completed, I can access the websites over http but not over https. When I try to access it over https I receive a message about This connection is not private and the certificate seems to be wrong at this point.

Also If I let continue my browser to visit the website I got to the Nginx 500 Internal Server Error.

If I look into the contents of nginx-proxy/certs I see listed the following items:

certs (folder)
   default.crt  
   default.key  
   dhparam.pem  
   subdomain.domain.com (empty folder) 
   sqlsubdomain.domain.com (empty folder)
conf.d (folder)
docker-compose.yml
html  
nginx.tmpl  
vhost.d (folder)
   subdomain.domain.com (file)

The contents of vhost.d/subdomain.domain.com are:

## Start of configuration add by letsencrypt container
location ^~ /.well-known/acme-challenge/ {
    auth_basic off;
    auth_request off;
    allow all;
    root /usr/share/nginx/html;
    try_files $uri =404;
    break;
}
## End of configuration add by letsencrypt container
client_max_body_size 64M;

I'm not sure if I'm doing something wrong or if I should be doing something else that is not listed on the tutorial.


Solution

  • The issue seemed to be the number of times I had requested a certificate for those specific domains. I tried the deploy multiple times to figure out how to do it properly for the deployment server and also to write a proper version of the script, that I requested many times a certificate for two specific domains.

    The issue was resolved after I tried a different domain and subdomain.