# Smart Share Hub – Secure Cloud File & Note Sharing Platform ## Overview Smart Share Hub is a cloud-based web application deployed using Docker containers on a Linux virtual machine. The application allows users to: - Upload and share files - Create and share notes - Access the application publicly through a web browser - Use HTTPS encryption - Store persistent data using PostgreSQL and Docker volumes > Developed for the Cloud Technologies assignment. --- ## Features ### File Upload System - Upload files through the web interface - Files stored persistently inside a Docker volume - Accessible through the browser ### Shared Notes - Users can create notes - Notes are stored in a PostgreSQL database - Notes can be viewed publicly ### HTTPS Support - Application accessible through HTTPS - SSL/TLS certificate configured - Secure encrypted communication ### Docker-Based Deployment - Fully containerized application - Easy deployment using Docker Compose - Repeatable deployment using scripts ### Automatic Restart - Containers restart automatically after failure - Uses Docker restart policies ### Backup Support - Backup script included - Application data can be archived easily ### Persistent Storage - PostgreSQL database volume - Upload storage volume ### Environment Variable Configuration - Database secrets stored in `.env` - Sensitive data excluded from Git repository ### Logging - NGINX access logs available - Backend logs accessible through Docker --- ## Technologies Used | Layer | Technology | |---|---| | Backend | Python, Flask, psycopg2 | | Database | PostgreSQL 15 | | Frontend | HTML, CSS, JavaScript | | Reverse Proxy | NGINX | | Containerization | Docker, Docker Compose | --- ## System Architecture The application consists of four containers: | Container | Purpose | |---|---| | `frontend` | Serves frontend web files | | `backend` | Flask API server | | `postgres` | PostgreSQL database | | `nginx` | Reverse proxy and HTTPS | --- ## Environment Variables Secrets are stored using environment variables. Create a `.env` file in the project root: ```env DB_PASSWORD=xxxxxxxx ``` > The `.env` file is excluded from Git using `.gitignore`. --- ## Docker Compose The main deployment file is `docker-compose.yml`. ```bash # Start application docker-compose up -d --build # Stop application docker-compose down # Remove everything including volumes docker-compose down -v ``` **Database configuration example:** ```yaml environment: POSTGRES_DB: smartshare POSTGRES_USER: postgres POSTGRES_PASSWORD: ${DB_PASSWORD} ``` --- ## Deployment Instructions ### 1. Install Docker ```bash sudo apt update sudo apt install docker.io docker-compose -y ``` ### 2. Clone Repository ```bash git clone cd sk1 ``` ### 3. Create Environment File ```bash nano .env ``` Add the following: ```env DB_PASSWORD=xxxxxxxx ``` ### 4. Start Application ```bash docker-compose up -d --build ``` --- ## Public Access The application is publicly accessible at: ``` https://your-domain ``` Example: ``` https://joblin-share.duckdns.org ``` --- ## HTTPS Configuration HTTPS is configured using: - NGINX reverse proxy - SSL/TLS certificates All traffic is redirected through the secure HTTPS protocol. --- ## Persistent Storage | Volume | Purpose | |---|---| | `postgres_data` | PostgreSQL database storage | | `uploads` | Uploaded files | Data remains intact after container restarts. --- ## Automatic Restart Policy All containers are configured with: ```yaml restart: always ``` This ensures automatic recovery after crashes or server reboots. --- ## NGINX Reverse Proxy NGINX handles: - HTTPS termination - Reverse proxy routing - Static frontend delivery - API request forwarding | Route | Target | |---|---| | `/` | Frontend | | `/api/` | Backend API | --- ## Security Features - HTTPS encryption - Environment-based secret management - Docker network isolation - Reverse proxy protection --- ## Backup System Run the backup script: ```bash ./backup.sh ``` The script: - Creates compressed backups - Stores them inside `/backups` - Can be used for recovery Example backup file: ``` backup_2026-05-12.tar.gz ``` --- ## Scripts | Script | Description | Usage | |---|---|---| | `prepare-app.sh` | Starts the application automatically | `./prepare-app.sh` | | `remove-app.sh` | Stops and removes all containers | `./remove-app.sh` | | `backup.sh` | Creates a compressed application backup | `./backup.sh` | --- ## Logs ```bash # NGINX access logs docker logs nginx # Backend application logs docker logs backend # PostgreSQL logs docker logs postgres ```