If you have an Nginx server this guide will explain how to configure it to pass requests through to Baserow.
We strongly recommend you use our baserow/baserow:1.13.2
image or the example
docker-compose.yml
files (excluding the .no-caddy.yml
variant) provided in
our git repository.
These come with a pre-configured, simple and lightweight Caddy http server which simplifies your life by:
- Routing requests to the correct internal Baserow services
- Enabling websocket connections for realtime collaboration
- Serving user uploaded files
- And it still runs behind your own reverse proxy with no problems
If you do not want to use our embedded Caddy service behind your Nginx then make sure you are using one of the two following deployment methods:
- Your own container setup with our single service
baserow/backend:1.13.2
andbaserow/web-frontend:1.13.2
images.- Or our
docker-compose.no-caddy.yml
example file in our git repository.Then you should use Option 2: Without our embedded Caddy section instead.
You can find a Dockerized working example of using Nginx with Baserow in our git repo in the deploy/nginx/recommended folder.
Follow this option if you are using:
- The all-in-one Baserow image
baserow/baserow:1.13.2
- Any of the example compose files found in the root of our git
repository
docker-compose.yml
/docker-compose.local-build.yml
/docker-compose.all-in-one.yml
We assume you already have a Nginx server running which you know how to configure.
Additionally, we assume you are using a debian based operating system and have already successfully deployed Baserow.
Baserow needs to know the URL it will be accessed on. We'll assume you will be hosting Baserow on a subdomain and so you should set the following environment variable on your Baserow deployment (see Configuring Baserow for more details).
BASEROW_PUBLIC_URL=http://baserow.example.com
Create a new baserow.conf
in /etc/nginx/sites-enabled/
with the following contents:
Make sure to replace any http://localhost:PORT references with the correct ones for your particular Baserow deployment.
server {
server_name baserow.example.com;
# Upgrade websocket requests and route the api backend
location ~ ^/(api|ws)/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://localhost:8080;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_pass http://localhost:8080;
}
}
Finally, you should enable your new Baserow site and restart your Baserow server if you made environment variable changes.
sudo ln -s /etc/nginx/sites-available/baserow.conf /etc/nginx/sites-enabled/baserow.conf
sudo systemctl reload nginx
You should now be able to access Baserow on you configured subdomain.
You can find a Dockerized working example of using Nginx with Baserow in our git repo in the deploy/nginx/no-caddy folder.
Follow this option if you are using:
- Our standalone
baserow/backend:1.13.2
andbaserow/web-frontend:1.13.2
images with your own container orchestrator. - Or the
docker-compose.no-caddy.yml
example docker compose file in the root of our git repository.
We assume you already have a Nginx server running which you know how to configure.
Additionally, we assume you are using a debian based operating system and have already successfully deployed Baserow. If you are using a different setup the general steps and Nginx config should still be a useful starting point for you, but you might have to run different commands.
You need to ensure user uploaded files are accessible in a folder for Nginx to serve. In
the rest of the guide we will use the example /var/web
folder for this purpose.
If you are using the baserow/backend:1.13.2
image then you can do this by adding
-v /var/web:/baserow/data/media
to your normal docker run
command used to launch the
Baserow backend.
If you are instead using the docker-compose.no-caddy.yml
then you can change all of
the
- media:/baserow/media
mounts to be - /var/web:/baserow/media
.
Baserow needs to know the URL it will be accessed on. We'll assume you will be hosting Baserow on a subdomain and so you should set the following environment variable on your Baserow deployment (see Configuring Baserow for more details).
BASEROW_PUBLIC_URL=http://baserow.example.com
Create a new baserow.conf
in /etc/nginx/sites-enabled/
with the following contents:
Make sure to replace any http://localhost:PORT references with the correct ones for your particular Baserow deployment.
server {
server_name baserow.example.com;
# Upgrade websocket requests and route the api backend
location ~ ^/(api|ws)/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://localhost:8000;
}
location /media/ {
if ($arg_dl) {
add_header Content-disposition "attachment; filename=$arg_dl";
}
# TODO Change to your media folder location!
alias /var/www/;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_pass http://localhost:3000;
}
}
Finally, you should enable your new Baserow site and restart your Baserow server if you made environment variable changes.
sudo ln -s /etc/nginx/sites-available/baserow.conf /etc/nginx/sites-enabled/baserow.conf
sudo systemctl reload nginx
You should now be able to access Baserow on you configured subdomain.
If you can upload images to Baserow but no thumbnails show, or you can't re-download them (you are getting 403 denied errors when accessing the files) then:
- Make sure the permissions on the sub-folders in /var/web are set to be readable by
your Nginx user by running
cd /var/web && chmod 755 *
. - Fix any file permissions found inside the
/var/web
sub-folders to be readable by your Nginx user.