This post will cover everything you need to know about getting WordPress deployed to your dokku server from start to finish.
I already have a dokku server setup on digital ocean.
If you haven't done so as yet you can create an account and get 100 credits [Free 100 credit (https://m.do.co/c/04ef1769fce8)
After that follow the instructions on the dokku documenation to get your server up and running DigitalOcean Droplet Installation Notes
Let us begin, to get the most out of this tutorial follow along and comment below if there are any issues with the steps.
Installing the MariaDB plugin on dokku, creating a database, and linking it to our app
In your dokku terminal run the following command to create your app. I will be using blogger as my app name feel free to use another name.
dokku apps:create blogger If you run dokku apps:list you should see your newly created application.
Now will install the mariab plugin, create a database and link it to our app so that it has access to it
# Install app sudo dokku plugin:install https://github.com/dokku/dokku-mariadb.git mariadb # Create database dokku mariadb:create bloggerdb # Link database to app dokku mariadb:link bloggerdb blogger Creating a local wordpress instance and pushing it to dokku
On your local machine clone the wordpress github project
# Download and unzip wordpress files curl -LO https://wordpress.org/latest.zip unzip latest.zip # Change directory to downloaded project cd wordpress # Download wordpress gitignore file curl https://raw.githubusercontent.com/github/gitignore/master/WordPress.gitignore > .gitignore # Initialize repository and make initial commit git init git add . git commit -m "Initial commit of wordpress files" # Open folder in your code editor for this tutorial i'll be using visual studio code code . We are going to update the values of our config file so it knows to look for the dokku environment variables. First copy wp-config-sample.php to wp-config.php. Then update the following sections
// ** MySQL settings - You can get this info from your web host ** // $url = parse_url(getenv("DATABASE_URL")); $host = $url["host"]; $username = $url["user"]; $password = $url["pass"]; $database = substr($url["path"], 1); /** The name of the database for WordPress */ define( 'DB_NAME', $database ); /** MySQL database username */ define( 'DB_USER', $username ); /** MySQL database password */ define( 'DB_PASSWORD', $password ); /** MySQL hostname */ define( 'DB_HOST', $host ); We also want to change authentication keys and salts so go to https://api.wordpress.org/secret-key/1.1/salt/ copy and paste the generated salts in the wp-config.php file
define( 'AUTH_KEY', 'put your unique phrase here' ); define( 'SECURE_AUTH_KEY', 'put your unique phrase here' ); define( 'LOGGED_IN_KEY', 'put your unique phrase here' ); define( 'NONCE_KEY', 'put your unique phrase here' ); define( 'AUTH_SALT', 'put your unique phrase here' ); define( 'SECURE_AUTH_SALT', 'put your unique phrase here' ); define( 'LOGGED_IN_SALT', 'put your unique phrase here' ); define( 'NONCE_SALT', 'put your unique phrase here' ); We also need to create a custom_php.ini file to improve some settings
upload_max_filesize = 128M post_max_size = 128M max_execution_time = 60 memory_limit = 512M Now we need to tell dokku to use those settings when running the project to do that we will use a Procfile in the root of the project
web: vendor/bin/heroku-php-nginx -i custom_php.ini Now we will commit and push our changes to our dokku server
# commit changes git add . git commit -m "updated config to work with dokku url" # Add the dokku url to the downloaded project # If your server is dokkuserver.com and your blog is called blogger this would be: git remote add dokku dokku@dokkuserver.com:blogger # push changes git push dokku master Setting up application storage on dokku server
# Create the folders (might require sudo) mkdir -p /var/lib/dokku/data/storage/blogger/plugins mkdir -p /var/lib/dokku/data/storage/blogger/themes mkdir -p /var/lib/dokku/data/storage/blogger/uploads # Change the permission (might require sudo) chown 32767:32767 /var/lib/dokku/data/storage/blogger/plugins chown 32767:32767 /var/lib/dokku/data/storage/blogger/themes chown 32767:32767 /var/lib/dokku/data/storage/blogger/uploads # Mount the storage to the container dokku storage:mount blogger /var/lib/dokku/data/storage/blogger/plugins:/app/wp-content/plugins dokku storage:mount blogger /var/lib/dokku/data/storage/blogger/themes:/app/wp-content/themes dokku storage:mount blogger /var/lib/dokku/data/storage/blogger/uploads:/app/wp-content/uploads The default upload limit for nginx is 2mb let us update the limit to 100mb. Sudo may be required to run these commands
mkdir /home/dokku/blogger/nginx.conf.d/ echo 'client_max_body_size 100M;' > /home/dokku/blogger/nginx.conf.d/upload.conf chown dokku:dokku /home/dokku/blogger/nginx.conf.d service nginx reload We are almost finish. To ensure we have a secure site, we will add https using lets encrypt
# Install plugin sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git # Set the global email dokku config:set --global DOKKU_LETSENCRYPT_EMAIL=your@email.tld # Setup cronjob to auto-renew certificates when they expire dokku letsencrypt:cron-job --add # Add https to site dokku letsencrypt:enable blogger Go to your url application url in your browser you should see the installation page of your wordpress site. Thank you for following along
Top comments (12)
Thanks for this fantastic write-up, Jasmine, I had a Wordpress installation running in Dokku within 10 minutes flat 🙌🏼
One tiny correction, for the benefit of future readers, the final command where we're enabling
letsencryptfor thebloggerapplication should include the word "enable"I get this error when trying to push to the dokku host:
How can I fix this?
I'm getting this error: "The theme directory "twentytwentythree" does not exist.
Error: The themes directory is either empty or does not exist. Please check your installation." and unable to install any theme and plugins
Amazing guide thank you! It seems that after applying Letsencrypt all CSS will be broken and so will all js etc. Any good solution @jasminetracey
From your admin panel under settings you can change your WordPress Address (URL) and your Site Address (URL) to the https version.
Hey, doing that makes the website inaccessible, browser says too many redirects.
This article should help
wpbeginner.com/wp-tutorials/how-to...
Can you use wordpress docker image on dokku?
yes
I am getting 404's for all pages except the main page. wp-admin works.
Is there something I need to do for URL rewrites instead of .htaccess ?
You can try adding
options +FollowSymLinksto your .htaccess fileI changerd my Procfile to use apache rather than nginx, and it picked up my standard wordpress .htaccess file and it works without 404s
Procfile
web: vendor/heroku/heroku-buildpack-php/bin/heroku-php-apache2
I found this voodoo here: github.com/dokku/dokku/issues/824
It looks like it may be related to a newer or older version of buildstep.