Free and open source ticket system written in python
Deploying paw with Docker Compose#
Prerequisites#
- Docker installed on your machine
- Docker Compose plugin installed on your machine
Deployment with sqlite database#
Example docker-compose.yml file:
services:
paw:
image: ghcr.io/aottr/paw:latest
command: gunicorn paw.wsgi:application --bind 0.0.0.0:8000
container_name: paw-ticket-system
restart: unless-stopped
ports:
- "127.0.0.1:8000:8000"
volumes:
- db:/usr/src/app/data
- media:/usr/src/app/media
- secure_media:/usr/src/app/secure_media # storage for ticket attachments
environment:
- DATABASE_ENGINE=sqlite3
- DEBUG=true
- ALLOWED_HOSTS=example.org,example.com
- SECRET_KEY=your-secret-key
The env variable DATABASE_ENGINE must be set to sqlite3, otherwise paw expects database credentials and another supported engine, e.g. postgresql
Production Deployment#
If, for whatever reason, a production deployment should be used with sqlite3, the media files need to be served with a webserver / reverse proxy, e.g. nginx. This should also happen with static files.
For this we slightly modify the deployment volumes:
volumes:
- /opt/paw/data:/usr/src/app/data
- /opt/paw/media:/usr/src/app/media
- /opt/paw/static:/usr/src/app/static
- /opt/paw/secure_media:/usr/src/app/secure_media # storage for ticket attachments
Now you write directives in your config to host these files, the following snipped shows an example nginx config:
Example nginx config#
upstream paw {
server localhost:8000;
}
server {
server_name example.org example.com
listen 80;
listen [::]:80;
location /media/ {
# media files, uploaded by us (profile pictures, etc.)
alias /opt/paw/media/; # ending slash is required
}
location /static/ {
# static files, uploaded by the system
alias /opt/paw/static/; # ending slash is required
}
location / {
proxy_pass http://paw;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
Example Caddyfile#
example.com {
handle /static/* {
file_server /opt/paw/static/*
}
handle /media/* {
file_server /opt/paw/media/*
}
handle {
reverse_proxy 127.0.0.1:8000
}
}
That's it! You have successfully deployed your project using Docker Compose.