<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Adam Craig Johnston | Software Developer</title>
	<atom:link href="https://adamjohnston.me/feed/" rel="self" type="application/rss+xml" />
	<link>https://adamjohnston.me</link>
	<description>Software Developer, Technology Enthusiast, Retro and Husband and Dad based in Melbourne.</description>
	<lastBuildDate>Sun, 12 Jul 2026 05:27:28 +0000</lastBuildDate>
	<language>en-AU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.12</generator>
<site xmlns="com-wordpress:feed-additions:1">140396600</site>	<item>
		<title>Docker Desktop volumes for WordPress</title>
		<link>https://adamjohnston.me/docker-desktop-and-volumes/</link>
					<comments>https://adamjohnston.me/docker-desktop-and-volumes/#respond</comments>
		
		<dc:creator><![CDATA[Adam Craig Johnston]]></dc:creator>
		<pubDate>Sun, 12 Jul 2026 04:54:01 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Using WordPress on AWS Lightsail and Docker]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://adamjohnston.me/?p=1301</guid>

					<description><![CDATA[Summary This chapter explains how to create persistent Docker Desktop volumes for WordPress and MySQL using local folders on Windows, macOS, and Linux. Docker Desktop manages the volumes while allowing the data to remain accessible on your local machine. This ensures that your WordPress files and database data are retained when containers are stopped, removed, [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Summary</h2>
<div>
<div>This chapter explains how to create persistent Docker Desktop volumes for WordPress and MySQL using local folders on Windows, macOS, and Linux.</div>
<div>Docker Desktop manages the volumes while allowing the data to remain accessible on your local machine. This ensures that your WordPress files and database data are retained when containers are stopped, removed, or recreated.</div>
<div>In the next chapter, you will learn how this approach differs from using AWS block storage and manually mounted volumes on an AWS Lightsail instance.</div>
</div>
<h3>1. Create Local Folders for Data</h3>
<p>Choose a location on your computer where Docker will store persistent WordPress and MySQL data.</p>
<h4>Windows</h4>
<pre><code class="language-powershell">mkdir C:\docker-data\wp_html
mkdir C:\docker-data\mysql
</code></pre>
<h5>Output</h5>
<ul>
<li>C:\docker-data\wp_html for WordPress files</li>
<li>C:\docker-data\mysql for MySQL database files</li>
</ul>
<h4>macOS / Linux</h4>
<pre><code class="language-bash">mkdir -p ~/docker-data/wp_html
mkdir -p ~/docker-data/mysql
</code></pre>
<h5>Output</h5>
<ul>
<li>~/docker-data/wp_html for WordPress files</li>
<li>~/docker-data/mysql for MySQL database files</li>
</ul>
<h3>2. Create Bind-Backed Docker Volumes</h3>
<p>Create named Docker volumes that bind to the local folders you created earlier. This allows Docker to store WordPress and database data in those folders instead of inside Docker’s default internal storage.</p>
<h4>Windows</h4>
<pre><code class="language-powershell">docker volume create wp_html --driver local --opt type=none --opt device=C:\docker-data\wp_html --opt o=bind
</code></pre>
<pre><code class="language-powershell">docker volume create mysql_data --driver local --opt type=none --opt device=C:\docker-data\mysql --opt o=bind
</code></pre>
<h4>macOS / Linux</h4>
<pre><code class="language-bash">docker volume create wp_html --driver local --opt type=none --opt device=$HOME/docker-data/wp_html --opt o=bind
</code></pre>
<pre><code class="language-bash">docker volume create mysql_data --driver local --opt type=none --opt device=$HOME/docker-data/mysql_data --opt o=bind
</code></pre>
<h4>Options explained</h4>
<ul>
<li><strong><code>docker volume</code></strong> creates a new Docker volume. In this example, wp_html and mysql_data are the names of the volumes being created.</li>
<li><strong><code>--driver</code></strong> local tells Docker to use the local volume driver.</li>
<li><strong><code>--opt type=none</code></strong> is used when creating a bind-backed volume.</li>
<li><strong><code>--opt device=...</code></strong> tells Docker which folder on your machine should be used for the volume.</li>
<li><strong><code>--opt o=bind</code></strong> tells Docker to bind that folder into the volume.</li>
</ul>
<h3>3. Verify the Docker Volumes</h3>
<p>Check that Docker is using the local folders you mapped.</p>
<pre><code class="language-powershell">docker volume inspect wp_html
</code></pre>
<h4>Output</h4>
<p>Docker will return JSON describing the volume configuration.</p>
<pre><code class="language-json">[
    {
        "CreatedAt": "2026-03-17T12:01:21Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/wp_html/_data",
        "Name": "wp_html",
        "Options": {
            "device": "C:\\docker-data\\wp_html",
            "o": "bind",
            "type": "none"
        },
        "Scope": "local"
    }
]
</code></pre>
<pre><code class="language-powershell">docker volume inspect mysql_data
</code></pre>
<h4>Output</h4>
<pre><code class="language-json">[
    {
        "CreatedAt": "2026-03-17T12:00:51Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/mysql_data/_data",
        "Name": "mysql_data",
        "Options": {
            "device": "C:\\docker-data\\mysql",
            "o": "bind",
            "type": "none"
        },
        "Scope": "local"
    }
]
</code></pre>
<h3>4. Start Your Containers Using the Volumes</h3>
<p>After the volumes have been created, they can be attached to your WordPress and database containers. When the containers use wp_html and mysql_data, Docker stores the data in the local folders you configured earlier rather than in Docker’s default internal storage.</p>
<h4>A typical setup maps</h4>
<p>wp_html -&gt; /var/www/html<br />
mysql_data -&gt; /var/lib/mysql</p>
<p>You can then start your containers with Docker Compose, depending on how your project is structured. Because the data is stored outside the containers, it remains available even if the containers are stopped, removed, or recreated.</p>
<p>This gives you a straightforward Docker Desktop development setup with persistent storage. WordPress files remain available between container restarts, MySQL data is retained even if containers are rebuilt, and the files stay accessible from the host machine. Another advantage is that no manual disk formatting or mounting is required.</p>
<p>Because this approach works across Windows, macOS, and Linux with Docker Desktop, it is well suited to local WordPress development, plugin testing, theme experimentation, or preparing an application before deploying it to a cloud server.</p>
<h2>Further Reading</h2>
<ul>
<li><a href="https://docs.docker.com/engine/storage/volumes/">Docker Volumes</a></li>
</ul>
<p><a href="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png"><img data-attachment-id="1209" data-permalink="https://adamjohnston.me/using-wordpress-on-aws-lightsail-and-docker/title_page/" data-orig-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=412%2C618&amp;ssl=1" data-orig-size="412,618" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="title_page" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=200%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=683%2C1024&amp;ssl=1" loading="lazy" class="alignnone size-medium wp-image-1209" src="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394-200x300.png?resize=200%2C300" alt="" width="200" height="300" srcset="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?resize=200%2C300&amp;ssl=1 200w, https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?w=412&amp;ssl=1 412w" sizes="(max-width: 200px) 100vw, 200px" data-recalc-dims="1" /></a></p>
<h2><a href="https://leanpub.com/wordpressawslightsail">Using WordPress on AWS Lightsail and Docker</a></h2>
]]></content:encoded>
					
					<wfw:commentRss>https://adamjohnston.me/docker-desktop-and-volumes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1301</post-id>	</item>
		<item>
		<title>AWS Lightsail Instance for Docker</title>
		<link>https://adamjohnston.me/lightsail-instance-for-docker/</link>
					<comments>https://adamjohnston.me/lightsail-instance-for-docker/#respond</comments>
		
		<dc:creator><![CDATA[Adam Craig Johnston]]></dc:creator>
		<pubDate>Sun, 05 Jul 2026 06:59:24 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Using WordPress on AWS Lightsail and Docker]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://adamjohnston.me/?p=1275</guid>

					<description><![CDATA[Summary This chapter guides you through setting up an Ubuntu Lightsail instance pre-configured for Docker, enabling you to deploy and manage containers like WordPress and MySQL Server quickly. You’ll learn how to: Generate and secure a custom SSH key pair to access the instance. Use AWS CLI commands and configuration files to launch your Lightsail [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Summary</h2>
<p>This chapter guides you through setting up an Ubuntu Lightsail instance pre-configured for Docker, enabling you to deploy and manage containers like WordPress and MySQL Server quickly.</p>
<p>You’ll learn how to:</p>
<ul>
<li>Generate and secure a custom SSH key pair to access the instance.</li>
<li>Use AWS CLI commands and configuration files to launch your Lightsail instance.</li>
<li>Apply a user-data script to automatically install Docker, Docker Compose, and supporting tools during creation.</li>
<li>Assign and attach a static IP address for reliable access.</li>
<li>Connect via SSH and verify your environment.</li>
<li>Clean up resources when they’re no longer needed.</li>
</ul>
<p>By the end of this chapter, you’ll have a fully operational AWS Lightsail instance ready to run Docker containers for WordPress, MySQL and other applications in a secure and repeatable way.</p>
<h2>Create a Custom SSH Key Pair</h2>
<p>Before running ‘aws lightsail create-instances’, you need an SSH key pair so the AWS account can associate it with the new instance. The key pair provides the secure SSH credentials required to connect to the instance after it is created. If you skip this step, you won’t have a valid .pem file to authenticate with your server. By creating the key pair first, you ensure that when you launch the instance, it can be accessed securely using your private key immediately.</p>
<p>Create a directory (e.g., MyUbuntuInstance).</p>
<h3>1. Create the SSH key pair</h3>
<p>Run this in PowerShell (Windows) or bash (Linux/macOS):</p>
<pre><code class="language-bash">aws lightsail create-key-pair --region ap-southeast-2 --key-pair-name MyUbuntuInstanceKeyPair --query privateKeyBase64 --output text &gt; MyUbuntuInstanceKeyPair.pem --profile MyUbuntuProfile
</code></pre>
<h4>Options explained:</h4>
<ul>
<li><strong><code>aws lightsail create-key-pair</code></strong> This command tells the AWS Cli to create a new Lightsail SSH key pair.</li>
<li><strong><code>--region ap-southeast-2</code></strong> Specifies the AWS region (Sydney). If you don’t set this, the AWS Cli defaults to whatever is configured in your AWS profile.</li>
<li><strong><code>--key-pair-name MyUbuntuInstanceKeyPair</code></strong> The name you’re giving to the new key pair in Lightsail. You’ll use this name later when creating an instance with &#8211;key-pair-name.</li>
<li><strong><code>--query privateKeyBase64</code></strong> Filters the command’s JSON output so that only the private key (in base64-encoded text) is returned, not the whole JSON response.</li>
<li><strong><code>--output text</code></strong> Ensures the result is output as plain text instead of JSON. Without this, you’d get JSON formatting that isn’t usable as a .pem file.</li>
<li><strong><code>&gt; MyUbuntuInstanceKeyPair.pem</code></strong> Redirects the output (the private key) into a file called MyUbuntuInstanceKeyPair.pem. This file is what you’ll use with SSH.</li>
<li><strong><code>--profile MyUbuntuProfile</code></strong> Selects which AWS CLI profile to use. This is helpful if you have multiple accounts or credentials configured.</li>
</ul>
<h3>2. Fix permissions</h3>
<p>SSH requires that your .pem file is locked down. SSH refuses to use a .pem file if it’s too “open” (i.e., readable by other users). Locking it down ensures only you can read it.</p>
<p><strong>Linux/macOS:</strong></p>
<pre><code class="language-bash">chmod 600 MyUbuntuInstanceKeyPair.pem
</code></pre>
<h4>Options explained:</h4>
<ul>
<li><strong><code>chmod</code></strong> &#8211; Change file mode (permissions).</li>
<li><strong><code>600</code></strong> &#8211; Sets permissions so that:
<ul>
<li><strong>Owner:</strong> Read and Write</li>
<li><strong>Group:</strong> No permissions</li>
<li><strong>Others:</strong> No permissions</li>
</ul>
</li>
</ul>
<p><strong>Windows PowerShell:</strong></p>
<pre><code class="language-powershell">icacls.exe MyUbuntuInstanceKeyPair.pem /inheritance:r
</code></pre>
<h4>Options explained:</h4>
<ul>
<li><strong><code>icacls.exe</code></strong>  A Windows command-line tool used to view or modify file and folder access control lists (ACLs).</li>
<li><strong><code>MyUbuntuInstanceKeyPair.pem</code></strong> Target file.</li>
<li><strong><code>/inheritance:r</code></strong> Removes inherited permissions (so the file doesn’t inherit broad access rights from the folder).</li>
</ul>
<pre><code class="language-powerhell">icacls.exe MyUbuntuInstanceKeyPair.pem /grant:r "$($env:USERNAME):(R)"
</code></pre>
<ul>
<li><strong><code>/grant:r</code></strong> Grants permissions, replacing any existing ones.</li>
<li><strong><code>"$($env:USERNAME)"</code></strong> Expands to your current Windows username.</li>
<li><strong><code>:(R)</code></strong> Read-only permission.</li>
</ul>
<h3>3. List SSH Key pair names</h3>
<pre><code class="language-bash">aws lightsail get-key-pairs --region ap-southeast-2 --query "keyPairs[].name" --output text --profile MyUbuntuProfile
</code></pre>
<h3>4. Deleting an SSH Key Pair</h3>
<p>If you no longer need the key, delete both to keep your system and AWS environment tidy.</p>
<h4>1. Delete the local .pem file</h4>
<p><strong>Linux/macOS:</strong></p>
<pre><code class="language-bash">rm MyUbuntuInstanceKeyPair.pem
</code></pre>
<p><strong>Windows PowerShell:</strong></p>
<pre><code class="language-powershell">icacls "MyUbuntuInstanceKeyPair.pem" /inheritance:e
</code></pre>
<ul>
<li><strong><code>/inheritance:e</code></strong> re-enables permission inheritance from the parent folder.</li>
<li>This means the file will now take on the normal ACLs (Access Control Lists) from its directory again, instead of being locked to just the user.</li>
</ul>
<pre><code class="language-powershell">icacls "MyUbuntuInstanceKeyPair.pem" /reset
</code></pre>
<ul>
<li><strong><code>/reset</code></strong> wipes any custom permissions on the file.</li>
<li>After this, only the default inherited permissions apply (e.g. Administrators, your user, System). This step ensures you (and Windows) can manage or delete the file normally.</li>
</ul>
<pre><code class="language-powershell">Remove-Item "MyUbuntuInstanceKeyPair.pem" -Force
</code></pre>
<ul>
<li><strong><code>Remove-Item</code></strong>  deletes the file.</li>
<li><strong><code>-Force</code></strong> bypasses prompts and ignores hidden/system attributes if set.</li>
<li>Now that inheritance is restored and ACLs are reset, Windows lets you remove the file without Access Denied errors.</li>
</ul>
<h4>2. Delete the SSH key pair from AWS Lightsail</h4>
<p>First, check which key pairs exist in your region:</p>
<pre><code class="language-bash">aws lightsail get-key-pairs --region ap-southeast-2 --query "keyPairs[].name" --output text --profile MyUbuntuProfile
</code></pre>
<p>Then delete the one you no longer need:</p>
<pre><code class="language-bash">aws lightsail delete-key-pair --key-pair-name MyUbuntuInstanceKeyPair --region ap-southeast-2 --profile MyUbuntuProfile
</code></pre>
<h2>Creating a Lightsail Instance</h2>
<pre><code class="language-bash">aws lightsail create-instances --cli-input-json file://lightsail-instance-config.json --user-data file://userdata.bash --profile MyUbuntuProfile
</code></pre>
<h3>1. Create the Configuration File</h3>
<p>Create a new file named <strong>lightsail-instance-config.json</strong> and add:</p>
<pre><code class="language-json">{
  "instanceNames": ["MyUbuntuInstance"],
  "availabilityZone": "ap-southeast-2a",
  "blueprintId": "ubuntu_24_04",
  "bundleId": "small_3_2",
  "userData":  "",
  "keyPairName": "MyUbuntuInstanceKeyPair",
  "tags": [
    {
      "key": "Docker",
      "value": "WordPress-Docker"
    }
  ]
}

</code></pre>
<h3>2. Create external user-data file</h3>
<p>Create a new file named <strong>userdata.bash</strong> and add:</p>
<pre><code class="language-bash">#!/bin/bash

LOGFILE="/var/log/userdata.log"

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $*" &gt;&gt; "$LOGFILE"
}

log "Start user-data script"

log "sudo apt-get update -y"
sudo apt-get update -y

log "apt-get install -y libarchive-tools"
sudo apt-get install -y libarchive-tools

log "apt install -y zip"
sudo apt install -y zip

log "Install BashNovusTools"
sudo mkdir -p /etc/bashnovustools &amp;&amp; curl -L https://github.com/novuslogic/BashNovusTools/releases/download/v0.1.3/BashNovusTools.v0.1.3.zip -o /tmp/bashnovustools.zip &amp;&amp; sudo bsdtar -xf /tmp/bashnovustools.zip -C /etc/bashnovustools &amp;&amp; sudo chmod +x /etc/bashnovustools/bin/*.sh &amp;&amp; echo 'export PATH=\"/etc/bashnovustools/bin:$PATH\"' | sudo tee /etc/profile.d/bashnovustools.sh

# Update Ubuntu to latest packages
log "Update Ubuntu to latest packages"
sudo /etc/bashnovustools/bin/update-ubuntu.sh

# Install Docker Engine
log "Install Docker Engine"
sudo /etc/bashnovustools/bin/install-docker-engine.sh

# Install Docker Compose
log "Install Docker Compose"
sudo /etc/bashnovustools/bin/install-docker-compose.sh

# Add ubuntu user to docker group (will take effect on next login)
log "Add ubuntu user to docker group"
sudo /usr/sbin/usermod -aG docker ubuntu || true


log "End user-data script" 

</code></pre>
<h2>Create a static IP</h2>
<h3>1. Pick a unique name for it (e.g. MyUbuntuInstanceStaticIP):</h3>
<pre><code class="language-bash">aws lightsail allocate-static-ip --static-ip-name MyUbuntuInstanceStaticIP --region ap-southeast-2 --profile MyUbuntuProfile
</code></pre>
<h3>2. Attach a public static IP address to the instance</h3>
<pre><code class="language-bash">aws lightsail attach-static-ip --static-ip-name MyUbuntuInstanceStaticIP --instance-name MyUbuntuInstance --region ap-southeast-2 --profile MyUbuntuProfile
</code></pre>
<h3>3. Verify</h3>
<pre><code class="language-bash">aws lightsail get-static-ip --static-ip-name MyUbuntuInstanceStaticIP --region ap-southeast-2 --profile MyUbuntuProfile
</code></pre>
<h3>4. Test the SSH Connection</h3>
<p>Replace &lt;STATIC_IP&gt; with the address returned above:</p>
<pre><code class="language-bash">ssh -i MyUbuntuInstanceKeyPair.pem ubuntu@&lt;STATIC_IP&gt;
</code></pre>
<p>If you see a “bad permissions” warning on Linux/macOS, re-run chmod 600 MyUbuntuInstanceKeyPair.pem.<br />
On Windows, re-apply the icacls steps.</p>
<h2>Clean up resources</h2>
<p>Are you finished with your AWS Lightsail instance? Before you move on, take a few minutes to clean up all associated resources. Not only will this help you avoid surprise charges, but it will also keep your AWS account organized and secure.</p>
<h3>1. Release the Static IP</h3>
<p>If you have a static IP attached to your instance, make sure to release it first. Otherwise, AWS may keep charging you for the reserved IP.</p>
<pre><code class="language-bash">aws lightsail release-static-ip --static-ip-name MyUbuntuInstanceStaticIP --region ap-southeast-2 --profile MyUbuntuProfile
</code></pre>
<h3>2. Delete the Instance</h3>
<p>Next, delete the AWS Lightsail instance. This action is permanent and will result in the loss of all data on the instance.</p>
<pre><code class="language-bash">aws lightsail delete-instance --instance-name MyUbuntuInstance --region ap-southeast-2 --profile MyUbuntuProfile
</code></pre>
<h3>3. Delete the SSH Key Pair in AWS Lightsail</h3>
<p>Next, Delete the SSH Key Pair</p>
<pre><code class="language-bash">aws lightsail delete-key-pair --key-pair-name MyUbuntuInstanceKeyPair --region ap-southeast-2 --profile MyUbuntuProfile
</code></pre>
<h2>Further Reading</h2>
<ul>
<li><a href="https://github.com/novuslogic/BashNovusTools/">BashNovusTools</a></li>
<li><a href="https://docs.aws.amazon.com/lightsail/">AWS Lightsail Documentation</a></li>
<li><a href="https://docs.docker.com/">Docker Official Docs</a></li>
</ul>
<p><a href="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png" data-wplink-edit="true"><img data-attachment-id="1209" data-permalink="https://adamjohnston.me/using-wordpress-on-aws-lightsail-and-docker/title_page/" data-orig-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=412%2C618&amp;ssl=1" data-orig-size="412,618" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="title_page" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=200%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=683%2C1024&amp;ssl=1" loading="lazy" class="alignnone size-medium wp-image-1209" src="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394-200x300.png?resize=200%2C300" alt="" width="200" height="300" srcset="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?resize=200%2C300&amp;ssl=1 200w, https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?w=412&amp;ssl=1 412w" sizes="(max-width: 200px) 100vw, 200px" data-recalc-dims="1" /></a></p>
<h2><a href="https://leanpub.com/wordpressawslightsail">Using WordPress on AWS Lightsail and Docker</a></h2>
]]></content:encoded>
					
					<wfw:commentRss>https://adamjohnston.me/lightsail-instance-for-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1275</post-id>	</item>
		<item>
		<title>BashNovusTools</title>
		<link>https://adamjohnston.me/bashnovustools/</link>
					<comments>https://adamjohnston.me/bashnovustools/#respond</comments>
		
		<dc:creator><![CDATA[Adam Craig Johnston]]></dc:creator>
		<pubDate>Sat, 27 Jun 2026 13:01:12 +0000</pubDate>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://adamjohnston.me/?p=1264</guid>

					<description><![CDATA[BashNovusTools is a collection of Linux administration scripts for common deployment and operations tasks. It provides commands for installing Docker, managing Docker access and services, and updating Ubuntu packages. The project can be used directly from source or packaged as a Snap. https://github.com/novuslogic/BashNovusTools]]></description>
										<content:encoded><![CDATA[<p>BashNovusTools is a collection of Linux administration scripts for common deployment and operations tasks. It provides commands for installing Docker, managing Docker access and services, and updating Ubuntu packages. The project can be used directly from source or packaged as a Snap.</p>
<p><a href="https://github.com/novuslogic/BashNovusTools">https://github.com/novuslogic/BashNovusTools</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://adamjohnston.me/bashnovustools/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1264</post-id>	</item>
		<item>
		<title>Installing AWS CLI</title>
		<link>https://adamjohnston.me/installing-aws-cli/</link>
					<comments>https://adamjohnston.me/installing-aws-cli/#respond</comments>
		
		<dc:creator><![CDATA[Adam Craig Johnston]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 13:35:47 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Using WordPress on AWS Lightsail and Docker]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://adamjohnston.me/?p=1250</guid>

					<description><![CDATA[Summary The&#160;AWS CLI&#160;is a command-line tool that lets you manage and automate AWS services including Lightsail using PowerShell, Command Prompt, or Terminal. With AWS CLI, you can automate tasks, configure AWS resources, and streamline the deployment and management of Lightsail instances, Docker containers, and WordPress environments. Prerequisites Python (if applicable): Required only for AWS CLI [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 id="summary">Summary</h2>



<p>The&nbsp;<strong>AWS CLI</strong>&nbsp;is a command-line tool that lets you manage and automate AWS services including Lightsail using PowerShell, Command Prompt, or Terminal. With AWS CLI, you can automate tasks, configure AWS resources, and streamline the deployment and management of Lightsail instances, Docker containers, and WordPress environments.</p>



<h2 id="prerequisites">Prerequisites</h2>



<ul><li><strong>Python (if applicable):</strong><ul><li><strong>Required only for AWS CLI v1 (installed via pip):</strong>&nbsp;Python 3.7 or later recommended.</li><li><strong>AWS CLI v2:</strong>&nbsp;Python is bundled; you don&#8217;t need to install it separately.</li></ul></li><li><strong>Administrator or sudo privileges:</strong>&nbsp;Required for installation and configuration on most systems.</li></ul>



<h2 id="installation">Installation</h2>



<p><strong>Tip:</strong>&nbsp;All commands below should be run in your system&#8217;s terminal, PowerShell, or command prompt.</p>



<h3 id="windows">Windows</h3>



<h4 id="-option-1-msi-installer-"><strong>Option 1: MSI Installer</strong></h4>



<ol><li>Download the installer from the&nbsp;<a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html">official AWS CLI documentation</a>.</li><li>Run the installer (e.g.,&nbsp;<code>AWSCLIV2.msi</code>).<em>Or, run this command:</em><code>msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi</code></li></ol>



<h4 id="-option-2-chocolatey-"><strong>Option 2: Chocolatey</strong></h4>



<p><a href="https://community.chocolatey.org/packages/awscli">Chocolatey</a>&nbsp;is a command-line package manager for Windows.</p>



<p>To install or upgrade AWS CLI:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
choco upgrade awscli

</pre></div>


<h4 id="-verify-installation-"><strong>Verify Installation</strong></h4>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
aws --version

</pre></div>


<h3 id="linux">Linux</h3>



<h4 id="-option-1-official-bundled-installer-"><strong>Option 1: Official Bundled Installer</strong></h4>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
curl &quot;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&quot; -o &quot;awscliv2.zip&quot;
unzip awscliv2.zip
sudo ./aws/install
rm -rf awscliv2.zip aws/

</pre></div>


<h4 id="-option-2-snap-ubuntu-debian-"><strong>Option 2: Snap (Ubuntu/Debian)</strong></h4>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo snap install aws-cli --classic

</pre></div>


<h4 id="-verify-installation-"><strong>Verify Installation</strong></h4>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
aws --version

</pre></div>


<h3 id="macos">macOS</h3>



<h4 id="-option-1-homebrew-"><strong>Option 1: Homebrew</strong></h4>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
brew update
brew install awscli

</pre></div>


<h4 id="-verify-installation-"><strong>Verify Installation</strong></h4>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
aws --version

</pre></div>


<h2 id="creating-an-iam-user-group-for-lightsail-access">Creating an IAM User Group for Lightsail Access</h2>



<p>You can use either a&nbsp;<strong>service-linked role</strong>&nbsp;(created automatically by Lightsail) or set up a custom role with your own group and permissions.</p>



<h3 id="1-sign-in-to-the-aws-management-console">1. Sign in to the AWS Management Console</h3>



<ul><li>Go to the&nbsp;<strong>IAM (Identity and Access Management)</strong>&nbsp;service (search for &#8220;IAM&#8221; in the AWS Console search bar).</li></ul>



<h3 id="2-create-a-user-group">2. Create a User Group</h3>



<ul><li>Navigate to&nbsp;<strong>User groups</strong>&nbsp;?&nbsp;<strong>Create group</strong>.</li><li>Name your group (e.g.,&nbsp;<code>LightsailUsers</code>).</li><li>(Optional) Add users now, or skip and add later.</li><li>Click&nbsp;<strong>Next</strong>.</li></ul>



<h3 id="3-attach-permissions">3. Attach Permissions</h3>



<ul><li>In&nbsp;<strong>Attach permissions policies</strong>, search for&nbsp;<code>AdministratorAccess</code>.</li><li>Check the box for&nbsp;<code>AdministratorAccess</code>.</li><li>Click&nbsp;<strong>Next</strong>, then&nbsp;<strong>Create group</strong>.</li></ul>



<h3 id="4-add-users-if-you-didn-t-earlier-">4. Add Users (if you didn�t earlier)</h3>



<ul><li>In&nbsp;<strong>User groups</strong>, select your group.</li><li>Go to the&nbsp;<strong>Users</strong>&nbsp;tab, click&nbsp;<strong>Create user</strong>.</li></ul>



<h3 id="5-create-user-access-key">5. Create User &amp; Access Key</h3>



<ul><li>Set a username (e.g.,&nbsp;<code>developer</code>).</li><li>Leave console access unchecked (optional).</li><li>On&nbsp;<strong>Permissions</strong>, choose&nbsp;<strong>Add user to group</strong>&nbsp;and pick&nbsp;<code>LightsailUsers</code>.</li><li>Skip permission boundaries (optional).</li><li>Click&nbsp;<strong>Create user</strong>.</li></ul>



<h4 id="-create-access-key-"><strong>Create Access Key:</strong></h4>



<ul><li>In&nbsp;<strong>Users</strong>, click your user&#8217;s name.</li><li>Go to&nbsp;<strong>Security credentials</strong>&nbsp;tab, click&nbsp;<strong>Create access key</strong>.</li><li>Select&nbsp;<strong>Command Line Interface (CLI)</strong>.</li><li>Confirm recommendations and continue.</li><li>Download your credentials&nbsp;<code>.csv</code>&nbsp;and store securely.</li></ul>



<blockquote class="wp-block-quote"><p><strong>Tip:</strong>&nbsp;Tags (key-value pairs) can help organize and automate your Lightsail resources.</p></blockquote>



<h2 id="aws-cli-configuration">AWS CLI Configuration</h2>



<h3 id="1-run-the-aws-configure-command">1. Run the&nbsp;<code>aws configure</code>&nbsp;Command</h3>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
aws configure

</pre></div>


<p>You&#8217;ll be prompted for:</p>



<ul><li><strong>AWS Access Key ID:</strong>&nbsp;(From your downloaded&nbsp;<code>.csv</code>)</li><li><strong>AWS Secret Access Key:</strong>&nbsp;(From your downloaded&nbsp;<code>.csv</code>)</li><li><strong>Default region name:</strong>&nbsp;(e.g.,&nbsp;<code>ap-southeast-2</code>)</li><li><strong>Default output format:</strong>&nbsp;(<code>json</code>,&nbsp;<code>text</code>, or&nbsp;<code>table</code>)</li></ul>



<p>These are stored as your&nbsp;<strong>default profile</strong>.</p>



<h3 id="2-add-additional-profiles-optional-">2. Add Additional Profiles (Optional)</h3>



<p>You can create multiple named profiles (for different users/accounts):</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
aws configure --profile MyUbuntuProfile

</pre></div>


<h3 id="3-where-profiles-are-stored">3. Where Profiles Are Stored</h3>



<p>Profiles are kept in two files:</p>



<ul><li><strong>Linux/macOS:</strong>&nbsp;<code>~/.aws/</code></li><li><strong>Windows:</strong>&nbsp;<code>C:\Users\&lt;YourUsername&gt;\.aws\</code></li></ul>



<p><strong>Files:</strong></p>



<ul><li><strong><code>credentials</code></strong>&nbsp;&#8211; stores access keys</li><li><strong><code>config</code></strong>&nbsp;&#8211; stores region and output format</li></ul>



<p><strong>Example:</strong></p>



<p><code>~/.aws/credentials</code></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
&#x5B;default]
aws_access_key_id = AKIAEXAMPLE1
aws_secret_access_key = secret1

&#x5B;MyUbuntuInstance]
aws_access_key_id = AKIAEXAMPLE2
aws_secret_access_key = secret2

</pre></div>


<p><code>~/.aws/config</code></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
&#x5B;default]
region = ap-southeast-2
output = json

&#x5B;profile MyUbuntuInstance]
region = us-west-2
output = table

</pre></div>


<h2 id="using-multi-profiles">Using Multi-Profiles</h2>



<p>Multi-profiles allow you to easily switch between AWS accounts, users, or environments from a single machine.</p>



<ul><li><strong>View all profiles:</strong><code>aws configure list-profiles</code></li><li><strong>Use a profile:</strong><code>aws s3 ls --profile default aws ec2 describe-instances --profile MyUbuntuProfile</code></li></ul>



<h2 id="further-reading">Further Reading</h2>



<ul><li><a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html">AWS CLI Official Docs &#8211; Installation &amp; Configuration</a></li></ul>


<p><a href="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png" data-wplink-edit="true"><img data-attachment-id="1209" data-permalink="https://adamjohnston.me/using-wordpress-on-aws-lightsail-and-docker/title_page/" data-orig-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=412%2C618&amp;ssl=1" data-orig-size="412,618" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="title_page" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=200%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=683%2C1024&amp;ssl=1" loading="lazy" class="alignnone size-medium wp-image-1209" src="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394-200x300.png?resize=200%2C300" alt="" width="200" height="300" srcset="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?resize=200%2C300&amp;ssl=1 200w, https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?w=412&amp;ssl=1 412w" sizes="(max-width: 200px) 100vw, 200px" data-recalc-dims="1" /></a></p>
<h2><a href="https://leanpub.com/wordpressawslightsail">Using WordPress on AWS Lightsail and Docker</a></h2>]]></content:encoded>
					
					<wfw:commentRss>https://adamjohnston.me/installing-aws-cli/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1250</post-id>	</item>
		<item>
		<title>Installing Desktop Docker</title>
		<link>https://adamjohnston.me/installing-desktop-docker/</link>
					<comments>https://adamjohnston.me/installing-desktop-docker/#respond</comments>
		
		<dc:creator><![CDATA[Adam Craig Johnston]]></dc:creator>
		<pubDate>Sat, 06 Jun 2026 11:33:34 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Using WordPress on AWS Lightsail and Docker]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://adamjohnston.me/?p=1226</guid>

					<description><![CDATA[Summary For Local Docker Development. We could use Docker Engine, which is the primary container runtime that runs directly on Linux and Windows servers. It is built for production use because it is lightweight, stable, and can be automated with command-line tools, system services, and CI/CD pipelines. This setup provides the performance and control necessary [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2 id="summary">Summary</h2>
<p>For <strong>Local Docker Development</strong>. We could use Docker Engine, which is the primary container runtime that runs directly on Linux and Windows servers. It is built for production use because it is lightweight, stable, and can be automated with command-line tools, system services, and CI/CD pipelines. This setup provides the performance and control necessary to run applications at scale. On the other hand, Docker Desktop is meant for development on macOS, Windows, and Linux desktops. It includes Docker Engine inside a small virtual machine and adds a graphical dashboard, resource controls, Docker Compose, and optional Kubernetes for local testing. In short, Docker Engine runs containers in production, while Docker Desktop provides the developer with an easy way to build, test, and debug containers locally before deploying them to production.</p>
<p>We will install Docker Desktop for our development work on either Windows, Linux, or macOS.</p>
<h2 id="installing-docker-desktop">Installing Docker Desktop</h2>
<h3 id="windows-11-or-higher">Windows 11 or higher</h3>
<h4 id="1-prerequisites">1. Prerequisites</h4>
<p>Before installing Docker Desktop on Windows:</p>
<ul>
<li><code>Windows Version:</code> You need Windows 11 or a newer version. Docker Desktop uses Hyper-V and WSL2.</li>
<li><code>Hardware Requirements:</code> Your system must support virtualization technology enabled in BIOS. Docker Desktop for Windows requires at least 4GB RAM and recommends SSD storage for optimal performance.</li>
<li><code>Licensing:</code> Docker Desktop is free for individuals, education, and small businesses (&lt; 250 employees or &lt; $10 million revenue). Large enterprises need a paid plan.</li>
</ul>
<h4 id="2-install-wsl2-">2. Install WSL2:</h4>
<ul>
<li>
<ol>
<li>Open PowerShell as an Administrator, then enter the following command.</li>
</ol>
</li>
</ul>
<pre><code class="lang-powwrshell">dism.exe <span class="hljs-regexp">/online /</span>enable-feature <span class="hljs-regexp">/featurename:Microsoft-Windows-Subsystem-Linux /</span>all <span class="hljs-regexp">/norestart</span>
</code></pre>
<p>This enables the core WSL feature on your system.</p>
<ul>
<li>
<ol>
<li>Enable Virtual Machine Platform</li>
</ol>
</li>
</ul>
<p>WSL 2 requires the Virtual Machine Platform feature to run the Linux kernel:</p>
<pre><code>dism.exe <span class="hljs-regexp">/online /</span>enable-feature <span class="hljs-regexp">/featurename:VirtualMachinePlatform /</span>all <span class="hljs-regexp">/norestart</span>
</code></pre>
<ul>
<li>
<ol>
<li>Set WSL 2 as the Default Version</li>
</ol>
</li>
</ul>
<pre><code class="lang-powershell">wsl --install
wsl --<span class="hljs-keyword">set</span>-<span class="hljs-keyword">default</span>-version <span class="hljs-number">2</span>
</code></pre>
<p>If prompted, please reboot your system and launch Ubuntu from the Microsoft Store once to complete the setup.</p>
<h4 id="3-download-and-install-docker-desktop-for-windows-">3. Download and install Docker Desktop for Windows.</h4>
<h5 id="1-install-via-gui-recommended-for-most-users-download-manually">1. Install via GUI (Recommended for Most Users) &#8211; Download Manually</h5>
<p>The simplest and most popular way to install Docker Desktop on Windows 11 or higher is described here.</p>
<p>Go to the official download page:</p>
<p><a href="https://docs.docker.com/desktop/setup/install/windows-install/">Install Docker Desktop on Windows</a></p>
<ul>
<li>
<ol>
<li>Click <code>Download Docker Desktop for Windows</code>.</li>
</ol>
</li>
<li>
<ol>
<li>Save the file (for example, Docker Desktop Installer.exe).</li>
</ol>
</li>
<li>
<ol>
<li>Double-click the installer to start setup.</li>
</ol>
</li>
</ul>
<h5 id="2-curl-with-cmd-or-powershell">2. Curl with CMD or Powershell</h5>
<p>Below is a single CMD command to download and silently install Docker Desktop with the WSL 2 backend. Please run as Administrator.</p>
<pre><code class="lang-cmd">curl -L <span class="hljs-string">"https://desktop.docker.com/win/main/amd64/Docker%%20Desktop%%20Installer.exe"</span> -o <span class="hljs-string">"%TEMP%\DockerDesktopInstaller.exe"</span> &amp;&amp; start /w <span class="hljs-string">""</span> <span class="hljs-string">"%TEMP%\DockerDesktopInstaller.exe"</span> install --<span class="hljs-keyword">accept</span>-license --quiet --backend=wsl-<span class="hljs-number">2</span>
</code></pre>
<h5 id="3-chocolatey">3. Chocolatey</h5>
<p>To install Docker Desktop on Windows using Chocolatey, run the following, Open PowerShell as Administrator and run:</p>
<h6 id="1-check-if-chocolatey-is-installed">1. Check if Chocolatey is installed</h6>
<pre><code class="lang-powershell"><span class="hljs-attribute">choco -v</span>
</code></pre>
<p>If a version number, such as 2.2.2, appears, the process is complete. If not, please install it using the following command:</p>
<pre><code class="lang-powershell"><span class="hljs-keyword">Set</span>-ExecutionPolicy <span class="hljs-comment">Bypass -Scope Process -Force</span>; [<span class="hljs-keyword">System</span>.Net.ServicePointManager]::SecurityProtocol = [<span class="hljs-keyword">System</span>.Net.ServicePointManager]::SecurityProtocol -bor <span class="hljs-number">3072</span>; iex ((New-Object <span class="hljs-keyword">System</span>.Net.WebClient).DownloadString(<span class="hljs-string">'https://community.chocolatey.org/install.ps1'</span>))
</code></pre>
<h6 id="2-install-docker-desktop">2. Install Docker Desktop</h6>
<pre><code class="lang-powershell">choco <span class="hljs-keyword">install</span> docker-desktop -y
</code></pre>
<ul>
<li><code>choco</code> Chocolatey command-line tool.</li>
<li><code>install</code> Checks for a lastest version of the package and installs it.</li>
<li><code>docker-desktop</code> The name of the Docker Desktop package.</li>
<li><code>-y</code> automatically accepts prompts.</li>
</ul>
<h6 id="3-update-docker-desktop">3. Update Docker Desktop</h6>
<pre><code class="lang-powershell"> choco upgrade docker-desktop -y
`
</code></pre>
<ul>
<li><code>choco</code> Chocolatey command-line tool.</li>
<li><code>upgrade</code> Checks for a newer version of the package and installs it.</li>
<li><code>docker-desktop</code> The name of the Docker Desktop package.</li>
<li><code>-y</code> automatically accepts prompts.</li>
</ul>
<h3 id="install-on-macos">Install on macOS</h3>
<h4 id="1-prerequisites">1. Prerequisites</h4>
<p>Before installing Docker Desktop on macOS:</p>
<ul>
<li><code>MacOS Version</code> Requires macOS Monterey (12) or newer.</li>
<li><code>Hardware Requirements</code> You need an Intel or Apple Silicon (M1, M2, M3, or newer) CPU, at least 4 GB of RAM, and 2 GB of free disk space.</li>
<li><code>Virtualization</code> Make sure Rosetta 2 is enabled for Apple Silicon, or Hypervisor Framework is enabled for Intel.</li>
<li><code>Licensing</code> Same free-tier rules apply as Windows.</li>
</ul>
<p>Docker Desktop for macOS can be installed in three ways:</p>
<h5 id="1-install-via-gui-recommended-for-most-users-">1. Install via GUI (Recommended for Most Users)</h5>
<ul>
<li>
<ol>
<li>Download Installer &#8211; Visit the official Docker Desktop for Mac download page <a href="https://docs.docker.com/desktop/setup/install/mac-install/">Install Docker Desktop on Mac</a>.</li>
</ol>
</li>
<li>
<ol>
<li>Choose the correct version and download:
<ul>
<li><a href="https://desktop.docker.com/mac/main/arm64/Docker.dmg?utm_source=docker&amp;utm_medium=webreferral&amp;utm_campaign=docs-driven-download-mac-arm64&amp;_gl=1*lb0mcn*_gcl_au*Nzk1NTkwMTE3LjE3NjIxNjk3ODU.*_ga*MTYzMzE2OTQzNy4xNzYyMTY5Nzg1*_ga_XJWPQMJYHQ*czE3NjIzNDM5NjUkbzMkZzEkdDE3NjIzNDU0NjMkajU5JGwwJGgw">Apple Silicon <code>Docker.dmg</code> Apple Chip</a></li>
<li><a href="https://desktop.docker.com/mac/main/amd64/Docker.dmg?utm_source=docker&amp;utm_medium=webreferral&amp;utm_campaign=docs-driven-download-mac-amd64&amp;_gl=1*hc9vj6*_gcl_au*Nzk1NTkwMTE3LjE3NjIxNjk3ODU.*_ga*MTYzMzE2OTQzNy4xNzYyMTY5Nzg1*_ga_XJWPQMJYHQ*czE3NjIzNDM5NjUkbzMkZzEkdDE3NjIzNDU1NDYkajYwJGwwJGgw">Intel <code>Docker.dmg</code> Intel Chip</a></li>
</ul>
</li>
</ol>
</li>
<li>
<ol>
<li>Open the Installer
<ul>
<li>Double-click the downloaded .dmg file.</li>
<li>Drag the Docker.app icon into the Applications folder.</li>
</ul>
</li>
</ol>
</li>
<li>
<ol>
<li>Launch Docker Desktop
<ul>
<li>Open Applications folder and launch Docker.app.</li>
<li>The first time you open the program, you might be asked to enter your system password.</li>
<li>Wait for the whale docker icon to appear in the macOS status bar.</li>
</ul>
</li>
</ol>
</li>
</ul>
<h5 id="2-using-homebrew-command-line-install-homebrew-https-brew-sh-">2. Using Homebrew (Command Line Install) <a href="https://brew.sh/">Homebrew</a></h5>
<p>Homebrew is a package manager for macOS that simplifies installing applications from the command line.</p>
<ul>
<li>
<ol>
<li>Open the Terminal App, in Terminal run:</li>
</ol>
</li>
</ul>
<pre><code class="lang-bash">/<span class="hljs-keyword">bin/bash </span>-c <span class="hljs-string">"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"</span>
</code></pre>
<ul>
<li>
<ol>
<li>Once installed, verify:</li>
</ol>
</li>
</ul>
<pre><code class="lang-bash">brew <span class="hljs-comment">--version</span>
</code></pre>
<ul>
<li>
<ol>
<li>Install Docker Desktop via Homebrew</li>
</ol>
</li>
</ul>
<p>Homebrew downloads and installs the latest version of Docker Desktop that works with your Mac�s architecture, whether it is Intel or Apple Silicon.</p>
<pre><code class="lang-bash"><span class="hljs-keyword">brew </span><span class="hljs-keyword">install </span>--cask docker
</code></pre>
<ul>
<li>
<ol>
<li>Once the installation is complete, open Docker Desktop. Wait until you see the whale Docker icon in the macOS status bar.</li>
</ol>
</li>
</ul>
<pre><code class="lang-bash"><span class="hljs-keyword">open</span> /Applications/Docker.<span class="hljs-keyword">app</span>
</code></pre>
<h5 id="3-using-mac-app-store-apple-silicon-only-">3. Using Mac App Store (Apple Silicon only)</h5>
<ul>
<li>
<ol>
<li>Open the Mac App Store</li>
</ol>
</li>
<li>
<ol>
<li>In the top-left corner of the App Store window, click the Search bar.</li>
</ol>
</li>
<li>
<ol>
<li>Type Docker Desktop and press Return.</li>
</ol>
</li>
<li>
<ol>
<li>You should see the official app listed as Docker Desktop Developer Tools by Docker Inc.</li>
</ol>
</li>
<li>
<ol>
<li>macOS will automatically download and install Docker Desktop in your Applications folder. Please wait until the download finishes.</li>
</ol>
</li>
<li>
<ol>
<li>Once the installation is complete, open Docker Desktop. Wait until you see the whale Docker icon in the macOS status bar.</li>
</ol>
</li>
</ul>
<pre><code class="lang-bash"><span class="hljs-keyword">open</span> /Applications/Docker.<span class="hljs-keyword">app</span>
</code></pre>
<h3 id="install-on-linux-ubuntu-24-04-">Install on Linux (Ubuntu 24.04)</h3>
<ul>
<li>
<ol>
<li>Add Official Docker Repository</li>
</ol>
</li>
</ul>
<p>Before you install Docker Desktop, you need Docker’s CLI and daemon packages to be available through its official repositories</p>
<p>Open a terminal (Ctrl+Alt+T) and run the following:</p>
<pre><code class="lang-bash">sudo apt <span class="hljs-keyword">update</span>
sudo apt install apt-transport-https <span class="hljs-keyword">ca</span>-certificates curl gnupg -<span class="hljs-built_in">y</span>

</code>These packages enable HTTPS access to repositories and manage trusted keys.</pre>
<p>Now, import the Docker GPG key and add the official Ubuntu repo:</p>
<pre><code class="lang-bash">sudo apt install apt-transport-https ca-certificates curl gnupg
curl -fsSL <span class="hljs-string">https:</span><span class="hljs-comment">//download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg</span>
echo <span class="hljs-string">"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu noble stable"</span> | sudo tee <span class="hljs-regexp">/etc/</span>apt<span class="hljs-regexp">/sources.list.d/</span>docker.list &gt; <span class="hljs-regexp">/dev/</span><span class="hljs-literal">null</span>
</code></pre>
<p>Then update your package index:</p>
<pre><code class="lang-bash"><span class="hljs-attribute">sudo apt update</span>
</code></pre>
<ul>
<li>
<ol>
<li>Download the Docker Desktop .deb Package</li>
</ol>
</li>
</ul>
<p>Docker Desktop for Linux comes as a .deb file. To get the latest version, you can use curl</p>
<pre><code class="lang-bash">curl -fsSL -<span class="hljs-keyword">o</span> docker-desktop.<span class="hljs-keyword">deb</span> http<span class="hljs-variable">s:</span>//desktop.docker.<span class="hljs-keyword">com</span>/linux/main/amd64/docker-desktop-latest.<span class="hljs-keyword">deb</span>
</code></pre>
<ul>
<li>
<ol>
<li>Install Docker Desktop</li>
</ol>
</li>
</ul>
<p>After you download the package, use apt to install it. This will make sure all the needed dependencies are installed automatically.</p>
<pre><code class="lang-bash">sudo apt <span class="hljs-keyword">install</span> ./docker-desktop.deb
</code></pre>
<p>This process installs Docker Desktop and its main components, such as:</p>
<pre><code><span class="hljs-comment">    * Docker Engine</span>
<span class="hljs-comment">    * Docker CLI (docker command)</span>
<span class="hljs-comment">    * Docker Compose</span>
<span class="hljs-comment">    * Docker Desktop system service</span>
</code></pre>
<ul>
<li>
<ol>
<li>Enable User Access to Docker</li>
</ol>
</li>
</ul>
<p>If you want to run Docker commands without using sudo, add your user to the docker group. The newgrp command lets you apply your group changes right away, so you do not need to log out first.</p>
<pre><code class="lang-bash">sudo usermod -aG docker $<span class="hljs-keyword">USER</span>
<span class="hljs-title">newgrp</span> docker
`
</code></pre>
<ul>
<li>
<ol>
<li>Launch Docker Desktop</li>
</ol>
</li>
</ul>
<p>Now you can start Docker Desktop with</p>
<pre><code class="lang-bash">systemctl --<span class="hljs-keyword">user</span> <span class="hljs-title">start</span> docker-desktop
`
</code></pre>
<h2 id="verify-docker-desktop-installation">Verify Docker Desktop Installation</h2>
<ul>
<li>
<ol>
<li>Start Docker Desktop</li>
</ol>
</li>
<li><code>Windows:</code> Find &#8220;Docker Desktop&#8221; in the Start Menu and open it. You should then see the Docker whale icon in the system tray.</li>
<li><code>Mac:</code> Open your Applications folder, find &#8220;Docker Desktop,&#8221; and start it. The Docker whale icon will show up in the menu bar.</li>
<li><code>Linux (Ubuntu 24.04):</code> The location and icon for launching Docker Desktop can vary depending on your Linux distribution. Check your distribution’s documentation or search for &#8220;Docker Desktop&#8221; in your application launcher for more information.</li>
<li>
<ol>
<li>Verify Docker Engine and Client</li>
</ol>
</li>
</ul>
<p>Open your terminal, command prompt, then run this command.</p>
<pre><code class="lang-bash">docker <span class="hljs-comment">--version</span>
</code></pre>
<p>This command shows the version of the Docker client and engine, so you can check that Docker is installed and working from your command line.</p>
<ul>
<li>
<ol>
<li>Run a Test Container</li>
</ol>
</li>
</ul>
<p>Execute the &#8220;hello-world&#8221; container to verify that Docker can pull images, create and run containers, then run this command.</p>
<pre><code class="lang-bash">docker <span class="hljs-keyword">run</span><span class="bash"> hello-world</span>
</code></pre>
<p>If the process works correctly, you will see a message</p>
<pre><code class="lang-bash">Hello <span class="hljs-keyword">from</span> Docker!
This message shows <span class="hljs-keyword">that</span> your installation appears <span class="hljs-keyword">to</span> be working correctly.
</code></pre>
<p>This confirms that the Docker engine, container networking, image pulling, and runtime execution are functioning correctly.</p>
<h2 id="further-reading">Further Reading</h2>
<ul>
<li><a href="https://learn.microsoft.com/en-us/windows/wsl/install">How to install Linux on Windows with WSL</a></li>
<li><a href="https://chocolatey.org/install">Installing Chocolatey</a></li>
<li><a href="https://docs.docker.com/desktop/setup/install/windows-install/">Install Docker Desktop on Windows</a></li>
<li><a href="https://docs.docker.com/desktop/setup/install/mac-install/">Install Docker Desktop on Mac</a></li>
<li><a href="https://brew.sh/">Homebrew</a></li>
<li><a href="https://docs.docker.com/desktop/setup/install/linux/ubuntu/">Install Docker Desktop on Linux (Ubuntu Example)</a></li>
</ul>
<h2><a href="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png"><img data-attachment-id="1209" data-permalink="https://adamjohnston.me/using-wordpress-on-aws-lightsail-and-docker/title_page/" data-orig-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=412%2C618&amp;ssl=1" data-orig-size="412,618" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="title_page" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=200%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=683%2C1024&amp;ssl=1" loading="lazy" class="alignnone size-medium wp-image-1209" src="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394-200x300.png?resize=200%2C300" alt="" width="200" height="300" srcset="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?resize=200%2C300&amp;ssl=1 200w, https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?w=412&amp;ssl=1 412w" sizes="(max-width: 200px) 100vw, 200px" data-recalc-dims="1" /></a></h2>
<h2><a href="https://leanpub.com/wordpressawslightsail">Using WordPress on AWS Lightsail and Docker</a></h2>
]]></content:encoded>
					
					<wfw:commentRss>https://adamjohnston.me/installing-desktop-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1226</post-id>	</item>
		<item>
		<title>Using WordPress on AWS Lightsail and Docker &#8211; Early Access Edition</title>
		<link>https://adamjohnston.me/using-wordpress-on-aws-lightsail-and-docker/</link>
					<comments>https://adamjohnston.me/using-wordpress-on-aws-lightsail-and-docker/#respond</comments>
		
		<dc:creator><![CDATA[Adam Craig Johnston]]></dc:creator>
		<pubDate>Sun, 24 May 2026 11:52:39 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Using WordPress on AWS Lightsail and Docker]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://adamjohnston.me/?p=1206</guid>

					<description><![CDATA[Learn how to deploy WordPress on AWS Lightsail using Docker. This book provides a clear, step-by-step guide to setting up the AWS CLI, creating a Lightsail virtual server, installing Docker, and deploying WordPress with Docker Compose.You will also explore how to automate WordPress theme deployments using WP-CLI and CI/CD pipelines. It is designed for developers, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-text-align-left has-text-align-justify has-small-font-size" id="Using-WordPress-on-AWS-Lightsail-and-Docker"><img data-attachment-id="1209" data-permalink="https://adamjohnston.me/using-wordpress-on-aws-lightsail-and-docker/title_page/" data-orig-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=412%2C618&amp;ssl=1" data-orig-size="412,618" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="title_page" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=200%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623451394.png?fit=683%2C1024&amp;ssl=1" class="wp-image-1209" style="width: 150px;" src="https://i0.wp.com/adamjohnston.me/wp-content/uploads/2026/05/title_page-e1779623271306.png" alt="" data-recalc-dims="1">      </p>



<p>Learn how to deploy WordPress on AWS Lightsail using Docker.</p>



<p>This book provides a clear, step-by-step guide to setting up the AWS CLI, creating a Lightsail virtual server, installing Docker, and deploying WordPress with Docker Compose.<br>You will also explore how to automate WordPress theme deployments using WP-CLI and CI/CD pipelines.</p>



<p>It is designed for developers, site owners, and technical users who want a simpler, more reliable, and more secure approach to WordPress deployment using DevOps practices.</p>



<p>Early Access Edition</p>



<p><h2><a href="https://leanpub.com/wordpressawslightsail">Using WordPress on AWS Lightsail and Docker</a></h2></p>
]]></content:encoded>
					
					<wfw:commentRss>https://adamjohnston.me/using-wordpress-on-aws-lightsail-and-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1206</post-id>	</item>
		<item>
		<title>NovuscodeLibrary update for Delphi 11</title>
		<link>https://adamjohnston.me/novuscodelibrary-update-for-delphi-11/</link>
					<comments>https://adamjohnston.me/novuscodelibrary-update-for-delphi-11/#respond</comments>
		
		<dc:creator><![CDATA[Adam Craig Johnston]]></dc:creator>
		<pubDate>Mon, 17 Jan 2022 23:46:13 +0000</pubDate>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[NovuscodeLibrary]]></category>
		<guid isPermaLink="false">https://adamjohnston.me/?p=1147</guid>

					<description><![CDATA[An update to the NovuscodeLibrary &#8211; a Delphi library of utility functions and non-visual classes for Delphi 11 is now ready. https://github.com/novuslogic/NovuscodeLibrary Changelog ToDo]]></description>
										<content:encoded><![CDATA[
<p>An update to the NovuscodeLibrary &#8211; a Delphi library of utility functions and non-visual classes for Delphi 11 is now ready.</p>



<p><a href="https://github.com/novuslogic/NovuscodeLibrary">https://github.com/novuslogic/NovuscodeLibrary</a></p>



<p><a rel="noreferrer noopener" href="https://github.com/novuslogic/NovuscodeLibrary/blob/master/Changelog.md" target="_blank">Changelog</a></p>



<p><a rel="noreferrer noopener" href="https://github.com/novuslogic/NovuscodeLibrary/blob/master/ToDo.md" target="_blank">ToDo</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://adamjohnston.me/novuscodelibrary-update-for-delphi-11/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1147</post-id>	</item>
		<item>
		<title>NovuscodeLibrary update for Delphi 10.4</title>
		<link>https://adamjohnston.me/novuscodelibrary-update-for-delphi-10-4/</link>
					<comments>https://adamjohnston.me/novuscodelibrary-update-for-delphi-10-4/#respond</comments>
		
		<dc:creator><![CDATA[Adam Craig Johnston]]></dc:creator>
		<pubDate>Sun, 24 Jan 2021 23:21:25 +0000</pubDate>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[NovuscodeLibrary]]></category>
		<guid isPermaLink="false">https://adamjohnston.me/?p=1108</guid>

					<description><![CDATA[An update to the NovuscodeLibrary &#8211; a Delphi library of utility functions and non-visual classes for Delphi 10.4 is now ready. https://github.com/novuslogic/NovuscodeLibrary The next big goal will be a Documentation Wiki using CodeImatic.codegen &#8211; CodeDoc plugin. Still a work in progress. https://github.com/novuslogic/NovuscodeLibrary/issues/11 Also an upgrade and new samples. https://github.com/novuslogic/NovuscodeLibrary/issues/12 Changelog ToDo]]></description>
										<content:encoded><![CDATA[
<p>An update to the NovuscodeLibrary &#8211; a Delphi library of utility functions and non-visual classes for Delphi 10.4 is now ready.</p>



<p><a href="https://github.com/novuslogic/NovuscodeLibrary">https://github.com/novuslogic/NovuscodeLibrary</a></p>



<p>The next big goal will be a Documentation Wiki using CodeImatic.codegen &#8211; CodeDoc plugin. Still a work in progress.</p>



<p><a href="https://github.com/novuslogic/NovuscodeLibrary/issues/11" target="_blank" rel="noreferrer noopener">https://github.com/novuslogic/NovuscodeLibrary/issues/11</a></p>



<p>Also an upgrade and new samples. </p>



<p><a href="https://github.com/novuslogic/NovuscodeLibrary/issues/12">https://github.com/</a><a href="https://github.com/novuslogic/NovuscodeLibrary/issues/12" target="_blank" rel="noreferrer noopener">novuslogic</a><a href="https://github.com/novuslogic/NovuscodeLibrary/issues/12">/NovuscodeLibrary/issues/12</a></p>



<p><a rel="noreferrer noopener" href="https://github.com/novuslogic/NovuscodeLibrary/blob/master/Changelog.md" target="_blank">Changelog</a></p>



<p><a rel="noreferrer noopener" href="https://github.com/novuslogic/NovuscodeLibrary/blob/master/ToDo.md" target="_blank">ToDo</a></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://adamjohnston.me/novuscodelibrary-update-for-delphi-10-4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1108</post-id>	</item>
		<item>
		<title>and that was 2020 in Review.</title>
		<link>https://adamjohnston.me/and-that-was-2020-in-review/</link>
					<comments>https://adamjohnston.me/and-that-was-2020-in-review/#respond</comments>
		
		<dc:creator><![CDATA[Adam Craig Johnston]]></dc:creator>
		<pubDate>Tue, 29 Dec 2020 11:05:02 +0000</pubDate>
				<category><![CDATA[Stuff]]></category>
		<guid isPermaLink="false">http://adamjohnston.me/?p=1085</guid>

					<description><![CDATA[There has been little content on this blog, due to the human malware sweeping the world. Some people have loss their jobs, or had reduced hours in my case I have been hyper-busy with my main employment. It seems my work still is keeping me away, from my side projects and adding content to this [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>There has been little content on this blog, due to the human malware sweeping the world. </p>



<p>Some people have loss their jobs, or had reduced hours in my case I have been  hyper-busy with my main employment.</p>



<p>It seems my work still is keeping me away,  from my side projects and adding content to this blog. However, some progress has happened.</p>



<p>So my thoughts for the new year &#8230; more time on my side projects with luck.</p>



<p>Say safe and happy new year.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://adamjohnston.me/and-that-was-2020-in-review/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1085</post-id>	</item>
		<item>
		<title>and that was 2019 in Review.</title>
		<link>https://adamjohnston.me/and-that-was-2019-in-review/</link>
					<comments>https://adamjohnston.me/and-that-was-2019-in-review/#respond</comments>
		
		<dc:creator><![CDATA[Adam Craig Johnston]]></dc:creator>
		<pubDate>Mon, 30 Dec 2019 12:00:36 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DelphiAWSSDK]]></category>
		<category><![CDATA[Lazarus]]></category>
		<category><![CDATA[NovuscodeLibrary]]></category>
		<category><![CDATA[Using WordPress on Amazon Lightsail]]></category>
		<guid isPermaLink="false">https://adamjohnston.me/?p=1020</guid>

					<description><![CDATA[This blog has been very quiet this year, lots of reasons, mostly work-related has kept me away. Some milestones were achieved this year: NovuscodeLibrary NovuscodeLibrary is a Delphi library of utility functions and non-visual classes. New package NovusCodeLibrary_cURL.dpk &#8211; cURL function library New package NovusCodeLibrary_WebUtils.dpk &#8211; Web functions library Now support Delphi 10.3 and packages [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-container-1 wp-block-group"><div class="wp-block-group__inner-container">
<p>This blog has been very quiet this year, lots of reasons, mostly work-related has kept me away.</p>
<p>Some milestones were achieved this year:</p>
<h3>NovuscodeLibrary</h3>
<p>NovuscodeLibrary is a Delphi library of utility functions and non-visual classes.</p>
<ul>
<li>New package NovusCodeLibrary_cURL.dpk &#8211; cURL function library</li>
<li>New package NovusCodeLibrary_WebUtils.dpk &#8211; Web functions library</li>
<li>Now support Delphi 10.3 and packages</li>
</ul>
<p><a href="https://github.com/novuslogic/NovuscodeLibrary">https://github.com/novuslogic/NovuscodeLibrary</a></p>
<p><a href="https://github.com/novuslogic/NovuscodeLibrary/blob/master/Changelog.md">Changelog</a></p>
<p><a href="https://github.com/novuslogic/NovuscodeLibrary/blob/master/ToDo.md">ToDo</a></p>
<p>Adding features or fixing bugs to Novuscodelibrary, it’s general done organically. The next feature supported:</p>
<ul>
<li>The Delphi Package Manager Project <a href="https://github.com/DelphiPackageManager/">https://github.com/DelphiPackageManager/</a></li>
</ul>
<h3>CodeImatic</h3>
<p>CodeImatic is a PascalScript based toolchain for building and deployment.</p>
<h4>CodeImatc.build</h4>
<p>CodeImatic.build is a PascalScript based build and deployment engine.</p>
<p><a href="https://github.com/novuslogic/CodeImatic.build">https://github.com/novuslogic/CodeImatic.build</a></p>
<h4>CodeImatc.codegen</h4>
<p>CodeImatic.codegen is a PascalScript template driven source code and static website generator.</p>
<p><a href="https://github.com/novuslogic/CodeImatic.codegen">https://github.com/novuslogic/CodeImatic.codegen</a></p>
<p>CodeImatic &#8211; Multiple features have been added and moving towards  an early beta release next year.</p>
<h3>DelphiAWSSDK</h3>
<p>The Delphi AWS SDK enables Delphi/Pascal developers to easily work with Amazon Web Services.</p>
<p><a href="https://github.com/novuslogic/DelphiAWSSDK" target="_blank" rel="noopener noreferrer">DelphiAWSSDK</a></p>
<p><a href="https://github.com/novuslogic/DelphiAWSSDK/blob/master/Changelog.md">Changelog</a></p>
<p>The next version of DelphiAWSDK v.04 will have a full translation of Amazon DynamoDB <a href="https://aws.amazon.com/dynamodb/">https://aws.amazon.com/dynamodb/ </a>using the new experimental Code-Generation based on CodeImatic.codegen <a href="https://github.com/novuslogic/CodeImatic.codegen">https://github.com/novuslogic/CodeImatic.codegen</a></p>
<h3>Using WordPress on Amazon Lightsail</h3>
<p><a href="https://leanpub.com/wordpressawslightsail/">https://leanpub.com/wordpressawslightsail/</a></p>
<p>I’m develpoing  a new book called &#8220;Using WordPress on Amazon Lightsail&#8221; which will be pushlished early next year, so sign up with the &#8220;Notify Me When This Is Published” button.</p>
<p>Happy New Year.</p>
</div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://adamjohnston.me/and-that-was-2019-in-review/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1020</post-id>	</item>
	</channel>
</rss>
