Confluence in docker with nginx proxy
Asked by Chris Craig:

I'm trying to use the atlassian/confluence-server image to run confluence. I want to use nginx as a reverse proxy so that it work with confluence.example.com

I have nginx configured, but what I'm having trouble with is the environment variables I need to specify in the docker-compose file to get it to work.

Can somebody help?


Answers:
author: Gonchik Tsymzhitov
body: Hi!

Could you clarify, please, nginx in docker or not ?

If not, when you run you can set host ip as upstream.

Because docker you run with mapping with some specific port, I hope

    docker run -v /data/your-confluence-home:/var/atlassian/application-data/confluence --name="confluence" -d -p 8090:8090 -p 8091:8091 atlassian/confluence-server

Cheers,

Gonchik

comments: author: Chris Craig
body: nginx IS also running in a container.


author: Gonchik Tsymzhitov
body: good.

Now nginx - work for confluence.example.com where upstream is [http://192.168.1.102:8090](http://192.168.1.102:8090/) ,

1. ATL is correct.

2. Base URL - confluence.example.com


author: Chris Craig
body: Ok, I understand I have to set the Base URL, but I'm not sure where to do it. The documentation doesn't mention that environment variable.


author: Gonchik Tsymzhitov
body: <https://confluence.atlassian.com/doc/configuring-the-server-base-url-148592.html>


author: Chris Craig
body: So, here's what I had to do to fix this.

1. I needed to set `ATL_PROXY_NAME`=confluence.example.com

2. I needed to set ATL_PROXY_PORT=443 (ssl is handled at the proxy level)

3. I needed to set ATL_TOMCAT_SCHEME=https

I had to muddle my way through the UI, removing the :8090 from the address at each click and change the Server Base URL to <https://confluence.example.com>

Everything is finally working. Thanks so much for your help Gonchik!


author: Gonchik Tsymzhitov
body: You are welcome!


author: Olexiy Buyanskyy
body: Hi,

The idea is taken from

<http://coffeetime.solutions/nginx-as-reverse-proxy-for-jira-and-confluence-on-docker/#Conclusion>

```
server { 
   server_name wiki.yourhost.com;
   # very important for installation, can be commented after!
   proxy_read_timeout 600s; 

   location / { 
       client_max_body_size 100m; 
       proxy_set_header X-Forwarded-Host $host; 
       proxy_set_header X-Forwarded-Server $host; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_pass http://127.0.0.1:8090; 
   } 
   location /synchrony { 
       client_max_body_size 100m; 
       proxy_set_header X-Forwarded-Host $host; 
       proxy_set_header X-Forwarded-Server $host; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_pass http://127.0.0.1:8091; 
   } 


   listen [::]:443 ssl; # managed by Certbot 
   listen 443 ssl; # managed by Certbot 
   ssl_certificate /etc/letsencrypt/live/wiki.yourhost.com/fullchain.pem; # managed by Certbot 
   ssl_certificate_key /etc/letsencrypt/live/wiki.yourhost.com/privkey.pem; # managed by Certbot 
   include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot 
   ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot 

} 
server { 
   if ($host = wiki.yourhost.com) { 
       return 301 https://$host$request_uri; 
   } # managed by Certbot 


       server_name wiki.yourhost.com; 


   listen [::]:80; 
   listen 80; 
   return 404; # managed by Certbot 


}

```

docker-compose.yml

```
version: '2' 

services: 
 confluence: 
   image: atlassian/confluence-server 
   container_name: confluence 
   networks: 
     - confluencenet 
   volumes: 
     - /b100pro/atlassian/confluence/data:/var/atlassian/application-data/confluence 
   ports: 
     - 127.0.0.1:8090:8090 
     - 127.0.0.1:8091:8091 
   environment: 
     - ATL_PROXY_NAME=wiki.yourhost.com 
     - ATL_PROXY_PORT=443 
     - ATL_TOMCAT_SCHEME=https 

 postgresql: 
   image: postgres:10.14-alpine 
   container_name: confluence-postgres 
   env_file: 
     - .env 
   networks: 
     - confluencenet 
   volumes: 
     - /b100pro/atlassian/confluence/db:/var/lib/postgresql/data 
   environment: 
     - POSTGRES_USER=confluencedb
     # password taken from .env file
     - POSTGRES_PASSWORD 
     - POSTGRES_DB=confluencedb 
     - POSTGRES_ENCODING=UTF8 
     - POSTGRES_COLLATE=C 
     - POSTGRES_COLLATE_TYPE=C 


networks: 
 confluencenet: 
   external: false


```


author: Chris Craig
body: I should say, it "mostly" works. When I hit confluence.example.com, I'm redirected to confluence.example.com:8090/...

If I remove the :8090, I get the confluence login page. I have to keep removing the :8090 from the url.

Then, I see the error:

Confluence's base URL is set to <http://192.168.1.102:8090> but you are accessing from <https://confluence.example.com>

comments: author: Gonchik Tsymzhitov
body: Aha, let's proxy name in server.xml :) and rerun docker :)


author: Chris Craig
body: Looking at the instructions here: <https://hub.docker.com/r/atlassian/confluence-server>

I've set the ATL_PROXY_NAME variable to confluence.example.com

version: "2"  
services:  
confluence:  
container_name: confluence  
image: atlassian/confluence-server  
restart: unless-stopped  
ports:  
- 8090:8090  
- 8091:8091  
volumes:  
- /opt/confluence/data:/var/atlassian/application-data/confluence  
environment:  
- ATL_PROXY_NAME=confluence.example.com


Tags: confluence-server

server