Person's Hand on Laptop

How to Point Domain and Host Django Project using GitHub on Apache Web Server VPS Hosting

Deploying your Django project on a VPS hosting server involves several steps, including configuring your domain, setting up GitHub for version control, and automating deployment using GitHub Actions. In this comprehensive guide, we’ll walk through each step in detail.

Step 1: Configure Domain Settings

  1. Login to Your Domain Provider Website:
  • Log in to your domain provider’s website dashboard.
  1. Navigate to Manage DNS:
  • Find and navigate to the DNS management section.
  1. Add DNS Records:
  • Add the following DNS records to point your domain to your VPS:
    • A Record:
    • Host/Name: @
    • Value: Your Remote Server IP
    • A Record:
    • Host/Name: www
    • Value: Your Remote Server IP
    • AAAA Record (for IPv6):
    • Host/Name: @
    • Value: Your Remote Server IPv6
    • AAAA Record (for IPv6):
    • Host/Name: www
    • Value: Your Remote Server IPv6

Step 2: Prepare Django Project on Local Machine

  1. Update Database Path:
  • Move your database file (db.sqlite3) into a new folder within your project directory, e.g., mbdb/db.sqlite3.
  • Modify settings.py to reflect the new database path:
python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'mbdb/db.sqlite3', } }
  1. Generate Requirements File:
  • Open a terminal, activate your virtual environment, and create a requirements.txt file:
bash pip freeze > requirements.txt
  • Deactivate the virtual environment.
  1. Push Your Project to GitHub:
  • Push your Django project to your GitHub account as a private repository for version control.

Step 3: Access Remote Server via SSH

  1. Verify Required Software:
  • SSH into your remote server and verify that all necessary software is installed:
bash apache2 -v python --version apache2ctl -M pip --version git --version
  1. Install Missing Software:
  • If any required software or modules are missing, install them using apt:
bash sudo apt install apache2 python libapache2-mod-wsgi-py3 python3-pip git
  1. Install Virtual Environment:
  • Install and set up a virtual environment:
bash sudo pip install virtualenv
  1. Verify Apache2 and Firewall:
  • Ensure Apache is active and running, and verify firewall settings:
bash sudo service apache2 status sudo ufw status verbose

Step 4: Make Connection between Remote Server and GitHub via SSH Key

  1. Generate SSH Keys:
  • Generate SSH keys on your remote server:
bash ssh-keygen -t ed25519 -C "your_email@example.com"
  • If you encounter permission denied, change ownership of the .ssh directory:
bash sudo chown -R user_name .ssh
  1. Copy Public SSH Key to GitHub:
  • Copy the public SSH key and add it to your GitHub account’s deploy keys.
  1. Verify Connection:
  • Verify the SSH connection between your server and GitHub:
bash ssh -T git@github.com

Step 5: Clone and Deploy Django Project on Remote Server

  1. Clone Project from GitHub:
  • Clone your Django project from GitHub to your server’s home directory:
bash git clone https_repo_path
or
bash git clone ssh_repo_path
  1. Move Project Folder to Web Directory:
  • Move the project folder to the web server’s public directory:
bash sudo mv project_folder_name /var/www
  1. Navigate to Project Directory:
  • Go to your project directory:
bash cd /var/www/project_folder_name
  1. Set Up Virtual Environment and Install Dependencies:
  • Create and activate a virtual environment, then install project dependencies:
bash virtualenv env_name source env_name/bin/activate pip install -r requirements.txt

Step 6: Configure Apache and Django Settings

  1. Create Virtual Host File:
  • Create a virtual host configuration file for your domain:
bash nano /etc/apache2/sites-available/your_domain.conf
  • Add necessary configuration details for Apache.
  1. Check Configuration and Enable Virtual Host:
  • Verify the configuration and enable the virtual host:
bash sudo apache2ctl configtest cd /etc/apache2/sites-available/ sudo a2ensite your_domain.conf
  1. Restart Apache:
  • Restart Apache to apply changes:
bash sudo service apache2 restart
  1. Update Django Settings:
  • Modify Django project settings to reflect your domain and server configuration.

Step 7: Automate Django Deployment using GitHub Actions

  1. Create Deployment Script:
  • Create a deployment script (deploy.sh) inside the project’s .scripts folder.
  1. Set File Permissions:
  • Set execute permission for the deployment script:
bash git update-index --add --chmod=+x .scripts/deploy.sh
  1. Configure GitHub Actions:
  • Create a GitHub Actions workflow file (deploy.yml) inside the .github/workflows directory.
  • Define the workflow to trigger deployment on push or pull request events.
  1. Add Secrets to GitHub:
  • Add repository secrets for the server host, port, username, and SSH key.
  1. Generate SSH Key for GitHub Actions:
  • Generate SSH key on the remote server and add it as a repository secret on GitHub.

Step 8: Finalize Deployment and Maintenance

  1. Pull Changes from GitHub:
  • SSH into your server and pull changes from GitHub to deploy updates.
  1. Restart Server or Touch WSGI File:
  • Restart Apache or touch the WSGI file to apply changes:
sudo service
apache2 restart

Monitor Deployment:

Track deployment progress and errors using Apache error logs and GitHub Actions.

Maintenance and Troubleshooting:

  • Regularly monitor logs for errors and perform necessary maintenance tasks.
  • Troubleshoot any issues related to file permissions, database access, or server configurations.

By following these steps, you can successfully deploy your Django project to a VPS hosting server using GitHub for version control and automation. With automated deployment via GitHub Actions, you can streamline your development workflow and ensure smooth updates to your live website.