All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.8.3 - 2024-04-08
This version requries updating the host helper script first.
# Update the demyx image to the latest version
docker pull demyx/demyx
# Update the host helper script
docker run -t --rm \
-v /usr/local/bin:/tmp \
--user=root \
--entrypoint=bash \
demyx/demyx -c 'cp -f /etc/demyx/host.sh /tmp/demyx; chmod +x /tmp/demyx'
# Use the latest version of demyx
demyx host restart
# Finally upgrade
demyx host upgrade -f
- Move update counter commands to its own function so
demyx host restart
can work properly 5c782e3 - The script will error and exit if there are containers still using an old image c68a85b
- Suppress external network warning 483d57a
- Replace
demyx_host_dangling_images()
with a single line command to make sure all dangling images gets deleted aaf660a - The image docker:cli should be included here 331f73b
- Use
demyx refresh
to ensure containers are properly restarted 74bfa4e - Requires the
--remove-orphans
flag when refreshing configs 856ec86 demyx config --opcache
wasn't recreating the WP container 734e01bdemyx config --bedrock
should error on non bedrock stacks 21e111a- IPWhiteList is deprecated 8987f31
- Use official Docker CLI image to fix the
KeyConfig
error 0fa5d52 - Should be able to bypass "No updates available" and be able to upgrade demyx and host helper script only df2bec1
- Move commands into a global function since backups are using the old container name format which would break
demyx restore
8f3f808
1.8.2 - 2024-03-27
Due to a lot of changes with Docker, there had to be a lot of fixes/workarounds made in order to ease the burden of upgrading. Follow these steps for a smooth transition.
# Update the demyx image to the latest version
docker pull demyx/demyx
# Update the host helper script
docker run -t --rm \
-v /usr/local/bin:/tmp \
--user=root \
--entrypoint=bash \
demyx/demyx -c 'cp -f /etc/demyx/host.sh /tmp/demyx; chmod +x /tmp/demyx'
# Use the latest version of demyx
demyx host restart
# Force the upgrade
demyx host upgrade -f
- Remove limitations on subdomains so SSL wildcards and www works on international domains and/or several levels deep of prefixes of subdomains 74fecb0
- The
-f
flag should also bypass the no updates check bab05a1 - Fix GitHub Action failure 570991d
- Suppress the existing volume warning e4decaf
- Nginx would fail if the container names aren't updated to the new format 87eac07
- Remove the
version
is obsolete warning 57fdd73 - Upgrade to latest Docker version to fix
KeyError: 'ContainerConfig'
errors and docker-compose is now deprecated 87c3be1
1.8.1 - 2024-03-19
- Creating new apps were erroring on subdomains using
--ssl
flag 72fd7da - Docker versions would mismatch between local and remote versions 7b18cb7
demyx host dev
was targeting the wrong string 87398c4- Apparently the code-server service crashes when
mem_limit
is too low a08eef2 - This was supposed to be included in the last update but phpmyadmin needed this upload limit bump f57aa3a
demyx restore
with sftp enabled was failing due to missing port 5c8883b- Shorthand was causing pipe errors for nginx which also crashed
demyx update
, so might as well remove all shorthands a40d189 - Use
demyx_app_path
since the functiondemyx_app_domain
was also affected by thefind
bug b567ed9 find
found multiple paths matching the app's domain which was crashingdemyx restore
345b44f--dev
should enable/disable debug mode for WordPress 9ba3c32- Config flag
--redis
was outputtingpop_var_context
error 5e25da5 - Missing key
workflow_dispatch
for manual build 909e993
1.8.0 - 2024-03-01
- Default PHP versions are now 8.1 and 8.2
- WP Rocket + rocket-nginx is now supported
- Wildcard SSL is now supported for any app, only for top level domains
- Weekly updates and showing updates should now be "smarter"
- General logging now only logs the function name
- Better error logging, simliar to PHP stack trace
- Thanks @NuclearMonster for the PR to fix one of my many errors
# Example of the new error log stack trace entry
"docker exec" requires at least 2 arguments.
See 'docker exec --help'.
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Execute a command in a running container
[2024-02-20-00:43:55] Fatal Error: 'docker exec' with exit code '1' in /etc/demyx/function/backup.sh:113
Stack Trace:
#0 /etc/demyx/function/backup.sh(113): demyx_backup_app
#1 /etc/demyx/function/backup.sh(66): demyx_backup
#2 /etc/demyx/bin/demyx.sh(22): demyx
#3 /etc/demyx/bin/demyx.sh(97): main
#4 backup domain.tld
- Custom stack trace for better error logging and debugging 47cb92f
demyx_event()
will replace general logging and will log every function when executed 7906b4c- Add support for WP Rocket + rocket-nginx e72f8ef
- Add support for wildcard SSL f99be89
- Match help text with the KB c9c5530
- Remove/replace old logging function 07f3d59
- Only use demyx_execute to supress outputs from specific commands 04e8d09
- Bump default PHP versions to 8.1 and 8.2 3f1ef22
--www
will error if using with a subdomain 4cbaa65- Error on
--whitelist
if DEMYX_IP isn't set d9738a8 - Make sure two core variables are set in order to enable SSL 5119d1a
- Update both php and lsphp versions when using
--php
0f94720 - Move disk healthcheck to hourly 7377be3
- Add new/missing variables for OLS 99060d7
- Double the upload limit b147698
- Use exec to override the subshell 080bc99
- Move delete prompt and make sure to clear out old variables 31fa70b
- When checking for local image versions, make sure to only check if image is installed first e21414a
- Show updates if these images are installed only 73ab751
- Remove old conditional code 0136da6
- Hardcode the CPU for only the code-server services 2b21b47
- Add/remove environment variables for yml.sh 6724490
- One service was missing the custom volume fea20d7
- Hardcode the htpasswd instead of using .env c6c0967
- Output the latest error on the host if there is one f2a2813
- Miscellaneous changes/updates bb84dd3
- Output containers with cpu != 0% 6e75d6a
- Utility needs to be sourced again for non alpine 380f5c3
- Set fixed width c8a2491
- @NuclearMonster "Update pull.sh to pull OLS and resolve out of date OLS installs." 82a1b6d
- Be sure to exit on error for subshells c44e466
- Redis wasn't configuring properly when switching stacks 7b1c1cd
- Fix incorrect filename 6d4bcf3
- This is supposed to be defaulted at 7 e0ffd28
- Add missing logrotate rule faa2056
1.7.1 - 2023-11-16
- Missing backup/restore commands for custom volume aa8e543
1.7.0 - 2023-11-14
- Add new volume
custom
for user customizations 5a1d155 demyx config <app> --backup
new flag to skip backups of a specifc app a2497a3- Add new variable DEMYX_APP_BACKUP 04cfb4c
- Use
demyx_wordpress_ready
indemyx_run_extras
974fed2 - Log error for
demyx_wordpress_ready
7d377cb - Skip app backup if DEMYX_APP_BACKUP is set to false 14bd04e
1.6.0 - 2023-10-18
- Update logic b5a0984
- Revert back to old traefik rules for www and non www labels 371070b
demyx config <app> --www
can't be used for sub domains ef338ae
- Fix not installed error when using
--www
indemyx run
f111e06
- New function
demyx_wordpress_ready()
loops checks if wp core is installed 99ed589 - New function
demyx_subdomain()
returns a string if it's a subdomain 8eec3bb
1.5.2 - 2023-10-10
1.5.1 - 2023-09-28
- Add missing command to recreate all apps when doing an upgrade 495a908
- Remove tag due to errors when pulling, users can manually enter tag version b85df64
- Exit if there's no apps installed, causing notifications to fire off when there's no error 75c5563
- Remove variable causing cache to not work properly on first run 809ff8d
1.5.0 - 2023-09-26
- All Demyx app stacks now supports Redis, either by
demyx run
ordemyx config
08b6589 - New flag
--whitelist
fordemyx run
c093346 - Host helper script can now print Demyx environment variables bc78886
- Debugger mode (breaks demyx, use with caution) 3aa8af3
- Automatically adjust php-fpm values based on container memory 93cde6e
- Fix www issues for Traefik labels bb090cc
- Fix cloning issue 344b0bd
- Prevent file not found error 7768c06
- Remove linebreak c613013
- Use values from
demyx_app_env
280a7d7 - Make sure to disable docker-compose binary for non-root user ef59bf6
- Reverting change a97c853
1.4.0 - 2023-09-19
- The whole script is now in masochist mode: set -euo pipefail
- Refactored 99% of functions using localize variables and internal functions
- HUGE performance gains and tons of bug fixes
- SSL has been disabled by default to prevent rate limiting from Lets Encrypt when DNS hasn't been setup properly
- shellcheck approved (mostly)
- Demyx image now has docker-compose installed
- Separate log files for cron and error events
- Error events will now show you what commands failed and its stdout (if any)
- Example callback script now supports error reporting by webhooks
demyx exec
defaults to bash if no argument is passed- Upgrading will now remove old Demyx images
- All PHP-based stacks will now run PHP8 by default
- Functions will now follow a code structure/template
- Various event notifications by email (ssmtp) or webhook through Matrix
- Several new environment variables for more control
- Functions/commands will now go through a main function that checks for errors
- Several flags are now 1 letter
- Entrypoint script
- SMTP script
Backup
- All loop will skip to the next iteration if there are errors
- Temporary files are stored in the new DEMYX_TMP path
- New function to only backup the database
- New function to display each app's backups with total or per file size
Bins
- Moved various commands from other scripts to the entrypoint script
- Skeletons are now generated in said entrypoint script
- Rename apps with www
- Move main demyx script to bin directory
- Generate main .env file in the demyx-yml script
Compose
- Flags to target specific containers (db/nginx/wp)
Config
- PHP/LSPHP versions can now switch between 8 and 8.1
- Convert/revert an app's www. prefix in url
- Removed unneeded flags
- SFTP flag will now output username/password instead
Cron
- Added every five minute cron function
- Custom callback scripts for daily, every 5 minute, hourly, every minute, every 6 hours, and weekly
- Pinging home will include demyx version and nothing else
- Healthcheck functions are placed in the daily and five minute functions
Dockerfile
- Add various environment variables
- Packages: apache2-utils, docker-compose, logrotate, and ssmtp
- Pre-install core demyx directories
- Every five minute cron
- Build time environment variable: DEMYX_BUILD
Edit
- When editing an app's .env file, use -r flag to refresh its config files
Env
- Moved several environment variables to the refreshable section
Exec
- Targeting db will now use the -d flag
- Targeting nginx will now use the -n flag
Global
- Major overhaul of several functions and added new ones too for internal use
- Better error handling and logging
- New function for email/webhook notifications
- Each script will now source specific scripts
- Tables have been replaced to a simpler output
Healthcheck
- Checks if an app's containers are down, disk usage, and cpu load
- Notifications are sent by emails or matrix webhooks
- No more restarting containers automatically
Help
- Update help menu since some commands were removed
Host
- The .env file is now generated through the demyx-yml script
- Removed install prompts
- Ctop will be using its official image
- When a new version of MariaDB is available, it will backup and restore the app's database only
- Remove dangling images after an upgrade
- Notifies users when there's an error
- MOTD commands will automatically be inserted in .bashrc/.zshrc
Info
- New flag to grep env variables: --env
- The -l flag will output login credentials and wp-cli login link
- Reduced the args for now
- Output of app's environment variables are now outputted via column command
- System info will now build date and server IP address
Install
- Only pull the bare minimum of images to get demyx started right away
- Pinging will include demyx version and nothing else
Logs
- Demyx now has separate logs for cron, main, error
- See cron logs from WP containers
- Display docker's logging on specific containers
- Log rotating has been replaced by internal logrotate
Motd
- Updated chat link
- Included docs link
- Notify new users to fix 2 environment variables for proper SSL provisioning
Name
- Sometimes the name generator outputs null, that has been fixed
Pull
- ctop is included in the pull list
- Checking if an image exist will now use a cached file
Refresh
- Replaced a few flags
Restore
- Removed some flags and added useful ones
- Database only restoration
Run
- Specify PHP/LSPHP versions
- For www only domains, there's a flag for that
Rm
- Removed the --wp flag
Run
- Removed several flags
- Users can now set PHP/LSPHP versions
- Added the --www flag
- Creating an app has been simplified since most of the work is done in the WP container
- After an app is created, output now shows login link and friends
SMTP
- Generates email template for email notifications via ssmtp
- Outbound only
Update
- Flag to see if there's any updates
- Merged update functions from global
- New output of update list
Utility
- Removed all flags but one
- The removed flags have been moved to top level
Wp
- Looping wp-cli commands to all apps will check for error first
- Checks for wp binary before executing to prevent breakage
Yml
- Merged the individual yml scripts into one
- Other services like sftp, pma, etc. are generated here
- Merged changelogs into one
- Most scripts in bin directory
- Removed the following scripts: list, maldet, monitor, plugin, table, and yml-*
- Skeletons directory
1.3.1 - 2021-07-08
- Alphabetize labels ab35d1d
- Use two different middlewares for http and https 9c433e9
- Update IRC link in MOTD 4b98703
1.3.0 - 2021-06-04
- Remove if statements 4668e77
- Remove while loop 1b09cb3
- Add extra conditional 4e1224a
- Update code-server images when pulling 6c3d598
- Append :latest tag to docker images 9b68ba8
- New flag: demyx config --fix-innodb 0f066fb
- Check DB container after compose with new flag 50e6d40
- Make sure all HTTP requests are redirected to HTTPS for API URL 67a78fe
- Remove update command on init fb80a14
- Use new flag to check if DB is running or not 5cb3aab
- Remove -f flag 382098b
1.2.4 - 2021-05-10
- function/global.sh
- Add 2>&1 so error text can be piped
- Add head command to demyx/docker-socket-proxy
- Update demyx/wordpress path for version number
- Hardcode lsphp version for demyx/openlitespeed
- Remove old images list to prevent duplicates
- Add an OR conditional to check if wp directory exists
- function/run.sh
- Make sure domain isn't a flag
- function/wp.sh
- Pass the PAGER environment variable when wp help is ran
- host.sh
- Check for default editor first then use local editors if not found
1.2.3 - 2020-09-08
- Fixed an issue where cloning an app wasn't working properly
1.2.2 - 2020-08-11
- Fixed: old backups weren't deleted due to find command using wrong environment variable
1.2.1 - 2020-07-19
- Fixed: Refreshing an app while in development loses the value of DEMYX_CONFIG_DEV_BASE_PATH
1.2.0 - 2020-07-09
- Add demyx/code-server:browse when installing demyx
- demyx update now has a force flag
- Update "upgrade" command for the demyx host script
- Update help menu for demyx pull
- Update help menu for demyx update
- Reworked demyx update functions
- Don't pull demyx/browsersync when installing demyx
- WP container needs to run first then nginx
- Remove some changes in 1.1.2 to reflect changes in the wordpress/openlitespeed images
- Remove duplicate demyx refresh when creating a WP app
1.1.2 - 2020-07-03
- function/config.sh
- Restart WP container after using --auth-wp
- function/run.sh
- Fixed a bug when cloning a bedrock stack
- Misc updates
- Recreate nginx container when turning cache on/off
- Remove rule for subdomains
1.1.0 - 2020-06-21
- Alphabetized yml keys and update redirect labels
- IP whitelisting now requires one flag
- Set code-server image to browse tag when doing update checks
- Remove the -L flag when doing healthchecks
- Update host rules when using www in domain names
- Remove CDN variable from demyx info
- Add code-server dev password in demyx info
1.0.1 - 2020-06-16
- Fixed wrong variable for DEMYX_LOCAL_VERSION when generating update local cache
- Fixed command when generating variable for DEMYX_LOCAL_CODE_VERSION
- Update warning message when using demyx config --sftp
1.0.0 - 2020-06-15
- bin/demyx-migrate.sh
- Migrate old stack configs to host config
- bin/demyx-reset.sh
- Script is used to reset permissions/ownership (might be temporary)
- function/refresh.sh
- Script to replace the app config/yml regeneration from function/config.sh
- skel
- Used by /bin/demyx-init.sh for installing demyx
- host.sh
- Main script on the host that executes docker commands to demyx container
- New flags for demyx run and demyx config: --whitelist, --whitelist-type
- Add changelog directory to repo and each version's changelog will be in its own .md file
- bin/demyx-init.sh
- Doesn't run as root anymore
- Migrated /bin/demyx-api.sh code
- Clean out unused code
- bin/demyx-skel.sh
- Copy the skel directory when installing demyx
- Symlink /var/log/demyx to /demyx/log
- bin/demyx-yml.sh
- Remove unused code
- API labels will now redirect http to https
- Updated template for main docker-compose.yml
- Generate basic auth outside of the if statement
- function/compose.sh
- Uses demyx socket as the docker host now
- function/config.sh
- Removed --cdn, --refresh, and --no-backup flags
- Removed related codes from flags above
- Update variable names
- --expose flag now fetches server IP from environment variable
- Migrated refresh code to its own top level command
- function/cron.sh
- Remove unused code
- Update variable names
- function/edit.sh
- Replaced stack with traefik
- function/env.sh
- Remove cdn variable
- Remove unused code
- Add 3 environment variables for php
- function/global.sh
- Remove unused code/functions
- Update demyx_update_image function
- function/healthcheck.sh
- Checks for a file before running healthcheck scripts
- Getting container HTTP status using curl (again...I know I know)
- function/help.sh
- Update help menu for demyx config
- Update help menu for demyx info
- Remove help menu for demyx install
- Add help menu for demyx refresh
- Update help menu for demyx run
- Remove help menu for demyx stack
- Update help menu for demyx update
- Update help menu for demyx help
- function/info.sh
- Remove unused code
- Update sed command for WP apps
- function/list.sh
- Remove unused code
- function/monitor.sh
- Remove unused code
- Update monitor variable
- function/motd.sh
- Remove unused code
- Added changelog url
- function/restore.sh
- Add force flag when removing backup database
- function/run.sh
- Remove --cdn flag and related code
- Update environment variables
- Update refresh commands
- function/update.sh
- Added command to show updates: demyx update show
- Added echo messages when executing update functions
- Added command to update the demyx helper script on the host
- function/yml-bedrock-dev.sh
- Add 3 new environment variables for php
- function/yml-bedrock.sh
- Add 3 new environment variables for php
- function/yml-nginx-php-dev.sh
- Add 3 new environment variables for php
- function/yml-nginx-php.sh
- Add 3 new environment variables for php
- function/yml.sh
- Put CA resolver logic outside of functions
- Use environment variable to get server IP
- Add function to generate code-server yml
- Migrate demyx_stack_yml to demyx_traefik_yml
- .dockerignore
- Include host.sh and skel directory
- demyx.sh
- Remove source command
- Remove install command
- Add refresh command
- Remove stack command
- Add version command
- Dockerfile
- Remove DEMYX_BUILD
- Import majority of .config variables to ENV
- Remove packages: dumb-init, git, htop, openssh, rsync, util-linux, and zsh
- Remove code related to the removed packages
- Various misc updates
- install.sh
- Remove sudo/docker checks as it will error if either is missing
- Remove skip checks conditional
- Migrated prompts to host.sh
- Install demyx helper script using docker run
- bin/demyx-api.sh
- bin/demyx-crond.sh
- bin/demyx-dev.sh
- bin/demyx-prod.sh
- bin/demyx-ssh.sh
- chroot.sh
- function/install.sh
- .config
- docker exec needs to be run as root when checking for updated image cache in demyx helper script
- Fixed Traefik labels where host rules weren't being generated in the yml when creating a site without SSL
- Set root as the owner of all executable scripts/binaries in /usr/local/bin
- Demyx helper script now pulls other code-server images if it exists first
- Echo out message when restarting PHP and use docker exec directly
- Update message when restarting NGINX
- Make sure DEMYX_RUN_CLOUDFLARE env uses variable from run.sh
- Hourly cron for WP cron events
- Use a better conditial when detecting subdomains for Traefik labels
- Include cron event name in echos
- demyx config --cf was missing stack environment variables
- Replace brackets with parenthesis when doing arithmetics
- Only add www host rule when domain is a TLD
- Cloudflare as the second certificate resolver
- New flag for demyx run: --cf and make sure to check for Cloudflare email and key
- Add DEMYX_APP_CLOUDFLARE to env.sh
- New function to output correct challenge for Traefik: demyx_certificate_challenge
- Use wget instead of curl for healthchecks
- Add demyx_update_image to weekly cron
- Pull additional code-server tags when code-server updates
- Use Cloudflare if email and keys are present for main .yml file
- Current sites can now switch between resolvers
- Merge HTTP and Cloudflare resolvers for Traefik yml
- Update help menu for demyx run
- WP apps utilize demyx_certificate_challenge in yml generation
- Check if Cloudflare variables exists first when using demyx config
- Make demyx helper remove all update files before rebuilding cache
- Bump lsphp max connections to 20000 for OLS stack
- Remove tag for code-server when generating update image list
- Set shebang to dumb-init
- Move commands to a different file when sourcing zsh symlink
- Missing -v flag for update commands
- --refresh can now use --force to force refresh non-essential variables
- New commands to let users know of updates: demyx_update_remote, demyx_update_local, and demyx_update_count
- demyx_motd_update_check lets users know if updates are available in MOTD
- Add update sub command to demyx list
- Add --json to demyx list help menu
- chroot.sh
- New command: upgrade
- Prefix sudo when reloading nginx
- Moved global functions to the top
- Rearrange environment variables from essentials to non-essentials
- Disable auto rate limit for now
- Prevent down containers from going up when doing loops
- Suppress update message when update count is 0
- Fix symlink error message
- Fix broken healthcheck
- Update install images
- Echo out code-server:wp tag instead
- Add conditionals to MOTD
- Use docker run instead of exec when updating local update cache
- Only output MOTD update message when all conditionals are met
- Use jq to get Bedrock version
- Use curly brackets for OLS variable
- MOTD stack install message using wrong command
- Move stack refresh command to demyx-init.sh
- Replace MOTD update check commands
- Remove unused code and rearrange code
- Use conditional when using cat
- chroot.sh
- demyx update now shows updates if available
- Show an update notice if available
- Remove carriage return
- Missing user when pulling images
- Output messages to user and update docker command
- demyx_motd_update_wp_yml
- Code for demyx repository was skipped
- Remove commented code
- init.sh
- Remove init.sh from main script
- Extra flags in healthcheck curl
- Restart php-fpm without restarting container
- Set browsersync watch files to themes
- demyx_dev_password sets a fixed password for code-server
- WP auto update checks for stack type now
- Use absolute path for composer update
- New variable DEMYX_APP_DEV_PASSWORD for code-server
- Update default variables for env.sh
- Switch to nginx-php as the default stack
- Add hostname key and use app ID as part of volume name