mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-01-15 01:48:18 -05:00
892 lines
32 KiB
INI
892 lines
32 KiB
INI
# DO NOT EDIT THIS FILE
|
|
# This is a base template. To apply changes to your
|
|
# reddit instance, create a "myreddit.update" config
|
|
# file, then run 'make ini'. 'make ini' will combine
|
|
# this template with the myreddit.update file and create a
|
|
# 'myreddit.ini'. ('myreddit.update' is just an example;
|
|
# any name will do - e.g., 'foo.update' will create
|
|
# 'foo.ini')
|
|
|
|
[secrets]
|
|
# the tokens in this section are base64 encoded
|
|
# general purpose secret
|
|
SECRET = YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5
|
|
# secret for /prefs/feeds
|
|
FEEDSECRET = YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5
|
|
# used for authenticating admin API calls w/o cookie
|
|
ADMINSECRET = YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5
|
|
# used to securely authenticate websocket requests to sutro
|
|
websocket = YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5
|
|
# secret for validating the cdn-provided client ip
|
|
cdn_ip_verification =
|
|
# secret for authenticating private media embeds
|
|
media_embed = YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5
|
|
# secret for authenticating controller#action name
|
|
action_name = YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5
|
|
# secret for email notification one-click unsubscribe links
|
|
email_notifications = YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5
|
|
# secrets for communicating with Stripe (optional payment processor)
|
|
stripe_webhook =
|
|
stripe_public_key =
|
|
stripe_secret_key =
|
|
# secrets for communicating with Authorize.net (optional payment processor--
|
|
# must also set authorizenetapi to enable)
|
|
authorizenetname =
|
|
authorizenetkey =
|
|
# secret for communicating with Paypal (optional payment processor)
|
|
paypal_webhook =
|
|
# secret for communicating with Coinbase (optional payment processor)
|
|
coinbase_webhook =
|
|
# secret for communicating with RedditGifts (optional payment processor)
|
|
redditgifts_webhook =
|
|
# The campaign monitor API key for the newsletter
|
|
newsletter_api_key =
|
|
# event-collector key and secret
|
|
events_collector_key =
|
|
events_collector_secret =
|
|
events_collector_js_key =
|
|
events_collector_js_secret =
|
|
# The API key for managing tickets on ZenDesk
|
|
zendesk_api_key =
|
|
# the user to use for managing tickets on ZenDesk
|
|
zendesk_user =
|
|
# The API key for submitting takedown notices to ChillingEffects.org
|
|
chillingeffects_org_api_key =
|
|
# Facebook sharing app id
|
|
facebook_app_id =
|
|
# The API key for making calls to CloudFlare
|
|
cloudflare_api_key =
|
|
# The email address linked to the API key for CloudFlare
|
|
cloudflare_email_address =
|
|
# The API url to call to purge content from CloudFlare
|
|
cloudflare_email_address =
|
|
# The imgix-provided secret url-signing token
|
|
imgix_signing_token =
|
|
# secret for cache poisoning report MACs
|
|
cache_poisoning = YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5
|
|
# secret for hashing ad click urls
|
|
adserver_click_url_secret = YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5
|
|
|
|
[DEFAULT]
|
|
############################################ SITE-SPECIFIC OPTIONS
|
|
#### Appearance
|
|
# the site's tagline, used in the title and description
|
|
short_description = open source is awesome
|
|
# default site interface language (two letter character code)
|
|
site_lang = en
|
|
# default header image url
|
|
default_header_url = reddit.com.header.png
|
|
|
|
#### Domains
|
|
# the domain that this app expects to be accessed on
|
|
domain = reddit.local
|
|
# where third party media (embeds etc.) are hosted
|
|
# this should be different from `domain` for security
|
|
media_domain = %(domain)s
|
|
# the short domain (like redd.it)
|
|
shortdomain =
|
|
# if you use www for the old-timey feel, put it here
|
|
domain_prefix =
|
|
# subdomains that don't need special processing
|
|
reserved_subdomains = www, ssl, oauth
|
|
# subdomains that don't need special processing, and can't be part of `c.domain_prefix`.
|
|
# should be a subset of `reserved_subdomains`
|
|
ignored_subdomains = www, ssl, oauth
|
|
# subdomains that are not reddit instances
|
|
offsite_subdomains =
|
|
# https api endpoint (must be g.domain or a subdomain of g.domain)
|
|
https_endpoint =
|
|
# the domain for oauth-orized requests
|
|
oauth_domain =
|
|
# (secure) payment domain for self-serve ads
|
|
payment_domain = https://pay.reddit.local/
|
|
# base url where 300x250 ad units (sidebar) are hosted
|
|
ad_domain = http://reddit.local
|
|
# domain where sutro websocket server is hosted
|
|
websocket_host = %(domain)s
|
|
# domain to send stats to
|
|
stats_domain =
|
|
# URL to send event-collector events to
|
|
events_collector_url =
|
|
# URL to send test event-collector events to
|
|
events_collector_test_url =
|
|
|
|
#### Accounts and Subreddits
|
|
# the user used for "system" operations and private messages
|
|
system_user = reddit
|
|
# the default subreddit for submissions
|
|
default_sr = frontpage
|
|
# account used for default feedback messaging (can be /r/subreddit)
|
|
admin_message_acct = reddit
|
|
# subreddit used for DMCA takedowns
|
|
takedown_sr = takedowns
|
|
# subreddit used for trending subreddits postings. Ignored if blank.
|
|
trending_sr =
|
|
# list of subreddits to always include in a user's front page (unless they unsubscribe)
|
|
automatic_reddits =
|
|
# special subreddit that only reddit gold subscribers can use
|
|
lounge_reddit =
|
|
# subreddits that have subscribers hidden
|
|
hide_subscribers_srs =
|
|
# subreddit to use for beta testing
|
|
beta_sr = beta
|
|
# name of the promos subreddit.
|
|
promo_sr_name = promos
|
|
|
|
multi_icons = art and design, ask, books, business, cars, comics, cute animals, diy, entertainment, food and drink, funny, games, grooming, health, life advice, military, models pinup, music, news, philosophy, pictures and gifs, science, shopping, sports, style, tech, travel, unusual stories, video
|
|
|
|
#### Static Files
|
|
# if set, this is the domain used for static files served over http and https
|
|
# if not set, no domain will be specified and relative local URLs will be used instead
|
|
static_domain =
|
|
|
|
#### Ops
|
|
# if your webserver is a proxy and on a different instance on the same 10.0.0.0/8 network
|
|
# set X-forwarded-for and set this to true
|
|
trust_local_proxies = false
|
|
# Location (directory) for temp files for diff3 merging
|
|
# Empty will use python default for temp files
|
|
diff3_temp_location =
|
|
# which cdn provider to use; right now this is just used for getting an
|
|
# accurate client IP. options are:
|
|
# null - no cdn
|
|
# cloudflare - use cloudflare as configured for reddit.com
|
|
# or write your own!
|
|
cdn_provider = null
|
|
|
|
#### Analytics
|
|
# image to render to track pageviews
|
|
tracker_url = /pixel/of_destiny.png
|
|
# images to render to track sponsored links
|
|
adtracker_url = /pixel/of_doom.png
|
|
# image to render to track the ad frame
|
|
adframetracker_url = /pixel/of_defenestration.png
|
|
# image to render to track HTTPS cert compatibility (needs to be protocol-relative)
|
|
httpstracker_url =
|
|
# redirector to bounce clicks off of on sponsored links for tracking
|
|
clicktracker_url = /click
|
|
event_clicktracker_url = /event_click
|
|
# url to request to track interaction statistics
|
|
uitracker_url = /pixel/of_discovery.png
|
|
# embeds pixel tracking url
|
|
eventtracker_url = /pixel/of_delight.png
|
|
anon_eventtracker_url = /pixel/of_diversity.png
|
|
# google analytics token
|
|
googleanalytics =
|
|
# google analytics events sampling rate. Valid values are 1-100.
|
|
# See https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiBasicConfiguration#_gat.GA_Tracker_._setSampleRate
|
|
googleanalytics_sample_rate = 50
|
|
# google analytics token for gold
|
|
googleanalytics_gold =
|
|
# google analytics events sampling rate for gold. Valid values are 1-100.
|
|
googleanalytics_sample_rate_gold = 100
|
|
# secret used for signing information on the above tracking pixels
|
|
tracking_secret = abcdefghijklmnopqrstuvwxyz0123456789
|
|
# google tag manager container id
|
|
googletagmanager =
|
|
|
|
#### Wiki Pages
|
|
wiki_page_content_policy = contentpolicy
|
|
wiki_page_privacy_policy = privacypolicy
|
|
wiki_page_user_agreement = useragreement
|
|
wiki_page_registration_info = registration_info
|
|
wiki_page_gold_bottlecaps = gold_bottlecaps
|
|
wiki_page_stylesheets_everywhere =
|
|
|
|
#### Feature toggles
|
|
disable_ads = false
|
|
disable_captcha = false
|
|
disable_ratelimit = false
|
|
disable_require_admin_otp = false
|
|
disable_wiki = false
|
|
|
|
|
|
############################################ DEBUG
|
|
# global debug flag -- displays pylons stacktrace rather than 500 page on error when true
|
|
# NOTE: a pylons stacktrace allows remote code execution. make sure this is false in prod.
|
|
debug = false
|
|
# enables/disables whitespace removal in rendered html
|
|
template_debug = false
|
|
# enables/disables compiled template caching and template file mtime checking
|
|
reload_templates = true
|
|
# use uncompressed static files (out of /static/js and /static/css)
|
|
# rather than compressed files out of /static (for development if true)
|
|
uncompressedJS = true
|
|
# enable/disable verbose logging of SQL queries
|
|
sqlprinting = false
|
|
# directory to write cProfile stats dumps to (disabled if not set)
|
|
profile_directory =
|
|
# template names to record render timings for
|
|
timed_templates = Reddit, Link, Comment, LinkListing, NestedListing, SubredditTopBar
|
|
|
|
|
|
############################################ PLUGINS
|
|
# which plugins are enabled (they must be installed via setup.py first)
|
|
plugins =
|
|
|
|
###### about
|
|
# set which subreddits the about page pulls its source data from
|
|
# make sure you create the subreddits as well, otherwise you'll get an error
|
|
about_sr_quotes = about_quotes
|
|
about_sr_images = about_images
|
|
# size limit on the about page slideshow
|
|
about_images_count = 50
|
|
about_images_min_score = 1
|
|
|
|
advertising_links_sr = advertising_links
|
|
wiki_page_selfserve_advertisers = advertising/advertisers
|
|
wiki_page_selfserve_content = advertising/content
|
|
wiki_page_selfserve_blurbs = advertising/blurbs
|
|
wiki_page_selfserve_quotes = advertising/quotes
|
|
wiki_page_selfserve_help = advertising/help
|
|
|
|
###### liveupdate
|
|
# the domain the activity pixel is hosted on
|
|
liveupdate_pixel_domain = %(domain)s
|
|
# maximum number of outstanding invites an event can have
|
|
liveupdate_invite_quota = 5
|
|
|
|
###### meatspace
|
|
# nothing!
|
|
|
|
|
|
############################################ LOGGING
|
|
# whether to print a "reddit app started" message at start
|
|
log_start = true
|
|
# enable/disable logging of exceptions and events via amqp/rabbitmq
|
|
amqp_logging = false
|
|
# exception reporter objects to give to ErrorMiddleware (see log.py)
|
|
error_reporters =
|
|
|
|
|
|
############################################ METRICS
|
|
# where to send metrics
|
|
statsd_addr =
|
|
# how often to send them [0.0 - 1.0]
|
|
statsd_sample_rate = 1.0
|
|
# percentage of stats for sampling (0-100)
|
|
stats_sample_rate = 1
|
|
|
|
|
|
############################################ MEDIA STORAGE
|
|
# which backend provider to use for media (thumbnails, subreddit stylesheets,
|
|
# subreddit images, app icons). options are:
|
|
# s3 - use amazon s3
|
|
# filesystem - write to local filesystem
|
|
# or write your own!
|
|
media_provider = s3
|
|
|
|
# s3 provider
|
|
# your s3 credentials -- if these are left blank, we'll pass None to
|
|
# boto which will trigger it to look in various places, including instance
|
|
# metadata if on ec2, for credentials.
|
|
S3KEY_ID =
|
|
S3SECRET_KEY =
|
|
# May be one bucket, or many buckets seperated by commas
|
|
s3_media_buckets =
|
|
s3_image_buckets =
|
|
# Store direct urls for images, rather than buckets
|
|
# For the bucket mybucket with the image helloworld.jpg the stored url would be:
|
|
# true: http://{s3_media_domain}/mybucket/helloworld.jpg
|
|
# false: http://mybucket/helloworld.jpg
|
|
s3_media_direct = true
|
|
# Which S3 region to use
|
|
# If using the US region, the default is correct. Otherwise, use a region-specific
|
|
# endpoint as in http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
|
|
s3_media_domain = s3.amazonaws.com
|
|
|
|
# filesystem provider configuration
|
|
media_fs_root =
|
|
media_fs_base_url_http =
|
|
|
|
thumbnail_size = 70, 70
|
|
thumbnail_hidpi_scaling = 2
|
|
|
|
# The provider that handles on-the-fly resizing of images. Options:
|
|
# imgix
|
|
# no_op
|
|
image_resizing_provider = no_op
|
|
|
|
# Which domain to use to request imgix-processed files.
|
|
imgix_domain = imgix.example.com
|
|
# Whether to sign imgix urls.
|
|
imgix_signing = false
|
|
|
|
|
|
############################################ EMERGENCY MODES
|
|
# emergency measures: makes the site read only
|
|
read_only_mode = false
|
|
# a modified read only mode used for cache shown during heavy load 503s
|
|
heavy_load_mode = false
|
|
# override default site language for things like pirate day
|
|
lang_override =
|
|
# enable/disable automatic creation of database tables/column families
|
|
db_create_tables = True
|
|
# are we allowed to write to databases at all?
|
|
disallow_db_writes = False
|
|
# disable custom subreddit stylesheets
|
|
css_killswitch = False
|
|
|
|
|
|
############################################ SCRAPER
|
|
# user agent for the scraper
|
|
useragent = Mozilla/5.0 (compatible; redditbot/1.0; +http://www.reddit.com/feedback)
|
|
# Embedly API Key. if no key is provided, the scraper will only fetch thumbnails.
|
|
embedly_api_key =
|
|
# A tuple of what media_object types will automatically be displayed on comments view.
|
|
# Ex: liveupdate, custom
|
|
autoexpand_media_types = liveupdate
|
|
|
|
|
|
############################################ NEWSLETTER
|
|
# The list ID within campaign monitor to be altering
|
|
newsletter_list_id =
|
|
|
|
############################################ QUOTAS
|
|
# quota for various types of relations creatable in subreddits
|
|
sr_banned_quota = 10000
|
|
sr_muted_quota = 10000
|
|
sr_moderator_invite_quota = 10000
|
|
sr_contributor_quota = 10000
|
|
sr_wikibanned_quota = 10000
|
|
sr_wikicontributor_quota = 10000
|
|
sr_quota_time = 7200
|
|
sr_invite_limit = 25
|
|
# delay before allowing a link to be shared
|
|
new_link_share_delay = 30 seconds
|
|
# max number of uploaded images per subreddit
|
|
max_sr_images = 50
|
|
|
|
|
|
############################################ RATELIMITS
|
|
# If true, send 429 responses on exceeded ratelimits
|
|
# If false, send headers only, but don't abort
|
|
# Only applies if tracking is enabled below
|
|
ENFORCE_RATELIMIT = false
|
|
|
|
# If true, store per-user request counts in ratelimits cache
|
|
RL_SITEWIDE_ENABLED = true
|
|
# How large of a burst window will users be allowed?
|
|
RL_RESET_MINUTES = 10
|
|
# What is the average request rate over the above time period?
|
|
RL_AVG_REQ_PER_SEC = 0.5
|
|
|
|
# Same as above, but configured separately for connections via OAuth
|
|
RL_OAUTH_SITEWIDE_ENABLED = true
|
|
RL_OAUTH_RESET_MINUTES = 10
|
|
RL_OAUTH_AVG_REQ_PER_SEC = 0.5
|
|
|
|
# same as above, but for failed login attempts per account
|
|
RL_LOGIN_AVG_PER_SEC = .1
|
|
# same as above, but for failed login attempts per unfamiliar ip address
|
|
RL_LOGIN_IP_AVG_PER_SEC = .1
|
|
# and email/PM shares
|
|
RL_SHARE_AVG_PER_SEC = .1
|
|
|
|
# user agent substrings to hard-ratelimit to a number of requests per ten second period
|
|
# example: agents = googlebot:10, appengine:2
|
|
agents =
|
|
|
|
# karma needed to avoid per-subreddit submission ratelimits
|
|
MIN_RATE_LIMIT_KARMA = 10
|
|
MIN_RATE_LIMIT_COMMENT_KARMA = 1
|
|
|
|
|
|
############################################ THRESHOLDS
|
|
# if the user has positive total karma, their per-subreddit karma will default to this, else 0
|
|
MIN_UP_KARMA = 1
|
|
|
|
# minimum user karma total values to show to non-admins
|
|
link_karma_display_floor = 1
|
|
comment_karma_display_floor = -100
|
|
|
|
# age at which links/comments become "archived" and can no longer be voted on, replied to, or reported
|
|
ARCHIVE_AGE = 180 days
|
|
|
|
# the maximum amount of time we use memcache to hide that a vote hasn't been
|
|
# asynchronously processed yet.
|
|
vote_queue_grace_period = 1 hour
|
|
|
|
# minimum age of an account (in days) for the "create a subreddit" button to show
|
|
min_membership_create_community = 30
|
|
# maximum age (in days) of items eligible for display on normalized hot pages (frontpage, multis, etc.)
|
|
HOT_PAGE_AGE = 1000
|
|
# how long to consider links eligible for the rising page
|
|
rising_period = 12 hours
|
|
# default number of comments shown
|
|
num_comments = 100
|
|
# max number of comments to show at once
|
|
max_comments = 500
|
|
max_comments_gold = 2500
|
|
# max number of parents to walk up the tree while uncollapsing replies in Q&A
|
|
# sort mode
|
|
max_comment_parent_walk = 20
|
|
# how deep do we go into the top listing when fetching /random
|
|
num_serendipity = 250
|
|
# Conflate visits to a comment page that happen within this many
|
|
# seconds of each other (gold "new comments" feature)
|
|
comment_visits_period = 600
|
|
# Max number of mentions to extract per comment
|
|
butler_max_mentions = 3
|
|
# Number of days to keep recent wiki revisions for
|
|
wiki_keep_recent_days = 7
|
|
# Max number of bytes for wiki pages
|
|
wiki_max_page_length_bytes = 262144
|
|
# Max wiki page name length
|
|
wiki_max_page_name_length = 128
|
|
# Max number of separators in a wiki page name
|
|
wiki_max_page_separators = 3
|
|
|
|
|
|
############################################ SEARCH
|
|
# search provider name
|
|
search_provider = cloudsearch
|
|
|
|
# endpoint for link search
|
|
CLOUDSEARCH_SEARCH_API =
|
|
# endpoint for link upload
|
|
CLOUDSEARCH_DOC_API =
|
|
# endpoint for subreddit search
|
|
CLOUDSEARCH_SUBREDDIT_SEARCH_API =
|
|
# endpoint for subreddit upload
|
|
CLOUDSEARCH_SUBREDDIT_DOC_API =
|
|
|
|
############################################ MEMCACHE
|
|
num_mc_clients = 5
|
|
# core memcache cluster, Things and various other stuff
|
|
memcaches = 127.0.0.1:11211
|
|
# caches used for @memoize decorator magic
|
|
memoizecaches = 127.0.0.1:11211
|
|
# hosts to store memcache-based locks on
|
|
lockcaches = 127.0.0.1:11211
|
|
# hosts to store rendered template fragments in
|
|
rendercaches = 127.0.0.1:11211
|
|
# hosts to store entire rendered pages in
|
|
pagecaches = 127.0.0.1:11211
|
|
# hosts that cache permacache cassandra data
|
|
permacache_memcaches = 127.0.0.1:11211
|
|
# hosts that cache srmember rels (subset of Thing data)
|
|
srmembercaches = 127.0.0.1:11211
|
|
# hosts that cache relations between Things
|
|
relcaches = 127.0.0.1:11211
|
|
# a local cache that's not globally consistent and can have stale data (optional)
|
|
stalecaches =
|
|
# cache for tracking rate limit thresholds
|
|
ratelimitcaches = 127.0.0.1:11211
|
|
# hosts to store hardcache data
|
|
hardcache_memcaches = 127.0.0.1:11211
|
|
|
|
|
|
############################################ MISCELLANEOUS
|
|
# default localization for strings (when using python's locale.format)
|
|
# (mostly replaced by babel, this shouldn't be necessary to change)
|
|
locale = C
|
|
# storage timezone, should probably not be changed from UTC
|
|
timezone = UTC
|
|
# timezone for display of some data, deprecated
|
|
display_timezone = MST
|
|
# location of the static directory
|
|
static_path = /static/
|
|
# Just a list of words. Used by errorlog.py to make up names for new errors.
|
|
words_file = /usr/dict/words
|
|
# domains that we consider URLs case sensitive for repost detection purposes
|
|
case_sensitive_domains = i.imgur.com, youtube.com
|
|
# Domains that we know are friendly and host raw image files
|
|
known_image_domains = i.imgur.com, giant.gfycat.com, pbs.twimg.com, upload.wikimedia.org
|
|
# whether to load reddit private code (a hack until we structure it better)
|
|
import_private = false
|
|
# location of geoip service
|
|
geoip_location = http://127.0.0.1:5000
|
|
# account name that AutoModerator actions will be done by
|
|
automoderator_account =
|
|
# Which scheme to use for URLs when the current protocol isn't known
|
|
default_scheme = http
|
|
|
|
|
|
############################################ AUTHENTICATION
|
|
# how to authenticate users. options are:
|
|
# cookie: standard cookie-based auth
|
|
# http: http basic authentication
|
|
# or write your own!
|
|
authentication_provider = cookie
|
|
# the work factor for bcrypt, increment this every time computers double in
|
|
# speed. don't worry, changing this won't break old passwords
|
|
bcrypt_work_factor = 12
|
|
# name of the cookie to drop with login information
|
|
login_cookie = reddit_session
|
|
# name of the admin cookie
|
|
admin_cookie = reddit_admin
|
|
# name of the otp cookie
|
|
otp_cookie = reddit_otp
|
|
# the maximum life of an admin cookie (seconds)
|
|
ADMIN_COOKIE_TTL = 32400
|
|
# the maximum amount of idle time for an admin cookie (seconds)
|
|
ADMIN_COOKIE_MAX_IDLE = 900
|
|
# the maximum life of an otp cookie
|
|
OTP_COOKIE_TTL = 604800
|
|
# funky app user agents exempt from the login CSRF prevention
|
|
exempt_login_user_agents =
|
|
# for the http provider:
|
|
# should we trust the authorization header and auto-register accounts?
|
|
auth_trust_http_authorization = false
|
|
|
|
|
|
############################################ CASSANDRA
|
|
# cassandra hosts
|
|
cassandra_seeds = 127.0.0.1:9160
|
|
# number of connections to keep open to the cassandra ring
|
|
cassandra_pool_size = 5
|
|
# default read/write consistency levels for Cassandra
|
|
cassandra_rcl = ONE
|
|
cassandra_wcl = ONE
|
|
# name of default connection pool to use when _connection_pool not specified
|
|
cassandra_default_pool = main
|
|
|
|
|
|
############################################ AMQP
|
|
amqp_host = localhost:5672
|
|
amqp_user = reddit
|
|
amqp_pass = reddit
|
|
amqp_virtual_host = /
|
|
|
|
|
|
############################################ ZOOKEEPER
|
|
# zookeeper is optional at the moment
|
|
zookeeper_connection_string =
|
|
zookeeper_username =
|
|
zookeeper_password =
|
|
|
|
|
|
############################################ EMAIL
|
|
smtp_server = localhost
|
|
# where to send alerts for exceptions, etc.
|
|
nerds_email = nerds@reddit.com
|
|
# the "from" address for link share emails
|
|
share_reply = noreply@reddit.com
|
|
# where to send feedback comments
|
|
feedback_email = reddit@gmail.com
|
|
# the "from" address for orangered notifications
|
|
notification_email = notifications@example.com
|
|
# email to ads team
|
|
ads_email = ad-ops@reddit.com
|
|
|
|
############################################ POSTGRES
|
|
db_user = reddit
|
|
db_pass = password
|
|
db_port = 5432
|
|
db_pool_size = 3
|
|
db_pool_overflow_size = 3
|
|
|
|
# list of all databases named in the subsequent table
|
|
databases = main, comment, email, authorize, award, hc, traffic
|
|
|
|
#db name db host user, pass, port, conn, overflow_conn
|
|
main_db = reddit, 127.0.0.1, *, *, *, *, *
|
|
comment_db = reddit, 127.0.0.1, *, *, *, *, *
|
|
comment2_db = reddit, 127.0.0.1, *, *, *, *, *
|
|
email_db = reddit, 127.0.0.1, *, *, *, *, *
|
|
authorize_db = reddit, 127.0.0.1, *, *, *, *, *
|
|
award_db = reddit, 127.0.0.1, *, *, *, *, *
|
|
hc_db = reddit, 127.0.0.1, *, *, *, *, *
|
|
traffic_db = reddit, 127.0.0.1, *, *, *, *, *
|
|
|
|
hardcache_categories = *:hc:hc
|
|
|
|
# this setting will prefix all of the table names
|
|
db_app_name = reddit
|
|
|
|
type_db = main
|
|
rel_type_db = main
|
|
hardcache_db = main
|
|
|
|
# definitions of what each table is (probably shouldn't change in .update files)
|
|
# things require no extra info. relation is followed by the names of the related tables
|
|
# a !typeid=# flag allows overriding of the type id for a thing/rel to avoid the db
|
|
# hit on app startup.
|
|
db_table_link = thing
|
|
db_table_account = thing
|
|
db_table_message = thing
|
|
db_table_comment = thing
|
|
db_table_subreddit = thing
|
|
db_table_srmember = relation, subreddit, account
|
|
db_table_friend = relation, account, account
|
|
db_table_inbox_account_comment = relation, account, comment
|
|
db_table_inbox_account_message = relation, account, message
|
|
db_table_moderatorinbox = relation, subreddit, message
|
|
db_table_report_account_link = relation, account, link
|
|
db_table_report_account_comment = relation, account, comment
|
|
db_table_report_account_message = relation, account, message
|
|
db_table_report_account_subreddit = relation, account, subreddit
|
|
db_table_award = thing
|
|
db_table_trophy = relation, account, award
|
|
db_table_jury_account_link = relation, account, link
|
|
db_table_flair = relation, subreddit, account
|
|
db_table_promocampaign = thing
|
|
|
|
# which servers to find each table on (likely to change in .update files)
|
|
# first server listed is assumed to be the master, all others are read-only slaves
|
|
# additionally, a "!avoid_master" flag may be added to specify that reads should use the slaves
|
|
db_servers_link = main, main
|
|
db_servers_account = main
|
|
db_servers_message = main
|
|
db_servers_comment = comment
|
|
db_servers_subreddit = comment
|
|
db_servers_srmember = comment
|
|
db_servers_friend = comment
|
|
db_servers_inbox_account_comment = main
|
|
db_servers_inbox_account_message = main
|
|
db_servers_moderatorinbox = main
|
|
db_servers_report_account_link = main
|
|
db_servers_report_account_comment = comment
|
|
db_servers_report_account_message = main
|
|
db_servers_report_account_subreddit = main
|
|
db_servers_award = award
|
|
db_servers_trophy = award
|
|
db_servers_jury_account_link = main
|
|
db_servers_ad = main
|
|
db_servers_adsr = main
|
|
db_servers_flair = main
|
|
db_servers_promocampaign = main
|
|
|
|
|
|
############################################ GOLD
|
|
goldpayment_email =
|
|
# "thanks for subscribing to reddit gold" return address
|
|
goldsupport_email =
|
|
|
|
gold_month_price = 3.99
|
|
gold_year_price = 29.99
|
|
|
|
PAYPAL_BUTTONID_ONETIME_BYMONTH =
|
|
PAYPAL_BUTTONID_ONETIME_BYYEAR =
|
|
PAYPAL_BUTTONID_AUTORENEW_BYMONTH =
|
|
PAYPAL_BUTTONID_AUTORENEW_BYYEAR =
|
|
PAYPAL_BUTTONID_CREDDITS_BYMONTH =
|
|
PAYPAL_BUTTONID_CREDDITS_BYYEAR =
|
|
PAYPAL_BUTTONID_GIFTCODE_BYMONTH =
|
|
PAYPAL_BUTTONID_GIFTCODE_BYYEAR =
|
|
STRIPE_MONTHLY_GOLD_PLAN =
|
|
STRIPE_YEARLY_GOLD_PLAN =
|
|
COINBASE_BUTTONID_ONETIME_1MO =
|
|
COINBASE_BUTTONID_ONETIME_3MO =
|
|
COINBASE_BUTTONID_ONETIME_1YR =
|
|
COINBASE_BUTTONID_ONETIME_2YR =
|
|
COINBASE_BUTTONID_ONETIME_3YR =
|
|
|
|
|
|
############################################ SELF-SERVE ADS
|
|
selfserve_support_email = selfservesupport@mydomain.com
|
|
MAX_CAMPAIGNS_PER_LINK = 100
|
|
cpm_selfserve = 1.50
|
|
cpm_selfserve_geotarget_metro = 5.00
|
|
cpm_selfserve_geotarget_country = 2.00
|
|
cpm_selfserve_collection = 1.50
|
|
authorizenetapi =
|
|
default_promote_bid = 50
|
|
min_promote_bid = 20
|
|
max_promote_bid = 9999
|
|
adserver_click_domain =
|
|
authnet_validate = true
|
|
# Define versions for mobile OS platform
|
|
ios_versions = 2.0, 2.1, 3.0, 3.1, 3.2, 4.0, 4.1, 4.2, 4.3, 5.0, 5.1, 6.0, 6.1, 7.0, 7.1, 8.0, 8.1, 8.2, 8.3, 8.4
|
|
android_versions = 1.5, 1.6, 2.1, 2.2, 2.3, 3.0, 4.0, 4.1, 4.2, 4.3, 4.4, 5.0, 5.1
|
|
|
|
|
|
############################################ TRAFFIC
|
|
TRAFFIC_ACCESS_KEY =
|
|
TRAFFIC_SECRET_KEY =
|
|
RAW_LOG_DIR =
|
|
PROCESSED_DIR =
|
|
AGGREGATE_DIR =
|
|
AWS_LOG_DIR =
|
|
TRAFFIC_SRC_DIR =
|
|
TRAFFIC_LOG_HOSTS =
|
|
|
|
############################################ TRAFFIC EMR ROLE
|
|
emr_trafic_job_flow_role = EMR_EC2_DefaultRole
|
|
emr_traffic_service_role = EMR_DefaultRole
|
|
|
|
############################################ PERFORMANCE / SCALING
|
|
# should we split link votes into separate queues based on subreddit id?
|
|
# this helps with lock contention but isn't necessary on smaller sites
|
|
shard_link_vote_queues = false
|
|
# should we split comment tree processing into shards based on the link id?
|
|
# this helps with lock contention but isn't necessary on smaller sites
|
|
shard_commentstree_queues = false
|
|
# chance of a write to the query cache triggering pruning. increasing this will
|
|
# potentially slow down writes, but will keep the size of cached queries in check better
|
|
querycache_prune_chance = 0.05
|
|
# time for the page cache (for unlogged in users)
|
|
page_cache_time = 90
|
|
# time for the comment pane cache (for a subset of logged in users, see pages.py:CommentPane)
|
|
commentpane_cache_time = 120
|
|
|
|
|
|
############################################ SERVICES
|
|
###### activity
|
|
activity_endpoint =
|
|
|
|
|
|
[server:main]
|
|
use = egg:Paste#http
|
|
host = 0.0.0.0
|
|
port = %(http_port)s
|
|
|
|
[filter:gzip]
|
|
use = egg:r2#gzip
|
|
compress_level = 6
|
|
min_size = 800
|
|
|
|
[app:main]
|
|
use = egg:r2
|
|
cache_dir = %(here)s/data
|
|
|
|
[loggers]
|
|
keys = root
|
|
|
|
[logger_root]
|
|
level = WARNING
|
|
handlers = console
|
|
|
|
[handlers]
|
|
keys = console
|
|
|
|
[handler_console]
|
|
class = StreamHandler
|
|
args = (sys.stdout,)
|
|
|
|
[formatters]
|
|
keys = reddit
|
|
|
|
[formatter_reddit]
|
|
format = %(message)s
|
|
|
|
# the following configuration section makes up the "live" config. if zookeeper
|
|
# is enabled, then this configuration will be found by the app in zookeeper. to
|
|
# write it to zookeeper, use the writer script: scripts/write_live_config.
|
|
[live_config]
|
|
# permissions! each user should have one of admin, sponsor, or employee as their permission level
|
|
employees = reddit:admin
|
|
# links that get their own infrastructure (comma-delimited list of id36s)
|
|
fastlane_links =
|
|
# a message placed in the infobar
|
|
announcement_message =
|
|
# an info message placed in the sidebar
|
|
sidebar_message =
|
|
# an info message placed in the sidebar for gold users
|
|
gold_sidebar_message =
|
|
# probability of the subreddit suggester showing up in the spotlight box
|
|
# for users that have at some point edited their subscriptions:
|
|
spotlight_interest_sub_p = .05
|
|
# and for users that have not ever subscribed:
|
|
spotlight_interest_nosub_p = .1
|
|
# map of comment tree version to how frequently it should be chosen relative to
|
|
# the others
|
|
comment_tree_version_weights = 1:1, 2:0, 3:0
|
|
# enables/disables client side logging POSTs to /web/log/...
|
|
frontend_logging = true
|
|
# daily gold revenue goal (in pennies) for progress bar thing
|
|
gold_revenue_goal = 0
|
|
# messages to display in the "you're new here" welcome bar
|
|
# space-delimited list of strings with / to indicate newlines
|
|
welcomebar_messages =
|
|
# sample multireddits (displayed when a user has no multis)
|
|
listing_chooser_sample_multis = /user/reddit/m/hello, /user/reddit/m/world
|
|
# multi of subreddits to share with gold users
|
|
listing_chooser_gold_multi = /user/reddit/m/gold
|
|
# subreddit showcasing new multireddits
|
|
listing_chooser_explore_sr =
|
|
# subreddits that help people discover more subreddits (used in explore tab)
|
|
discovery_srs =
|
|
# historical cost to run a reddit server
|
|
pennies_per_server_second = 1970/1/1:1
|
|
# lowercased names of accounts that API clients use as "proxies" for gilding
|
|
proxy_gilding_accounts =
|
|
# Controversial item determination
|
|
# Criteria for an item to meet to be determined as controversial
|
|
cflag_min_votes = 7
|
|
cflag_lower_bound = 0.4
|
|
cflag_upper_bound = 0.6
|
|
# Karma requirements to disable captchas - must meet at least one
|
|
captcha_exempt_link_karma = 1
|
|
captcha_exempt_comment_karma = 1
|
|
# Requirements to allow creating a subreddit - must meet age req + at least one karma req
|
|
create_sr_account_age_days = 0
|
|
create_sr_link_karma = 0
|
|
create_sr_comment_karma = 0
|
|
# class name to style goldvertisement for special events
|
|
goldvertisement_class =
|
|
# Event-collector sample rate for vote events
|
|
events_collector_vote_sample_rate = 0.0
|
|
# Event-collector sample rate for submit (new link) events
|
|
events_collector_submit_sample_rate = 0.0
|
|
# Event-collector sample rate for new comment events
|
|
events_collector_comment_sample_rate = 0.0
|
|
# Event-collector sample rate for cache poisoning events
|
|
events_collector_poison_sample_rate = 0.0
|
|
# Event-collector sample rate for moderator events
|
|
events_collector_mod_sample_rate = 0.0
|
|
# Event-collector sample rate for quarantine events
|
|
events_collector_quarantine_sample_rate = 0.0
|
|
# Event-collector sample rate for report events
|
|
events_collector_report_sample_rate = 0.0
|
|
# Pages that are not yet supported by mobile web, and therefore should not
|
|
# receive the switch-to-mobile banner
|
|
mweb_blacklist_expressions = ^/prefs/?, ^/live/?, /message/, /wiki/?, /m/, ^/subreddits/create, /submit, ^/r/[^/]+/about/, ^/gold, ^/advertising, ^/promoted, ^/rules, ^/buttons
|
|
|
|
ads_popularity_threshold = 0
|
|
|
|
# How often (0.0 being never, 1.0 being always) to run the HTTPS cert test
|
|
https_cert_testing_probability = 0.01
|
|
# A descriptive name for this test run (change whenever one of the URLs or certs changes)
|
|
https_cert_testing_run_name = default
|
|
# A URL to a known-good image resource to compare against `https_testing_img_test`
|
|
# needs to be protocol-relative so we can tell how many HTTP clients don't support HTTPS at all
|
|
# It should be served with an HTTPS cert that you know works everywhere.
|
|
https_cert_testing_img_control =
|
|
# A URL to an image served with an HTTPS cert of unknown client support. This should
|
|
# have the same path and base domain (taking into account effective TLDs https://publicsuffix.org/list/effective_tld_names.dat)
|
|
# as `https_cert_testing_img_control` to rule out load failures due to ad blockers
|
|
# and things like RequestPolicy. A different subdomain is required, though, and you
|
|
# should use a different subdomain for every cert.
|
|
https_cert_testing_img_test =
|
|
|
|
|
|
# Manage ZenDesk content from reddit
|
|
ticket_provider =
|
|
# the domain of your support ticket provider
|
|
ticket_base_url =
|
|
# the user ID to create the contact tickets under
|
|
ticket_contact_user_id = 0
|
|
# the group name to ID for the groups defined in zendesk (comma separated list of label:numeric_ID)
|
|
ticket_groups =
|
|
# the custom fields to ID for fields created in zendesk (comma separated list of label:numeric_ID)
|
|
ticket_user_fields =
|
|
|
|
# Posting to ChillingEffects.org
|
|
chillingeffects_org_api_base_url = https://chillingeffects.org/
|
|
# Facebook sharing app id
|
|
facebook_app_id =
|
|
|
|
# Client IDs of OAuth2 apps that employees may link their accounts to
|
|
# `client_name:client_id` pairs are used for readability.
|
|
employee_approved_clients =
|
|
|
|
#### Features
|
|
|
|
## HTTPS
|
|
# Used to gradually redirect users to HTTPS (without HSTS or secure cookies)
|
|
feature_https_redirect = off
|
|
# Force the use of HTTPS (tell apps we want HTTPS connections only, use `Secure` cookies)
|
|
# effectively means `https_redirect = on` as well.
|
|
feature_force_https = off
|
|
# Take existing cookies and make them HTTPS-only (requires `force_https`)
|
|
feature_upgrade_cookies = off
|
|
|
|
|
|
feature_multireddit_customizations = off
|
|
# Test if `https_testing_img_test` is loaded with an acceptable HTTPS cert according to users' browsers
|
|
feature_test_https_certs = off
|
|
feature_pause_ads = off
|
|
feature_mobile_targeting = {"employee": true}
|