Self-Hosting Wger Workout Manager
654 words ยท 4 minutes
Wger: The Self-Hosted Workout Manager
Wger Workout Manager is a fitness tracking tool for those who enjoy self-hosting their data. You can also register an account on their main website if you'd prefer to try without self-hosting.
Features
I didn't see a full listing of features anywhere, so I compiled this list of my own after installing wger:
Dashboard
- Dashboard view of Workout Schedule, Nutrition Plan, Weight Graph, & last 5 Weight Logs
Training
- Workout Log
- Workout Schedule
- Calendar (shows weight logs and Bad/Neutral/Good days)
- Gallery (shows images you upload)
- Workout templates
- Public templates
- Exercises
Nutrition
- Nutrition plans
- BMI calculator
- Daily calories calculator
- Ingredient overview
Body Weight
- Weight overview
Documentation
In order to self-host wger, I opted to use the Docker version of the application. You can read the README within the wger-project/docker project on GitHub for information and installation instructions.
Installation
To start the installation, I created a folder for wger and started creating the three necessary files:
&&
&& \
&& \
Once you have the folders and files created, you will need to copy the contents of the docker-compose.yml
, prod.env
, and nginx.conf
from the GitHub link above.
A few notes to explain the changes I made to the default files:
- I updated the
ALLOW_REGISTRAION
variable inprod.env
toFalse
after I created an account via my LAN connection, before I connected this app to a publicly-available domain. - I uncommented and updated
CSRF_TRUSTED_ORIGINS
to be equal to the public version of this app:https://wger.example.com
. - I updated the port within
docker-compose.yml
, within thenginx
block. The port I updated this to will be reflected in my nginx configuration file on the server (NOT the wger nginx.conf file).
Deploy
Once all files are created and modified to your needs, simply start the container.
You can now visit the website on your LAN by going to localhost:YOUR_PORT
or by the server's IP, if you're not on the same machine that is running the container.
If you wish to connect this app to a public domain name, you'll need to point an A
DNS record from the domain to your server's public IP. You'll then need to create a configuration file for whichever web server or reverse proxy you're using.
Wger's README suggests the following reverse proxy configuration for Nginx:
server {
80;
[::]:443 ssl;
443 ssl;
location / {
;
Host $http_host;
X-Real-IP $remote_addr;
X-Forwarded-For $proxy_add_x_forwarded_for;
X-Forwarded-Proto $scheme;
off;
}
my.domain.example.com;
/path/to/https/certificate.crt;
/path/to/https/certificate.key;
}
wger {
;
}
Thoughts on Wger
I'm still playing around with the app itself, but it seems to be a solid all-around workout manager, weight log, and food log.
I like that the weight log graph is fluid and updates quickly. You can also import or export data in CSV format if you'd like to move your data elsewhere.
The workout manager is slightly odd, as it requires you to enter sets and reps for each exercise when you enter it into the plan. Then, when you add a log entry for performing a workout, you then add what you actually performed, in terms of reps and weight.
I haven't tried the food log yet and I likely will not, at least for a while. I have no need for a food log or calorie tracker at the moment.
Screenshot Example
You can see an example of a dashboard with placeholder data here: