Stread's Blog

Deploy Moodle With Dokku

Step-by-Step Deployment

1. Create the Dokku Application

1# On your Dokku server
2dokku apps:create moodle

2. Set Up MariaDB Database

Install and configure MariaDB:

1# Install MariaDB plugin (if not already installed)
2sudo dokku plugin:install https://github.com/dokku/dokku-mariadb.git --name mariadb
3
4# Create database service
5dokku mariadb:create moodle_db
6
7# Link database to app
8dokku mariadb:link moodle_db moodle

This creates a database and exposes connection details via DATABASE_URL environment variable.

3. Create persistent storage volumes

1dokku storage:ensure-directory moodle
2dokku storage:mount moodle /var/lib/dokku/data/storage/moodle/moodle:/bitnami/moodle
3dokku storage:mount moodle /var/lib/dokku/data/storage/moodle/moodledata:/bitnami/moodledata

4. Configure Environment Variables

Environment variables we need:

MOODLE_DATABASE_HOST:      dokku-mariadb-moodle-db
MOODLE_DATABASE_NAME:      moodle_db
MOODLE_DATABASE_PASSWORD:  f6df4ac7bebb0884
MOODLE_DATABASE_TYPE:      mariadb
MOODLE_DATABASE_USER:      mariadb
MOODLE_EMAIL:              [email protected]
MOODLE_PASSWORD:           your_secure_password
MOODLE_SITE_NAME:          Moodle
MOODLE_USERNAME:           admin

You can parse database information from DATABASE_URL.

 1dokku config:get moodle DATABASE_URL
 2#mysql://mariadb:f6df4ac7bebb0884@dokku-mariadb-moodle-db:3306/moodle_db
 3dokku config:set moodle \
 4  MOODLE_DATABASE_HOST=dokku-mariadb-moodle-db \
 5  MOODLE_DATABASE_NAME=moodle_db \
 6  MOODLE_DATABASE_USER=mariadb \
 7  MOODLE_DATABASE_TYPE=mariadb \
 8  MOODLE_EMAIL=[email protected] \
 9  MOODLE_PASSWORD=your_secure_password \
10  MOODLE_SITE_NAME=Moodle\
11  MOODLE_USERNAME=admin\
12  MOODLE_DATABASE_PASSWORD=f6df4ac7bebb0884

5. Deploy using the Bitnami image

1dokku docker-options:add moodle deploy "--restart=always"
2dokku git:from-image moodle bitnami/moodle:latest

6. Fix port mapping

1dokku ports:add moodle http:80:8080
2dokku ports:add moodle https:443:8443

7. Configure domain (Optional)

1dokku domains:add moodle moodle.stread.dev

8. Setup SSL with Let’s Encrypt

1#Installation
2sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
3sudo dokku letsencrypt:cron-job --add # <- To enable auto-renew
4dokku letsencrypt:set --global email [email protected] # Set email for letsencrypt
5
6sudo dokku letsencrypt:enable moodle

Fixes

1. File upload fix

Set PHP Limits

1dokku config:set moodle \
2  PHP_MAX_EXECUTION_TIME=600 \
3  PHP_MAX_INPUT_TIME=600 \
4  PHP_MEMORY_LIMIT=512M \
5  PHP_POST_MAX_SIZE=100M \
6  PHP_UPLOAD_MAX_FILESIZE=100M

Set Nginx proxy timeouts

1dokku nginx:set moodle client-max-body-size 100M
2dokku nginx:set moodle proxy-read-timeout 600s
3dokku nginx:set moodle proxy-connect-timeout 600s

#deployment

Reply to this post by email ↪