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