2023-02-13 16:52:49 +05:30
<!doctype html>
< html lang = "en-US" >
< head >
< meta charset = "utf-8" >
< meta http-equiv = "x-ua-compatible" content = "ie=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1, shrink-to-fit=no" >
< link rel = "preload" as = "font" href = "/fonts/vendor/jost/jost-v4-latin-regular.woff2" type = "font/woff2" crossorigin >
< link rel = "preload" as = "font" href = "/fonts/vendor/jost/jost-v4-latin-700.woff2" type = "font/woff2" crossorigin >
< link rel = "stylesheet" href = "/main.4492eacff4110697cd6162326bce4ee59e92315bf9acc357594066968669326dc80b75b1a39e6cea81c4f8898bd1d294fcc657a9cb61baed14c7dee6f9e2b2d6.css" integrity = "sha512-RJLqz/QRBpfNYWIya85O5Z6SMVv5rMNXWUBmloZpMm3IC3Wxo55s6oHE+ImL0dKU/MZXqcthuu0Ux97m+eKy1g==" crossorigin = "anonymous" >
< noscript > < style > img . lazyload { display : none ; } < / style > < / noscript >
< meta name = "robots" content = "index, follow" >
< meta name = "googlebot" content = "index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" >
< meta name = "bingbot" content = "index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" >
< title > Database and cache - mCaptcha< / title >
< meta name = "description" content = "mCaptcha server requires dependencies like a Postgres database and a Redis cache" >
< link rel = "canonical" href = "/docs/self-hosted/dependencies/" >
< meta name = "twitter:card" content = "summary_large_image" >
< meta name = "twitter:image" content = "/icon.png" >
< meta name = "twitter:title" content = "Database and cache" >
< meta name = "twitter:description" content = "mCaptcha server requires dependencies like a Postgres database and a Redis cache" >
< meta name = "twitter:site" content = "@" >
< meta name = "twitter:creator" content = "@" >
< meta property = "og:title" content = "Database and cache" >
< meta property = "og:description" content = "mCaptcha server requires dependencies like a Postgres database and a Redis cache" >
< meta property = "og:type" content = "article" >
< meta property = "og:url" content = "/docs/self-hosted/dependencies/" >
< meta property = "og:image" content = "/icon.png" / >
2023-03-08 17:29:38 +05:30
< meta property = "article:modified_time" content = "2023-03-08T17:28:52+05:30" >
2023-02-13 16:52:49 +05:30
< meta property = "og:site_name" content = "mCaptcha" >
< meta property = "article:publisher" content = "https://www.facebook.com/" >
< meta property = "article:author" content = "https://www.facebook.com/" >
< meta property = "og:locale" content = "en_US" >
< script type = "application/ld+json" >
{
"@context": "http://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [{
"@type": "ListItem",
"position": 1 ,
"name": "Home",
"item": "\/"
},{
"@type": "ListItem",
"position": 2 ,
"name": "Docsself Hosteddependencies",
"item": "\/docsself-hosteddependencies\/"
}]
}
< / script >
< meta name = "theme-color" content = "#fff" >
< link rel = "apple-touch-icon" sizes = "180x180" href = "/apple-touch-icon.png" >
< link rel = "icon" type = "image/png" sizes = "32x32" href = "/favicon-32x32.png" >
< link rel = "icon" type = "image/png" sizes = "16x16" href = "/favicon-16x16.png" >
< link rel = "manifest" href = "/site.webmanifest" >
< / head >
< body class = "docs single" >
< div class = "header-bar fixed-top" > < / div >
< header class = "navbar fixed-top navbar-expand-md navbar-light" >
< div class = "container" >
< input class = "menu-btn order-0" type = "checkbox" id = "menu-btn" >
< label class = "menu-icon d-md-none" for = "menu-btn" > < span class = "navicon" > < / span > < / label >
< a class = "navbar-brand order-1 order-md-0 me-auto" href = "/" > mCaptcha< / a >
< button id = "mode" class = "btn btn-link order-2 order-md-4" type = "button" aria-label = "Toggle mode" >
< span class = "toggle-dark" > < svg xmlns = "http://www.w3.org/2000/svg" width = "20" height = "20" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" class = "feather feather-moon" > < path d = "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" > < / path > < / svg > < / span >
< span class = "toggle-light" > < svg xmlns = "http://www.w3.org/2000/svg" width = "20" height = "20" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" class = "feather feather-sun" > < circle cx = "12" cy = "12" r = "5" > < / circle > < line x1 = "12" y1 = "1" x2 = "12" y2 = "3" > < / line > < line x1 = "12" y1 = "21" x2 = "12" y2 = "23" > < / line > < line x1 = "4.22" y1 = "4.22" x2 = "5.64" y2 = "5.64" > < / line > < line x1 = "18.36" y1 = "18.36" x2 = "19.78" y2 = "19.78" > < / line > < line x1 = "1" y1 = "12" x2 = "3" y2 = "12" > < / line > < line x1 = "21" y1 = "12" x2 = "23" y2 = "12" > < / line > < line x1 = "4.22" y1 = "19.78" x2 = "5.64" y2 = "18.36" > < / line > < line x1 = "18.36" y1 = "5.64" x2 = "19.78" y2 = "4.22" > < / line > < / svg > < / span >
< / button >
< ul class = "navbar-nav social-nav order-3 order-md-5" >
< li class = "nav-item" >
< a class = "nav-link" href = "https://github.com/mCaptcha" > < svg xmlns = "http://www.w3.org/2000/svg" width = "20" height = "20" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" class = "feather feather-github" > < path d = "M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22" > < / path > < / svg > < span class = "ms-2 visually-hidden" > GitHub< / span > < / a >
< / li >
< / ul >
< div class = "collapse navbar-collapse order-4 order-md-1" >
< ul class = "navbar-nav main-nav me-auto order-5 order-md-2" > < li class = "nav-item" >
< a class = "nav-link" href = "/blog/" > Blog< / a >
< / li >
< li class = "nav-item" >
< a class = "nav-link" href = "/community/" > Community< / a >
< / li >
< li class = "nav-item" >
< a class = "nav-link" href = "/contact/" > Contact< / a >
< / li >
< li class = "nav-item" >
< a class = "nav-link" href = "/about/" > About< / a >
< / li >
< li class = "nav-item active" >
< a class = "nav-link" href = "/docs/introduction/installing-captcha/" > Docs< / a >
< / li >
< / ul >
< div class = "break order-6 d-md-none" > < / div >
< form class = "navbar-form flex-grow-1 order-7 order-md-3" >
< input id = "userinput" class = "form-control is-search" type = "search" placeholder = "Search docs..." aria-label = "Search docs..." autocomplete = "off" >
< div id = "suggestions" class = "shadow bg-white rounded" > < / div >
< / form >
< / div >
< / div >
< / header >
< div class = "wrap container" role = "document" >
< div class = "content" >
< div class = "row flex-xl-nowrap" >
< div class = "col-lg-5 col-xl-4 docs-sidebar" >
< nav class = "docs-links" aria-label = "Main navigation" >
< h3 > Introduction< / h3 >
< ul class = "list-unstyled" >
< li > < a class = "docs-link" href = "/docs/introduction/installing-captcha/" > Installing mCaptcha on your website< / a > < / li >
< li > < a class = "docs-link" href = "/docs/introduction/configuring-difficulty-factor/" > Configuring Difficulty Factor< / a > < / li >
< / ul >
< h3 > Terminology< / h3 >
< ul class = "list-unstyled" >
< li > < a class = "docs-link" href = "/docs/terminology/access-token/" > Access token< / a > < / li >
< li > < a class = "docs-link" href = "/docs/terminology/cooldown-period/" > Cooldown Period< / a > < / li >
< li > < a class = "docs-link" href = "/docs/terminology/difficulty-factor/" > Difficulty Factor< / a > < / li >
< li > < a class = "docs-link" href = "/docs/terminology/sitekey/" > Site key< / a > < / li >
< li > < a class = "docs-link" href = "/docs/terminology/visitor-threshold/" > Visitor Threshold< / a > < / li >
< / ul >
< h3 > Self-Hosted< / h3 >
< ul class = "list-unstyled" >
< li > < a class = "docs-link" href = "/docs/self-hosted/getting-started/" > Getting started< / a > < / li >
< li > < a class = "docs-link" href = "/docs/self-hosted/bare-metal/" > Deploy bare metal< / a > < / li >
< li > < a class = "docs-link" href = "/docs/self-hosted/docker/" > Using Docker< / a > < / li >
< li > < a class = "docs-link active" href = "/docs/self-hosted/dependencies/" > Database and cache< / a > < / li >
< / ul >
< h3 > API< / h3 >
< ul class = "list-unstyled" >
< li > < a class = "docs-link" href = "/docs/api/browser/" > Browser libraries< / a > < / li >
< li > < a class = "docs-link" href = "/docs/api/mcaptcha-system/" > mCaptcha System Library< / a > < / li >
< li > < a class = "docs-link" href = "/docs/api/pow-sha256/" > pow_sha256< / a > < / li >
< / ul >
< h3 > Help< / h3 >
< ul class = "list-unstyled" >
< li > < a class = "docs-link" href = "/docs/help/troubleshooting/" > Troubleshooting< / a > < / li >
< li > < a class = "docs-link" href = "/docs/help/faq/" > FAQ< / a > < / li >
< / ul >
< / nav >
< / div >
< nav class = "docs-toc d-none d-xl-block col-xl-3" aria-label = "Secondary navigation" >
< div class = "page-links" >
< h3 > On this page< / h3 >
< nav id = "TableOfContents" >
< ul >
< li > < a href = "#notes" > Notes< / a >
< ul >
< li > < a href = "#database" > Database< / a > < / li >
< li > < a href = "#redis" > Redis< / a > < / li >
< / ul >
< / li >
< li > < a href = "#instructions" > Instructions< / a >
< ul >
< li > < a href = "#docker" > Docker< / a > < / li >
< li > < a href = "#database-1" > Database< / a > < / li >
< li > < a href = "#redis-1" > Redis< / a > < / li >
< li > < a href = "#1-install-postgres-if-you-dont-have-it-already" > 1. Install Postgres if you don’ t have it already.< / a > < / li >
< li > < a href = "#2-create-new-user-for-running-mcaptcha" > 2. Create new user for running < code > mCaptcha< / code > < / a > < / li >
< li > < a href = "#3-create-new-user-in-postgres" > 3. Create new user in Postgres< / a > < / li >
< li > < a href = "#4-install-mcaptchacachehttpsgithubcommcaptchacache" > 4. Install < a href = "https://github.com/mCaptcha/cache" > < code > mCaptcha/cache< / code > < / a > < / a > < / li >
< / ul >
< / li >
< / ul >
< / nav >
< / div >
< / nav >
< main class = "docs-content col-lg-11 col-xl-9" >
< h1 > Database and cache< / h1 >
< p class = "lead" > mCaptcha server requires dependencies like a Postgres database and a Redis cache< / p >
< h2 id = "notes" > Notes< a href = "#notes" class = "anchor" aria-hidden = "true" > #< / a > < / h2 >
< h3 id = "database" > Database< a href = "#database" class = "anchor" aria-hidden = "true" > #< / a > < / h3 >
< ul >
< li >
< p > Database migrations are baked into the server binary so don’ t worry
about them.< / p >
< / li >
< li >
< p > When compiling from source, unset database configuration(comment out
database configuration/ < code > unset< / code > relevant environment variables).
< code > mCaptcha< / code > uses < a href = "https://crates.io/crates/sqlx" > < code > sqlx< / code > < / a > database client
library which checks SQL queries at compile time. So if you are starting
with a fresh database without migrations applied, compilation will fail.< / p >
< / li >
< / ul >
< h3 id = "redis" > Redis< a href = "#redis" class = "anchor" aria-hidden = "true" > #< / a > < / h3 >
< ul >
< li >
< p > Redis is an optional dependency. Currently, the non-Redis configuration
doesn’ t persist CAPTCHA heat. So if there’ s a systems failure, CAPTCHA
heat will be reset and visitor count will start from 0. For small
installations, this should post a problem as heat is short lived and is
reset anyways at cool down period.< / p >
< / li >
< li >
< p > mCaptcha uses a custom Redis module called
< a href = "https://github.com/mCaptcha/cache" > cache< / a > to overcome some of Redis'
limitations.< / p >
< / li >
< / ul >
< h2 id = "instructions" > Instructions< a href = "#instructions" class = "anchor" aria-hidden = "true" > #< / a > < / h2 >
< p > Once again, there are two ways to go about this:< / p >
< ol >
< li > Docker< / li >
< li > Bare metal< / li >
< / ol >
< h3 id = "docker" > Docker< a href = "#docker" class = "anchor" aria-hidden = "true" > #< / a > < / h3 >
< h3 id = "database-1" > Database< a href = "#database-1" class = "anchor" aria-hidden = "true" > #< / a > < / h3 >
< p > Download and run Postgres< / p >
< div class = "highlight" > < pre tabindex = "0" style = "color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;" > < code class = "language-bash" data-lang = "bash" > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 1< / span > < span > docker create --name mcaptcha-postgres < span style = "color:#f1fa8c" > \
< / span > < / span > < / span > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 2< / span > < span > < span style = "color:#f1fa8c" > < / span > -e < span style = "color:#8be9fd;font-style:italic" > POSTGRES_PASSWORD< / span > < span style = "color:#ff79c6" > =< / span > < database-password> < span style = "color:#f1fa8c" > \
< / span > < / span > < / span > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 3< / span > < span > < span style = "color:#f1fa8c" > < / span > -p 5432:5432 < span style = "color:#f1fa8c" > \
< / span > < / span > < / span > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 4< / span > < span > < span style = "color:#f1fa8c" > < / span > postgres < span style = "color:#ff79c6" > & & < / span > docker start mcaptcha-postgres
< / span > < / span > < / code > < / pre > < / div > < h3 id = "redis-1" > Redis< a href = "#redis-1" class = "anchor" aria-hidden = "true" > #< / a > < / h3 >
< div class = "highlight" > < pre tabindex = "0" style = "color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;" > < code class = "language-bash" data-lang = "bash" > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 1< / span > < span > docker create --name mcaptcha-cache < span style = "color:#f1fa8c" > \
< / span > < / span > < / span > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 2< / span > < span > < span style = "color:#f1fa8c" > < / span > -p 6379:6379 < span style = "color:#f1fa8c" > \
< / span > < / span > < / span > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 3< / span > < span > < span style = "color:#f1fa8c" > < / span > mcaptcha/cache < span style = "color:#ff79c6" > & & < / span > docker start mcaptcha-cache
< / span > < / span > < / code > < / pre > < / div > < p > See < a href = "https://github.com/mCaptcha/cache" > mCaptcha/cache< / a > for more
details.< / p >
< h3 id = "1-install-postgres-if-you-dont-have-it-already" > 1. Install Postgres if you don’ t have it already.< a href = "#1-install-postgres-if-you-dont-have-it-already" class = "anchor" aria-hidden = "true" > #< / a > < / h3 >
< p > For Debian based distributions:< / p >
< div class = "highlight" > < pre tabindex = "0" style = "color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;" > < code class = "language-bash" data-lang = "bash" > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 1< / span > < span > sudo apt install postgres
< / span > < / span > < / code > < / pre > < / div > < h3 id = "2-create-new-user-for-running-mcaptcha" > 2. Create new user for running < code > mCaptcha< / code > < a href = "#2-create-new-user-for-running-mcaptcha" class = "anchor" aria-hidden = "true" > #< / a > < / h3 >
< div class = "highlight" > < pre tabindex = "0" style = "color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;" > < code class = "language-bash" data-lang = "bash" > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 1< / span > < span > $ sudo useradd -b /srv -m -s /usr/bin/bash mcaptcha
< / span > < / span > < / code > < / pre > < / div > < h3 id = "3-create-new-user-in-postgres" > 3. Create new user in Postgres< a href = "#3-create-new-user-in-postgres" class = "anchor" aria-hidden = "true" > #< / a > < / h3 >
< div class = "highlight" > < pre tabindex = "0" style = "color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;" > < code class = "language-bash" data-lang = "bash" > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 1< / span > < span > $ sudo -iu postgres < span style = "color:#6272a4" > # switch to `postgres` user< / span >
< / span > < / span > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 2< / span > < span > $ psql
< / span > < / span > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 3< / span > < span > < span style = "color:#8be9fd;font-style:italic" > postgres< / span > < span style = "color:#ff79c6" > =< / span > < span style = "color:#6272a4" > # CREATE USER mcaptcha WITH PASSWORD ' my super long password and yes you need single quote' ;< / span >
< / span > < / span > < span style = "display:flex;" > < span style = "white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" > 4< / span > < span > $ createdb -O mcaptcha mcaptcha < span style = "color:#6272a4" > # create db ' mcaptcha' with ' mcaptcha' as owner< / span >
< / span > < / span > < / code > < / pre > < / div > < h3 id = "4-install-mcaptchacachehttpsgithubcommcaptchacache" > 4. Install < a href = "https://github.com/mCaptcha/cache" > < code > mCaptcha/cache< / code > < / a > < a href = "#4-install-mcaptchacachehttpsgithubcommcaptchacache" class = "anchor" aria-hidden = "true" > #< / a > < / h3 >
< p > See < a href = "https://github.com/mCaptcha/cache" > < code > mCaptcha/cache< / code > < / a > for more
details.< / p >
< p class = "edit-page" > < a href = "https://github.com/mCaptcha/website/blob/master/content/docs/self-hosted/dependencies.md" > < svg xmlns = "http://www.w3.org/2000/svg" width = "16" height = "16" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" class = "feather feather-edit-2" > < path d = "M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z" > < / path > < / svg > Edit this page on GitHub< / a > < / p >
< div class = "docs-navigation d-flex justify-content-between" >
< a href = "/docs/self-hosted/docker/" >
< div class = "card my-1" >
< div class = "card-body py-2" >
← Using Docker
< / div >
< / div >
< / a >
< a class = "ms-auto" href = "/docs/help/troubleshooting/" >
< div class = "card my-1" >
< div class = "card-body py-2" >
Troubleshooting →
< / div >
< / div >
< / a >
< / div >
< / main >
< / div >
< / div >
< / div >
< footer class = "footer text-muted" >
< div class = "container" >
< div class = "row" >
< div class = "col-lg-8 order-last order-lg-first" >
< ul class = "list-inline" >
< li class = "list-inline-item" > Powered by < a href = "https://gohugo.io/" > Hugo< / a > , and < a href = "https://getdoks.org/" > Doks< / a > < / li >
< / ul >
< / div >
< div class = "col-lg-8 order-first order-lg-last text-lg-end" >
< ul class = "list-inline" >
< li class = "list-inline-item" > < a href = "/about/" > About< / a > < / li >
< li class = "list-inline-item" > < a href = "/donate" > Donate< / a > < / li >
< li class = "list-inline-item" > < a href = "/privacy-policy/" > Privacy< / a > < / li >
< li class = "list-inline-item" > < a href = "/security" > Security< / a > < / li >
< li class = "list-inline-item" > < a href = "https://stats.uptimerobot.com/GK7VLFJnBl" > Status< / a > < / li >
< li class = "list-inline-item" > < a href = "/thanks" > Thanks< / a > < / li >
< / ul >
< / div >
< / div >
< / div >
< / footer >
< script src = "/main.min.fc14a6a9dceb7093b6984e33583a45c79e3c960959d75df6b62753b4d1c63a97d25af2b0ca924ed12675f1de34f3fce9ec81668f2d3bee114b9b6357dd2e92cd.js" integrity = "sha512-/BSmqdzrcJO2mE4zWDpFx548lglZ1132tidTtNHGOpfSWvKwypJO0SZ18d408/zp7IFmjy077hFLm2NX3S6SzQ==" crossorigin = "anonymous" defer > < / script >
< script src = "/index.min.f24b6e33dac74771476dda67fe905af998983abef17f74f74d71228ac8f40f87af8b15bcd9f0da775c90a41395c3d153fb0067cc75ff642c520b3607340014c0.js" integrity = "sha512-8ktuM9rHR3FHbdpn/pBa+ZiYOr7xf3T3TXEiisj0D4evixW82fDad1yQpBOVw9FT+wBnzHX/ZCxSCzYHNAAUwA==" crossorigin = "anonymous" defer > < / script >
< / body >
< / html >