zkt26/sk1/README.md

275 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 <repository-url>
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
```