diff options
author | Sam Pearson <sam@sgp.me.uk> | 2018-09-20 15:42:54 +0100 |
---|---|---|
committer | Sam Pearson <sam@sgp.me.uk> | 2018-09-28 14:35:46 +0100 |
commit | d84af0f71aeef0581224c84d74c0372ff0a59877 (patch) | |
tree | c2a2ad5887965163d29e05becd5a887b12fefb8d /conf/nginx.conf-docker | |
parent | f8aed6f02cf5084a43375d8680a2e5fafb761529 (diff) |
[Docker] Initial Dockerfile & docker-compose setup
This includes four containers: app, memcached, nginx, and postgres.
The preinit script is used at container startup to ensure the database
is initialised. Includes a volume for the Postgres database to permit
persistence. Also sets the `PGDATA` variable to a subdirectory to
support optional use of a filesystem mount.
The repo/branch can be specified at build time.
If `SUPERUSER_EMAIL` and `SUPERUSER_PASSWORD` are set when the FMS
container starts the preinit script will pass these to
`bin/createsuperuser` when it starts up. These have been set to test
values in the supplied Docker Compose configuration.
Reverse proxy issue
===================
If nginx and fms were on the same machine, ReverseProxy would
automatically be in use, but via docker containers they are not. Do we
need to force it to be switched on? Let's see. There are four possible
options, with their outcome:
* port not in Host, ReverseProxy not in use
Anything using the automatically-generated base instead of BASE_URL uses
port 9000, meaning those links don't work.
* port not in Host, ReverseProxy in use
Anything using the automatically-generated base instead of BASE_URL uses
port 80, meaning those links don't work (they would if you had
docker-compose listen on port 80, being then a similar situation to e.g.
the AMI image).
* port in Host, ReverseProxy not in use
This works *unless* the port is 80, just to be contrary to the above; in
that case it is stripped and :9000 is put back on, meaning those links
again don't work. I realise we use 8000, but would be confusing if
someone tried it out.
* port in Host, ReverseProxy in use
This works in all scenarios, and thus is what we go with.
Diffstat (limited to 'conf/nginx.conf-docker')
-rw-r--r-- | conf/nginx.conf-docker | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/conf/nginx.conf-docker b/conf/nginx.conf-docker new file mode 100644 index 000000000..e50ce82d2 --- /dev/null +++ b/conf/nginx.conf-docker @@ -0,0 +1,56 @@ +# An example configuration for running FixMyStreet under nginx. You +# will also need to set up the FixMyStreet Catalyst FastCGI backend. +# An example sysvinit script to help with this is shown given in the file +# sysvinit-catalyst-fastcgi.example in this directory. +# +# See our installation help at https://fixmystreet.org/ + +server { + + listen 80 default_server; + root /var/www/fixmystreet/fixmystreet/web; + error_page 503 /down.html; + + # Make sure that Javascript and CSS are compressed. (HTML is + # already compressed under the default configuration of the nginx + # package.) + + gzip on; + gzip_disable "msie6"; + gzip_types application/javascript application/x-javascript text/css; + + client_max_body_size 10m; + + # These rewrite rules are ported from the Apache configuration in + # conf/httpd.conf + + rewrite ^/rss/council/([0-9]+)$ /rss/reports/$1 permanent; + rewrite ^/report$ /reports permanent; + rewrite '^/{/rss/(.*)}$' /rss/$1 permanent; + rewrite '^/reports/{/rss/(.*)}$' /rss/$1 permanent; + rewrite ^/alerts/?$ /alert permanent; + + location /mapit { + proxy_pass https://mapit.mysociety.org/; + proxy_set_header X-Real-IP $remote_addr; + } + + location / { + if (-f $document_root/down.html) { + return 503; + } + try_files $uri @catalyst; + } + + location /down.html { + internal; + } + + location @catalyst { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host:8000; + proxy_redirect off; + proxy_pass http://fixmystreet.svc:9000; + } +} |