Deploy TaskView on a VPS with Nginx

Step-by-step guide to deploy TaskView on a VPS with Nginx reverse proxy, SSL certificates via Let's Encrypt, and Docker Compose. Production-ready self-hosted setup.

This guide walks you through deploying TaskView on a VPS with Nginx as a reverse proxy and free SSL certificates from Let's Encrypt.

Prerequisites

  • A VPS with Ubuntu 22.04+ (Debian, CentOS, or any Linux distro with Docker support works too)
  • A domain name pointing to your server's IP address (e.g., tasks.yourcompany.com and api.tasks.yourcompany.com)
  • SSH access to the server

Step 1: Install Docker

Connect to your server and install Docker:

# Update packages
sudo apt update && sudo apt upgrade -y

# Install Docker
curl -fsSL https://get.docker.com | sh

# Add your user to the docker group
sudo usermod -aG docker $USER

# Log out and back in for the group change to take effect

Verify the installation:

docker --version
docker compose version

Step 2: Set up TaskView

Follow the standard Installation guide to create your project directory, environment files, and docker-compose.yml.

Update your .env.taskview with production values:

APP_URL="https://tasks.yourcompany.com"

Update CORS_ALLOWED_ORIGINS to include your production domain:

CORS_ALLOWED_ORIGINS="https://tasks.yourcompany.com"

Start the containers:

docker compose up -d

Step 3: Install Nginx

sudo apt install nginx -y

Step 4: Install Certbot and get SSL certificates

Install Certbot with the Nginx plugin to get free SSL certificates from Let's Encrypt:

sudo apt install certbot python3-certbot-nginx -y

Step 5: Configure Nginx with HTTPS

Create a configuration file:

sudo nano /etc/nginx/sites-available/taskview
# TaskView Web App - redirect HTTP to HTTPS
server {
    listen 80;
    server_name tasks.yourcompany.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name tasks.yourcompany.com;

    ssl_certificate /etc/letsencrypt/live/tasks.yourcompany.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tasks.yourcompany.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://127.0.0.1:8888;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# TaskView API - redirect HTTP to HTTPS
server {
    listen 80;
    server_name api.tasks.yourcompany.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name api.tasks.yourcompany.com;

    ssl_certificate /etc/letsencrypt/live/api.tasks.yourcompany.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.tasks.yourcompany.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    client_max_body_size 50M;

    location / {
        proxy_pass http://127.0.0.1:1725;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Enable the site:

sudo ln -s /etc/nginx/sites-available/taskview /etc/nginx/sites-enabled/

Get SSL certificates from Let's Encrypt using Certbot. Certbot will verify domain ownership and download the certificates referenced in the Nginx config:

sudo certbot --nginx -d tasks.yourcompany.com -d api.tasks.yourcompany.com

Test the configuration and restart Nginx:

sudo nginx -t
sudo systemctl restart nginx

Certbot sets up automatic certificate renewal. Verify it works:

sudo certbot renew --dry-run

Step 6: Verify

Open https://tasks.yourcompany.com in your browser. You should see the TaskView login screen served over HTTPS.

Automatic updates

Create a simple script to update TaskView:

#!/bin/bash
cd /path/to/taskview
docker compose pull
docker compose up -d

You can schedule this with cron if you want automatic updates, or run it manually when a new version is released.

Troubleshooting

502 Bad Gateway The TaskView containers aren't running. Check with docker compose ps and docker compose logs.

SSL certificate errors Make sure your domain's DNS A record points to your server's IP. Certbot needs to verify domain ownership.

Can't connect to the API Check that CORS_ALLOWED_ORIGINS in .env.taskview includes your production frontend URL with the https:// prefix.

Built with Nuxt UI • © 2026 Thank you Nuxt Team for this awesome UI library and for the template!