136 lines
3.1 KiB
Markdown
136 lines
3.1 KiB
Markdown
# Red Head
|
|
|
|
A web application that displays Reddit posts from an archive.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
.
|
|
├── Dockerfile # Docker configuration for the Python backend
|
|
├── docker-compose.yml # Docker Compose configuration
|
|
├── .gitignore # Git ignore rules
|
|
├── README.md # This file
|
|
├── src/
|
|
│ ├── server/ # Python Flask backend
|
|
│ │ ├── app.py # Main Flask application
|
|
│ │ ├── parse_archive.py # Archive parsing logic
|
|
│ │ ├── requirements.txt # Python dependencies
|
|
│ │ ├── sample_posts.json # Sample data
|
|
│ │ └── test_parse_archive.py # Tests
|
|
│ └── website/ # Frontend files
|
|
│ ├── app.js # JavaScript logic
|
|
│ ├── index.html # Main HTML file
|
|
│ ├── Reddit_Logo.webp # Logo image
|
|
│ └── styles.css # CSS styling
|
|
└── website/ # Additional website files
|
|
└── cache/ # Cache directory
|
|
```
|
|
|
|
## Docker Setup
|
|
|
|
### Prerequisites
|
|
|
|
- Docker Engine installed
|
|
- Docker Compose installed
|
|
|
|
### Running the Application
|
|
|
|
1. **Build and start the containers:**
|
|
```bash
|
|
docker-compose up --build
|
|
```
|
|
|
|
2. **Run in detached mode:**
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
3. **Stop the containers:**
|
|
```bash
|
|
docker-compose down
|
|
```
|
|
|
|
### Environment Variables
|
|
|
|
The application uses the following environment variables:
|
|
|
|
- `ARCHIVE_DIR`: Path to the archive directory (default: `/app/archive`)
|
|
- `FLASK_ENV`: Flask environment (default: `production`)
|
|
|
|
### Ports
|
|
|
|
- **6006**: Main application port (Flask server)
|
|
|
|
### Volumes
|
|
|
|
The following volumes are mounted for development:
|
|
|
|
- `./src/server` → `/app/src/server`
|
|
- `./src/website` → `/app/website`
|
|
- `./website/cache` → `/app/website/cache`
|
|
|
|
## Development
|
|
|
|
### Making Changes
|
|
|
|
1. **Modify source code** in the `src/` directory
|
|
2. **Docker will automatically reload** the application
|
|
3. **Access the application** at `http://localhost:6006`
|
|
|
|
### Testing
|
|
|
|
To test the Docker setup:
|
|
|
|
```bash
|
|
# Build the images
|
|
docker-compose build
|
|
|
|
# Start the containers
|
|
docker-compose up -d
|
|
|
|
# Check container status
|
|
docker-compose ps
|
|
|
|
# View logs
|
|
docker-compose logs app
|
|
|
|
# Stop containers
|
|
docker-compose down
|
|
```
|
|
|
|
## API Endpoints
|
|
|
|
- `GET /posts` - Get first 10 posts for initial load
|
|
- `GET /posts/more?count=N` - Get next 10 posts, starting from index N
|
|
- `GET /posts/total` - Get total number of posts available
|
|
- `GET /` - Server status endpoint
|
|
|
|
## Architecture
|
|
|
|
The application consists of:
|
|
|
|
1. **Python Flask Backend** (`src/server/`)
|
|
- Serves API endpoints
|
|
- Handles archive parsing
|
|
- Serves static frontend files
|
|
|
|
2. **Frontend** (`src/website/`)
|
|
- HTML, CSS, and JavaScript
|
|
- Fetches data from the backend API
|
|
- Implements infinite scrolling
|
|
|
|
## Dependencies
|
|
|
|
### Python Dependencies (from `src/server/requirements.txt`):
|
|
- Flask
|
|
- Flask-CORS
|
|
- Pillow
|
|
- beautifulsoup4
|
|
- requests
|
|
|
|
### Frontend Dependencies:
|
|
- None (pure HTML/CSS/JavaScript)
|
|
|
|
## License
|
|
|
|
This project is licensed under the MIT License. |