I’m learning Docker, NGINX and Letsencrypt working on a website, trtying to do a DNS challenge:

officinecartografiche.net

While searching the internet I stumbled across this DO toolsnginxconfig.io

That seems to config all the best parameters for a Docker website on DO.

What I don’t get are the needed steps to get the all thing running :
1 Should I install NGINX docker, Letsencrypt docker and certbot docker and THE copy the files from nginxconfig.io on the given location ?
2 What are the DNS parameters I should set on DO and on OVH (where my domain is registered) ?

Thank you for contributinG to my learning curve

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

×
2 answers

Hello, @lucamoiana

  1. Yes that is correct, Nginx and certbot need to be installed before you follow the steps listed on https://nginxconfig.io/

  2. As for the DNS changes, in order to point your domain name to digital ocean, you need to point/set the A record of your domain name to the IP address of your droplet/server with Digital Ocean

I hope this helps. Let me know if you have any questions.

Regards,
Alex

  • Hi Community,

    I am a beginner in nginx. I just want to use it as a reverse proxy for docker containers.

    Is there a wiki that explains the options listed in nginxconfig.io?
    I can’t seem to find good documentation…

    • Hello, @melrockz

      In order to use Docker and Nginx as a reverse proxy for each Docker container you can follow this mini tutorial from Bobby Iliev: https://www.digitalocean.com/community/questions/how-to-host-multiple-docker-containers-on-a-single-droplet-with-nginx-reverse-proxy

      Prerequisites

      Before you start, make sure to have Docker and Nginx installed, here’s how to do that:

      • To install Docker follow the steps here:

      https://www.digitalocean.com/community/questions/how-to-install-and-run-docker-on-digitalocean-dorplet

      • To install Nginx follow the steps here:

      https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04

      Once you have both installed, you can continue with the steps:

      Step 1 - run your Docker containers

      For the same of simplicity, I will run a simple and I’ll run 2 small httpd containers.

      • Run your first container and map port 8080 on your host:
      docker run -dit --name container-1 -p 8080:80 httpd:2.4
      

      Now if you visit http://your-dropets-ip:8080, you should be able to see a message saying It Works!.

      Just so that we could differentiate the two containers, let’s update the It works! message with Container 1 for example:

      • First get your container ID
      docker ps
      

      Then run the following sed command to update the message:

      docker exec CONTAINER_ID sed -i 's/It works!/Container 1/' /usr/local/apache2/htdocs/index.html
      

      This would basically run a search and replace for the It works! string and update it with Container 1 in the default index.html file in the container itself.

      If you visit your Droplet’s IP again in your browser the message should change from It works! to Container 1.

      Let’s do the same thing for container 2, but map it to port 8081 instead:

      docker run -dit --name container-2 -p 8081:80 httpd:2.4
      

      Then agian get your container ID

      docker ps
      

      Then run the sed command again to update the It works! message to Container 2:

      docker exec CONTAINER_ID sed -i 's/It works!/Container 2/' /usr/local/apache2/htdocs/index.html
      

      Now if you visit http://your-dropets-ip:8081, you should be able to see a message saying Container 2.

      Step 2 - Configure Nginx

      Now that we have our containers up and running we can go ahead and configure our Nginx server blocks, I will go ahead and use the following two subdomain names for this example:

      • container1.bobbyiliev.com
      • container2.bobbyiliev.com

      To keep things as simple as possible, I will create 2 server blocks with the following content:

      • Server block #1:

      Create a new file called container1.bobbyiliev.com.conf in the /etc/nginx/sites-available/ directory and add the following content:

      server {
        listen        80;
        server_name   container1.bobbyiliev.com;
      
        location / {
          proxy_pass  http://localhost:8080;
        }
      }
      
      • Server block #2:

      Create a new file called container2.bobbyiliev.com.conf in the /etc/nginx/sites-available/ directory and add the following content:

      server {
        listen        80;
        server_name   container2.bobbyiliev.com;
      
        location / {
          proxy_pass  http://localhost:8081;
        }
      }
      

      Then once you have the two config files ready cd to the /etc/nginx/sites-enabled directory, and run the following commands:

      ln -s ../sites-available/container1.bobbyiliev.com.conf .
      
      ln -s ../sites-available/container2.bobbyiliev.com.conf .
      

      Run a config test to make sure that there are no errors:

      nginx -t
      

      And if you get Syntax OK message, restart Nginx:

      systemctl restart nginx
      

      Note, for more information about Nginx server blocks, I would recommend taking a look at this tutorial here:

      https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16-04

      Step 3 - Test the setup

      That is pretty much it, now if I visit container1.bobbyiliev.com I should be able to see the Container 1 message and the same for container2.bobbyiliev.com.

      To test that I could run a simple curl request:

      • curl container1.bobbyiliev.com

      You should see the following output

      <h1>Container 1</h1>
      

      Then run the same request for container2.bobbyiliev.com:

      • curl container2.bobbyiliev.com

      And agian you should see the following output

      <h1>Container 2</h1>
      

      Video Demo

      Here’s a quick video demo on how to do the above:

      Conclusion

      Now you have 2 different containers on the same Droplet being served from different domain names! Of course, this is just a very basic example, you could go a lot further by expanding your Nginx config a lot more, for example adding more headers to your Nginx proxy pass and even installing a Let’s Encrypt SSL.

      Hope that this helps! Let me know if you have any questions!
      Regards,
      Alex

      by Justin Ellingwood
      When using the Nginx web server, server blocks (similar to the virtual hosts in Apache) can be used to encapsulate configuration details and host more than one domain off of a single server. In this guide, we'll discuss how to configure server blocks in Nginx on an Ubuntu...

Hi, thank you for your kind reply.

Few more details:

  1. what are the containers I need to run?
  2. wht’s the exact folder structure I need to create?

thanks again

  • Hello, @lucamoiana

    In order to use Docker and Nginx as a reverse proxy for each Docker container you can follow this mini tutorial from Bobby Iliev: https://www.digitalocean.com/community/questions/how-to-host-multiple-docker-containers-on-a-single-droplet-with-nginx-reverse-proxy

    Prerequisites

    Before you start, make sure to have Docker and Nginx installed, here’s how to do that:

    • To install Docker follow the steps here:

    https://www.digitalocean.com/community/questions/how-to-install-and-run-docker-on-digitalocean-dorplet

    • To install Nginx follow the steps here:

    https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04

    Once you have both installed, you can continue with the steps:

    Step 1 - run your Docker containers

    For the same of simplicity, I will run a simple and I’ll run 2 small httpd containers.

    • Run your first container and map port 8080 on your host:
    docker run -dit --name container-1 -p 8080:80 httpd:2.4
    

    Now if you visit http://your-dropets-ip:8080, you should be able to see a message saying It Works!.

    Just so that we could differentiate the two containers, let’s update the It works! message with Container 1 for example:

    • First get your container ID
    docker ps
    

    Then run the following sed command to update the message:

    docker exec CONTAINER_ID sed -i 's/It works!/Container 1/' /usr/local/apache2/htdocs/index.html
    

    This would basically run a search and replace for the It works! string and update it with Container 1 in the default index.html file in the container itself.

    If you visit your Droplet’s IP again in your browser the message should change from It works! to Container 1.

    Let’s do the same thing for container 2, but map it to port 8081 instead:

    docker run -dit --name container-2 -p 8081:80 httpd:2.4
    

    Then agian get your container ID

    docker ps
    

    Then run the sed command again to update the It works! message to Container 2:

    docker exec CONTAINER_ID sed -i 's/It works!/Container 2/' /usr/local/apache2/htdocs/index.html
    

    Now if you visit http://your-dropets-ip:8081, you should be able to see a message saying Container 2.

    Step 2 - Configure Nginx

    Now that we have our containers up and running we can go ahead and configure our Nginx server blocks, I will go ahead and use the following two subdomain names for this example:

    • container1.bobbyiliev.com
    • container2.bobbyiliev.com

    To keep things as simple as possible, I will create 2 server blocks with the following content:

    • Server block #1:

    Create a new file called container1.bobbyiliev.com.conf in the /etc/nginx/sites-available/ directory and add the following content:

    server {
      listen        80;
      server_name   container1.bobbyiliev.com;
    
      location / {
        proxy_pass  http://localhost:8080;
      }
    }
    
    • Server block #2:

    Create a new file called container2.bobbyiliev.com.conf in the /etc/nginx/sites-available/ directory and add the following content:

    server {
      listen        80;
      server_name   container2.bobbyiliev.com;
    
      location / {
        proxy_pass  http://localhost:8081;
      }
    }
    

    Then once you have the two config files ready cd to the /etc/nginx/sites-enabled directory, and run the following commands:

    ln -s ../sites-available/container1.bobbyiliev.com.conf .
    
    ln -s ../sites-available/container2.bobbyiliev.com.conf .
    

    Run a config test to make sure that there are no errors:

    nginx -t
    

    And if you get Syntax OK message, restart Nginx:

    systemctl restart nginx
    

    Note, for more information about Nginx server blocks, I would recommend taking a look at this tutorial here:

    https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16-04

    Step 3 - Test the setup

    That is pretty much it, now if I visit container1.bobbyiliev.com I should be able to see the Container 1 message and the same for container2.bobbyiliev.com.

    To test that I could run a simple curl request:

    • curl container1.bobbyiliev.com

    You should see the following output

    <h1>Container 1</h1>
    

    Then run the same request for container2.bobbyiliev.com:

    • curl container2.bobbyiliev.com

    And agian you should see the following output

    <h1>Container 2</h1>
    

    Video Demo

    Here’s a quick video demo on how to do the above:

    Conclusion

    Now you have 2 different containers on the same Droplet being served from different domain names! Of course, this is just a very basic example, you could go a lot further by expanding your Nginx config a lot more, for example adding more headers to your Nginx proxy pass and even installing a Let’s Encrypt SSL.

    Hope that this helps! Let me know if you have any questions!
    Regards,
    Alex

    by Justin Ellingwood
    When using the Nginx web server, server blocks (similar to the virtual hosts in Apache) can be used to encapsulate configuration details and host more than one domain off of a single server. In this guide, we'll discuss how to configure server blocks in Nginx on an Ubuntu...
Submit an Answer