docs | ||
src/anonchat | ||
tests | ||
.dockerignore | ||
.env.dev | ||
.gitignore | ||
docker-compose.yml | ||
Dockerfile | ||
entrypoint.sh | ||
fly.toml | ||
LICENSE.txt | ||
poetry.lock | ||
pyproject.toml | ||
README.md |
anonchat
A simple Flask-based web application for anonymous inquiries or messages, designed for easy deployment and management.
Features
- Anonymous Inquiries: Allows users to submit inquiries without revealing their identity.
- Admin Interface: Secure area for administrators to view and manage inquiries.
- Webhook Notifications: Optionally sends notifications to a specified URL upon new inquiry submissions.
- Automatic Data Deletion: Periodically deletes inquiries older than a configurable duration (default: 48 hours) to maintain privacy.
- Rate Limiting: Protects against abuse by limiting the number of requests from a single IP address.
- CSRF Protection: Implemented using Flask-WTF to prevent cross-site request forgery attacks.
- Configurable: Easily configured using environment variables.
- Containerized: Ready for deployment using Docker and Docker Compose.
- Database Migrations: Simple migration system managed via Flask CLI commands.
- Optional Sentry Integration: Supports error tracking with Sentry.
Technology Stack
- Backend: Python 3.11+, Flask
- Database: PostgreSQL (recommended) or SQLite (default) via Flask-SQLAlchemy
- Session Management: Redis (recommended) or Filesystem via Flask-Session
- Rate Limiting: Redis via Flask-Limiter
- Task Scheduling: Flask-APScheduler
- Password Hashing: Argon2 via argon2-cffi
- WSGI Server: Gunicorn
- Dependency Management: Poetry
- Containerization: Docker, Docker Compose
- Deployment: Configured for Fly.io (optional)
Configuration
The application is configured via environment variables. You can set these in a .env
file in the project root or directly in your deployment environment.
Required:
SECRET_KEY
: A long, random string used for session signing and security. Generate one usingpython -c 'import secrets; print(secrets.token_hex(24))'
.DATABASE_URL
: The connection string for your database (e.g.,postgresql://user:password@host:port/dbname
orsqlite:///instance/anonchat.db
).REDIS_URL
: The connection string for your Redis instance (e.g.,redis://localhost:6379/0
). Used for sessions (ifSESSION_TYPE=redis
) and rate limiting.ADMIN_PASSWORD
: The password for the admin user. Set this on first run or when needing to reset.
Optional:
SITE_TITLE
: The title displayed on the website (default:AnonChat
).WEBHOOK_ENABLED
: Set totrue
to enable webhook notifications (default:false
).WEBHOOK_URL
: The URL to send webhook notifications to.WEBHOOK_SECRET
: A secret key to sign webhook payloads (recommended if webhooks are enabled).ADMIN_USERNAME
: The username for the admin user (default:admin
).ADMIN_FORCE_RESET
: Set totrue
to force reset the admin password on startup usingADMIN_PASSWORD
.AUTO_DELETE_HOURS
: The number of hours after which inquiries are automatically deleted (default:48
).RATELIMIT_STORAGE_URI
: OverridesREDIS_URL
specifically for rate limiting.BEHIND_PROXY
: Set totrue
if the application is running behind a reverse proxy (e.g., Nginx, Traefik) to correctly identify client IPs (default:false
).SESSION_TYPE
:redis
(default) orfilesystem
.SESSION_FILE_DIR
: Directory for filesystem sessions (ifSESSION_TYPE=filesystem
, default:/dev/shm/flask_session
).SENTRY_DSN
: Your Sentry DSN to enable error tracking.
Setup and Installation
Prerequisites:
- Python 3.11+
- Poetry
- Docker & Docker Compose (Recommended for ease of setup)
- Redis Server (if using Redis for sessions/rate limiting)
- PostgreSQL Server (if using PostgreSQL)
1. Clone the Repository:
git clone <repository-url>
cd anonchat
2. Using Docker (Recommended):
This is the easiest way to get started.
- Create a
.env
file: Copy.env.example
(if it exists) or create a new.env
file and fill in the required environment variables (see Configuration section). Pay special attention toSECRET_KEY
,DATABASE_URL
,REDIS_URL
, andADMIN_PASSWORD
. - Build and Run:
docker-compose up --build -d
The application should now be accessible at http://localhost:5000
(or the port mapped in docker-compose.yml
).
3. Local Development (Without Docker):
- Install Dependencies:
poetry install
- Set Environment Variables: Create a
.env
file in the project root and define the necessary variables (see Configuration). - Ensure Services are Running: Make sure your PostgreSQL (if used) and Redis servers are running and accessible based on your
.env
configuration. - Run the Development Server:
poetry run start
The application should be running at http://localhost:5000
.
Running the Application
- Docker: Use
docker-compose up -d
to start anddocker-compose down
to stop. - Local: Use
poetry run start
for the development server. For production-like environments without Docker, usegunicorn
:# Example gunicorn command (adjust workers as needed) poetry run gunicorn --workers 4 --bind 0.0.0.0:5000 "anonchat:app"
Deployment
This application includes configuration files for deployment:
Dockerfile
: Defines the container image.docker-compose.yml
: For local multi-container setups (app, db, redis).fly.toml
: Configuration for deploying to Fly.io.
Refer to the specific platform's documentation for deployment steps using these files. Ensure all necessary environment variables are set in your deployment environment.
License
This project is licensed under the 0BSD license - see the LICENSE.txt file for details.