Easily Hosting Your Flutter Web App on a VPS Using Nginx

Yawar Osman
3 min readDec 13, 2023

--

Introduction

Hello, Flutter enthusiasts! Are you looking to take your Flutter web application to the next level by hosting it on a Virtual Private Server (VPS) with Nginx? Look no further! This article will guide you through the process in a simple and human-friendly way. Whether you’re a seasoned developer or just starting out, you’ll find this guide helpful and easy to follow.

Why Host Flutter Web on a VPS with Nginx?

Before diving into the how-to, let’s quickly talk about the why. Hosting your Flutter web app on a VPS gives you more control, flexibility, and scalability compared to traditional shared hosting. And why Nginx? It’s a powerful, high-performance web server that can handle a large number of concurrent connections with minimal resource usage.

Step 1: Setting Up Your VPS

First things first, you need a VPS. There are plenty of providers out there like DigitalOcean, AWS, or Linode. Choose one that fits your budget and geographical needs.

Once you have your VPS, access it via SSH. You’ll need some basic command-line knowledge here, but don’t worry, it’s not as scary as it sounds! This is my article about connecting to your VPS.

Step 2: Installing Nginx

Nginx is quite straightforward to install. On a Ubuntu server, you can do this with a couple of commands:

sudo apt update
sudo apt install nginx

After installation, start the Nginx service and enable it to start on boot:

sudo systemctl start nginx
sudo systemctl enable nginx

Step 3: Preparing Your Flutter Web App for Deployment

Before you upload your Flutter web app to a VPS, it’s crucial to properly build and prepare it for deployment. Here’s how you can do it:

Building Your Flutter Web App

  1. Optimize Your App for Release: Ensure that your Flutter app is fully optimized for a web release. This involves checking all functionalities, optimizing images and assets, and ensuring the app is responsive and works well across different browsers.
  2. Build the Release Version: In your terminal, navigate to your Flutter project directory. Use the following command to create a release build:
flutter build web --release

This command compiles your app to JavaScript or Web Assembly(in the newer flutter versions) and prepares all necessary HTML, CSS, and other assets in the /build/web directory of your Flutter project.

Step 4: Deploying Your Flutter Web App

After you’ve built your Flutter web app, you need to transfer the build files to your VPS. You can use scp, rsync, or any file transfer method you're comfortable with. Place the files in a directory like /var/www/yourapp.

Step 5: Configuring Nginx

Now, let’s tell Nginx about your app. You’ll create a server block (also known as a virtual host) for this.

Create a new configuration file in /etc/nginx/sites-available/yourapp and open it in any text editor(ex. nano) sudo nano <yourapp>. Add the following configuration:

server {
listen 80;
server_name yourapp.com www.yourapp.com; // this your domain or subdomain

root /var/www/yourapp/build/web;

index index.html;
location / {
try_files $uri $uri/ =404;
}
}

Replace yourapp.com with your domain name and the root with the path to your app's build files.

Symlink this file to the sites-enabled directory to enable it:

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

Check for syntax errors:

sudo nginx -t

And finally, restart Nginx:

sudo systemctl restart nginx

Step 6: Setting Up a Domain Name (Optional)

If you have a domain name, point it to your VPS’s IP address using your domain registrar’s control panel. Then, update the server_name directive in your Nginx configuration to match your domain name.

Step 7: Securing Your App with SSL (Highly Recommended)

Securing your app with an SSL certificate is crucial. Let’s Encrypt provides free SSL certificates. You can use tools like Certbot to easily obtain and configure these certificates with Nginx.

Conclusion

And voilà! Your Flutter web app is now live on your VPS using Nginx. This setup not only provides a solid foundation for hosting your web applications but also opens up possibilities for scaling and customization.

Feel free to experiment further with Nginx configurations, like setting up caching or load balancing, to enhance your app’s performance. Happy Fluttering!

yawarosman.com

--

--

Yawar Osman
Yawar Osman

Written by Yawar Osman

Project Manager || Software Developer || Team Leader || Flutter Developer

Responses (1)