Step-by-Step Guide to Deploying Web Apps on Linux

This tutorial provides a comprehensive guide for web developers to deploy applications on a Linux server, specifically using Ubuntu. It includes steps for server setup, installing necessary software, configuring web servers, uploading applications, database setup, security management, and ongoing monitoring. Mastering this process ensures efficient application management and security.

Deploying web applications is a crucial skill that every web developer should master. This tutorial will guide you through the process of deploying a web application on a Linux server. It covers everything from setting up your server environment. You will also learn how to manage your application post-deployment.

Table of contents
  1. Prerequisites
  2. Choosing the Right Linux Distribution
  3. Setting Up Your Server
    1. 1. Accessing Your Server
    2. 2. Installing Necessary Software
  4. Configuring Your Web Server
    1. 1. Apache
    2. 2. Nginx
  5. Deploying Your Application
    1. 1. Uploading Your Application
    2. 2. Configuring Your Application
  6. Testing Your Deployment
  7. Setting Up a Database
    1. Installing MySQL
    2. Setting Up a Database for Your Application
  8. Managing Security
  9. Monitoring and Maintenance
  10. Conclusion

Prerequisites

Before we get started, here are some prerequisites you’ll need:

  • A basic understanding of web development concepts.
  • Access to a Linux server. This can be a cloud-based server from providers like AWS, DigitalOcean, or a physical server if you manage one.
  • An application that you want to deploy, which should be ready for deployment (e.g., built with frameworks like Node.js, Django, Ruby on Rails, etc.).
  • Familiarity with the command line interface.

Choosing the Right Linux Distribution

The first step in deploying your web application is choosing a Linux distribution. While there are many distributions available, some of the most popular ones for web server deployment include:

  • Ubuntu: User-friendly, extensive community support.
  • CentOS: Known for its stability and robustness.
  • Debian: Highly reliable and great for server environments.

For this tutorial, we will focus on Ubuntu. However, many of the concepts and commands apply to other distributions as well.

Setting Up Your Server

1. Accessing Your Server

First, you need to access your server via SSH. Open your terminal and run the following command:

ssh username@your_server_ip

Replace username with your server’s username (often root or something you’ve created) and your_server_ip with your server’s public IP address.

If this is your first time connecting, you’ll be prompted to accept the server’s fingerprint. Type yes and enter your password when prompted.

2. Installing Necessary Software

Once logged in, update your package index and install necessary packages:

sudo apt update && sudo apt upgrade -y

Install software essentials such as Git for version control and curl for transferring data:

sudo apt install git curl -y

You may also want to install build-essential tools based on your application’s need:

sudo apt install build-essential -y

Configuring Your Web Server

You can choose from various web servers, but the two most popular are Apache and Nginx.

1. Apache

To install Apache, run:

sudo apt install apache2 -y

Once installed, you can start the service and enable it to start at boot:

sudo systemctl start apache2
sudo systemctl enable apache2

To confirm that Apache is running, open your web browser and navigate to http://your_server_ip. You should see the Apache default page.

2. Nginx

If you prefer Nginx, install it with the following command:

sudo apt install nginx -y

Start and enable Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Check if Nginx is running by visiting http://your_server_ip in your web browser.

Deploying Your Application

1. Uploading Your Application

Depending on your preference, you can upload your application files using SSH/SCP or an FTP client like FileZilla. For SCP, use:

scp -r /local/path/to/your/app username@your_server_ip:/remote/path

2. Configuring Your Application

Once uploaded, navigate to the directory of your application:

cd /remote/path/to/your/app

If you are using a web framework (like Node.js, Django, or Ruby on Rails), ensure to install the required dependencies. For example, in Node.js:

npm install

Or in Django:

pip install -r requirements.txt

Testing Your Deployment

After configuring your application, it’s important to test it. You can do this by starting your application and navigating to your server’s IP address in your browser.

For example, for a Node.js app:

node app.js

Make sure your app is running on a specific port, like 3000. You can access it via http://your_server_ip:3000.

If you’re using Django, you can run:

python manage.py runserver 0.0.0.0:8000

Now visit http://your_server_ip:8000.

Setting Up a Database

If your application requires a database, you need to install one such as MySQL, PostgreSQL, or MongoDB.

Installing MySQL

To install MySQL, run:

sudo apt install mysql-server -y

After installation, run the secure installation script:

sudo mysql_secure_installation

Follow the prompts to set up your root password and improve security.

Setting Up a Database for Your Application

Log into MySQL:

sudo mysql -u root -p

Create a new database:

CREATE DATABASE your_database_name;

Create a database user and grant privileges:

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON your_database_name.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Make sure to change your_database_name, user, and password to your desired values.

Managing Security

Security is a crucial aspect of server management. Here are a few essential steps:

  1. Firewall: Install UFW (Uncomplicated Firewall) to allow necessary connections:
    sudo ufw allow OpenSSH
    sudo ufw allow ‘Nginx Full’ # Or ‘Apache Full’
    sudo ufw enable

  2. SSH Security: Disable root login and use SSH keys instead. Edit the SSH config file:
    sudo nano /etc/ssh/sshd_config

    Change the following lines:


    PermitRootLogin no
    PasswordAuthentication no

    Then, restart the SSH service:


    sudo systemctl restart ssh

  3. Regular Updates: Keep your server updated to ensure all security patches are applied:
    sudo apt update && sudo apt upgrade -y

  4. SSL Certificate: Set up SSL to secure your site. You can use Let’s Encrypt for free SSL certificates. To install Certbot, run:
    sudo apt install certbot python3-certbot-nginx # for Nginx

    Or:


    sudo apt install certbot python3-certbot-apache # for Apache

    To obtain a certificate, use:


    sudo certbot --nginx # for Nginx

    Or:


    sudo certbot --apache # for Apache

Monitoring and Maintenance

Once your application is deployed, monitoring its performance and health is crucial. Consider the following practices:

  1. Log Management: Monitor logs for errors. Check Apache logs at /var/log/apache2/error.log or Nginx logs at /var/log/nginx/error.log.
  2. Performance Monitoring: Use tools like htop, netstat, and sar to monitor server performance.
  3. Backup: Regularly back up your application files and database. For example, you can create a MySQL dump:
    mysqldump -u user -p your_database_name > backup.sql

  4. Automated Deployments: Consider using CI/CD tools like Jenkins, GitLab CI, or GitHub Actions for automated deployment of your application.

Conclusion

Deploying web applications on a Linux server may seem daunting at first, but by following these steps, you can achieve a smooth deployment process. With practice, you will gain the skills to efficiently manage and maintain your applications in a live environment. Always make sure to keep security at the forefront and continuously monitor your deployments for a seamless experience.

Feel free to reach out in the comments or contact us if you have any questions or need further clarification on any step!

Discover more from Dailyedutalk

Subscribe now to keep reading and get access to the full archive.

Continue reading

Discover more from Dailyedutalk

Subscribe now to keep reading and get access to the full archive.

Continue reading