💸 EthicalAds
EthicalAds lets publishers show ads to their target developer audience using ethical and privacy-focused data collection.
EthicalAds (code) provides a way for developers and other creators of technical content to get paid for content creation, without using privacy invading advertisement tooling.
EthicalAds is an alternative to traditional online advertising. Created by developers and for developers, EthicalAds curates ads from ethical companies that respect user privacy.
No tracking — developer-focused ads are curated based on site content, using machine powered learning. Say goodbye to ugly cookie banners.
Ready for more good news? The revenue share model is designed to be transparent and fair, and publishers receive the majority of ad revenue.
Also, the EthicalAds client allows publishers to customize the types of ads displayed on their sites. And it provides a dashboard to monitor ad performance and earnings.
The client supports text and image ad placements that are tasteful and non-invasive:
Running EthicalAds
EthicalAds is an invite-only network, but the server that it runs on is Open Source, readthedocs/ethical-ad-server
:
As EthicalAds is made by ReadTheDocs, there is also great documentation available online:
Unfortunately the docs aren't super docker
friendly, but there is a docker-compose.y
ml file that we can learn from:
# Docker Compose Local Development Setup
#
# This starts a local multi-container development environment
# with Postgres, Redis, Celery, and Django.
# The configuration comes from .envs/local
#
# To run:
# $ make dockerbuild
# $ make dockerserve
version: '3'
volumes:
local_postgres_data: {}
local_postgres_data_backups: {}
local_metabase_data: {}
services:
django: &django
build:
context: .
dockerfile: ./docker-compose/django/Dockerfile
image: ethicaladserver_local_django
depends_on:
- postgres
volumes:
- .:/app
env_file:
- ./.envs/local/django
- ./.envs/local/postgres
ports:
- "${ETHICALADS_DJANGO_PORT:-5000}:5000"
command: /start
# Allow us to run `docker attach` and get
# control on STDIN and be able to debug our code with interactive pdb
stdin_open: true
tty: true
postgres:
build:
context: .
dockerfile: ./docker-compose/postgres/Dockerfile
image: ethicaladserver_production_postgres
volumes:
- local_postgres_data:/var/lib/postgresql/data
- local_postgres_data_backups:/backups
env_file:
- ./.envs/local/postgres
redis:
image: redis:5.0
celeryworker:
<<: *django
image: ethicaladserver_local_celeryworker
depends_on:
- redis
- postgres
env_file:
- ./.envs/local/django
- ./.envs/local/postgres
ports: []
command: /start-celeryworker
celerybeat:
<<: *django
image: ethicaladserver_local_celerybeat
depends_on:
- redis
- postgres
env_file:
- ./.envs/local/postgres
- ./.envs/local/django
ports: []
command: /start-celerybeat
frontend:
build:
context: .
dockerfile: ./docker-compose/frontend/Dockerfile
ports: []
volumes:
- .:/app
Since there are no published images, you'd need to build the image from the Dockerfile
s in the repository, but the setup is a pretty standard Django application, so Pythonistas should feel right at home.