2020-12-30 11:12:35 +01:00
<!DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" / >
2021-11-03 12:41:23 +01:00
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" / > < meta name = "generator" content = "Docutils 0.17.1: http://docutils.sourceforge.net/" / >
2022-04-09 11:01:20 +02:00
< title > Installation — FitTrackee 0.6.3
2020-12-30 11:12:35 +01:00
documentation< / title >
2021-11-06 21:26:02 +01:00
< link rel = "stylesheet" type = "text/css" href = "_static/pygments.css" / >
< link rel = "stylesheet" type = "text/css" href = "_static/bootstrap-sphinx.css" / >
2020-12-30 11:12:35 +01:00
< link rel = "stylesheet" type = "text/css" href = "_static/custom.css" / >
2021-11-06 21:26:02 +01:00
< script data-url_root = "./" id = "documentation_options" src = "_static/documentation_options.js" > < / script >
2020-12-30 11:12:35 +01:00
< script src = "_static/jquery.js" > < / script >
< script src = "_static/underscore.js" > < / script >
< script src = "_static/doctools.js" > < / script >
< link rel = "index" title = "Index" href = "genindex.html" / >
< link rel = "search" title = "Search" href = "search.html" / >
2021-11-29 18:24:22 +01:00
< link rel = "next" title = "API documentation" href = "api/index.html" / >
< link rel = "prev" title = "Features" href = "features.html" / >
2020-12-30 11:12:35 +01:00
< meta charset = 'utf-8' >
< meta http-equiv = 'X-UA-Compatible' content = 'IE=edge,chrome=1' >
< meta name = 'viewport' content = 'width=device-width, initial-scale=1.0, maximum-scale=1' >
< meta name = "apple-mobile-web-app-capable" content = "yes" >
2022-02-05 22:09:17 +01:00
< script type = "text/javascript" src = "_static/js/jquery-1.12.4.min.js" > < / script >
< script type = "text/javascript" src = "_static/js/jquery-fix.js" > < / script >
< script type = "text/javascript" src = "_static/bootstrap-3.4.1/js/bootstrap.min.js" > < / script >
< script type = "text/javascript" src = "_static/bootstrap-sphinx.js" > < / script >
2020-12-30 11:12:35 +01:00
< / head > < body >
< div id = "navbar" class = "navbar navbar-default navbar-fixed-top" >
< div class = "container" >
< div class = "navbar-header" >
<!-- .btn - navbar is used as the toggle for collapsed navbar content -->
< button type = "button" class = "navbar-toggle" data-toggle = "collapse" data-target = ".nav-collapse" >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< / button >
< a class = "navbar-brand" href = "index.html" >
FitTrackee< / a >
2022-04-09 11:01:20 +02:00
< span class = "navbar-text navbar-version pull-left" > < b > 0.6.3
2020-12-30 11:12:35 +01:00
< / b > < / span >
< / div >
< div class = "collapse navbar-collapse nav-collapse" >
< ul class = "nav navbar-nav" >
< li > < a href = "https://github.com/SamR1/FitTrackee" > GitHub< / a > < / li >
< li class = "dropdown globaltoc-container" >
< a role = "button"
id="dLabelGlobalToc"
data-toggle="dropdown"
data-target="#"
href="index.html">Docs < b class = "caret" > < / b > < / a >
< ul class = "dropdown-menu globaltoc"
role="menu"
aria-labelledby="dLabelGlobalToc">< ul class = "current" >
< li class = "toctree-l1" > < a class = "reference internal" href = "features.html" > Features< / a > < / li >
2021-11-29 18:24:22 +01:00
< li class = "toctree-l1 current" > < a class = "current reference internal" href = "#" > Installation< / a > < / li >
2020-12-30 11:12:35 +01:00
< li class = "toctree-l1" > < a class = "reference internal" href = "api/index.html" > API documentation< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "troubleshooting/index.html" > Troubleshooting< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "changelog.html" > Change log< / a > < / li >
< / ul >
< / ul >
< / li >
< li class = "dropdown" >
< a role = "button"
id="dLabelLocalToc"
data-toggle="dropdown"
data-target="#"
href="#">Page < b class = "caret" > < / b > < / a >
< ul class = "dropdown-menu localtoc"
role="menu"
aria-labelledby="dLabelLocalToc">< 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 >
< / ul >
< / li >
2022-02-05 22:09:17 +01:00
< li > < a class = "reference internal" href = "#id1" > Installation< / a > < ul >
< li > < a class = "reference internal" href = "#from-pypi" > From PyPI< / a > < / li >
2020-12-30 11:12:35 +01:00
< 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 >
2022-02-05 22:09:17 +01:00
< / ul >
< / li >
< li > < a class = "reference internal" href = "#upgrade" > Upgrade< / a > < ul >
< li > < a class = "reference internal" href = "#id2" > From PyPI< / a > < / li >
< li > < a class = "reference internal" href = "#id3" > From sources< / a > < ul >
2020-12-30 11:12:35 +01:00
< li > < a class = "reference internal" href = "#id4" > 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 >
2021-10-17 09:28:56 +02:00
< li > < a class = "reference internal" href = "#docker" > Docker< / a > < ul >
< li > < a class = "reference internal" href = "#id5" > Installation< / a > < / li >
2021-11-06 22:18:38 +01:00
< li > < a class = "reference internal" href = "#development" > Development< / a > < / li >
2021-10-17 09:28:56 +02:00
< / ul >
< / li >
2020-12-30 11:12:35 +01:00
< / ul >
< / li >
< / ul >
< / ul >
< / li >
< li >
2021-11-29 18:24:22 +01:00
< a href = "features.html" title = "Previous Chapter: Features" > < span class = "glyphicon glyphicon-chevron-left visible-sm" > < / span > < span class = "hidden-sm hidden-tablet" > « Features< / span >
2020-12-30 11:12:35 +01:00
< / a >
< / li >
< li >
2021-11-29 18:24:22 +01:00
< a href = "api/index.html" title = "Next Chapter: API documentation" > < span class = "glyphicon glyphicon-chevron-right visible-sm" > < / span > < span class = "hidden-sm hidden-tablet" > API documentation » < / span >
2020-12-30 11:12:35 +01:00
< / a >
< / li >
< li class = "hidden-sm" >
< div id = "sourcelink" >
< a href = "_sources/installation.rst.txt"
rel="nofollow">Source< / a >
< / div > < / li >
< / ul >
< form class = "navbar-form navbar-right" action = "search.html" method = "get" >
< div class = "form-group" >
< input type = "text" name = "q" class = "form-control" placeholder = "Search" / >
< / div >
< input type = "hidden" name = "check_keywords" value = "yes" / >
< input type = "hidden" name = "area" value = "default" / >
< / form >
< / div >
< / div >
< / div >
< div class = "container" >
< div class = "row" >
< div class = "body col-md-12 content" role = "main" >
2021-11-06 21:26:02 +01:00
< section id = "installation" >
2020-12-30 11:12:35 +01:00
< h1 > Installation< a class = "headerlink" href = "#installation" title = "Permalink to this headline" > ¶< / 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://github.com/ZeevG/python-forecast.io" > python-forecast.io< / a > to fetch weather data from < a class = "reference external" href = "https://darksky.net" > Dark Sky< / a > (former forecast.io)< / p > < / li >
< li > < p > < a class = "reference external" href = "https://flask-dramatiq.readthedocs.io/en/latest/" > dramatiq< / a > for task queue< / p > < / li >
< / 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" >
2020-12-30 11:12:35 +01:00
< h2 > Prerequisites< a class = "headerlink" href = "#prerequisites" title = "Permalink to this headline" > ¶< / a > < / h2 >
< ul class = "simple" >
< li > < p > Python 3.7+< / p > < / li >
2022-04-09 10:21:57 +02:00
< li > < p > PostgreSQL database (10+)< / p > < / li >
2020-12-30 11:12:35 +01:00
< li > < p > SMTP provider< / p > < / li >
2022-04-09 10:21:57 +02:00
< li > < p > Redis for task queue (to send emails)< / p > < / li >
< li > < p > API key from < a class = "reference external" href = "https://darksky.net/dev" > Dark Sky< / a > [not mandatory]< / p > < / li >
< li > < p > < a class = "reference external" href = "https://poetry.eustace.io" > Poetry< / a > (for installation from sources only)< / p > < / li >
2020-12-30 11:12:35 +01:00
< li > < p > < 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 >
< div class = "admonition note" >
< p class = "admonition-title" > Note< / p >
< div class = "line-block" >
< 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" >
2020-12-30 11:12:35 +01:00
< h2 > Environment variables< a class = "headerlink" href = "#environment-variables" title = "Permalink to this headline" > ¶< / a > < / h2 >
< 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" >
< 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" >
< 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" >
< dt class = "field-odd" > Default< / dt >
< dd class = "field-odd" > < p > 0.0.0.0< / 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-PORT" >
< 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" >
< dt class = "field-odd" > Default< / dt >
< 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" >
< 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" >
< dt class = "field-odd" > Default< / dt >
< dd class = "field-odd" > < p > fittrackee.config.ProductionConfig< / 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_SECRET_KEY" >
< 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 >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-APP_WORKERS" >
< 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" >
< dt class = "field-odd" > Default< / dt >
< 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" >
< 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" >
< 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 >
< p > Directory containing uploaded files.< / p >
< dl class = "field-list simple" >
< dt class = "field-odd" > Default< / dt >
< dd class = "field-odd" > < p > < cite > fittrackee/uploads/< / cite > < / p >
< / 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" >
< 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 > ,
engine URL should begin with < cite > postgresql://< / cite > .< / 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" >
< 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" >
< dt class = "field-odd" > Default< / dt >
< dd class = "field-odd" > < p > false< / 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-UI_URL" >
< 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" >
< 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 >
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" >
< 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" >
< 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 >
< p > Redis instance used by < strong > Dramatiq< / strong > .< / p >
< dl class = "field-list simple" >
< dt class = "field-odd" > Default< / dt >
< 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" >
< 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 >
< dl class = "std envvar" >
2021-11-06 21:26:02 +01:00
< dt class = "sig sig-object std" id = "envvar-TILE_SERVER_URL" >
< 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 >
2020-12-30 11:12:35 +01:00
< dl class = "field-list simple" >
< dt class = "field-odd" > Default< / dt >
< dd class = "field-odd" > < p > < cite > https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png< / cite > < / 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-MAP_ATTRIBUTION" >
< 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" >
< dt class = "field-odd" > Default< / dt >
< dd class = "field-odd" > < p > < cite > & copy; < a href=”http://www.openstreetmap.org/copyright” target=”_blank” rel=”noopener noreferrer”> OpenStreetMap< /a> contributors< / cite > < / p >
< / 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" >
< span id = "envvar-DEFAULT_STATICMAP 🆕" > < / span > < span class = "sig-name descname" > < span class = "pre" > DEFAULT_STATICMAP< / span > < span class = "pre" > 🆕< / 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 >
< p > If < cite > True< / cite > , it keeps using default tile server to generate static maps.< / p >
< dl class = "field-list simple" >
< dt class = "field-odd" > Default< / dt >
< dd class = "field-odd" > < p > False< / 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-WEATHER_API_KEY" >
< 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 >
< p > < strong > Dark Sky< / strong > API key for weather data (not mandatory).< / p >
< / dd > < / dl >
< dl class = "std envvar" >
2021-11-06 22:18:38 +01:00
< dt class = "sig sig-object std" id = "envvar-VUE_APP_API_URL" >
< span class = "sig-name descname" > < span class = "pre" > VUE_APP_API_URL< / span > < / span > < a class = "headerlink" href = "#envvar-VUE_APP_API_URL" title = "Permalink to this definition" > ¶< / a > < / dt >
2020-12-30 11:12:35 +01:00
< dd > < p > < strong > FitTrackee< / strong > API URL, only needed in dev environment.< / p >
< / dd > < / dl >
2021-11-06 21:26:02 +01:00
< section id = "emails" >
2020-12-30 11:12:35 +01:00
< h3 > Emails< a class = "headerlink" href = "#emails" title = "Permalink to this headline" > ¶< / a > < / h3 >
< 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" >
< div class = "line" > If the email URL is invalid, the application may not start.< / div >
< / div >
< / div >
2022-01-01 11:04:08 +01:00
< div class = "versionadded" >
< p > < span class = "versionmodified added" > New in version 0.5.3.< / span > < / p >
< / 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 >
< li > < p > email change (to old and new email adresses)< / p > < / li >
< li > < p > password change< / p > < / li >
< / ul >
2021-11-06 21:26:02 +01:00
< / section >
< section id = "map-tile-server" >
2020-12-30 11:12:35 +01:00
< h3 > Map tile server< a class = "headerlink" href = "#map-tile-server" title = "Permalink to this headline" > ¶< / a > < / h3 >
< 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).
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/Tile_servers" > list of tile servers< / a > ).< / p >
< 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" >
< div class = "line" > Check the terms of service of tile provider for map attribution< / div >
< / div >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< / section >
2022-02-05 22:09:17 +01:00
< section id = "id1" >
< h2 > Installation< a class = "headerlink" href = "#id1" title = "Permalink to this headline" > ¶< / a > < / h2 >
< 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 >
2021-11-06 21:26:02 +01:00
< section id = "from-pypi" >
2022-02-05 22:09:17 +01:00
< h3 > From PyPI< a class = "headerlink" href = "#from-pypi" title = "Permalink to this headline" > ¶< / 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ pip install fittrackee
< / 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 >
2022-01-01 19:44:45 +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" > DATABASE< / span > < span class = "w" > < / span > < span class = "n" > fittrackee< / span > < span class = "p" > ;< / span > < span class = "w" > < / 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 = "w" > < / span >
< span class = "k" > GRANT< / span > < span class = "w" > < / span > < span class = "k" > ALL< / span > < span class = "w" > < / span > < span class = "k" > PRIVILEGES< / span > < span class = "w" > < / span > < span class = "k" > ON< / 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" > TO< / span > < span class = "w" > < / span > < span class = "n" > fittrackee< / span > < span class = "p" > ;< / span > < span class = "w" > < / span >
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ nano .env
$ < span class = "nb" > source< / span > .env
< / 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ fittrackee_upgrade_db
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Start the application< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ fittrackee
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Start task queue workers< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ fittrackee_worker --processes < span class = "m" > 2< / span >
< / 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" >
< 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ fittrackee_set_admin < username>
< / 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" >
2022-02-05 22:09:17 +01:00
< h3 > From sources< a class = "headerlink" href = "#from-sources" title = "Permalink to this headline" > ¶< / a > < / h3 >
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.2.1, Python packages installation needs Poetry.< / div >
< div class = "line" > To install it on ArchLinux:< / div >
< / div >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ yay poetry
$ poetry --version
2021-07-17 12:37:47 +02:00
Poetry < span class = "m" > 1< / span > .0.17
2020-12-30 11:12:35 +01:00
< span class = "c1" > # optional< / span >
$ poetry config virtualenvs.in-project < span class = "nb" > true< / span >
< / pre > < / div >
< / div >
< p > For other OS, see < a class = "reference external" href = "https://python-poetry.org/docs/#installation" > Poetry Documentation< / a > < / p >
< / div >
2021-11-06 21:26:02 +01:00
< section id = "dev-environment" >
2020-12-30 11:12:35 +01:00
< h4 > Dev environment< a class = "headerlink" href = "#dev-environment" title = "Permalink to this headline" > ¶< / a > < / h4 >
< ul class = "simple" >
< li > < p > Clone this repo:< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ git clone https://github.com/SamR1/FitTrackee.git
$ < span class = "nb" > cd< / span > FitTrackee
< / 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make install-dev
$ make install-db
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Start the server and the client:< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make serve
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Run dramatiq workers:< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make run-workers
< / 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 >
2022-02-13 16:08:48 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make set-admin < 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" >
2020-12-30 11:12:35 +01:00
< h4 > Production environment< a class = "headerlink" href = "#production-environment" title = "Permalink to this headline" > ¶< / a > < / h4 >
< 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" >
2022-04-09 11:01:20 +02:00
< li > < p > Download the last release (for now, it is the release v0.6.3):< / p > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
2022-04-09 11:01:20 +02:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.3.tar.gz
$ tar -xzf v0.6.3.tar.gz
$ mv FitTrackee-0.6.3 FitTrackee
2020-12-30 11:12:35 +01:00
$ < span class = "nb" > cd< / span > FitTrackee
< / 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make install-python
< / 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make install-db
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Start the server and dramatiq workers:< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make run
< / pre > < / div >
< / 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 >
2022-02-13 16:08:48 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make set-admin < 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" >
< h2 > Upgrade< a class = "headerlink" href = "#upgrade" title = "Permalink to this headline" > ¶< / 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 >
2022-02-05 22:09:17 +01:00
< section id = "id2" >
< h3 > From PyPI< a class = "headerlink" href = "#id2" title = "Permalink to this headline" > ¶< / a > < / h3 >
< 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ pip install -U fittrackee
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Update environment variables if needed and source environment variables file< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ nano .env
$ < span class = "nb" > source< / span > .env
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Upgrade database if needed (see changelog for migrations):< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ fittrackee_upgrade_db
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Restart the application and task queue workers.< / p > < / li >
< / ul >
< / section >
< section id = "id3" >
< h3 > From sources< a class = "headerlink" href = "#id3" title = "Permalink to this headline" > ¶< / a > < / h3 >
2021-11-06 21:26:02 +01:00
< section id = "id4" >
2020-12-30 11:12:35 +01:00
< h4 > Dev environment< a class = "headerlink" href = "#id4" title = "Permalink to this headline" > ¶< / a > < / h4 >
< ul class = "simple" >
< li > < p > Stop the application and pull the repository:< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ git pull
< / 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make upgrade-db
2020-12-30 11:12:35 +01:00
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Restart the server:< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make serve
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Run dramatiq workers:< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make run-workers
< / pre > < / div >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< section id = "prod-environment" >
2020-12-30 11:12:35 +01:00
< h4 > Prod environment< a class = "headerlink" href = "#prod-environment" title = "Permalink to this headline" > ¶< / a > < / h4 >
< 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 >
2022-04-09 11:01:20 +02:00
< li > < p > Download the last release (for now, it is the release v0.6.3) and overwrite existing files:< / p > < / li >
2020-12-30 11:12:35 +01:00
< / ul >
2022-04-09 11:01:20 +02:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.3.tar.gz
$ tar -xzf v0.6.3.tar.gz
$ cp -R FitTrackee-0.6.3/* FitTrackee/
2021-07-17 12:37:47 +02:00
$ < span class = "nb" > cd< / 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 >
2022-02-05 22:09:17 +01:00
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make install-dev
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > Upgrade database if needed (see changelog for migrations):< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make run
< / pre > < / div >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< / section >
< / section >
< section id = "deployment" >
2020-12-30 11:12:35 +01:00
< h2 > Deployment< a class = "headerlink" href = "#deployment" title = "Permalink to this headline" > ¶< / a > < / h2 >
< 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 >
< p > Examples (to update depending on your application configuration and given distribution):< / p >
< 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 >
< 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 >
< p > More information on < a class = "reference external" href = "https://docs.gunicorn.org/en/stable/deploy.html" > Gunicorn documentation< / a > < / p >
< / 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;
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;
}
}
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" >
2021-01-31 12:03:17 +01:00
< h2 > Docker< a class = "headerlink" href = "#docker" title = "Permalink to this headline" > ¶< / a > < / h2 >
2021-11-06 21:26:02 +01:00
< section id = "id5" >
2021-10-17 09:28:56 +02:00
< h3 > Installation< a class = "headerlink" href = "#id5" title = "Permalink to this headline" > ¶< / 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 >
2022-04-09 10:21:57 +02:00
< p > For evaluation 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" >
< li > < p > To install < strong > FitTrackee< / strong > with database initialisation and run the application and dramatiq workers:< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ git clone https://github.com/SamR1/FitTrackee.git
$ < span class = "nb" > cd< / span > FitTrackee
$ make docker-build docker-run docker-init
< / pre > < / div >
< / div >
2022-02-13 09:52:34 +01:00
< p > Open < a class = "reference external" href = "http://localhost:5000" > http://localhost:5000< / a > and register.< / p >
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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make docker-set-admin < span class = "nv" > USERNAME< / span > < span class = "o" > =< / span > < username>
< / 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make docker-stop
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > To start < strong > Fittrackee< / strong > (application and dramatiq workers):< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make docker-run-all
< / pre > < / div >
< / div >
< ul class = "simple" >
< li > < p > To run shell inside < strong > Fittrackee< / strong > container:< / p > < / li >
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make docker-shell
< / pre > < / div >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
2021-11-06 22:18:38 +01:00
< section id = "development" >
< h3 > Development< a class = "headerlink" href = "#development" title = "Permalink to this headline" > ¶< / 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" >
2022-02-05 22:09:17 +01:00
< li > < p > an additional step is needed to install < cite > fittrackee_client< / cite > < / p > < / li >
2021-10-17 09:28:56 +02:00
< / ul >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make docker-build-client
< / 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 >
< div class = "highlight-bash notranslate" > < div class = "highlight" > < pre > < span > < / span > $ make docker-serve-client
< / 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 >
< p > Some environment variables need to be updated like < cite > UI_URL< / cite > < / p >
< / div >
2021-11-06 21:26:02 +01:00
< / section >
< / section >
< / section >
2020-12-30 11:12:35 +01:00
< / div >
< / div >
< / div >
< footer class = "footer" >
< div class = "container" >
< p class = "pull-right" >
< a href = "#" > Back to top< / a >
< / p >
< p >
2022-01-01 19:44:45 +01:00
© Copyright 2018 - 2022, SamR1.< br / >
2022-04-03 19:47:40 +02:00
Created using < a href = "http://sphinx-doc.org/" > Sphinx< / a > 4.5.0.< br / >
2020-12-30 11:12:35 +01:00
< / p >
< / div >
< / footer >
< / body >
< / html >