Gitmanager is a service for building and validating courses, and configuring other services in the A+ ecosystem. The courses are loaded through git, and then automatically built inside a configurable container. If the build passes validation, the course and its exercises are configured on A+ and compatible grading services.
The application is implemented on Django 3.2 (gitmanager/settings.py
) and
requires Python 3.7+.
Gitmanager can be run stand alone without the full stack to test any part of
the process in the local system environment. Course and exercise
configuration is in COURSES_PATH directory (defaults to courses
) once built and published.
Course files are downloaded using git to the BUILD_PATH directory, where the course is then built. If the build is successfull, the course directory is then copied to the STORE_PATH directory. That directory is solely for storage, that version of the course is not available until the course is published. The course is published by A+ when A+ fetches and updates the course configuration. Once the course is published, the built course is copied from the STORE_PATH directory to the COURSES_PATH directory.
You may run the app with Docker without installing the whole software stack locally. It is easy to get started with the aplus-manual course: apluslms/aplus-manual. The dockerfile in .github/workflows should contain everything needed to run the application.
General requirements
sudo apt-get install git libjpeg-dev
sudo apt-get install libxml2-dev libxslt-dev zlib1g-dev
Install software
git clone https://github.com/apluslms/gitmanager.git
sudo apt-get install python3 python3-dev python3-pip python3-venv
Then, create virtual environment with gitmanager requirements.
python3 -m venv venv
source venv/bin/activate
pip install wheel
pip install -r gitmanager/requirements.txt
Run the Django app locally:
cd gitmanager
python manage.py runserver
On a server, one can install gitmanager for a specific gitmanager user account.
sudo adduser --system --group \
--shell /bin/bash --home /srv/gitmanager \
--gecos "A-plus gitmanager service" \
gitmanager
su - gitmanager
Then follow the "Installing for development" and continue from here.
echo "d /run/gitmanager 0750 gitmanager www-data - -" | \
sudo tee /etc/tmpfiles.d/gitmanager.conf > /dev/null
sudo systemd-tmpfiles --create
Install uwsgi to run WSGI processes. The gitmanager directory and user must be set in the configuration files.
source ~/venv/bin/activate
pip install uwsgi
cp ~/gitmanager/doc/etc-uwsgi-gitmanager.ini ~/gitmanager-uwsgi.ini
sudo cp ~/gitmanager/doc/etc-systemd-system-uwsgi.service /etc/systemd/system/gitmanager-uwsgi.service
# EDIT ~/gitmanager-uwsgi.ini
# EDIT /etc/systemd/system/gitmanager-uwsgi.service, set the correct uwsgi path to ExecStart
Operate the workers:
# as root
systemctl status gitmanager-uwsgi
systemctl start gitmanager-uwsgi
systemctl enable gitmanager-uwsgi # start on boot
# Graceful application reload
touch ~/gitmanager-uwsgi.ini
apt-get install nginx
sed -e "s/__HOSTNAME__/$(hostname)/g" \
~/gitmanager/doc/etc-nginx-sites-available-gitmanager > \
/etc/nginx/sites-available/$(hostname).conf
ln -s ../sites-available/$(hostname).conf /etc/nginx/sites-enabled/$(hostname).conf
# Edit /etc/nginx/sites-available/$(hostname).conf if necessary
# Check nginx config validity
nginx -t
systemctl reload nginx
apt-get install apache2 libapache2-mod-uwsgi
# Configure based on doc/etc-apache2-sites-available-gitmanager
a2enmod headers
See DEPLOYMENT.md in the docs folder.