https://github.com/ryuga/department-website
Website with Event Management System build with Django, JQuery and Bootstrap for Department of Computer Science, Christ College Irinjalakuda.
https://github.com/ryuga/department-website
ajax bootstrap5 django jquery nginx
Last synced: 7 months ago
JSON representation
Website with Event Management System build with Django, JQuery and Bootstrap for Department of Computer Science, Christ College Irinjalakuda.
- Host: GitHub
- URL: https://github.com/ryuga/department-website
- Owner: Ryuga
- Created: 2021-06-13T17:44:28.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2025-01-17T17:52:24.000Z (11 months ago)
- Last Synced: 2025-04-27T13:28:38.440Z (8 months ago)
- Topics: ajax, bootstrap5, django, jquery, nginx
- Language: JavaScript
- Homepage: https://christcs.in
- Size: 13.7 MB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
# Website for the Department of Computer Science
## Christ College (Autonomous) Irinjalakuda
## Setup instruction
#### You would need a linux system for development. Windows raises python-decouple errors. More info [here](https://github.com/ryuga/Department-Website/issues/1).
#### You need Python 3.8 or above installed on your system.
### Development Setup
```bash
# Clone the repository or download as zip and cd into the root folder (Department-Website)
# Terminal instructions (You're supposed run the below commands during the initial setup)
# Remove existing virtualenv module, We will let poetry install the required version
$ sudo apt-get remove virtualenv -y && sudo python3 -m pip uninstall virtualenv -y
# Install poetry
$ pip install poetry
# Install dependencies from poetry
$ poetry install
$ sudo nano .env
# add the following environment variables
DATABASE_URL = your_database_url
DEBUG = True
LOCAL_DEVELOPMENT = True
SECRET_KEY = "your_secret_key"
DASHBOARD_URL = "your_dashboard_url"
ENCRYPTION_SALT = "your_encryption_salt"
ENCRYPTION_ITERATION = your_iteration_count
PAYTM_MERCHANT_ID = "your_merchant_id"
PAYTM_MERCHANT_KEY = "your_merchant_key"
GOOGLE_CLIENT_ID = "your_client_id"
GOOGLE_CLIENT_SECRET = "your_client_secret"
PAYTM_PROCESS_TRANSACTION_URL = "https://securegw-stage.paytm.in/theia/processTransaction"
# Run the development server locally
$ poetry run python3 manage.py runserver
# this should run the Django development server on your localhost:8000.
# now you can visit http://127.0.0.1:8000 and access the site.
```
### Adding host file configuration for subdomain access in development
### Production Setup
#### Dokku Setup
```bash
# Update and upgrade apt
$ sudo apt-get update && sudo apt-get upgrade -y
# Fetch dokku 0.31.4
$ wget -NP . https://dokku.com/install/v0.31.4/bootstrap.sh
# Install dokku
$ sudo DOKKU_TAG=v0.31.4 bash bootstrap.sh
# Create dokku application
$ dokku apps:create department-website
# Add required buildpacks
$ dokku buildpacks:add department-website https://github.com/moneymeets/python-poetry-buildpack.git
$ dokku buildpacks:add department-website https://github.com/heroku/heroku-buildpack-python.git
# From the above .env file, add all the variables and their values in given format
# (Multiple variables and their values can be added at a time with spaces between each pair)
$ dokku config:set department-website VARIABLE_NAME=VALUE
# Explicitly disable static file collection
$ dokku config:set department-website DISABLE_COLLECTSTATIC=1
```
Add Github repository
#### Baremetal Setup
#### Addition Requirements:
[NGINX](https://nginx.org/en/): Webserver for handling requests and serving django assets.
[Supervisor](http://supervisord.org/): Process management tool for keeping Django running. It also provides logging in events of unaccounted crashes and restarts the application to keep it online.
#### Setup procedure for Ubuntu 20.04 LTS. This will also work for all Debian/Ubuntu based distros. Procedures for other distros maybe slightly different but follows almost the same flow.
```bash
# Clone the repository or download as zip and cd into the root folder (Department-Website)
# Update and upgrade apt
$ sudo apt update && sudo apt upgrade -y
# If pip is not installed
$ sudo apt-get install python3-pip -y
# Remove virtualenv and let poetry install the required version
$ sudo apt-get remove virtualenv -y && sudo python3 -m pip uninstall virtualenv -y
# Clone the repository and cd into the folder
$ git clone https://github.com/Ryuga/Department-Website.git && cd Department-Website
# Install poetry
$ sudo python3 -m pip install poetry
# Install dependencies from poetry
$ sudo poetry install
$ sudo nano .env
# add the following environment variables
DATABASE_URL = your_database_url
DEBUG = False
LOCAL_DEVELOPMENT = False
SECRET_KEY = "your_secret_key"
DASHBOARD_URL = "your_dashboard_url"
ENCRYPTION_SALT = "your_encryption_salt"
ENCRYPTION_ITERATION = your_encryption_iteration_count
PAYTM_MERCHANT_ID = "your_merchant_id"
PAYTM_MERCHANT_KEY = "your_merchant_key"
GOOGLE_CLIENT_ID = "your_client_id"
GOOGLE_CLIENT_SECRET = "your_client_secret"
PAYTM_PROCESS_TRANSACTION_URL = "https://securegw.paytm.in/theia/processTransaction"
# Run collectstatic to collect static files to assets folder for production
$ sudo poetry run python3 manage.py collectstatic
# install supervisord
$ sudo apt install supervisor -y
# install nginx
$ sudo apt install nginx -y
```
At this point, nginx should be running.
If inbound connections are enabled for port 80, you'll be able to visit the ip with a browser which should give you the default NGINX landing page.
#### Supervisord configurations
add the below config inside `/etc/supervisor/conf.d/gunicorn.conf`
```shell
[program:gunicorn]
directory=/home/ubuntu/Department-Website
command=poetry run python3 -m gunicorn --workers 3 --bind unix:/home/ubuntu/Department-Website/app.sock core.wsgi:application
autostart=true
autorestart=true
stderr_logfile=/var/log/gunicorn/gunicorn.err.log
stdout_logfile=/var/log/gunicorn/gunicorn.out.log
[group:guni]
programs:gunicorn
```
Make log and output files for supervisor
```bash
$ sudo mkdir /var/log/gunicorn && cd /var/log/gunicorn
$ sudo touch gunicorn.out.log
$ sudo touch gunicorn.err.log
```
Update supervisor to propagate changes
```bash
# Reread supervisor configurations
$ sudo supervisorctl reread
# Update supervisor configurations
$ sudo supervisorctl update
# Check if supervisor is correctly configured.
$ sudo supervisorctl status
# If correctly configured the application should be running with pid and shows uptime.
# Otherwise check the configurations or logs and try again.
# In case if supervisor status shows restarting,
# 1) Check if gunicorn is installed
# 2) check if the log and output files exist for supervisor
# 3) check the logs and check the Django application
# In case if supervisor status shows exited quickly
# 1) check if the directory and commands in the gunicorn.conf is correct
# 2) check the application, the environment variables, database.
```
#### NGINX Configurations
add the below config inside `/etc/nginx/sites-available/django.conf`
```shell
server {
listen 80;
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
# ssl on;
# ssl_certificate /etc/ssl/certs/cert.pem;
# ssl_certificate_key /etc/ssl/private/key.pem;
# ssl_client_certificate /etc/ssl/certs/cloudflare.crt;
# ssl_verify_client on;
server_name ;
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/Department-Website/app.sock;
}
location /static/ {
autoindex on;
alias /home/ubuntu/Department-Website/assets/;
}
location /protected/media/ {
internal;
alias /home/ubuntu/Department-Website/media/;
}
}
```
Once added, test if the configurations are okay and symlink with `sites-enabled`
```bash
$ sudo nginx -t
# If configurations are not okay, Check the nginx configuration again to see if paths added are correct
# If configurations shows okay, Symlink with sites-enabled
$ sudo ln /etc/nginx/sites-available/django.conf /etc/nginx/sites-enabled
# Test nginx again
$ sudo nginx -t
# If configuration shows okay, Reload nginx
$ sudo systemctl reload nginx
# Reload supervisor
$ sudo systemctl reload supervisor
```
#### Once all the above setups are complete, we'll be able to visit the site in the domain/ip provided in the nginx configuration.