Run two nginx instance using docker on same Machine - docker

I have two separate sites behind two separate nginx hosted on separate VPS using docker.
When I tried to have both nginx on the same VPS server as separate docker container, it doesn't work. The running container is overwritten with the newer one.
How can I host both nginx instance on same docker machine? Both redirecting to separate proxy_pass app but the nginx port are same, i.e. 80 & 443.

If you want to have 2 nginx container, both listening to the same port, you can use Docker in swarm mode. It has a built in load balancer which redirect the load to both of them. (note that in this case, both nginx instances must come from the same image)
Just use your current docker-compose file, but deploy it in the swarm mode.

Related

Setting up nginx and ssl in docker (Asp .Net API in VPS)

I want to deploy api service (asp .net) to VPS.
What is at the moment:
VPS ubuntu 22.10
Container api service with open port http.
Container mongodb.
Network bridge for communication between these containers.
Volume for storing mongodb collections.
Configured dns subdomain, which translates to ip VPS.
What I want:
To add nginx.
To add ssl (Let's Encrypt with certbot).
I don't want to use docker compose because I want to understand how things works.
I'm not strong in terminology, but perhaps what I want to do is called an open nginx proxy.
Please tell me if I understand correctly what I need to do.
Nginx:
To run a separate nginx container.
To add the nginx configuration to the docker volume.
To add nginx to the bridge network (close ports on the api container, open ports on the nginx container)
To set up nginx location configs to work internally through the network bridge.
SSL:
On the VPS machine (not in the docker container) to install and run certbot
To enabled automatic certificate renewal
I'm not sure where I need to run certbot. On vps machine or in nginx docker container.
I don't know how to configure nginx to work through the bridge.

Install LetsEncrypt SSL on multiple docker apps using the same domain

I have deployed multiple docker containers on my CentOS machine and managing them with portainer.
containers are accessible via the same domain e.g.
container 1: example.com:80
container 2: example.com:6666
container 3: example.com:5083
and so on..
Now I want to use LetsEncrypt SSL for all of my container apps using the same domain (without subdomains).
I have been using nginxproxymanager (container app) to do my reverse proxy settings. Right now I am only able to use only one container (running on port 80) with SSL.
I am new to docker stuff and need help.

How to make a chain of nginx proxies using nginx docker containers with each docker having different IP?

I have a django app. In front of that I want to setup 3 nginx proxies (docker containers) in local (MacOS) like:
browser-->proxy1-->proxy2-->proxy3-->(gunicorn):django-app
I have to check some IP related thing in my django app. So when I am logging the x_forwarded_for header in my django app I am getting it as: 'X-Forwarded-For': '172.17.0.1, 172.17.0.1, 172.17.0.1'
I want to give each of my nginx proxy container a different static IP. How to do that. What docker command I need to use ?

Containerized Apache co-exisitng with host Apache

I have some web applications under same domain and different sub-domain running on same machine. I am using Apache Virtual Host configuration to use pretty URLs for all these applications. I am now trying to Dockerize one of these applications. So I exposed ports 80 and 443 to different ports of host machine.
I can successfully access containerized web application using URL format http://localhost:{http exposed port} OR https://localhost:{https exposed port}.
Now, If I try using Virtual host configuration within container it does not work unless I stop host machine Apache server.
How do I setup pretty URLs for containerized application using ports exposed from within container, along with running an Apache server on same machine.
Reverse proxy will be the good option for run multiple docker containers which will be exposed on different different ports but will be configured on same port in reverse proxy. This link will be helpful, mentioned just below:
https://www.digitalocean.com/community/tutorials/how-to-use-apache-as-a-reverse-proxy-with-mod_proxy-on-ubuntu-16-04
You can try one thing also just expose your application on different IP and configure that ip in /etc/hosts. Please check it here:
http://jasani.org/posts/docker-now-supports-adding-host-mappings-2014-11-19/index.html

Rails and Nginx on different Docker containers (how share data between containers)

I want to know if it's possible (or even a good practice) to run a Rails app and Nginx on different Docker containers.
My intention is to use one instance of Nginx to serve more than one application running in containers in the future.
My question is because I will have to configure Nginx to access the root path of an application running on another container (I will have on my nginx.conf: root /home/user/public_html/railsapp/public/;)
How can I setup my rails docker container so the nginx container will be able to access the railsapp root path?
The question is whether your rails application and the nginx will be two different processes or one?
In case of two, you will have rails app served somehow and nginx proxying it. Which is normal to run in two different containers.
In case you will be serving your rails app by nginx, there is no need to create a separate container. You might just add files to the container of the nginx, use volumes or data containers.

Resources