mybuddy/docs/setup/deployment.md

7.3 KiB

Deployment

The default username and password for Baby Buddy is admin/admin. For any deployment, log in and change the default password immediately.

Many of Baby Buddy's configuration settings can be controlled using environment variables - see Configuration for detailed information.

Docker

Baby Buddy relies on the LinuxServer.io community for a multi-architecture container with strong support. See linuxserver/docker-babybuddy for detailed information about the container or use the following Docker Compose configuration as a template to get started quickly:

version: "2.1"
services:
  babybuddy:
    image: lscr.io/linuxserver/babybuddy
    container_name: babybuddy
    environment:
      - TZ=UTC
    volumes:
      - /path/to/appdata:/config
    ports:
      - 8000:8000
    restart: unless-stopped

See HTTPS/SSL configuration for information on how to secure Baby Buddy.

For doing administrative work within the LSIO container, setting an environment variable may be necessary. For example:

docker exec -it babybuddy /bin/bash
export DJANGO_SETTINGS_MODULE="babybuddy.settings.base"
python3 /app/babybuddy/manage.py clearsessions

Heroku

Deploy

For manual deployments to Heroku without using the "deploy" button, make sure to create the following settings before pushing:

heroku config:set DISABLE_COLLECTSTATIC=1
heroku config:set DJANGO_SETTINGS_MODULE=babybuddy.settings.heroku
heroku config:set SECRET_KEY=<CHANGE TO SOMETHING RANDOM>
heroku config:set TIME_ZONE=<DESIRED DEFAULT TIMEZONE>

See Configuration for other settings that can be controlled by heroku config:set.

After an initial push, execute the following commands:

heroku run python manage.py migrate
heroku run python manage.py createcachetable

Clever Cloud

To deploy on Clever Cloud, log in to your Clever Cloud console, create a Python application, link it to a PostgreSQL addon and optionally a Cellar S3 Storage addon (only if you want file storage for child picture in particular). Then make sure to set the following environment variables in your Python application before pushing the babybuddy source code:

CC_PYTHON_BACKEND=uwsgi
CC_PYTHON_MANAGE_TASKS=migrate, createcachetable
CC_PYTHON_MODULE=babybuddy.wsgi:application
DJANGO_SETTINGS_MODULE=babybuddy.settings.clever-cloud
SECRET_KEY=<CHANGE TO SOMETHING RANDOM>
TIME_ZONE=<DESIRED DEFAULT TIMEZONE>
AWS_STORAGE_BUCKET_NAME=<DESIRED BUCKET NAME> # only if file storage is needed

See Configuration for other environment variables available for your instance of babybuddy.

After that, you just have to push babybuddy code repository to the Git deployment URL of your Clever Cloud Python application.

Manual

There are many ways to deploy Baby Buddy manually to any server/VPS. The basic requirements are Python, a web server, an application server, and a database.

Requirements

Example deployment

This example assumes a 1 GB VPS instance with Ubuntu 20.04. It uses Python 3.8, nginx, uwsgi and sqlite. It should be sufficient for a few users (e.g., two parents and any number of children).

  1. Install system packages

    sudo apt-get install python3 python3-pip nginx uwsgi uwsgi-plugin-python3 git libopenjp2-7-dev libpq-dev
    
  2. Default python3 to python for this session

    alias python=python3
    
  3. Install pipenv

    sudo -H pip3 install pipenv
    
  4. Set up directories and files

    sudo mkdir /var/www/babybuddy
    sudo chown $USER:$(id -gn $USER) /var/www/babybuddy
    mkdir -p /var/www/babybuddy/data/media
    git clone https://github.com/babybuddy/babybuddy.git /var/www/babybuddy/public
    
  5. Move in to the application folder

    cd /var/www/babybuddy/public
    
  6. Initiate and enter a Python environment with Pipenv locally.

    export PIPENV_VENV_IN_PROJECT=1
    pipenv install --three
    pipenv shell
    
  7. Create a production settings file and set the SECRET_KEY and ALLOWED_HOSTS values

    cp babybuddy/settings/production.example.py babybuddy/settings/production.py
    editor babybuddy/settings/production.py
    
  8. Initiate the application

    export DJANGO_SETTINGS_MODULE=babybuddy.settings.production
    python manage.py migrate
    python manage.py createcachetable
    
  9. Set appropriate permissions on the database and data folder

    sudo chown -R www-data:www-data /var/www/babybuddy/data
    sudo chmod 640 /var/www/babybuddy/data/db.sqlite3
    sudo chmod 750 /var/www/babybuddy/data
    
  10. Create and configure the uwsgi app

    sudo editor /etc/uwsgi/apps-available/babybuddy.ini
    

    Example config:

    [uwsgi]
    plugins = python3
    project = babybuddy
    base_dir = /var/www/babybuddy
    
    chdir = %(base_dir)/public
    virtualenv = %(chdir)/.venv
    module =  %(project).wsgi:application
    env = DJANGO_SETTINGS_MODULE=%(project).settings.production
    master = True
    vacuum = True
    

    See the uWSGI documentation for more advanced configuration details.

    See Subdirectory configuration for additional configuration required if Baby Buddy will be hosted in a subdirectory of another server.

  11. Symlink config and restart uWSGI:

    sudo ln -s /etc/uwsgi/apps-available/babybuddy.ini /etc/uwsgi/apps-enabled/babybuddy.ini
    sudo service uwsgi restart
    
  12. Create and configure the nginx server

    sudo editor /etc/nginx/sites-available/babybuddy
    

    Example config:

    upstream babybuddy {
     server unix:///var/run/uwsgi/app/babybuddy/socket;
    }
    
    server {
     listen 80;
     server_name babybuddy.example.com;
    
     location / {
        uwsgi_pass babybuddy;
        include uwsgi_params;
     }
    
     location /media {
        alias /var/www/babybuddy/data/media;
     }
    }
    

    See the nginx documentation for more advanced configuration details.

    See Subdirectory configuration for additional configuration required if Baby Buddy will be hosted in a subdirectory of another server.

  13. Symlink config and restart NGINX:

    sudo ln -s /etc/nginx/sites-available/babybuddy /etc/nginx/sites-enabled/babybuddy
    sudo service nginx restart
    
  14. That's it (hopefully)!

See HTTPS/SSL configuration for information on how to secure Baby Buddy.