DISALLOW_FILE_EDIT<\/code>: Disallows editing of theme and plugin files through the WordPress admin interface.<\/li>\n<\/ul>\n\n\n\nThese are just but a few.<\/p>\n\n\n\n
You would use them in the compose file as;<\/p>\n\n\n\n
\nservices:\n\n wordpress:\n image: wordpress\n container_name: wordpress\n restart: unless-stopped\n ports:\n - 8080:80\n environment:\n WORDPRESS_DB_HOST: db\n WORDPRESS_DB_USER: kifarunixuser\n WORDPRESS_DB_PASSWORD: ChangeME\n WORDPRESS_DB_NAME: kifarunixdb\n WORDPRESS_CONFIG_EXTRA: |\n define( 'WP_DEBUG', true );\n define( 'WP_POST_REVISIONS', 5 );\n define( 'WP_MEMORY_LIMIT', '256M' );\n define( 'DISABLE_WP_CRON', true );\n define( 'AUTOMATIC_UPDATER_DISABLED', true );\n define( 'WP_CACHE', true );\n define( 'WP_HOME', 'https:\/\/www.example.com' );\n define( 'WP_SITEURL', 'https:\/\/www.example.com' );\n define( 'FS_METHOD', 'direct' );\n define( 'FTP_USER', 'username' );\n define( 'FTP_PASS', 'password' );\n define( 'FORCE_SSL_ADMIN', true );\n define( 'DISALLOW_FILE_MODS', true );\n define( 'DISALLOW_FILE_EDIT', true );<\/strong>\n volumes:\n - wordpress:\/var\/www\/html\n...\n...\n<\/code><\/pre>\n\n\n\nThat is just an example usage.<\/p>\n\n\n\n
Run WordPress Container with Nginx<\/h3>\n\n\n\n By default, WordPress uses Apache web server. You can confirm this by inspecting the wordpress container;<\/p>\n\n\n\n
docker inspect wordpress<\/code><\/pre>\n\n\n\nTo configure it to use Nginx, edit the compose file as follows;<\/p>\n\n\n\n
vim docker-compose.yaml<\/code><\/pre>\n\n\n\n\nversion: '3'\n\nservices:\n\n wordpress:\n image: wordpress\n container_name: wordpress\n restart: unless-stopped\n# ports:\n# - 8080:80\n environment:\n WORDPRESS_DB_HOST: db\n WORDPRESS_DB_USER: kifarunixuser\n WORDPRESS_DB_PASSWORD: ChangeME\n WORDPRESS_DB_NAME: kifarunixdb\n WORDPRESS_CONFIG_EXTRA: |\n define( 'WP_HOME', 'http:\/\/kifarunix-demo.com' );\n define( 'WP_SITEURL', 'http:\/\/kifarunix-demo.com' );<\/strong>\n volumes:\n - wordpress:\/var\/www\/html\n\n db:\n image: mariadb\n container_name: mariadb\n restart: unless-stopped\n environment:\n MYSQL_DATABASE: kifarunixdb\n MYSQL_USER: kifarunixuser\n MYSQL_PASSWORD: ChangeME\n MARIADB_ROOT_PASSWORD: ChangeME\n volumes:\n - db:\/var\/lib\/mysql\n\n nginx:\n image: nginx:latest\n container_name: nginx\n restart: always\n ports:\n - 80:80\n volumes:\n - .\/nginx\/conf.d:\/etc\/nginx\/conf.d\n depends_on:\n - wordpress<\/strong>\n\nvolumes:\n wordpress:\n db:\n<\/code><\/pre>\n\n\n\nUpdate compose file accordingly.<\/p>\n\n\n\n
Ensure that Nginx configuration directory exists on the host;<\/p>\n\n\n\n
mkdir -p nginx\/conf.d<\/code><\/pre>\n\n\n\nAlso ensure that you have the site configuration;<\/p>\n\n\n\n
vim nginx\/conf.d\/default.conf<\/code><\/pre>\n\n\n\n\nserver {\n listen 80;\n server_name kifarunix-demo.com;\n\n location \/ {\n proxy_pass http:\/\/wordpress:80;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n\n location ~ \/\\.well-known\/acme-challenge {\n allow all;\n root \/var\/www\/html;\n }\n}\n<\/code><\/pre>\n\n\n\nUpdate the configs accordingly.<\/p>\n\n\n\n
When done, start WordPress with Nginx web server.<\/p>\n\n\n\n
docker-compose down<\/code><\/pre>\n\n\n\ndocker-compose up -d<\/code><\/pre>\n\n\n\nConfirm the services;<\/p>\n\n\n\n
\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n38e4ac7cf507 nginx:latest \"\/docker-entrypoint.\u2026\" 6 seconds ago Up 5 seconds 0.0.0.0:80->80\/tcp, :::80->80\/tcp nginx\n5b0dc0ac47bc mariadb \"docker-entrypoint.s\u2026\" 6 seconds ago Up 6 seconds 3306\/tcp mariadb\neac3752c9579 wordpress \"docker-entrypoint.s\u2026\" 6 seconds ago Up 6 seconds 80\/tcp wordpress\n<\/code><\/pre>\n\n\n\nYou can then access your wordpress using the address defined, http:\/\/kifarunix-demo.com<\/strong>.<\/p>\n\n\n\n <\/figure>\n\n\n\nYou can then proceed to complete the setup of your WordPress site.<\/p>\n\n\n\n
Run WordPress Container with SSL\/TLS<\/h3>\n\n\n\n If you want to run WordPress with SSL\/TLS using the default Apache it is bundled with, then you have to rebuild the wordpress image to enable SSL modules.<\/p>\n\n\n\n
vim Dockerfile<\/code><\/pre>\n\n\n\nEnter;<\/p>\n\n\n\n
FROM wordpress:latest\n\nRUN a2enmod ssl rewrite<\/code><\/pre>\n\n\n\nSave the file and recreate the WordPress image;<\/p>\n\n\n\n
docker build -t wordpress:ssl .<\/code><\/pre>\n\n\n\nYou should now have a custom WordPress image;<\/p>\n\n\n\n
docker images<\/code><\/pre>\n\n\n\n\nREPOSITORY TAG IMAGE ID CREATED SIZE\nwordpress ssl c47a8aa8ec4b 58 seconds ago 664MB<\/strong>\nwordpress latest b94fa4376c73 10 days ago 664MB\nmariadb latest 011343cf3ec3 5 weeks ago 403MB\n<\/code><\/pre>\n\n\n\nNext, create your custom HTTP\/HTTPS Apache configuration;<\/p>\n\n\n\n
mkdir apache<\/code><\/pre>\n\n\n\nvim apache\/kifarunix-demo.conf<\/code><\/pre>\n\n\n\nSample config with redirection;<\/p>\n\n\n\n
\n<VirtualHost *:80>\n ServerName kifarunix-demo.com\n Redirect permanent \/ https:\/\/kifarunix-demo.com\/\n<\/VirtualHost>\n\n<VirtualHost *:443>\n ServerName kifarunix-demo.com\n DocumentRoot \/var\/www\/html\n\n SSLEngine on\n SSLCertificateFile \/etc\/apache2\/ssl\/ssl.crt\n SSLCertificateKeyFile \/etc\/apache2\/ssl\/ssl.key\n\n <FilesMatch \"\\.(cgi|shtml|phtml|php)$\">\n SSLOptions +StdEnvVars\n <\/FilesMatch>\n <Directory \/usr\/lib\/cgi-bin>\n SSLOptions +StdEnvVars\n <\/Directory>\n<\/VirtualHost>\n<\/code><\/pre>\n\n\n\nUpdate your configs accordingly.<\/p>\n\n\n\n
Provide SSL\/TLS certs;<\/p>\n\n\n\n
mkdir apache\/ssl<\/code><\/pre>\n\n\n\nI have put ssl certs in there;<\/p>\n\n\n\n
ls -1 apache\/ssl\/<\/code><\/pre>\n\n\n\nssl.crt\nssl.key<\/code><\/pre>\n\n\n\nUpdate your compose file accordingly;<\/p>\n\n\n\n
vim docker-compose.yaml<\/code><\/pre>\n\n\n\n\nversion: '3'\n\nservices:\n\n wordpress:\n image: wordpress:ssl<\/strong>\n container_name: wordpress\n restart: unless-stopped\n ports:\n - 80:80\n - 443:443<\/strong>\n environment:\n WORDPRESS_DB_HOST: db\n WORDPRESS_DB_USER: kifarunixuser\n WORDPRESS_DB_PASSWORD: ChangeME\n WORDPRESS_DB_NAME: kifarunixdb\n WORDPRESS_CONFIG_EXTRA: |\n define( 'WP_HOME', 'https:\/\/kifarunix-demo.com' );\n define( 'WP_SITEURL', 'https:\/\/kifarunix-demo.com');<\/strong>\n volumes:\n - wordpress:\/var\/www\/html\n - .\/apache\/ssl:\/etc\/apache2\/ssl\n - .\/apache\/kifarunix-demo.conf:\/etc\/apache2\/sites-enabled\/000-default.conf<\/strong>\n\n db:\n image: mariadb\n container_name: mariadb\n restart: unless-stopped\n environment:\n MYSQL_DATABASE: kifarunixdb\n MYSQL_USER: kifarunixuser\n MYSQL_PASSWORD: ChangeME\n MARIADB_ROOT_PASSWORD: ChangeME\n volumes:\n - db:\/var\/lib\/mysql\n\nvolumes:\n wordpress:\n db:\n<\/code><\/pre>\n\n\n\nSee highlighted sections for what we changed\/updated.<\/p>\n\n\n\n
Save the compose file and bring up WordPress using Apache with SSL\/TLS.<\/p>\n\n\n\n
docker-compose down<\/code><\/pre>\n\n\n\ndocker-compose up -d<\/code><\/pre>\n\n\n\nConfirm;<\/p>\n\n\n\n
docker ps<\/code><\/pre>\n\n\n\n\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n2b9f1b6dc1a8 wordpress:ssl \"docker-entrypoint.s\u2026\" 4 seconds ago Up 2 seconds 0.0.0.0:80->80\/tcp, :::80->80\/tcp, 0.0.0.0:443->443\/tcp, :::443->443\/tcp wordpress\nea763f9a7baa mariadb \"docker-entrypoint.s\u2026\" 4 seconds ago Up 2 seconds 3306\/tcp mariadb\n<\/code><\/pre>\n\n\n\nAccess your WordPress from browser. It should redirect HTTP to HTTPS;<\/p>\n\n\n\n <\/figure>\n\n\n\n<\/p>\n\n\n\n
Awesome! You are now serving HTTPS.<\/p>\n\n\n\n
If you dont want to update the WordPress image, then you can use Nginx image.<\/p>\n\n\n\n
We will update Nginx configs above as follows.<\/p>\n\n\n\n
mkdir nginx\/ssl<\/code><\/pre>\n\n\n\nPut your SSL certs there;<\/p>\n\n\n\n
ls -1 nginx\/ssl\/<\/code><\/pre>\n\n\n\nssl.crt\nssl.key<\/code><\/pre>\n\n\n\nUpdate the default config.<\/p>\n\n\n\n
vim nginx\/conf.d\/default.conf<\/code><\/pre>\n\n\n\n\nserver {\n listen 80;\n server_name kifarunix-demo;\n return 301 https:\/\/$host$request_uri;\n}\n\nserver {\n listen 443 ssl;\n server_name kifarunix-demo;\n\n ssl_certificate \/etc\/nginx\/certs\/ssl.crt;\n ssl_certificate_key \/etc\/nginx\/certs\/ssl.key;\n\n location \/ {\n proxy_pass http:\/\/wordpress:80;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n\n location ~ \/\\.well-known\/acme-challenge {\n allow all;\n root \/var\/www\/html;\n }\n}\n<\/code><\/pre>\n\n\n\nUpdate the compose file;<\/p>\n\n\n\n
vim docker-compose.yaml<\/code><\/pre>\n\n\n\n\nversion: '3'\n\nservices:\n\n wordpress:\n image: wordpress\n container_name: wordpress\n restart: unless-stopped\n# ports:\n# - 8080:80\n environment:\n WORDPRESS_DB_HOST: db\n WORDPRESS_DB_USER: kifarunixuser\n WORDPRESS_DB_PASSWORD: ChangeME\n WORDPRESS_DB_NAME: kifarunixdb\n volumes:\n - wordpress:\/var\/www\/html\n\n db:\n image: mariadb\n container_name: mariadb\n restart: unless-stopped\n environment:\n MYSQL_DATABASE: kifarunixdb\n MYSQL_USER: kifarunixuser\n MYSQL_PASSWORD: ChangeME\n MARIADB_ROOT_PASSWORD: ChangeME\n WORDPRESS_CONFIG_EXTRA: |\n define( 'WP_HOME', 'https:\/\/kifarunix-demo.com' );\n define( 'WP_SITEURL', 'https:\/\/kifarunix-demo.com' );\n volumes:\n - db:\/var\/lib\/mysql\n\n nginx:\n image: nginx:latest\n container_name: nginx\n restart: always\n ports:\n - 80:80\n - 443:443\n volumes:\n - .\/nginx\/conf.d:\/etc\/nginx\/conf.d\n - .\/nginx\/ssl:\/etc\/nginx\/certs\n depends_on:\n - wordpress\n\nvolumes:\n wordpress:\n db:\n<\/code><\/pre>\n\n\n\nSave and exit.<\/p>\n\n\n\n
Run the WordPress container;<\/p>\n\n\n\n
docker-compose down<\/code><\/pre>\n\n\n\ndocker-compose up -d<\/code><\/pre>\n\n\n\n