2023-06-18 15:02:21 +02:00
<!doctype html>
2023-08-23 11:36:28 +02:00
< html class = "no-js" lang = "en" data-content_root = "" >
2023-06-18 15:02:21 +02:00
< head > < meta charset = "utf-8" / >
< meta name = "viewport" content = "width=device-width,initial-scale=1" / >
< meta name = "color-scheme" content = "light dark" > < meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< link rel = "index" title = "Index" href = "genindex.html" / > < link rel = "search" title = "Search" href = "search.html" / > < link rel = "next" title = "Command line interface" href = "cli.html" / > < link rel = "prev" title = "OAuth 2.0" href = "oauth.html" / >
2020-12-30 11:12:35 +01:00
2024-02-04 17:12:04 +01:00
<!-- Generated with Sphinx 7.1.2 and Furo 2024.01.29 -->
< title > Installation - FitTrackee 0.7.30 documentation< / title >
2023-08-23 11:36:28 +02:00
< link rel = "stylesheet" type = "text/css" href = "_static/pygments.css?v=fa44fd50" / >
2023-07-30 17:05:25 +02:00
< link rel = "stylesheet" type = "text/css" href = "_static/styles/furo.css?v=135e06be" / >
< link rel = "stylesheet" type = "text/css" href = "_static/copybutton.css?v=76b2166b" / >
< link rel = "stylesheet" type = "text/css" href = "_static/styles/furo-extensions.css?v=36a5483c" / >
< link rel = "stylesheet" type = "text/css" href = "_static/css/fork-awesome.min.css?v=876feb3b" / >
< link rel = "stylesheet" type = "text/css" href = "_static/css/custom.css?v=9f1a53bb" / >
2023-06-18 15:02:21 +02:00
< style >
body {
--color-code-background: #eeffcc;
--color-code-foreground: black;
}
@media not print {
body[data-theme="dark"] {
--color-code-background: #272822;
--color-code-foreground: #f8f8f2;
}
@media (prefers-color-scheme: dark) {
body:not([data-theme="light"]) {
--color-code-background: #272822;
--color-code-foreground: #f8f8f2;
}
}
}
< / style > < / head >
< body >
< script >
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
< / script >
< svg xmlns = "http://www.w3.org/2000/svg" style = "display: none;" >
< symbol id = "svg-toc" viewBox = "0 0 24 24" >
< title > Contents< / title >
< svg stroke = "currentColor" fill = "currentColor" stroke-width = "0" viewBox = "0 0 1024 1024" >
< path d = "M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z" / >
< / svg >
< / symbol >
< symbol id = "svg-menu" viewBox = "0 0 24 24" >
< title > Menu< / title >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
< line x1 = "3" y1 = "12" x2 = "21" y2 = "12" > < / line >
< line x1 = "3" y1 = "6" x2 = "21" y2 = "6" > < / line >
< line x1 = "3" y1 = "18" x2 = "21" y2 = "18" > < / line >
< / svg >
< / symbol >
< symbol id = "svg-arrow-right" viewBox = "0 0 24 24" >
< title > Expand< / title >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
< polyline points = "9 18 15 12 9 6" > < / polyline >
< / svg >
< / symbol >
< symbol id = "svg-sun" viewBox = "0 0 24 24" >
< title > Light mode< / title >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="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 >
< / symbol >
< symbol id = "svg-moon" viewBox = "0 0 24 24" >
< title > Dark mode< / title >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
< path stroke = "none" d = "M0 0h24v24H0z" fill = "none" / >
< path d = "M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" / >
< / svg >
< / symbol >
< symbol id = "svg-sun-half" viewBox = "0 0 24 24" >
< title > Auto light/dark mode< / title >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
< path stroke = "none" d = "M0 0h24v24H0z" fill = "none" / >
< circle cx = "12" cy = "12" r = "9" / >
< path d = "M13 12h5" / >
< path d = "M13 15h4" / >
< path d = "M13 18h1" / >
< path d = "M13 9h4" / >
< path d = "M13 6h1" / >
< / svg >
< / symbol >
< / svg >
< input type = "checkbox" class = "sidebar-toggle" name = "__navigation" id = "__navigation" >
< input type = "checkbox" class = "sidebar-toggle" name = "__toc" id = "__toc" >
< label class = "overlay sidebar-overlay" for = "__navigation" >
< div class = "visually-hidden" > Hide navigation sidebar< / div >
< / label >
< label class = "overlay toc-overlay" for = "__toc" >
< div class = "visually-hidden" > Hide table of contents sidebar< / div >
< / label >
2020-12-30 11:12:35 +01:00
2023-06-18 15:02:21 +02:00
< div class = "page" >
< header class = "mobile-header" >
< div class = "header-left" >
< label class = "nav-overlay-icon" for = "__navigation" >
< div class = "visually-hidden" > Toggle site navigation sidebar< / div >
< i class = "icon" > < svg > < use href = "#svg-menu" > < / use > < / svg > < / i >
< / label >
< / div >
< div class = "header-center" >
2024-02-04 17:12:04 +01:00
< a href = "index.html" > < div class = "brand" > FitTrackee 0.7.30
2023-06-18 15:02:21 +02:00
documentation< / div > < / a >
< / div >
< div class = "header-right" >
< div class = "theme-toggle-container theme-toggle-header" >
< button class = "theme-toggle" >
< div class = "visually-hidden" > Toggle Light / Dark / Auto color theme< / div >
< svg class = "theme-icon-when-auto" > < use href = "#svg-sun-half" > < / use > < / svg >
< svg class = "theme-icon-when-dark" > < use href = "#svg-moon" > < / use > < / svg >
< svg class = "theme-icon-when-light" > < use href = "#svg-sun" > < / use > < / svg >
2020-12-30 11:12:35 +01:00
< / button >
< / div >
2023-06-18 15:02:21 +02:00
< label class = "toc-overlay-icon toc-header-icon" for = "__toc" >
< div class = "visually-hidden" > Toggle table of contents sidebar< / div >
< i class = "icon" > < svg > < use href = "#svg-toc" > < / use > < / svg > < / i >
< / label >
< / div >
< / header >
< aside class = "sidebar-drawer" >
< div class = "sidebar-container" >
< div class = "sidebar-sticky" > < a class = "sidebar-brand" href = "index.html" >
< div class = "sidebar-logo-container" >
< img class = "sidebar-logo" src = "_static/ft-logo.png" alt = "Logo" / >
< / div >
2024-02-04 17:12:04 +01:00
< span class = "sidebar-brand-text" > FitTrackee 0.7.30
2023-06-18 15:02:21 +02:00
documentation< / span >
< / a > < form class = "sidebar-search-container" method = "get" action = "search.html" role = "search" >
< input class = "sidebar-search" placeholder = "Search" name = "q" aria-label = "Search" >
< input type = "hidden" name = "check_keywords" value = "yes" >
< input type = "hidden" name = "area" value = "default" >
< / form >
< div id = "searchbox" > < / div > < div class = "sidebar-scroll" > < div class = "sidebar-tree" >
< ul class = "current" >
2020-12-30 11:12:35 +01:00
< li class = "toctree-l1" > < a class = "reference internal" href = "features.html" > Features< / a > < / li >
2023-04-12 17:32:08 +02:00
< li class = "toctree-l1" > < a class = "reference internal" href = "oauth.html" > OAuth 2.0< / a > < / li >
2023-06-18 15:02:21 +02:00
< li class = "toctree-l1 current current-page" > < a class = "current reference internal" href = "#" > Installation< / a > < / li >
2022-04-24 13:17:38 +02:00
< li class = "toctree-l1" > < a class = "reference internal" href = "cli.html" > Command line interface< / a > < / li >
2023-04-12 17:32:08 +02:00
< li class = "toctree-l1" > < a class = "reference internal" href = "third_party_tools.html" > Third-party tools< / a > < / li >
2023-06-18 15:02:21 +02:00
< li class = "toctree-l1 has-children" > < a class = "reference internal" href = "api/index.html" > API documentation< / a > < input class = "toctree-checkbox" id = "toctree-checkbox-1" name = "toctree-checkbox-1" role = "switch" type = "checkbox" / > < label for = "toctree-checkbox-1" > < div class = "visually-hidden" > Toggle navigation of API documentation< / div > < i class = "icon" > < svg > < use href = "#svg-arrow-right" > < / use > < / svg > < / i > < / label > < ul >
< li class = "toctree-l2" > < a class = "reference internal" href = "api/auth.html" > Authentication and account< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "api/configuration.html" > Configuration< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "api/oauth2.html" > OAuth2< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "api/records.html" > Records< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "api/sports.html" > Sports< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "api/stats.html" > Statistics< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "api/users.html" > Users< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "api/workouts.html" > Workouts< / a > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
< / li >
2023-06-18 15:02:21 +02:00
< li class = "toctree-l1 has-children" > < a class = "reference internal" href = "troubleshooting/index.html" > Troubleshooting< / a > < input class = "toctree-checkbox" id = "toctree-checkbox-2" name = "toctree-checkbox-2" role = "switch" type = "checkbox" / > < label for = "toctree-checkbox-2" > < div class = "visually-hidden" > Toggle navigation of Troubleshooting< / div > < i class = "icon" > < svg > < use href = "#svg-arrow-right" > < / use > < / svg > < / i > < / label > < ul >
< li class = "toctree-l2" > < a class = "reference internal" href = "troubleshooting/administrator.html" > Administrator< / a > < / li >
2022-02-05 22:09:17 +01:00
< / ul >
< / li >
2023-06-18 15:02:21 +02:00
< li class = "toctree-l1" > < a class = "reference internal" href = "changelog.html" > Change log< / a > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
2023-06-18 15:02:21 +02:00
< / div >
2023-06-18 15:23:33 +02:00
< / div > < div id = "furo-languages" tabindex = "0" >
< span class = "languages-label" >
< i class = "fa fa-language" > < / i >
< / span >
< div class = "languages-list" >
< a href = "../en/installation.html" hreflang = en lang = en >
English
< / a >
< a href = "../fr/installation.html" hreflang = fr lang = fr >
Français
< / a >
< / div >
2023-06-18 15:02:21 +02:00
< / div >
< / div >
2020-12-30 11:12:35 +01:00
2023-06-18 15:02:21 +02:00
< / div >
< / aside >
< div class = "main" >
< div class = "content" >
< div class = "article-container" >
< a href = "#" class = "back-to-top muted-link" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >
< path d = "M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z" > < / path >
< / svg >
< span > Back to top< / span >
< / a >
< div class = "content-icon-container" >
< div class = "theme-toggle-container theme-toggle-content" >
< button class = "theme-toggle" >
< div class = "visually-hidden" > Toggle Light / Dark / Auto color theme< / div >
< svg class = "theme-icon-when-auto" > < use href = "#svg-sun-half" > < / use > < / svg >
< svg class = "theme-icon-when-dark" > < use href = "#svg-moon" > < / use > < / svg >
< svg class = "theme-icon-when-light" > < use href = "#svg-sun" > < / use > < / svg >
< / button >
< / div >
< label class = "toc-overlay-icon toc-content-icon" for = "__toc" >
< div class = "visually-hidden" > Toggle table of contents sidebar< / div >
< i class = "icon" > < svg > < use href = "#svg-toc" > < / use > < / svg > < / i >
< / label >
< / div >
< article role = "main" >
< section id = "installation" >
< h1 > Installation< a class = "headerlink" href = "#installation" title = "Permalink to this heading" > #< / a > < / h1 >
2021-11-03 12:41:23 +01:00
< p > This application is written in Python (API) and Typescript (client):< / p >
2020-12-30 11:12:35 +01:00
< ul class = "simple" >
< li > < dl class = "simple" >
< dt > API:< / dt > < dd > < ul >
< li > < p > Flask< / p > < / li >
< li > < p > < a class = "reference external" href = "https://github.com/tkrajina/gpxpy" > gpxpy< / a > to parse gpx files< / p > < / li >
< li > < p > < a class = "reference external" href = "https://github.com/komoot/staticmap" > staticmap< / a > to generate a static map image from gpx coordinates< / p > < / li >
< li > < p > < a class = "reference external" href = "https://flask-dramatiq.readthedocs.io/en/latest/" > dramatiq< / a > for task queue< / p > < / li >
2022-08-27 16:50:29 +02:00
< li > < p > < a class = "reference external" href = "https://docs.authlib.org/en/latest/" > Authlib< / a > for OAuth 2.0 Authorization support< / p > < / li >
2022-09-18 09:30:10 +02:00
< li > < p > < a class = "reference external" href = "https://flask-limiter.readthedocs.io/en/stable" > Flask-Limiter< / a > for API rate limits< / p > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
< / dd >
< / dl >
< / li >
< li > < dl class = "simple" >
< dt > Client:< / dt > < dd > < ul >
2021-11-03 12:41:23 +01:00
< li > < p > Vue3/Vuex< / p > < / li >
2020-12-30 11:12:35 +01:00
< li > < p > < a class = "reference external" href = "https://leafletjs.com/" > Leaflet< / a > to display map< / p > < / li >
2021-11-03 12:41:23 +01:00
< li > < p > < a class = "reference external" href = "https://www.chartjs.org/" > Chart.js< / a > to display charts with elevation and speed< / p > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
< / dd >
< / dl >
< / li >
< / ul >
2022-04-09 10:21:57 +02:00
< div class = "line-block" >
< div class = "line" > Logo, some sports and weather icons are made by < a class = "reference external" href = "https://www.freepik.com/" > Freepik< / a > from < a class = "reference external" href = "https://www.flaticon.com/" > www.flaticon.com< / a > .< / div >
< div class = "line" > FitTrackee also uses icons from < a class = "reference external" href = "https://forkaweso.me" > Fork Awesome< / a > .< / div >
< / div >
2021-11-06 21:26:02 +01:00
< section id = "prerequisites" >
2023-06-18 15:02:21 +02:00
< h2 > Prerequisites< a class = "headerlink" href = "#prerequisites" title = "Permalink to this heading" > #< / a > < / h2 >
2020-12-30 11:12:35 +01:00
< ul class = "simple" >
2022-09-18 09:30:10 +02:00
< li > < dl class = "simple" >
< dt > mandatory< / dt > < dd > < ul >
2023-06-25 14:00:35 +02:00
< li > < p > Python > = 3.8.1< / p > < / li >
2023-12-20 19:44:22 +01:00
< li > < p > PostgreSQL 12+< / p > < / li >
2022-09-18 09:30:10 +02:00
< / ul >
< / dd >
< / dl >
< / li >
< li > < dl class = "simple" >
< dt > optional< / dt > < dd > < ul >
2023-03-05 14:26:31 +01:00
< li > < p > Redis for task queue (if email sending is enabled and for data export requests) and API rate limits< / p > < / li >
2022-09-18 09:30:10 +02:00
< li > < p > SMTP provider (if email sending is enabled)< / p > < / li >
2022-12-31 18:38:44 +01:00
< li > < p > API key from a < a class = "reference external" href = "installation.html#weather-data" > weather data provider< / a > < / p > < / li >
2022-04-09 10:21:57 +02:00
< li > < p > < a class = "reference external" href = "https://poetry.eustace.io" > Poetry< / a > (for installation from sources only)< / p > < / li >
2023-11-19 16:38:53 +01:00
< li > < p > < a class = "reference external" href = "https://nodejs.org" > Node< / a > 18+ and < a class = "reference external" href = "https://yarnpkg.com" > Yarn< / a > (for development only)< / p > < / li >
2022-01-01 19:44:45 +01:00
< li > < p > Docker and Docker Compose (for development or evaluation purposes)< / p > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
2022-09-18 09:30:10 +02:00
< / dd >
< / dl >
< / li >
< / ul >
2020-12-30 11:12:35 +01:00
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< div class = "line-block" >
2023-03-05 14:26:31 +01:00
< div class = "line" > If registration is enabled, it is recommended to set Redis and a SMTP provider for email sending and data export requests.< / div >
< / div >
< / div >
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< div class = "line-block" >
2020-12-30 11:12:35 +01:00
< div class = "line" > The following steps describe an installation on Linux systems (tested
on Debian and Arch).< / div >
< div class = "line" > On other OS, some issues can be encountered and adaptations may be
necessary.< / div >
< / div >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< section id = "environment-variables" >
2023-06-18 15:02:21 +02:00
< h2 > Environment variables< a class = "headerlink" href = "#environment-variables" title = "Permalink to this heading" > #< / a > < / h2 >
2020-12-30 11:12:35 +01:00
< div class = "admonition warning" >
< p class = "admonition-title" > Warning< / p >
< div class = "line-block" >
< div class = "line" > Since FitTrackee 0.4.0, < code class = "docutils literal notranslate" > < span class = "pre" > Makefile.custom.config< / span > < / code > is replaced by < code class = "docutils literal notranslate" > < span class = "pre" > .env< / span > < / code > < / div >
< / div >
< / div >
< p > The following environment variables are used by < strong > FitTrackee< / strong > web application
or the task processing library. They are not all mandatory depending on
deployment method.< / p >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-FLASK_APP" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > FLASK_APP< / span > < / span > < a class = "headerlink" href = "#envvar-FLASK_APP" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "line-block" >
< div class = "line" > Name of the module to import at flask run.< / div >
< div class = "line" > < code class = "docutils literal notranslate" > < span class = "pre" > FLASK_APP< / span > < / code > should contain < code class = "docutils literal notranslate" > < span class = "pre" > $(PWD)/fittrackee/__main__.py< / span > < / code > with installation from sources, else < code class = "docutils literal notranslate" > < span class = "pre" > fittrackee< / span > < / code > .< / div >
< / div >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-HOST" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > HOST< / span > < / span > < a class = "headerlink" href = "#envvar-HOST" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < p > < strong > FitTrackee< / strong > host.< / p >
< dl class = "field-list simple" >
2022-06-22 20:22:26 +02:00
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2023-06-25 14:00:35 +02:00
< dd class = "field-odd" > < p > < code class = "docutils literal notranslate" > < span class = "pre" > 127.0.0.1< / span > < / code > < / p >
2020-12-30 11:12:35 +01:00
< / dd >
< / dl >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-PORT" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > PORT< / span > < / span > < a class = "headerlink" href = "#envvar-PORT" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < p > < strong > FitTrackee< / strong > port.< / p >
< dl class = "field-list simple" >
2022-06-22 20:22:26 +02:00
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2020-12-30 11:12:35 +01:00
< dd class = "field-odd" > < p > 5000< / p >
< / dd >
< / dl >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-APP_SETTINGS" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > APP_SETTINGS< / span > < / span > < a class = "headerlink" href = "#envvar-APP_SETTINGS" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < p > < strong > FitTrackee< / strong > configuration.< / p >
< dl class = "field-list simple" >
2022-06-22 20:22:26 +02:00
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2023-06-25 14:00:35 +02:00
< dd class = "field-odd" > < p > < code class = "docutils literal notranslate" > < span class = "pre" > fittrackee.config.ProductionConfig< / span > < / code > < / p >
2020-12-30 11:12:35 +01:00
< / dd >
< / dl >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-APP_SECRET_KEY" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > APP_SECRET_KEY< / span > < / span > < a class = "headerlink" href = "#envvar-APP_SECRET_KEY" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < p > < strong > FitTrackee< / strong > secret key, must be initialized in production environment.< / p >
2022-08-27 16:50:29 +02:00
< div class = "admonition warning" >
< p class = "admonition-title" > Warning< / p >
< p > Use a strong secret key. This key is used in JWT generation.< / p >
< / div >
2020-12-30 11:12:35 +01:00
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-APP_WORKERS" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > APP_WORKERS< / span > < / span > < a class = "headerlink" href = "#envvar-APP_WORKERS" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < p > Number of workers spawned by < strong > Gunicorn< / strong > .< / p >
< dl class = "field-list simple" >
2022-06-22 20:22:26 +02:00
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2020-12-30 11:12:35 +01:00
< dd class = "field-odd" > < p > 1< / p >
< / dd >
< / dl >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-APP_LOG" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > APP_LOG< / span > < / span > < a class = "headerlink" href = "#envvar-APP_LOG" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.4.0.< / span > < / p >
< / div >
< p > Path to log file< / p >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-UPLOAD_FOLDER" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > UPLOAD_FOLDER< / span > < / span > < a class = "headerlink" href = "#envvar-UPLOAD_FOLDER" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.4.0.< / span > < / p >
< / div >
2023-06-18 15:02:21 +02:00
< p > < strong > Absolute path< / strong > to the directory where < code class = "docutils literal notranslate" > < span class = "pre" > uploads< / span > < / code > folder will be created.< / p >
2020-12-30 11:12:35 +01:00
< dl class = "field-list simple" >
2022-06-22 20:22:26 +02:00
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2023-06-18 15:02:21 +02:00
< dd class = "field-odd" > < p > < code class = "docutils literal notranslate" > < span class = "pre" > < application_directory> /fittrackee< / span > < / code > < / p >
2020-12-30 11:12:35 +01:00
< / dd >
< / dl >
< div class = "admonition danger" >
< p class = "admonition-title" > Danger< / p >
< div class = "line-block" >
< div class = "line" > With installation from PyPI, the directory will be located in
< strong > virtualenv< / strong > directory if the variable is not initialized.< / div >
< / div >
< / div >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-DATABASE_URL" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > DATABASE_URL< / span > < / span > < a class = "headerlink" href = "#envvar-DATABASE_URL" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "line-block" >
< div class = "line" > Database URL with username and password, must be initialized in production environment.< / div >
2021-04-06 13:15:26 +02:00
< div class = "line" > For example in dev environment : < code class = "docutils literal notranslate" > < span class = "pre" > postgresql://fittrackee:fittrackee@ localhost:5432/fittrackee< / span > < / code > < / div >
2020-12-30 11:12:35 +01:00
< / div >
2022-04-09 10:21:57 +02:00
< div class = "admonition warning" >
< p class = "admonition-title" > Warning< / p >
2021-04-06 14:03:42 +02:00
< div class = "line-block" >
2021-04-07 10:43:20 +02:00
< div class = "line" > Since < a class = "reference external" href = "https://docs.sqlalchemy.org/en/14/changelog/changelog_14.html#change-3687655465c25a39b968b4f5f6e9170b" > SQLAlchemy update (1.4+)< / a > ,
2023-06-18 15:02:21 +02:00
engine URL should begin with < code class = "docutils literal notranslate" > < span class = "pre" > postgresql://< / span > < / code > .< / div >
2021-04-06 14:03:42 +02:00
< / div >
< / div >
2020-12-30 11:12:35 +01:00
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-DATABASE_DISABLE_POOLING" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > DATABASE_DISABLE_POOLING< / span > < / span > < a class = "headerlink" href = "#envvar-DATABASE_DISABLE_POOLING" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.4.0.< / span > < / p >
< / div >
< p > Disable pooling if needed (when starting application with < strong > FitTrackee< / strong > entry point and not directly with < strong > Gunicorn< / strong > ),
see < a class = "reference external" href = "https://docs.sqlalchemy.org/en/13/core/pooling.html#using-connection-pools-with-multiprocessing-or-os-fork" > SqlAlchemy documentation< / a > .< / p >
< dl class = "field-list simple" >
2022-06-22 20:22:26 +02:00
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2023-06-18 15:02:21 +02:00
< dd class = "field-odd" > < p > < code class = "docutils literal notranslate" > < span class = "pre" > false< / span > < / code > < / p >
2020-12-30 11:12:35 +01:00
< / dd >
< / dl >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-UI_URL" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > UI_URL< / span > < / span > < a class = "headerlink" href = "#envvar-UI_URL" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < p > < strong > FitTrackee< / strong > URL, needed for links in emails.< / p >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-EMAIL_URL" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > EMAIL_URL< / span > < / span > < a class = "headerlink" href = "#envvar-EMAIL_URL" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.3.0.< / span > < / p >
< / div >
< p > Email URL with credentials, see < a class = "reference external" href = "installation.html#emails" > Emails< / a > .< / p >
2022-04-24 13:17:38 +02:00
< div class = "versionchanged" >
< p > < span class = "versionmodified changed" > Changed in version 0.6.5.< / span > < / p >
< / div >
< dl class = "field-list simple" >
2022-06-22 20:22:26 +02:00
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2022-04-24 13:17:38 +02:00
< dd class = "field-odd" > < p > empty string< / p >
< / dd >
< / dl >
< div class = "admonition danger" >
< p class = "admonition-title" > Danger< / p >
< p > If the email URL is empty, email sending will be disabled.< / p >
< / div >
2021-11-14 22:12:29 +01:00
< div class = "admonition warning" >
< p class = "admonition-title" > Warning< / p >
< p > If the email URL is invalid, the application may not start.< / p >
< / div >
2020-12-30 11:12:35 +01:00
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-SENDER_EMAIL" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > SENDER_EMAIL< / span > < / span > < a class = "headerlink" href = "#envvar-SENDER_EMAIL" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.3.0.< / span > < / p >
< / div >
< p > < strong > FitTrackee< / strong > sender email address.< / p >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-REDIS_URL" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > REDIS_URL< / span > < / span > < a class = "headerlink" href = "#envvar-REDIS_URL" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.3.0.< / span > < / p >
< / div >
2022-09-18 09:30:10 +02:00
< p > Redis instance used by < strong > Dramatiq< / strong > and < strong > Flask-Limiter< / strong > .< / p >
2020-12-30 11:12:35 +01:00
< dl class = "field-list simple" >
2022-06-22 20:22:26 +02:00
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2020-12-30 11:12:35 +01:00
< dd class = "field-odd" > < p > local Redis instance (< code class = "docutils literal notranslate" > < span class = "pre" > redis://< / span > < / code > )< / p >
< / dd >
< / dl >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-WORKERS_PROCESSES" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > WORKERS_PROCESSES< / span > < / span > < a class = "headerlink" href = "#envvar-WORKERS_PROCESSES" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.3.0.< / span > < / p >
< / div >
< p > Number of processes used by < strong > Dramatiq< / strong > .< / p >
< / dd > < / dl >
2022-09-18 09:30:10 +02:00
< dl class = "std envvar" >
< dt class = "sig sig-object std" id = "envvar-API_RATE_LIMITS" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > API_RATE_LIMITS< / span > < / span > < a class = "headerlink" href = "#envvar-API_RATE_LIMITS" title = "Permalink to this definition" > #< / a > < / dt >
2022-09-18 09:30:10 +02:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.7.0.< / span > < / p >
< / div >
< p > API rate limits, see < a class = "reference external" href = "installation.html#api-rate-limits" > API rate limits< / a > .< / p >
< dl class = "field-list simple" >
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2023-06-18 15:02:21 +02:00
< dd class = "field-odd" > < p > < code class = "docutils literal notranslate" > < span class = "pre" > 300< / span > < span class = "pre" > per< / span > < span class = "pre" > 5< / span > < span class = "pre" > minutes< / span > < / code > < / p >
2022-09-18 09:30:10 +02:00
< / dd >
< / dl >
< / dd > < / dl >
2020-12-30 11:12:35 +01:00
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-TILE_SERVER_URL" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > TILE_SERVER_URL< / span > < / span > < a class = "headerlink" href = "#envvar-TILE_SERVER_URL" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.4.0.< / span > < / p >
< / div >
2021-07-14 21:11:42 +02:00
< div class = "line-block" >
< div class = "line" > Tile server URL (with api key if needed), see < a class = "reference external" href = "installation.html#map-tile-server" > Map tile server< / a > .< / div >
2021-07-16 19:33:32 +02:00
< div class = "line" > Since < strong > 0.4.9< / strong > , it’ s also used to generate static maps (to keep default server, see < a class = "reference external" href = "installation.html#envvar-DEFAULT_STATICMAP" > DEFAULT_STATICMAP< / a > )< / div >
2021-07-14 21:11:42 +02:00
< / div >
2023-09-14 13:43:58 +02:00
< div class = "versionchanged" >
< p > < span class = "versionmodified changed" > Changed in version 0.7.23.< / span > < / p >
< / div >
< div class = "line-block" >
< div class = "line" > The default URL is updated: < strong > OpenStreetMap< / strong > ’ s tile server no longer requires subdomains.< / div >
< / div >
2020-12-30 11:12:35 +01:00
< dl class = "field-list simple" >
2022-06-22 20:22:26 +02:00
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2023-09-12 19:19:10 +02:00
< dd class = "field-odd" > < p > < code class = "docutils literal notranslate" > < span class = "pre" > https://tile.openstreetmap.org/{z}/{x}/{y}.png< / span > < / code > < / p >
2020-12-30 11:12:35 +01:00
< / dd >
< / dl >
< / dd > < / dl >
2022-07-13 13:02:12 +02:00
< dl class = "std envvar" >
< dt class = "sig sig-object std" id = "envvar-STATICMAP_SUBDOMAINS" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > STATICMAP_SUBDOMAINS< / span > < / span > < a class = "headerlink" href = "#envvar-STATICMAP_SUBDOMAINS" title = "Permalink to this definition" > #< / a > < / dt >
2022-07-13 13:02:12 +02:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.6.10.< / span > < / p >
< / div >
< div class = "line-block" >
< div class = "line" > Some tile servers require a subdomain, see < a class = "reference external" href = "installation.html#map-tile-server" > Map tile server< / a > .< / div >
< div class = "line" > For instance: “a,b,c” for OSM France.< / div >
< / div >
< dl class = "field-list simple" >
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
< dd class = "field-odd" > < p > empty string< / p >
< / dd >
< / dl >
< / dd > < / dl >
2020-12-30 11:12:35 +01:00
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-MAP_ATTRIBUTION" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > MAP_ATTRIBUTION< / span > < / span > < a class = "headerlink" href = "#envvar-MAP_ATTRIBUTION" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.4.0.< / span > < / p >
< / div >
< p > Map attribution (if using another tile server), see < a class = "reference external" href = "installation.html#map-tile-server" > Map tile server< / a > .< / p >
< dl class = "field-list simple" >
2022-06-22 20:22:26 +02:00
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2023-06-18 15:02:21 +02:00
< dd class = "field-odd" > < p > < code class = "docutils literal notranslate" > < span class = "pre" > & copy;< / span > < span class = "pre" > < a< / span > < span class = "pre" > href=" http://www.openstreetmap.org/copyright" < / span > < span class = "pre" > target=" _blank" < / span > < span class = "pre" > rel=" noopener< / span > < span class = "pre" > noreferrer" > OpenStreetMap< /a> < / span > < span class = "pre" > contributors< / span > < / code > < / p >
2020-12-30 11:12:35 +01:00
< / dd >
< / dl >
< / dd > < / dl >
2021-07-16 19:33:32 +02:00
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-DEFAULT_STATICMAP" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > DEFAULT_STATICMAP< / span > < / span > < a class = "headerlink" href = "#envvar-DEFAULT_STATICMAP" title = "Permalink to this definition" > #< / a > < / dt >
2021-07-16 19:33:32 +02:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.4.9.< / span > < / p >
< / div >
2022-07-13 13:02:12 +02:00
< div class = "line-block" >
2023-08-23 11:36:28 +02:00
< div class = "line" > If < code class = "docutils literal notranslate" > < span class = "pre" > True< / span > < / code > , it keeps using < strong > staticmap< / strong > default tile server to generate static maps (OSM tile server since < strong > staticmap< / strong > 0.5.6 (Komoot.de tile server before this version)).< / div >
2022-07-13 13:02:12 +02:00
< div class = "line" > Otherwise, it uses the tile server set in < a class = "reference external" href = "installation.html#envvar-TILE_SERVER_URL" > TILE_SERVER_URL< / a > .< / div >
< / div >
< div class = "versionchanged" >
< p > < span class = "versionmodified changed" > Changed in version 0.6.10.< / span > < / p >
< / div >
< div class = "line-block" >
< div class = "line" > This variable is now case-insensitive.< / div >
2023-06-18 15:02:21 +02:00
< div class = "line" > If < code class = "docutils literal notranslate" > < span class = "pre" > False< / span > < / code > , depending on tile server, < a class = "reference external" href = "installation.html#envvar-STATICMAP_SUBDOMAINS" > subdomains< / a > may be mandatory.< / div >
2022-07-13 13:02:12 +02:00
< / div >
2021-07-16 19:33:32 +02:00
< dl class = "field-list simple" >
2022-06-22 20:22:26 +02:00
< dt class = "field-odd" > Default< span class = "colon" > :< / span > < / dt >
2023-06-25 14:00:35 +02:00
< dd class = "field-odd" > < p > < code class = "docutils literal notranslate" > < span class = "pre" > False< / span > < / code > < / p >
2021-07-16 19:33:32 +02:00
< / dd >
< / dl >
< / dd > < / dl >
2020-12-30 11:12:35 +01:00
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-WEATHER_API_KEY" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > WEATHER_API_KEY< / span > < / span > < a class = "headerlink" href = "#envvar-WEATHER_API_KEY" title = "Permalink to this definition" > #< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < div class = "versionchanged" >
< p > < span class = "versionmodified changed" > Changed in version 0.4.0: < / span > ⚠️ replaces < code class = "docutils literal notranslate" > < span class = "pre" > WEATHER_API< / span > < / code > < / p >
< / div >
2022-12-31 18:38:44 +01:00
< p > Weather API key (not mandatory), see < code class = "docutils literal notranslate" > < span class = "pre" > WEATHER_API_PROVIDER< / span > < / code > .< / p >
< / dd > < / dl >
< dl class = "std envvar" >
< dt class = "sig sig-object std" id = "envvar-WEATHER_API_PROVIDER" >
2023-06-18 15:02:21 +02:00
< span class = "sig-name descname" > < span class = "pre" > WEATHER_API_PROVIDER< / span > < span class = "pre" > 🆕< / span > < / span > < a class = "headerlink" href = "#envvar-WEATHER_API_PROVIDER" title = "Permalink to this definition" > #< / a > < / dt >
2022-12-31 18:38:44 +01:00
< dd > < div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.7.11.< / span > < / p >
< / div >
< p > Provider for weather data (not mandatory), see < a class = "reference external" href = "installation.html#weather-data" > Weather data< / a > .< / p >
2020-12-30 11:12:35 +01:00
< / dd > < / dl >
< dl class = "std envvar" >
2023-11-19 16:38:53 +01:00
< dt class = "sig sig-object std" id = "envvar-VITE_APP_API_URL" >
< span class = "sig-name descname" > < span class = "pre" > VITE_APP_API_URL< / span > < / span > < a class = "headerlink" href = "#envvar-VITE_APP_API_URL" title = "Permalink to this definition" > #< / a > < / dt >
< dd > < div class = "versionchanged" >
< p > < span class = "versionmodified changed" > Changed in version 0.7.26: < / span > ⚠️ replaces < code class = "docutils literal notranslate" > < span class = "pre" > VUE_APP_API_URL< / span > < / code > < / p >
< / div >
2020-12-30 11:12:35 +01:00
< / dd > < / dl >
2021-11-06 21:26:02 +01:00
< section id = "emails" >
2023-06-18 15:02:21 +02:00
< h3 > Emails< a class = "headerlink" href = "#emails" title = "Permalink to this heading" > #< / a > < / h3 >
2020-12-30 11:12:35 +01:00
< div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.3.0.< / span > < / p >
< / div >
< p > To send emails, a valid < code class = "docutils literal notranslate" > < span class = "pre" > EMAIL_URL< / span > < / code > must be provided:< / p >
< ul class = "simple" >
< li > < p > with an unencrypted SMTP server: < code class = "docutils literal notranslate" > < span class = "pre" > smtp://username:password@ smtp.example.com:25< / span > < / code > < / p > < / li >
< li > < p > with SSL: < code class = "docutils literal notranslate" > < span class = "pre" > smtp://username:password@ smtp.example.com:465/?ssl=True< / span > < / code > < / p > < / li >
< li > < p > with STARTTLS: < code class = "docutils literal notranslate" > < span class = "pre" > smtp://username:password@ smtp.example.com:587/?tls=True< / span > < / code > < / p > < / li >
< / ul >
2022-04-09 10:21:57 +02:00
< div class = "admonition warning" >
< p class = "admonition-title" > Warning< / p >
< div class = "line-block" >
2023-06-21 19:45:47 +02:00
< div class = "line" > If the email URL is invalid, the application may not start.< / div >
< div class = "line" > Sending emails with Office365 may not work if SMTP auth is disabled.< / div >
2022-04-09 10:21:57 +02:00
< / div >
< / div >
2022-04-24 13:17:38 +02:00
< div class = "versionchanged" >
< p > < span class = "versionmodified changed" > Changed in version 0.5.3.< / span > < / p >
2022-01-01 11:04:08 +01:00
< / div >
2022-01-01 11:27:16 +01:00
< div class = "line-block" >
< div class = "line" > Credentials can be omitted: < code class = "docutils literal notranslate" > < span class = "pre" > smtp://smtp.example.com:25< / span > < / code > .< / div >
< div class = "line" > If < code class = "docutils literal notranslate" > < span class = "pre" > :< port> < / span > < / code > is omitted, the port defaults to 25.< / div >
< / div >
2022-04-09 10:21:57 +02:00
< div class = "admonition warning" >
< p class = "admonition-title" > Warning< / p >
< div class = "line-block" >
< div class = "line" > Since 0.6.0, newly created accounts must be confirmed (an email with confirmation instructions is sent after registration).< / div >
< / div >
< / div >
< p > Emails sent by FitTrackee are:< / p >
< ul class = "simple" >
< li > < p > account confirmation instructions< / p > < / li >
< li > < p > password reset request< / p > < / li >
2023-08-23 11:36:28 +02:00
< li > < p > email change (to old and new email addresses)< / p > < / li >
2022-04-09 10:21:57 +02:00
< li > < p > password change< / p > < / li >
2023-03-05 14:26:31 +01:00
< li > < p > notification when a data export archive is ready to download (< em > new in 0.7.13< / em > )< / p > < / li >
2022-04-09 10:21:57 +02:00
< / ul >
2022-04-24 13:17:38 +02:00
< div class = "versionchanged" >
< p > < span class = "versionmodified changed" > Changed in version 0.6.5.< / span > < / p >
< / div >
2023-03-05 14:26:31 +01:00
< p > For single-user instance, it is possible to disable email sending with an empty < code class = "docutils literal notranslate" > < span class = "pre" > EMAIL_URL< / span > < / code > (in this case, no need to start dramatiq workers).< / p >
< p > A < a class = "reference external" href = "cli.html#ftcli-users-update" > CLI< / a > is available to activate account, modify email and password and handle data export requests.< / p >
2023-10-04 17:40:59 +02:00
< div class = "versionchanged" >
< p > < span class = "versionmodified changed" > Changed in version 0.7.24.< / span > < / p >
< / div >
< p > Password can be encoded if it contains special characters.
For instance with password < code class = "docutils literal notranslate" > < span class = "pre" > passwordwith@ and& and?< / span > < / code > , the encoded password will be: < code class = "docutils literal notranslate" > < span class = "pre" > passwordwith%40and%26and%3F< / span > < / code > .< / p >
2021-11-06 21:26:02 +01:00
< / section >
< section id = "map-tile-server" >
2023-06-18 15:02:21 +02:00
< h3 > Map tile server< a class = "headerlink" href = "#map-tile-server" title = "Permalink to this heading" > #< / a > < / h3 >
2020-12-30 11:12:35 +01:00
< div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.4.0.< / span > < / p >
< / div >
< p > Default tile server is now < strong > OpenStreetMap< / strong > ’ s standard tile layer (if environment variables are not initialized).
2023-03-08 15:58:02 +01:00
The tile server can be changed by updating < code class = "docutils literal notranslate" > < span class = "pre" > TILE_SERVER_URL< / span > < / code > and < code class = "docutils literal notranslate" > < span class = "pre" > MAP_ATTRIBUTION< / span > < / code > variables (< a class = "reference external" href = "https://wiki.openstreetmap.org/wiki/Raster_tile_providers" > list of tile servers< / a > ).< / p >
2020-12-30 11:12:35 +01:00
< p > To keep using < strong > ThunderForest Outdoors< / strong > , the configuration is:< / p >
< ul class = "simple" >
< li > < p > < code class = "docutils literal notranslate" > < span class = "pre" > TILE_SERVER_URL=https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey=XXXX< / span > < / code > where < strong > XXXX< / strong > is < strong > ThunderForest< / strong > API key< / p > < / li >
< li > < p > < code class = "docutils literal notranslate" > < span class = "pre" > MAP_ATTRIBUTION=& copy;< / span > < span class = "pre" > < a< / span > < span class = "pre" > href=" http://www.thunderforest.com/" > Thunderforest< /a> ,< / span > < span class = "pre" > & copy;< / span > < span class = "pre" > < a< / span > < span class = "pre" > href=" http://www.openstreetmap.org/copyright" > OpenStreetMap< /a> < / span > < span class = "pre" > contributors< / span > < / code > < / p > < / li >
< / ul >
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< div class = "line-block" >
2023-03-05 14:26:31 +01:00
< div class = "line" > Check the terms of service of tile provider for map attribution.< / div >
2020-12-30 11:12:35 +01:00
< / div >
< / div >
2022-07-13 13:02:12 +02:00
< div class = "versionchanged" >
< p > < span class = "versionmodified changed" > Changed in version 0.6.10.< / span > < / p >
< / div >
< p > Since the tile server can be used for static map generation, some servers require a subdomain.< / p >
< p > For instance, to set OSM France tile server, the expected values are:< / p >
< ul class = "simple" >
< li > < p > < code class = "docutils literal notranslate" > < span class = "pre" > TILE_SERVER_URL=https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png< / span > < / code > < / p > < / li >
2022-07-13 15:21:01 +02:00
< li > < p > < code class = "docutils literal notranslate" > < span class = "pre" > MAP_ATTRIBUTION='fond< / span > < span class = "pre" > de< / span > < span class = "pre" > carte< / span > < span class = "pre" > par< / span > < span class = "pre" > < a< / span > < span class = "pre" > href=" http://www.openstreetmap.fr/mentions-legales/" < / span > < span class = "pre" > target=" _blank" < / span > < span class = "pre" > rel=" nofollow< / span > < span class = "pre" > noopener" > OpenStreetMap< / span > < span class = "pre" > France< /a> ,< / span > < span class = "pre" > sous& nbsp;< a< / span > < span class = "pre" > href=" http://creativecommons.org/licenses/by-sa/2.0/fr/" < / span > < span class = "pre" > target=" _blank" < / span > < span class = "pre" > rel=" nofollow< / span > < span class = "pre" > noopener" > licence< / span > < span class = "pre" > CC< / span > < span class = "pre" > BY-SA< /a> '< / span > < / code > < / p > < / li >
2022-07-13 13:02:12 +02:00
< li > < p > < code class = "docutils literal notranslate" > < span class = "pre" > STATICMAP_SUBDOMAINS=a,b,c< / span > < / code > < / p > < / li >
< / ul >
< p > The subdomain will be chosen randomly.< / p >
2023-09-14 13:43:58 +02:00
< div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.7.23.< / span > < / p >
< / div >
< p > The default URL is updated: < strong > OpenStreetMap< / strong > ’ s tile server no longer requires subdomains.< / p >
2021-11-06 21:26:02 +01:00
< / section >
2022-09-18 09:30:10 +02:00
< section id = "api-rate-limits" >
2023-06-18 15:02:21 +02:00
< h3 > API rate limits< a class = "headerlink" href = "#api-rate-limits" title = "Permalink to this heading" > #< / a > < / h3 >
2022-09-18 09:30:10 +02:00
< div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.7.0.< / span > < / p >
< / div >
< div class = "line-block" >
< div class = "line" > API rate limits are managed by < a class = "reference external" href = "https://flask-limiter.readthedocs.io/en/stable" > Flask-Limiter< / a > , based on IP with fixed window strategy.< / div >
< div class = "line" > To enable rate limits, < strong > Redis< / strong > must be available.< / div >
< / div >
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< div class = "line-block" >
< div class = "line" > If no Redis instance is available for rate limits, FitTrackee can still start.< / div >
< / div >
< / div >
< div class = "line-block" >
< div class = "line" > All endpoints are subject to rate limits, except endpoints serving assets.< / div >
< div class = "line" > Limits can be modified by setting the environment variable < code class = "docutils literal notranslate" > < span class = "pre" > API_RATE_LIMITS< / span > < / code > (see < a class = "reference external" href = "https://flask-limiter.readthedocs.io/en/stable/configuration.html#rate-limit-string-notation" > Flask-Limiter documentation for notation< / a > ).< / div >
< div class = "line" > Rate limits must be separated by a comma, for instance:< / div >
< / div >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > export< / span > < span class = "n" > API_RATE_LIMITS< / span > < span class = "o" > =< / span > < span class = "s2" > " 200 per day, 50 per hour" < / span >
< / pre > < / div >
< / div >
< p > < strong > Flask-Limiter< / strong > provides a < a class = "reference external" href = "https://flask-limiter.readthedocs.io/en/stable/cli.html" > Command Line Interface< / a > for maintenance and diagnostic purposes.< / p >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > flask< span class = "w" > < / span > limiter
Usage:< span class = "w" > < / span > flask< span class = "w" > < / span > limiter< span class = "w" > < / span > < span class = "o" > [< / span > OPTIONS< span class = "o" > ]< / span > < span class = "w" > < / span > COMMAND< span class = "w" > < / span > < span class = "o" > [< / span > ARGS< span class = "o" > ]< / span > ...
2022-09-18 09:30:10 +02:00
2023-08-23 11:36:28 +02:00
< span class = "w" > < / span > Flask-Limiter< span class = "w" > < / span > maintenance< span class = "w" > < / span > < span class = "p" > & < / span > < span class = "w" > < / span > utility< span class = "w" > < / span > commands
2022-09-18 09:30:10 +02:00
Options:
2023-02-16 11:18:50 +01:00
< span class = "w" > < / span > --help< span class = "w" > < / span > Show< span class = "w" > < / span > this< span class = "w" > < / span > message< span class = "w" > < / span > and< span class = "w" > < / span > exit.
2022-09-18 09:30:10 +02:00
Commands:
2023-02-16 11:18:50 +01:00
< span class = "w" > < / span > clear< span class = "w" > < / span > Clear< span class = "w" > < / span > limits< span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > a< span class = "w" > < / span > specific< span class = "w" > < / span > key
< span class = "w" > < / span > config< span class = "w" > < / span > View< span class = "w" > < / span > the< span class = "w" > < / span > extension< span class = "w" > < / span > configuration
< span class = "w" > < / span > limits< span class = "w" > < / span > Enumerate< span class = "w" > < / span > details< span class = "w" > < / span > about< span class = "w" > < / span > all< span class = "w" > < / span > routes< span class = "w" > < / span > with< span class = "w" > < / span > rate< span class = "w" > < / span > limits
2022-09-18 09:30:10 +02:00
< / pre > < / div >
< / div >
< / section >
2022-12-31 18:38:44 +01:00
< section id = "weather-data" >
2023-06-18 15:02:21 +02:00
< h3 > Weather data< a class = "headerlink" href = "#weather-data" title = "Permalink to this heading" > #< / a > < / h3 >
2022-12-31 18:38:44 +01:00
< div class = "versionchanged" >
< p > < span class = "versionmodified changed" > Changed in version 0.7.11.< / span > < / p >
< / div >
< p > The following weather data providers are supported by < strong > FitTrackee< / strong > :< / p >
< ul class = "simple" >
< li > < p > < a class = "reference external" href = "https://www.visualcrossing.com" > Visual Crossing< / a > (< strong > note< / strong > : historical data are provided on hourly period)< / p > < / li >
< / ul >
< p > To configure a weather provider, set the following environment variables:< / p >
< ul class = "simple" >
< li > < p > < code class = "docutils literal notranslate" > < span class = "pre" > WEATHER_API_KEY< / span > < / code > : the key to the corresponding weather provider< / p > < / li >
< / ul >
2023-04-12 17:32:08 +02:00
< div class = "versionchanged" >
< p > < span class = "versionmodified changed" > Changed in version 0.7.15.< / span > < / p >
< / div >
< p > < strong > DarkSky< / strong > support is discontinued, since the service shut down on March 31, 2023.< / p >
2022-12-31 18:38:44 +01:00
< / section >
2021-11-06 21:26:02 +01:00
< / section >
2022-09-18 09:30:10 +02:00
< section id = "id2" >
2023-06-18 15:02:21 +02:00
< h2 > Installation< a class = "headerlink" href = "#id2" title = "Permalink to this heading" > #< / a > < / h2 >
2022-02-05 22:09:17 +01:00
< div class = "admonition warning" >
< p class = "admonition-title" > Warning< / p >
< div class = "line-block" >
2023-06-18 15:02:21 +02:00
< div class = "line" > Note that < strong > FitTrackee< / strong > is under heavy development, some features may be unstable.< / div >
2022-02-05 22:09:17 +01:00
< / div >
< / div >
2021-11-06 21:26:02 +01:00
< section id = "from-pypi" >
2023-06-18 15:02:21 +02:00
< h3 > From PyPI< a class = "headerlink" href = "#from-pypi" title = "Permalink to this heading" > #< / a > < / h3 >
2020-12-30 11:12:35 +01:00
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< div class = "line-block" >
< div class = "line" > Recommended way on production.< / div >
< / div >
< / div >
< ul class = "simple" >
< li > < p > Create and activate a virtualenv< / p > < / li >
< li > < p > Install < strong > FitTrackee< / strong > with pip< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > pip< span class = "w" > < / span > install< span class = "w" > < / span > fittrackee
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Create < code class = "docutils literal notranslate" > < span class = "pre" > fittrackee< / span > < / code > database< / p > < / li >
< / ul >
< p > Example :< / p >
2023-02-16 11:18:50 +01:00
< div class = "highlight-sql notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "k" > CREATE< / span > < span class = "w" > < / span > < span class = "k" > USER< / span > < span class = "w" > < / span > < span class = "n" > fittrackee< / span > < span class = "w" > < / span > < span class = "k" > WITH< / span > < span class = "w" > < / span > < span class = "n" > PASSWORD< / span > < span class = "w" > < / span > < span class = "s1" > ' < PASSWORD> ' < / span > < span class = "p" > ;< / span >
< span class = "k" > CREATE< / span > < span class = "w" > < / span > < span class = "k" > SCHEMA< / span > < span class = "w" > < / span > < span class = "n" > fittrackee< / span > < span class = "w" > < / span > < span class = "k" > AUTHORIZATION< / span > < span class = "w" > < / span > < span class = "n" > fittrackee< / span > < span class = "p" > ;< / span >
< span class = "k" > CREATE< / span > < span class = "w" > < / span > < span class = "k" > DATABASE< / span > < span class = "w" > < / span > < span class = "n" > fittrackee< / span > < span class = "w" > < / span > < span class = "k" > OWNER< / span > < span class = "w" > < / span > < span class = "n" > fittrackee< / span > < span class = "p" > ;< / span >
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
2022-10-30 08:50:59 +01:00
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< div class = "line-block" >
< div class = "line" > see PostgreSQL < a class = "reference external" href = "https://www.postgresql.org/docs/15/ddl-schemas.html" > documentation< / a > for schema and privileges.< / div >
< / div >
< / div >
2020-12-30 11:12:35 +01:00
< ul class = "simple" >
< li > < p > Initialize environment variables, see < a class = "reference external" href = "installation.html#environment-variables" > Environment variables< / a > < / p > < / li >
< / ul >
< p > For instance, copy and update < code class = "docutils literal notranslate" > < span class = "pre" > .env< / span > < / code > file from < code class = "docutils literal notranslate" > < span class = "pre" > .env.example< / span > < / code > and source the file.< / p >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > nano< span class = "w" > < / span > .env
$< span class = "w" > < / span > < span class = "nb" > source< / span > < span class = "w" > < / span > .env
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
2022-02-13 09:52:34 +01:00
< li > < p > Initialize database schema< / p > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > ftcli< span class = "w" > < / span > db< span class = "w" > < / span > upgrade
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Start the application< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > fittrackee
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
2022-11-27 12:06:42 +01:00
< li > < p > Start task queue workers if email sending is enabled, with flask-dramatiq CLI:< / p > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > flask< span class = "w" > < / span > worker< span class = "w" > < / span > --processes< span class = "w" > < / span > < span class = "m" > 2< / span >
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< div class = "line-block" >
< div class = "line" > To start application and workers with < strong > systemd< / strong > service, see < a class = "reference external" href = "installation.html#deployment" > Deployment< / a > < / div >
< / div >
< / div >
2022-02-13 09:52:34 +01:00
< ul class = "simple" >
2022-11-30 12:43:54 +01:00
< li > < p > Open < a class = "reference external" href = "http://localhost:5000" > http://localhost:5000< / a > and register< / p > < / li >
2022-03-27 15:11:12 +02:00
< li > < p > To set admin rights to the newly created account, use the following command line:< / p > < / li >
2022-02-13 09:52:34 +01:00
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > ftcli< span class = "w" > < / span > users< span class = "w" > < / span > update< span class = "w" > < / span > < username> < span class = "w" > < / span > --set-admin< span class = "w" > < / span > < span class = "nb" > true< / span >
2022-02-13 09:52:34 +01:00
< / pre > < / div >
< / div >
2022-03-26 20:30:37 +01:00
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< p > If the user account is inactive, it activates it.< / p >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< section id = "from-sources" >
2023-06-18 15:02:21 +02:00
< h3 > From sources< a class = "headerlink" href = "#from-sources" title = "Permalink to this heading" > #< / a > < / h3 >
2020-12-30 11:12:35 +01:00
< div class = "admonition warning" >
< p class = "admonition-title" > Warning< / p >
< div class = "line-block" >
2023-06-18 15:02:21 +02:00
< div class = "line" > Since < strong > FitTrackee< / strong > 0.2.1, Python packages installation needs Poetry.< / div >
< div class = "line" > For more information, see < a class = "reference external" href = "https://python-poetry.org/docs/#installation" > Poetry Documentation< / a > < / div >
2020-12-30 11:12:35 +01:00
< / div >
2023-06-18 15:02:21 +02:00
< / div >
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< div class = "line-block" >
< div class = "line" > To keep virtualenv in project directory, update Poetry configuration.< / div >
< / div >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > poetry< span class = "w" > < / span > config< span class = "w" > < / span > virtualenvs.in-project< span class = "w" > < / span > < span class = "nb" > true< / span >
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< / div >
2021-11-06 21:26:02 +01:00
< section id = "dev-environment" >
2023-06-18 15:02:21 +02:00
< h4 > Dev environment< a class = "headerlink" href = "#dev-environment" title = "Permalink to this heading" > #< / a > < / h4 >
2020-12-30 11:12:35 +01:00
< ul class = "simple" >
< li > < p > Clone this repo:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > git< span class = "w" > < / span > clone< span class = "w" > < / span > https://github.com/SamR1/FitTrackee.git
$< span class = "w" > < / span > < span class = "nb" > cd< / span > < span class = "w" > < / span > FitTrackee
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
2021-07-10 10:46:44 +02:00
< li > < p > Create < strong > .env< / strong > from example and update it
2020-12-30 11:12:35 +01:00
(see < a class = "reference external" href = "installation.html#environment-variables" > Environment variables< / a > ).< / p > < / li >
2021-11-06 22:18:38 +01:00
< li > < p > Install Python virtualenv, Vue and all related packages and
2020-12-30 11:12:35 +01:00
initialize the database:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > install-dev
$< span class = "w" > < / span > make< span class = "w" > < / span > install-db
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Start the server and the client:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > serve
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Run dramatiq workers:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > run-workers
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
2022-02-13 09:52:34 +01:00
< ul class = "simple" >
< li > < p > Open < a class = "reference external" href = "http://localhost:3000" > http://localhost:3000< / a > and register< / p > < / li >
2022-03-27 15:11:12 +02:00
< li > < p > To set admin rights to the newly created account, use the following command line:< / p > < / li >
2022-02-13 09:52:34 +01:00
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > user-set-admin< span class = "w" > < / span > < span class = "nv" > USERNAME< / span > < span class = "o" > =< / span > < username>
2022-02-13 09:52:34 +01:00
< / pre > < / div >
< / div >
2022-03-27 15:11:12 +02:00
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< p > If the user account is inactive, it activates it.< / p >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< section id = "production-environment" >
2023-06-18 15:02:21 +02:00
< h4 > Production environment< a class = "headerlink" href = "#production-environment" title = "Permalink to this heading" > #< / a > < / h4 >
2020-12-30 11:12:35 +01:00
< div class = "admonition warning" >
< p class = "admonition-title" > Warning< / p >
< div class = "line-block" >
< div class = "line" > Note that FitTrackee is under heavy development, some features may be unstable.< / div >
< / div >
< / div >
< ul class = "simple" >
2024-02-04 17:12:04 +01:00
< li > < p > Download the last release (for now, it is the release v0.7.30):< / p > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
2024-02-04 17:12:04 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > wget< span class = "w" > < / span > https://github.com/SamR1/FitTrackee/archive/v0.7.30.tar.gz
$< span class = "w" > < / span > tar< span class = "w" > < / span > -xzf< span class = "w" > < / span > v0.7.30.tar.gz
$< span class = "w" > < / span > mv< span class = "w" > < / span > FitTrackee-0.7.30< span class = "w" > < / span > FitTrackee
2023-02-16 11:18:50 +01:00
$< span class = "w" > < / span > < span class = "nb" > cd< / span > < span class = "w" > < / span > FitTrackee
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
2021-07-10 10:46:44 +02:00
< li > < p > Create < strong > .env< / strong > from example and update it
2020-12-30 11:12:35 +01:00
(see < a class = "reference external" href = "installation.html#environment-variables" > Environment variables< / a > ).< / p > < / li >
< li > < p > Install Python virtualenv and all related packages:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > install-python
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Initialize the database (< strong > after updating< / strong > < code class = "docutils literal notranslate" > < span class = "pre" > db/create.sql< / span > < / code > < strong > to change
database credentials< / strong > ):< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > install-db
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Start the server and dramatiq workers:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > run
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
2022-04-24 13:17:38 +02:00
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< p > If email sending is disabled: < code class = "docutils literal notranslate" > < span class = "pre" > $< / span > < span class = "pre" > make< / span > < span class = "pre" > run-server< / span > < / code > < / p >
< / div >
2022-02-13 09:52:34 +01:00
< ul class = "simple" >
< li > < p > Open < a class = "reference external" href = "http://localhost:5000" > http://localhost:5000< / a > and register< / p > < / li >
2022-03-27 15:11:12 +02:00
< li > < p > To set admin rights to the newly created account, use the following command line:< / p > < / li >
2022-02-13 09:52:34 +01:00
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > user-set-admin< span class = "w" > < / span > < span class = "nv" > USERNAME< / span > < span class = "o" > =< / span > < username>
2022-02-13 09:52:34 +01:00
< / pre > < / div >
< / div >
2022-03-27 15:11:12 +02:00
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< p > If the user account is inactive, it activates it.< / p >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< / section >
2022-02-05 22:09:17 +01:00
< / section >
< section id = "upgrade" >
2023-06-18 15:02:21 +02:00
< h2 > Upgrade< a class = "headerlink" href = "#upgrade" title = "Permalink to this heading" > #< / a > < / h2 >
2020-12-30 11:12:35 +01:00
< div class = "admonition warning" >
< p class = "admonition-title" > Warning< / p >
< div class = "line-block" >
< div class = "line" > Before upgrading, make a backup of all data:< / div >
< div class = "line" > - database (with < a class = "reference external" href = "https://www.postgresql.org/docs/11/app-pgdump.html" > pg_dump< / a > for instance)< / div >
< div class = "line" > - upload directory (see < a class = "reference external" href = "installation.html#environment-variables" > Environment variables< / a > )< / div >
< / div >
< / div >
2023-06-25 14:00:35 +02:00
< div class = "admonition warning" >
< p class = "admonition-title" > Warning< / p >
< p > For now, releases do not follow < a class = "reference external" href = "https://semver.org" > semantic versioning< / a > ). Any version may contain backward-incompatible changes.< / p >
< / div >
2022-09-18 09:30:10 +02:00
< section id = "id3" >
2023-06-18 15:02:21 +02:00
< h3 > From PyPI< a class = "headerlink" href = "#id3" title = "Permalink to this heading" > #< / a > < / h3 >
2022-02-05 22:09:17 +01:00
< ul class = "simple" >
2022-04-09 10:21:57 +02:00
< li > < p > Stop the application and activate the virtualenv< / p > < / li >
2022-02-05 22:09:17 +01:00
< li > < p > Upgrade with pip< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > pip< span class = "w" > < / span > install< span class = "w" > < / span > -U< span class = "w" > < / span > fittrackee
2022-02-05 22:09:17 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Update environment variables if needed and source environment variables file< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > nano< span class = "w" > < / span > .env
$< span class = "w" > < / span > < span class = "nb" > source< / span > < span class = "w" > < / span > .env
2022-02-05 22:09:17 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Upgrade database if needed (see changelog for migrations):< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > ftcli< span class = "w" > < / span > db< span class = "w" > < / span > upgrade
2022-02-05 22:09:17 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
2022-04-24 13:17:38 +02:00
< li > < p > Restart the application and task queue workers (if email sending is enabled).< / p > < / li >
2022-02-05 22:09:17 +01:00
< / ul >
< / section >
2021-11-06 21:26:02 +01:00
< section id = "id4" >
2023-06-18 15:02:21 +02:00
< h3 > From sources< a class = "headerlink" href = "#id4" title = "Permalink to this heading" > #< / a > < / h3 >
2022-09-18 09:30:10 +02:00
< section id = "id5" >
2023-06-18 15:02:21 +02:00
< h4 > Dev environment< a class = "headerlink" href = "#id5" title = "Permalink to this heading" > #< / a > < / h4 >
2020-12-30 11:12:35 +01:00
< ul class = "simple" >
< li > < p > Stop the application and pull the repository:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > git< span class = "w" > < / span > pull
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
2021-07-17 12:37:47 +02:00
< li > < p > Update < strong > .env< / strong > if needed (see < a class = "reference external" href = "installation.html#environment-variables" > Environment variables< / a > ).< / p > < / li >
2022-02-05 22:09:17 +01:00
< li > < p > Upgrade packages:< / p > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > install-dev
2022-02-05 22:09:17 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Upgrade database if needed (see changelog for migrations):< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > upgrade-db
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Restart the server:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > serve
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Run dramatiq workers:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > run-workers
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< section id = "prod-environment" >
2023-06-18 15:02:21 +02:00
< h4 > Prod environment< a class = "headerlink" href = "#prod-environment" title = "Permalink to this heading" > #< / a > < / h4 >
2020-12-30 11:12:35 +01:00
< ul class = "simple" >
2021-07-17 12:37:47 +02:00
< li > < p > Stop the application< / p > < / li >
< li > < p > Change to the directory where FitTrackee directory is located< / p > < / li >
2024-02-04 17:12:04 +01:00
< li > < p > Download the last release (for now, it is the release v0.7.30) and overwrite existing files:< / p > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
2024-02-04 17:12:04 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > wget< span class = "w" > < / span > https://github.com/SamR1/FitTrackee/archive/v0.7.30.tar.gz
$< span class = "w" > < / span > tar< span class = "w" > < / span > -xzf< span class = "w" > < / span > v0.7.30.tar.gz
$< span class = "w" > < / span > cp< span class = "w" > < / span > -R< span class = "w" > < / span > FitTrackee-0.7.30/*< span class = "w" > < / span > FitTrackee/
2023-02-16 11:18:50 +01:00
$< span class = "w" > < / span > < span class = "nb" > cd< / span > < span class = "w" > < / span > FitTrackee
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
2021-07-17 12:37:47 +02:00
< li > < p > Update < strong > .env< / strong > if needed (see < a class = "reference external" href = "installation.html#environment-variables" > Environment variables< / a > ).< / p > < / li >
2022-02-05 22:09:17 +01:00
< li > < p > Upgrade packages:< / p > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
2024-02-04 22:31:15 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > install-python
2022-02-05 22:09:17 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Upgrade database if needed (see changelog for migrations):< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > upgrade-db
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Restart the server and dramatiq workers:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > run
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
2022-04-24 13:17:38 +02:00
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< p > If email sending is disabled: < code class = "docutils literal notranslate" > < span class = "pre" > $< / span > < span class = "pre" > make< / span > < span class = "pre" > run-server< / span > < / code > < / p >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< / section >
< / section >
< section id = "deployment" >
2023-06-18 15:02:21 +02:00
< h2 > Deployment< a class = "headerlink" href = "#deployment" title = "Permalink to this heading" > #< / a > < / h2 >
2020-12-30 11:12:35 +01:00
< p > There are several ways to start < strong > FitTrackee< / strong > web application and task queue
library.
One way is to use a < strong > systemd< / strong > services and < strong > Nginx< / strong > to proxy pass to < strong > Gunicorn< / strong > .< / p >
2023-06-18 15:02:21 +02:00
< p > Examples (to adapt depending on your instance configuration and operating system):< / p >
2020-12-30 11:12:35 +01:00
< ul class = "simple" >
< li > < p > for application: < code class = "docutils literal notranslate" > < span class = "pre" > fittrackee.service< / span > < / code > < / p > < / li >
< / ul >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "p" > [< / span > < span class = "n" > Unit< / span > < span class = "p" > ]< / span >
< span class = "n" > Description< / span > < span class = "o" > =< / span > < span class = "n" > FitTrackee< / span > < span class = "n" > service< / span >
< span class = "n" > After< / span > < span class = "o" > =< / span > < span class = "n" > network< / span > < span class = "o" > .< / span > < span class = "n" > target< / span >
< span class = "n" > After< / span > < span class = "o" > =< / span > < span class = "n" > postgresql< / span > < span class = "o" > .< / span > < span class = "n" > service< / span >
< span class = "n" > After< / span > < span class = "o" > =< / span > < span class = "n" > redis< / span > < span class = "o" > .< / span > < span class = "n" > service< / span >
< span class = "n" > StartLimitIntervalSec< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "p" > [< / span > < span class = "n" > Service< / span > < span class = "p" > ]< / span >
< span class = "n" > Type< / span > < span class = "o" > =< / span > < span class = "n" > simple< / span >
< span class = "n" > Restart< / span > < span class = "o" > =< / span > < span class = "n" > always< / span >
< span class = "n" > RestartSec< / span > < span class = "o" > =< / span > < span class = "mi" > 1< / span >
< span class = "n" > User< / span > < span class = "o" > =< < / span > < span class = "n" > USER< / span > < span class = "o" > > < / span >
< span class = "n" > StandardOutput< / span > < span class = "o" > =< / span > < span class = "n" > syslog< / span >
< span class = "n" > StandardError< / span > < span class = "o" > =< / span > < span class = "n" > syslog< / span >
< span class = "n" > SyslogIdentifier< / span > < span class = "o" > =< / span > < span class = "n" > fittrackee< / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " APP_SECRET_KEY=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " APP_LOG=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " UPLOAD_FOLDER=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " DATABASE_URL=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " UI_URL=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " EMAIL_URL=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " SENDER_EMAIL=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " REDIS_URL=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " TILE_SERVER_URL=" < / span >
2022-07-13 15:21:01 +02:00
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " STATICMAP_SUBDOMAINS=" < / span >
2020-12-30 11:12:35 +01:00
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " MAP_ATTRIBUTION=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " WEATHER_API_KEY=" < / span >
< span class = "n" > WorkingDirectory< / span > < span class = "o" > =/< / span > < span class = "n" > home< / span > < span class = "o" > /< < / span > < span class = "n" > USER< / span > < span class = "o" > > /< < / span > < span class = "n" > FITTRACKEE< / span > < span class = "n" > DIRECTORY< / span > < span class = "o" > > < / span >
2021-06-06 11:23:26 +02:00
< span class = "n" > ExecStart< / span > < span class = "o" > =/< / span > < span class = "n" > home< / span > < span class = "o" > /< < / span > < span class = "n" > USER< / span > < span class = "o" > > /< < / span > < span class = "n" > FITTRACKEE< / span > < span class = "n" > DIRECTORY< / span > < span class = "o" > > /.< / span > < span class = "n" > venv< / span > < span class = "o" > /< / span > < span class = "nb" > bin< / span > < span class = "o" > /< / span > < span class = "n" > gunicorn< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "mf" > 127.0.0.1< / span > < span class = "p" > :< / span > < span class = "mi" > 5000< / span > < span class = "s2" > " fittrackee:create_app()" < / span > < span class = "o" > --< / span > < span class = "n" > error< / span > < span class = "o" > -< / span > < span class = "n" > logfile< / span > < span class = "o" > /< / span > < span class = "n" > home< / span > < span class = "o" > /< < / span > < span class = "n" > USER< / span > < span class = "o" > > /< < / span > < span class = "n" > FITTRACKEE< / span > < span class = "n" > DIRECTORY< / span > < span class = "o" > > /< / span > < span class = "n" > gunicorn< / span > < span class = "o" > .< / span > < span class = "n" > log< / span >
2020-12-30 11:12:35 +01:00
< span class = "n" > Restart< / span > < span class = "o" > =< / span > < span class = "n" > always< / span >
< span class = "p" > [< / span > < span class = "n" > Install< / span > < span class = "p" > ]< / span >
< span class = "n" > WantedBy< / span > < span class = "o" > =< / span > < span class = "n" > multi< / span > < span class = "o" > -< / span > < span class = "n" > user< / span > < span class = "o" > .< / span > < span class = "n" > target< / span >
< / pre > < / div >
< / div >
2021-02-21 00:09:10 +01:00
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
2023-03-05 20:36:59 +01:00
< p > To handle large files, a higher value for < a class = "reference external" href = "https://docs.gunicorn.org/en/stable/settings.html#timeout" > timeout< / a > can be set.< / p >
< / div >
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< p > More information on deployment with Gunicorn in its < a class = "reference external" href = "https://docs.gunicorn.org/en/stable/deploy.html" > documentation< / a > .< / p >
2021-02-21 00:09:10 +01:00
< / div >
2020-12-30 11:12:35 +01:00
< ul class = "simple" >
< li > < p > for task queue workers: < code class = "docutils literal notranslate" > < span class = "pre" > fittrackee_workers.service< / span > < / code > < / p > < / li >
< / ul >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "p" > [< / span > < span class = "n" > Unit< / span > < span class = "p" > ]< / span >
< span class = "n" > Description< / span > < span class = "o" > =< / span > < span class = "n" > FitTrackee< / span > < span class = "n" > task< / span > < span class = "n" > queue< / span > < span class = "n" > service< / span >
< span class = "n" > After< / span > < span class = "o" > =< / span > < span class = "n" > network< / span > < span class = "o" > .< / span > < span class = "n" > target< / span >
< span class = "n" > After< / span > < span class = "o" > =< / span > < span class = "n" > postgresql< / span > < span class = "o" > .< / span > < span class = "n" > service< / span >
< span class = "n" > After< / span > < span class = "o" > =< / span > < span class = "n" > redis< / span > < span class = "o" > .< / span > < span class = "n" > service< / span >
< span class = "n" > StartLimitIntervalSec< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "p" > [< / span > < span class = "n" > Service< / span > < span class = "p" > ]< / span >
< span class = "n" > Type< / span > < span class = "o" > =< / span > < span class = "n" > simple< / span >
< span class = "n" > Restart< / span > < span class = "o" > =< / span > < span class = "n" > always< / span >
< span class = "n" > RestartSec< / span > < span class = "o" > =< / span > < span class = "mi" > 1< / span >
< span class = "n" > User< / span > < span class = "o" > =< < / span > < span class = "n" > USER< / span > < span class = "o" > > < / span >
< span class = "n" > StandardOutput< / span > < span class = "o" > =< / span > < span class = "n" > syslog< / span >
< span class = "n" > StandardError< / span > < span class = "o" > =< / span > < span class = "n" > syslog< / span >
< span class = "n" > SyslogIdentifier< / span > < span class = "o" > =< / span > < span class = "n" > fittrackee_workers< / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " FLASK_APP=fittrackee" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " APP_SECRET_KEY=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " APP_LOG=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " UPLOAD_FOLDER=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " DATABASE_URL=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " UI_URL=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " EMAIL_URL=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " SENDER_EMAIL=" < / span >
< span class = "n" > Environment< / span > < span class = "o" > =< / span > < span class = "s2" > " REDIS_URL=" < / span >
< span class = "n" > WorkingDirectory< / span > < span class = "o" > =/< / span > < span class = "n" > home< / span > < span class = "o" > /< < / span > < span class = "n" > USER< / span > < span class = "o" > > /< < / span > < span class = "n" > FITTRACKEE< / span > < span class = "n" > DIRECTORY< / span > < span class = "o" > > < / span >
< span class = "n" > ExecStart< / span > < span class = "o" > =/< / span > < span class = "n" > home< / span > < span class = "o" > /< < / span > < span class = "n" > USER< / span > < span class = "o" > > /< < / span > < span class = "n" > FITTRACKEE< / span > < span class = "n" > DIRECTORY< / span > < span class = "o" > > /.< / span > < span class = "n" > venv< / span > < span class = "o" > /< / span > < span class = "nb" > bin< / span > < span class = "o" > /< / span > < span class = "n" > flask< / span > < span class = "n" > worker< / span > < span class = "o" > --< / span > < span class = "n" > processes< / span > < span class = "o" > < < / span > < span class = "n" > NUMBER< / span > < span class = "n" > OF< / span > < span class = "n" > PROCESSES< / span > < span class = "o" > > < / span >
< span class = "n" > Restart< / span > < span class = "o" > =< / span > < span class = "n" > always< / span >
< span class = "p" > [< / span > < span class = "n" > Install< / span > < span class = "p" > ]< / span >
< span class = "n" > WantedBy< / span > < span class = "o" > =< / span > < span class = "n" > multi< / span > < span class = "o" > -< / span > < span class = "n" > user< / span > < span class = "o" > .< / span > < span class = "n" > target< / span >
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > < strong > Nginx< / strong > configuration:< / p > < / li >
< / ul >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > server {
2022-02-05 22:09:17 +01:00
listen 443 ssl http2;
2020-12-30 11:12:35 +01:00
server_name example.com;
ssl_certificate fullchain.pem;
ssl_certificate_key privkey.pem;
2022-11-05 10:10:25 +01:00
## this parameter controls how large of a file can be
## uploaded, and defaults to 1MB. If you change the FitTrackee
## settings to allow larger uploads, you' ll need to change this
## setting by uncommenting the line below and setting the size limit
## you want. Set to " 0" to prevent nginx from checking the
## request body size at all
# client_max_body_size 1m;
2020-12-30 11:12:35 +01:00
location / {
proxy_pass http://127.0.0.1:5000;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
2022-08-27 16:50:29 +02:00
proxy_set_header X-Forwarded-Proto $scheme;
2020-12-30 11:12:35 +01:00
}
}
server {
listen 80;
server_name example.com;
location / {
return 301 https://example.com$request_uri;
}
}
< / pre > < / div >
< / div >
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
2021-02-21 00:09:10 +01:00
< p > If needed, update configuration to handle larger files (see < a class = "reference external" href = "https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size" > client_max_body_size< / a > ).< / p >
2020-12-30 11:12:35 +01:00
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< section id = "docker" >
2023-06-18 15:02:21 +02:00
< h2 > Docker< a class = "headerlink" href = "#docker" title = "Permalink to this heading" > #< / a > < / h2 >
2022-09-18 09:30:10 +02:00
< section id = "id6" >
2023-06-18 15:02:21 +02:00
< h3 > Installation< a class = "headerlink" href = "#id6" title = "Permalink to this heading" > #< / a > < / h3 >
2021-01-31 12:03:17 +01:00
< div class = "versionadded" >
2021-01-31 19:19:47 +01:00
< p > < span class = "versionmodified added" > New in version 0.4.4.< / span > < / p >
2021-01-31 12:03:17 +01:00
< / div >
2023-11-19 16:38:53 +01:00
< p > For < strong > evaluation< / strong > purposes, docker files are available, installing < strong > FitTrackee< / strong > from < strong > sources< / strong > .< / p >
2021-01-31 12:03:17 +01:00
< ul class = "simple" >
2022-07-23 11:56:03 +02:00
< li > < p > To install < strong > FitTrackee< / strong > :< / p > < / li >
2021-01-31 12:03:17 +01:00
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > git< span class = "w" > < / span > clone< span class = "w" > < / span > https://github.com/SamR1/FitTrackee.git
$< span class = "w" > < / span > < span class = "nb" > cd< / span > < span class = "w" > < / span > FitTrackee
$< span class = "w" > < / span > cp< span class = "w" > < / span > .env.docker< span class = "w" > < / span > .env
$< span class = "w" > < / span > make< span class = "w" > < / span > docker-build
2021-01-31 12:03:17 +01:00
< / pre > < / div >
< / div >
2022-07-23 11:56:03 +02:00
< ul class = "simple" >
< li > < p > To initialise database:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > docker-init
2022-07-23 11:56:03 +02:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Open < a class = "reference external" href = "http://localhost:5000" > http://localhost:5000< / a > and register.< / p > < / li >
< / ul >
2021-01-31 12:03:17 +01:00
< p > Open < a class = "reference external" href = "http://localhost:8025" > http://localhost:8025< / a > to access < a class = "reference external" href = "https://github.com/mailhog/MailHog" > MailHog interface< / a > (email testing tool)< / p >
< ul class = "simple" >
2022-03-27 15:11:12 +02:00
< li > < p > To set admin rights to the newly created account, use the following command line:< / p > < / li >
2022-02-13 09:52:34 +01:00
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > docker-set-admin< span class = "w" > < / span > < span class = "nv" > USERNAME< / span > < span class = "o" > =< / span > < username>
2022-02-13 09:52:34 +01:00
< / pre > < / div >
< / div >
2022-03-27 15:11:12 +02:00
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< p > If the user account is inactive, it activates it.< / p >
< / div >
2022-02-13 09:52:34 +01:00
< ul class = "simple" >
2021-01-31 12:03:17 +01:00
< li > < p > To stop < strong > Fittrackee< / strong > :< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > docker-stop
2021-01-31 12:03:17 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > To start < strong > Fittrackee< / strong > (application and dramatiq workers):< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > docker-run-all
2021-01-31 12:03:17 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > To run shell inside < strong > Fittrackee< / strong > container:< / p > < / li >
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > docker-shell
2021-01-31 12:03:17 +01:00
< / pre > < / div >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
2021-11-06 22:18:38 +01:00
< section id = "development" >
2023-06-18 15:02:21 +02:00
< h3 > Development< a class = "headerlink" href = "#development" title = "Permalink to this heading" > #< / a > < / h3 >
2021-10-17 09:28:56 +02:00
< div class = "versionadded" >
2021-11-06 22:18:38 +01:00
< p > < span class = "versionmodified added" > New in version 0.5.0.< / span > < / p >
2021-10-17 09:28:56 +02:00
< / div >
< ul class = "simple" >
2023-06-18 15:02:21 +02:00
< li > < p > an additional step is needed to install < code class = "docutils literal notranslate" > < span class = "pre" > fittrackee_client< / span > < / code > < / p > < / li >
2021-10-17 09:28:56 +02:00
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > docker-build-client
2021-10-17 09:28:56 +02:00
< / pre > < / div >
< / div >
< ul class = "simple" >
2021-11-06 22:18:38 +01:00
< li > < p > to start < strong > FitTrackee< / strong > with client dev tools:< / p > < / li >
2021-10-17 09:28:56 +02:00
< / ul >
2023-02-16 11:18:50 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > docker-serve-client
2021-10-17 09:28:56 +02:00
< / pre > < / div >
< / div >
2022-02-13 09:52:34 +01:00
< p > Open < a class = "reference external" href = "http://localhost:3000" > http://localhost:3000< / a > < / p >
2021-11-06 22:18:38 +01:00
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
2023-06-18 15:02:21 +02:00
< p > Some environment variables need to be updated like < code class = "docutils literal notranslate" > < span class = "pre" > UI_URL< / span > < / code > < / p >
2021-11-06 22:18:38 +01:00
< / div >
2022-07-23 11:56:03 +02:00
< ul class = "simple" >
< li > < p > to run lint or tests:< / p > < / li >
< / ul >
2023-11-19 16:38:53 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $< span class = "w" > < / span > make< span class = "w" > < / span > docker-lint-client< span class = "w" > < / span > < span class = "c1" > # run type check and lint on javascript files< / span >
2023-02-16 11:18:50 +01:00
$< span class = "w" > < / span > make< span class = "w" > < / span > docker-test-client< span class = "w" > < / span > < span class = "c1" > # run unit tests on Client< / span >
$< span class = "w" > < / span > make< span class = "w" > < / span > docker-lint-python< span class = "w" > < / span > < span class = "c1" > # run type check and lint on python files< / span >
$< span class = "w" > < / span > make< span class = "w" > < / span > docker-test-python< span class = "w" > < / span > < span class = "c1" > # run unit tests on API< / span >
2022-07-23 11:56:03 +02:00
< / pre > < / div >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< / section >
2023-04-12 17:32:08 +02:00
< section id = "yunohost" >
2023-06-18 15:02:21 +02:00
< h2 > Yunohost< a class = "headerlink" href = "#yunohost" title = "Permalink to this heading" > #< / a > < / h2 >
2023-04-12 17:32:08 +02:00
< p > A package is available, see < a class = "reference external" href = "https://github.com/YunoHost-Apps/fittrackee_ynh" > https://github.com/YunoHost-Apps/fittrackee_ynh< / a > .< / p >
< / section >
2021-11-06 21:26:02 +01:00
< / section >
2020-12-30 11:12:35 +01:00
2023-06-18 15:02:21 +02:00
< / article >
< / div >
< footer >
< div class = "related-pages" >
< a class = "next-page" href = "cli.html" >
< div class = "page-info" >
< div class = "context" >
< span > Next< / span >
< / div >
< div class = "title" > Command line interface< / div >
< / div >
< svg class = "furo-related-icon" > < use href = "#svg-arrow-right" > < / use > < / svg >
< / a >
< a class = "prev-page" href = "oauth.html" >
< svg class = "furo-related-icon" > < use href = "#svg-arrow-right" > < / use > < / svg >
< div class = "page-info" >
< div class = "context" >
< span > Previous< / span >
< / div >
< div class = "title" > OAuth 2.0< / div >
< / div >
< / a >
< / div >
< div class = "bottom-of-page" >
< div class = "left-details" >
< div class = "copyright" >
2024-02-04 17:12:04 +01:00
Copyright © 2018 - 2024, SamR1
2023-06-18 15:02:21 +02:00
< / div >
Made with < a href = "https://www.sphinx-doc.org/" > Sphinx< / a > and < a class = "muted-link" href = "https://pradyunsg.me" > @pradyunsg< / a > 's
< a href = "https://github.com/pradyunsg/furo" > Furo< / a >
< / div >
< div class = "right-details" >
< div class = "icons" >
< a class = "muted-link fa fa-github fa-lg" href = "https://github.com/SamR1/FitTrackee" aria-label = "GitHub" > < / a >
2023-06-28 08:44:42 +02:00
< a class = "muted-link fa fa-mastodon fa-lg" rel = "me" href = "https://fosstodon.org/@FitTrackee" aria-label = "Mastodon" > < / a >
2023-06-18 15:02:21 +02:00
< / div >
< / div >
< / div >
< / footer >
2020-12-30 11:12:35 +01:00
< / div >
2023-06-18 15:02:21 +02:00
< aside class = "toc-drawer" >
2020-12-30 11:12:35 +01:00
2023-06-18 15:02:21 +02:00
< div class = "toc-sticky toc-scroll" >
< div class = "toc-title-container" >
< span class = "toc-title" >
On this page
< / span >
< / div >
< div class = "toc-tree-container" >
< div class = "toc-tree" >
< ul >
< li > < a class = "reference internal" href = "#" > Installation< / a > < ul >
< li > < a class = "reference internal" href = "#prerequisites" > Prerequisites< / a > < / li >
< li > < a class = "reference internal" href = "#environment-variables" > Environment variables< / a > < ul >
< li > < a class = "reference internal" href = "#emails" > Emails< / a > < / li >
< li > < a class = "reference internal" href = "#map-tile-server" > Map tile server< / a > < / li >
< li > < a class = "reference internal" href = "#api-rate-limits" > API rate limits< / a > < / li >
< li > < a class = "reference internal" href = "#weather-data" > Weather data< / a > < / li >
< / ul >
< / li >
< li > < a class = "reference internal" href = "#id2" > Installation< / a > < ul >
< li > < a class = "reference internal" href = "#from-pypi" > From PyPI< / a > < / li >
< li > < a class = "reference internal" href = "#from-sources" > From sources< / a > < ul >
< li > < a class = "reference internal" href = "#dev-environment" > Dev environment< / a > < / li >
< li > < a class = "reference internal" href = "#production-environment" > Production environment< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
< li > < a class = "reference internal" href = "#upgrade" > Upgrade< / a > < ul >
< li > < a class = "reference internal" href = "#id3" > From PyPI< / a > < / li >
< li > < a class = "reference internal" href = "#id4" > From sources< / a > < ul >
< li > < a class = "reference internal" href = "#id5" > Dev environment< / a > < / li >
< li > < a class = "reference internal" href = "#prod-environment" > Prod environment< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
< li > < a class = "reference internal" href = "#deployment" > Deployment< / a > < / li >
< li > < a class = "reference internal" href = "#docker" > Docker< / a > < ul >
< li > < a class = "reference internal" href = "#id6" > Installation< / a > < / li >
< li > < a class = "reference internal" href = "#development" > Development< / a > < / li >
< / ul >
< / li >
< li > < a class = "reference internal" href = "#yunohost" > Yunohost< / a > < / li >
< / ul >
< / li >
< / ul >
2022-11-27 12:06:42 +01:00
2023-06-18 15:02:21 +02:00
< / div >
< / div >
< / div >
< / aside >
< / div >
2024-02-04 17:12:04 +01:00
< / div > < script data-url_root = "./" id = "documentation_options" src = "_static/documentation_options.js?v=65d44590" > < / script >
2023-07-30 17:05:25 +02:00
< script src = "_static/doctools.js?v=888ff710" > < / script >
< script src = "_static/sphinx_highlight.js?v=4825356b" > < / script >
< script src = "_static/scripts/furo.js?v=32e29ea5" > < / script >
< script src = "_static/clipboard.min.js?v=a7894cd8" > < / script >
< script src = "_static/copybutton.js?v=f281be69" > < / script >
2023-06-18 15:02:21 +02:00
< / body >
2020-12-30 11:12:35 +01:00
< / html >