1<!DOCTYPE html> 2<html lang="en" class="dark-mode"> 3<head> 4 5 <title>Andy Yang - Personal Blog</title> 6 <meta charset="utf-8" /> 7 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 8 <meta name="HandheldFriendly" content="True" /> 9 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 10 11 <link rel="preload" as="style" href="/assets/built/screen.css?v=S0DSiw6jVHJaYsG0" /> 12 <link rel="preload" as="script" href="/assets/built/casper.js?v=YtPhrez3GuGLVDYs" /> 13 14 <link rel="stylesheet" type="text/css" href="/assets/built/screen.css?v=S0DSiw6jVHJaYsG0" /> 15 16 <meta name="description" content="Technical howtos and random ramblings. Topics include: self-hosting, Docker, Python, automation, photography, travel"> 17 <link rel="icon" href="https://andyyang.co.uk/content/images/size/w256h256/2020/11/ms-icon-310x310.png" type="image/png"> 18 <link rel="canonical" href="https://andyyang.co.uk/"> 19 <meta name="referrer" content="no-referrer-when-downgrade"> 20 21 <meta property="og:site_name" content="Andy Yang"> 22 <meta property="og:type" content="website"> 23 <meta property="og:title" content="Andy Yang"> 24 <meta property="og:description" content="Technical howtos and random ramblings. Topics include: self-hosting, Docker, Python, automation, photography, travel"> 25 <meta property="og:url" content="https://andyyang.co.uk/"> 26 <meta property="og:image" content="https://andyyang.co.uk/content/images/size/w1200/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg"> 27 <meta name="twitter:card" content="summary_large_image"> 28 <meta name="twitter:title" content="Andy Yang"> 29 <meta name="twitter:description" content="Technical howtos and random ramblings. Topics include: self-hosting, Docker, Python, automation, photography, travel"> 30 <meta name="twitter:url" content="https://andyyang.co.uk/"> 31 <meta name="twitter:image" content="https://andyyang.co.uk/content/images/size/w1200/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg"> 32 <meta property="og:image:width" content="1200"> 33 <meta property="og:image:height" content="850"> 34 35
35<script type="application/ld+json"> 36{ 37 "@context": "https://schema.org", 38 "@type": "WebSite", 39 "publisher": { 40 "@type": "Organization", 41 "name": "Andy Yang", 42 "url": "https://andyyang.co.uk/", 43 "logo": { 44 "@type": "ImageObject", 45 "url": "https://andyyang.co.uk/content/images/size/w256h256/2020/11/ms-icon-310x310.png", 46 "width": 60, 47 "height": 60 48 } 49 }, 50 "url": "https://andyyang.co.uk/", 51 "name": "Andy Yang", 52 "image": { 53 "@type": "ImageObject", 54 "url": "https://andyyang.co.uk/content/images/size/w1200/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg", 55 "width": 1200, 56 "height": 850 57 }, 58 "mainEntityOfPage": "https://andyyang.co.uk/", 59 "description": "Technical howtos and random ramblings. Topics include: self-hosting, Docker, Python, automation, photography, travel" 60} 61 </script>
61 62 63 <meta name="generator" content="Ghost 6.64"> 64 <link rel="alternate" type="application/rss+xml" title="Andy Yang" href="https://andyyang.co.uk/rss/"> 65
65<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.71/umd/portal.min.js" data-i18n="true" data-ghost="https://andyyang.co.uk/" data-key="e2fe6e0b952035fb57fa9ba5ab" data-api="https://andyyang.co.uk/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script>
65<style id="gh-members-styles">.gh-post-upgrade-cta-content, 66.gh-post-upgrade-cta { 67 display: flex; 68 flex-direction: column; 69 align-items: center; 70 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; 71 text-align: center; 72 width: 100%; 73 color: #ffffff; 74 font-size: 16px; 75} 76 77.gh-post-upgrade-cta-content { 78 border-radius: 8px; 79 padding: 40px 4vw; 80} 81 82.gh-post-upgrade-cta h2 { 83 color: #ffffff; 84 font-size: 28px; 85 letter-spacing: -0.2px; 86 margin: 0; 87 padding: 0; 88} 89 90.gh-post-upgrade-cta p { 91 margin: 20px 0 0; 92 padding: 0; 93} 94 95.gh-post-upgrade-cta small { 96 font-size: 16px; 97 letter-spacing: -0.2px; 98} 99 100.gh-post-upgrade-cta a { 101 color: #ffffff; 102 cursor: pointer; 103 font-weight: 500; 104 box-shadow: none; 105 text-decoration: underline; 106} 107 108.gh-post-upgrade-cta a:hover { 109 color: #ffffff; 110 opacity: 0.8; 111 box-shadow: none; 112 text-decoration: underline; 113} 114 115.gh-post-upgrade-cta a.gh-btn { 116 display: block; 117 background: #ffffff; 118 text-decoration: none; 119 margin: 28px 0 0; 120 padding: 8px 18px; 121 border-radius: 4px; 122 font-size: 16px; 123 font-weight: 600; 124} 125 126.gh-post-upgrade-cta a.gh-btn:hover { 127 opacity: 0.92; 128}</style> 129
129<script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js" data-key="e2fe6e0b952035fb57fa9ba5ab" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://andyyang.co.uk/" data-locale="en" crossorigin="anonymous"></script>
129 130 131 <link href="https://andyyang.co.uk/webmentions/receive/" rel="webmention"> 132
132<script defer src="/public/cards.min.js?v=ShRHxgy4po8zN-Wf"></script>
132 133 <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=WwnU9jw5ancNC8Gc"> 134
134<script defer src="/public/member-attribution.min.js?v=AKG4hWena9j3yX3I"></script>
134<style>:root {--ghost-accent-color: #2f95b6;}</style> 135 136</head> 137<body class="home-template is-head-left-logo has-cover"> 138<div class="viewport"> 139 140 <header id="gh-head" class="gh-head outer"> 141 <div class="gh-head-inner inner"> 142 <div class="gh-head-brand"> 143 <a class="gh-head-logo no-image" href="https://andyyang.co.uk"> 144 Andy Yang 145 </a> 146 <button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></button> 147 <button class="gh-burger" aria-label="Main Menu"></button> 148 </div> 149 150 <nav class="gh-head-menu"> 151 <ul class="nav"> 152 <li class="nav-home nav-current"><a href="https://andyyang.co.uk/">home</a></li> 153 <li class="nav-contact"><a href="https://andyyang.co.uk/contact/">contact</a></li> 154</ul> 155 156 </nav> 157 158 <div class="gh-head-actions"> 159 <button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></button> 160 <div class="gh-head-members"> 161 <a class="gh-head-link" href="#/portal/signin" data-portal="signin">Sign in</a> 162 <a class="gh-head-button" href="#/portal/signup" data-portal="signup">Subscribe</a> 163 </div> 164 </div> 165 </div> 166 </header> 167 168 <div class="site-content"> 169 170<div class="site-header-content outer"> 171 172 <img class="site-header-cover" 173 srcset="/content/images/size/w300/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg 300w, 174 /content/images/size/w600/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg 600w, 175 /content/images/size/w1000/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg 1000w, 176 /content/images/size/w2000/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg 2000w" 177 sizes="100vw" 178 src="/content/images/size/w2000/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg" 179 alt="Andy Yang" 180 fetchpriority="high" 181 loading="eager" 182 /> 183 184 <div class="site-header-inner inner"> 185 <h1 class="site-title">Andy Yang</h1> 186 <p class="site-description">technical howtos and random ramblings that no one asked for...</p> 187 </div> 188 189</div> 190 191<main id="site-main" class="site-main outer"> 192<div class="inner posts"> 193 194 <div class="post-feed"> 195 196<article class="post-card post tag-docker tag-tech tag-self-hosting post-card-large"> 197 198 <a class="post-card-image-link" href="/ghost-with-sqlite-in-docker/"> 199 200 <img class="post-card-image" 201 srcset="/content/images/size/w300/2023/05/changelog-1-1-.png 300w, 202 /content/images/size/w600/2023/05/changelog-1-1-.png 600w, 203 /content/images/size/w1000/2023/05/changelog-1-1-.png 1000w, 204 /content/images/size/w2000/2023/05/changelog-1-1-.png 2000w" 205 sizes="(max-width: 1000px) 400px, 800px" 206 src="/content/images/size/w600/2023/05/changelog-1-1-.png" 207 alt="Upgrading Ghost (Docker) whilst keeping SQLite database" 208 loading="lazy" 209 /> 210 211 212 </a> 213 214 <div class="post-card-content"> 215 216 <a class="post-card-content-link" href="/ghost-with-sqlite-in-docker/"> 217 <header class="post-card-header"> 218 <div class="post-card-tags"> 219 <span class="post-card-primary-tag">Docker</span> 220 </div> 221 <h2 class="post-card-title"> 222 Upgrading Ghost (Docker) whilst keeping SQLite database 223 </h2> 224 </header> 225 <div class="post-card-excerpt">A quick guide to running a Ghost blog with an SQLite database in Docker.</div> 226 </a> 227 228 <footer class="post-card-meta"> 229 <time class="post-card-meta-date" datetime="2023-05-05">05 May 2023</time>
230 <span class="post-card-meta-length">2 min read</span> 231 </footer> 232 233 </div> 234 235</article> 236 237<article class="post-card post tag-linux tag-synology tag-tech featured dynamic"> 238 239 <a class="post-card-image-link" href="/creating-an-ubuntu-vm/"> 240 241 <img class="post-card-image" 242 srcset="https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDR8fHVidW50dXxlbnwwfHx8fDE2NjQxMDc3ODY&ixlib=rb-1.2.1&q=80&w=300 300w, 243 https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDR8fHVidW50dXxlbnwwfHx8fDE2NjQxMDc3ODY&ixlib=rb-1.2.1&q=80&w=600 600w, 244 https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDR8fHVidW50dXxlbnwwfHx8fDE2NjQxMDc3ODY&ixlib=rb-1.2.1&q=80&w=1000 1000w, 245 https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDR8fHVidW50dXxlbnwwfHx8fDE2NjQxMDc3ODY&ixlib=rb-1.2.1&q=80&w=2000 2000w" 246 sizes="(max-width: 1000px) 400px, 800px" 247 src="https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDR8fHVidW50dXxlbnwwfHx8fDE2NjQxMDc3ODY&ixlib=rb-1.2.1&q=80&w=600" 248 alt="Creating an Ubuntu Server VM on Synology NAS" 249 loading="lazy" 250 /> 251 252 253 </a> 254 255 <div class="post-card-content"> 256 257 <a class="post-card-content-link" href="/creating-an-ubuntu-vm/"> 258 <header class="post-card-header"> 259 <div class="post-card-tags"> 260 <span class="post-card-primary-tag">Linux</span> 261 <span class="post-card-featured"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> 262 <path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 263</svg> Featured</span> 264 </div> 265 <h2 class="post-card-title"> 266 Creating an Ubuntu Server VM on Synology NAS 267 </h2> 268 </header> 269 <div class="post-card-excerpt">A step by step guide to creating an Ubuntu Server virtual machine on a Synology NAS.</div> 270 </a> 271 272 <footer class="post-card-meta"> 273 <time class="post-card-meta-date" datetime="2022-09-25">25 Sep 2022</time> 274 <span class="post-card-meta-length">4 min read</span> 275 </footer> 276 277 </div> 278 279</article> 280 281<article class="post-card post tag-tech tag-linux dynamic"> 282 283 <a class="post-card-image-link" href="/samsung-printer-drivers-on-linux-pop-_os/"> 284 285 <img class="post-card-image" 286 srcset="https://images.unsplash.com/photo-1464820453369-31d2c0b651af?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbG91cnN8ZW58MHx8fHwxNjYzMDU5MzI5&ixlib=rb-1.2.1&q=80&w=300 300w, 287 https://images.unsplash.com/photo-1464820453369-31d2c0b651af?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbG91cnN8ZW58MHx8fHwxNjYzMDU5MzI5&ixlib=rb-1.2.1&q=80&w=600 600w, 288 https://images.unsplash.com/photo-1464820453369-31d2c0b651af?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbG91cnN8ZW58MHx8fHwxNjYzMDU5MzI5&ixlib=rb-1.2.1&q=80&w=1000 1000w, 289 https://images.unsplash.com/photo-1464820453369-31d2c0b651af?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbG91cnN8ZW58MHx8fHwxNjYzMDU5MzI5&ixlib=rb-1.2.1&q=80&w=2000 2000w" 290 sizes="(max-width: 1000px) 400px, 800px" 291 src="https://images.unsplash.com/photo-1464820453369-31d2c0b651af?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbG91cnN8ZW58MHx8fHwxNjYzMDU5MzI5&ixlib=rb-1.2.1&q=80&w=600" 292 alt="Installing Samsung Printer Drivers on Pop!_OS" 293 loading="lazy" 294 /> 295 296 297 </a> 298 299 <div class="post-card-content"> 300 301 <a class="post-card-content-link" href="/samsung-printer-drivers-on-linux-pop-_os/"> 302 <header class="post-card-header"> 303 <div class="post-card-tags">
304 <span class="post-card-primary-tag">Tech</span> 305 </div> 306 <h2 class="post-card-title"> 307 Installing Samsung Printer Drivers on Pop!_OS 308 </h2> 309 </header> 310 <div class="post-card-excerpt">Quick guide on how to install Samsung printer drivers on Linux</div> 311 </a> 312 313 <footer class="post-card-meta"> 314 <time class="post-card-meta-date" datetime="2022-02-02">02 Feb 2022</time> 315 <span class="post-card-meta-length">1 min read</span> 316 </footer> 317 318 </div> 319 320</article> 321 322<article class="post-card post tag-tech tag-self-hosting"> 323 324 <a class="post-card-image-link" href="/create-a-static-home-page-in-ghost-blog/"> 325 326 <img class="post-card-image" 327 srcset="https://images.unsplash.com/photo-1611434132218-d687f8a5f378?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN0YXRpY3xlbnwwfHx8fDE2MzA1NzU0NTQ&ixlib=rb-1.2.1&q=80&w=300 300w, 328 https://images.unsplash.com/photo-1611434132218-d687f8a5f378?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN0YXRpY3xlbnwwfHx8fDE2MzA1NzU0NTQ&ixlib=rb-1.2.1&q=80&w=600 600w, 329 https://images.unsplash.com/photo-1611434132218-d687f8a5f378?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN0YXRpY3xlbnwwfHx8fDE2MzA1NzU0NTQ&ixlib=rb-1.2.1&q=80&w=1000 1000w, 330 https://images.unsplash.com/photo-1611434132218-d687f8a5f378?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN0YXRpY3xlbnwwfHx8fDE2MzA1NzU0NTQ&ixlib=rb-1.2.1&q=80&w=2000 2000w" 331 sizes="(max-width: 1000px) 400px, 800px" 332 src="https://images.unsplash.com/photo-1611434132218-d687f8a5f378?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN0YXRpY3xlbnwwfHx8fDE2MzA1NzU0NTQ&ixlib=rb-1.2.1&q=80&w=600" 333 alt="Create a static home page in Ghost" 334 loading="lazy" 335 /> 336 337 338 </a> 339 340 <div class="post-card-content"> 341 342 <a class="post-card-content-link" href="/create-a-static-home-page-in-ghost-blog/"> 343 <header class="post-card-header"> 344 <div class="post-card-tags"> 345 <span class="post-card-primary-tag">Tech</span> 346 </div> 347 <h2 class="post-card-title"> 348 Create a static home page in Ghost 349 </h2> 350 </header> 351 <div class="post-card-excerpt">Ghost is a great platform, but it lacks one little functionality that I'm looking for... a static home page. So let's fix that.</div> 352 </a> 353 354 <footer class="post-card-meta"> 355 <time class="post-card-meta-date" datetime="2021-09-05">05 Sep 2021</time> 356 <span class="post-card-meta-length">3 min read</span> 357 </footer> 358 359 </div> 360 361</article> 362 363<article class="post-card post tag-tech tag-finance featured"> 364 365 <a class="post-card-image-link" href="/how-to-import-gold-prices-in-google-sheets/"> 366 367 <img class="post-card-image" 368 srcset="https://images.unsplash.com/photo-1623743587733-469438d17975?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDd8fGdvbGQlMjBjb2lufGVufDB8fHx8MTYzMDUzNDc0Nw&ixlib=rb-1.2.1&q=80&w=300 300w, 369 https://images.unsplash.com/photo-1623743587733-469438d17975?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDd8fGdvbGQlMjBjb2lufGVufDB8fHx8MTYzMDUzNDc0Nw&ixlib=rb-1.2.1&q=80&w=600 600w, 370 https://images.unsplash.com/photo-1623743587733-469438d17975?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDd8fGdvbGQlMjBjb2lufGVufDB8fHx8MTYzMDUzNDc0Nw&ixlib=rb-1.2.1&q=80&w=1000 1000w, 371 https://images.unsplash.com/photo-1623743587733-469438d17975?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDd8fGdvbGQlMjBjb2lufGVufDB8fHx8MTYzMDUzNDc0Nw&ixlib=rb-1.2.1&q=80&w=2000 2000w" 372 sizes="(max-width: 1000px) 400px, 800px" 373 src="https://images.unsplash.com/photo-1623743587733-469438d17975?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDd8fGdvbGQlMjBjb2lufGVufDB8fHx8MTYzMDUzNDc0Nw&ixlib=rb-1.2.1&q=80&w=600" 374 alt="How to import live Gold / Silver spot prices in Google Sheets" 375 loading="lazy" 376 /> 377 378 379 </a> 380 381 <div class="post-card-content"> 382 383 <a class="post-card-content-link" href="/how-to-import-gold-prices-in-google-sheets/"> 384 <header class="post-card-header"> 385 <div class="post-card-tags">
386 <span class="post-card-primary-tag">Tech</span> 387 <span class="post-card-featured"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> 388 <path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 389</svg> Featured</span> 390 </div> 391 <h2 class="post-card-title"> 392 How to import live Gold / Silver spot prices in Google Sheets 393 </h2> 394 </header> 395 <div class="post-card-excerpt">This method will let you import live prices for gold / silver from a site of your choice using a simple formula.</div> 396 </a> 397 398 <footer class="post-card-meta"> 399 <time class="post-card-meta-date" datetime="2021-09-01">01 Sep 2021</time> 400 <span class="post-card-meta-length">4 min read</span> 401 </footer> 402 403 </div> 404 405</article> 406 407<article class="post-card post tag-docker tag-self-hosting tag-synology tag-tech"> 408 409 <a class="post-card-image-link" href="/replace-synology-nas-reverse-proxy/"> 410 411 <img class="post-card-image" 412 srcset="https://images.unsplash.com/photo-1535745122259-f1e187953c4c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDQwfHxkaXJlY3Rpb25zfGVufDB8fHx8MTYyNzkwNDU3OQ&ixlib=rb-1.2.1&q=80&w=300 300w, 413 https://images.unsplash.com/photo-1535745122259-f1e187953c4c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDQwfHxkaXJlY3Rpb25zfGVufDB8fHx8MTYyNzkwNDU3OQ&ixlib=rb-1.2.1&q=80&w=600 600w, 414 https://images.unsplash.com/photo-1535745122259-f1e187953c4c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDQwfHxkaXJlY3Rpb25zfGVufDB8fHx8MTYyNzkwNDU3OQ&ixlib=rb-1.2.1&q=80&w=1000 1000w, 415 https://images.unsplash.com/photo-1535745122259-f1e187953c4c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDQwfHxkaXJlY3Rpb25zfGVufDB8fHx8MTYyNzkwNDU3OQ&ixlib=rb-1.2.1&q=80&w=2000 2000w" 416 sizes="(max-width: 1000px) 400px, 800px" 417 src="https://images.unsplash.com/photo-1535745122259-f1e187953c4c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDQwfHxkaXJlY3Rpb25zfGVufDB8fHx8MTYyNzkwNDU3OQ&ixlib=rb-1.2.1&q=80&w=600" 418 alt="Post-Mortem: Replacing the default reverse proxy on Synology NAS" 419 loading="lazy" 420 /> 421 422 423 </a> 424 425 <div class="post-card-content"> 426 427 <a class="post-card-content-link" href="/replace-synology-nas-reverse-proxy/"> 428 <header class="post-card-header"> 429 <div class="post-card-tags"> 430 <span class="post-card-primary-tag">Docker</span> 431 </div> 432 <h2 class="post-card-title"> 433 Post-Mortem: Replacing the default reverse proxy on Synology NAS 434 </h2> 435 </header> 436 <div class="post-card-excerpt">The full process of replacing the default reverse proxy on a Synology NAS; the issues I encountered and how I resolved them.</div> 437 </a> 438 439 <footer class="post-card-meta"> 440 <time class="post-card-meta-date" datetime="2021-08-02">02 Aug 2021</time> 441 <span class="post-card-meta-length">7 min read</span> 442 </footer> 443 444 </div> 445 446</article> 447 448<article class="post-card post tag-docker tag-self-hosting tag-synology tag-tech featured"> 449 450 <a class="post-card-image-link" href="/synology-nas-how-to-run-docker-commands-without-sudo/"> 451 452 <img class="post-card-image" 453 srcset="https://images.unsplash.com/photo-1589652717521-10c0d092dea9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxjb21wdXRlcnxlbnwwfHx8fDE2Mjc5MDAyNjY&ixlib=rb-1.2.1&q=80&w=300 300w, 454 https://images.unsplash.com/photo-1589652717521-10c0d092dea9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxjb21wdXRlcnxlbnwwfHx8fDE2Mjc5MDAyNjY&ixlib=rb-1.2.1&q=80&w=600 600w, 455 https://images.unsplash.com/photo-1589652717521-10c0d092dea9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxjb21wdXRlcnxlbnwwfHx8fDE2Mjc5MDAyNjY&ixlib=rb-1.2.1&q=80&w=1000 1000w, 456 https://images.unsplash.com/photo-1589652717521-10c0d092dea9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxjb21wdXRlcnxlbnwwfHx8fDE2Mjc5MDAyNjY&ixlib=rb-1.2.1&q=80&w=2000 2000w" 457 sizes="(max-width: 1000px) 400px, 800px" 458 src="https://images.unsplash.com/photo-1589652717521-10c0d092dea9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxjb21wdXRlcnxlbnwwfHx8fDE2Mjc5MDAyNjY&ixlib=rb-1.2.1&q=80&w=600" 459 alt="How to run Docker commands without sudo on a Synology NAS" 460 loading="lazy" 461 /> 462 463 464 </a> 465 466 <div class="post-card-content"> 467 468 <a class="post-card-content-link" href="/synology-nas-how-to-run-docker-commands-without-sudo/"> 469 <header class="post-card-header"> 470 <div class="post-card-tags">
471 <span class="post-card-primary-tag">Docker</span> 472 <span class="post-card-featured"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> 473 <path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 474</svg> Featured</span> 475 </div> 476 <h2 class="post-card-title"> 477 How to run Docker commands without sudo on a Synology NAS 478 </h2> 479 </header> 480 <div class="post-card-excerpt">A quick guide to enable sudoless docker commands.</div> 481 </a> 482 483 <footer class="post-card-meta"> 484 <time class="post-card-meta-date" datetime="2021-07-28">28 Jul 2021</time> 485 <span class="post-card-meta-length">1 min read</span> 486 </footer> 487 488 </div> 489 490</article> 491 492<article class="post-card post tag-synology tag-tech"> 493 494 <a class="post-card-image-link" href="/how-to-install-nano-on-synology-nas/"> 495 496 <img class="post-card-image" 497 srcset="https://images.unsplash.com/photo-1517819655378-25fe37197692?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN5bm9sb2d5fGVufDB8fHx8MTYxNTcyMzgyNg&ixlib=rb-1.2.1&q=80&w=300 300w, 498 https://images.unsplash.com/photo-1517819655378-25fe37197692?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN5bm9sb2d5fGVufDB8fHx8MTYxNTcyMzgyNg&ixlib=rb-1.2.1&q=80&w=600 600w, 499 https://images.unsplash.com/photo-1517819655378-25fe37197692?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN5bm9sb2d5fGVufDB8fHx8MTYxNTcyMzgyNg&ixlib=rb-1.2.1&q=80&w=1000 1000w, 500 https://images.unsplash.com/photo-1517819655378-25fe37197692?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN5bm9sb2d5fGVufDB8fHx8MTYxNTcyMzgyNg&ixlib=rb-1.2.1&q=80&w=2000 2000w" 501 sizes="(max-width: 1000px) 400px, 800px" 502 src="https://images.unsplash.com/photo-1517819655378-25fe37197692?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN5bm9sb2d5fGVufDB8fHx8MTYxNTcyMzgyNg&ixlib=rb-1.2.1&q=80&w=600" 503 alt="How to install nano on a Synology NAS" 504 loading="lazy" 505 /> 506 507 508 </a> 509 510 <div class="post-card-content"> 511 512 <a class="post-card-content-link" href="/how-to-install-nano-on-synology-nas/"> 513 <header class="post-card-header"> 514 <div class="post-card-tags"> 515 <span class="post-card-primary-tag">Synology</span> 516 </div> 517 <h2 class="post-card-title"> 518 How to install nano on a Synology NAS 519 </h2> 520 </header> 521 <div class="post-card-excerpt">This article will walk you through how to install the nano editor on your Synology NAS for editing files within the SSH terminal.</div> 522 </a> 523 524 <footer class="post-card-meta"> 525 <time class="post-card-meta-date" datetime="2021-03-14">14 Mar 2021</time> 526 <span class="post-card-meta-length">2 min read</span> 527 </footer> 528 529 </div> 530 531</article> 532 533<article class="post-card post tag-docker tag-tech tag-self-hosting"> 534 535 <a class="post-card-image-link" href="/how-to-install-upgrade-portainer/"> 536 537 <img class="post-card-image" 538 srcset="/content/images/size/w300/2021/08/portainer-logo-1-.png 300w, 539 /content/images/size/w600/2021/08/portainer-logo-1-.png 600w, 540 /content/images/size/w1000/2021/08/portainer-logo-1-.png 1000w, 541 /content/images/size/w2000/2021/08/portainer-logo-1-.png 2000w" 542 sizes="(max-width: 1000px) 400px, 800px" 543 src="/content/images/size/w600/2021/08/portainer-logo-1-.png" 544 alt="How to install or upgrade Portainer" 545 loading="lazy" 546 /> 547 548 549 </a> 550 551 <div class="post-card-content"> 552 553 <a class="post-card-content-link" href="/how-to-install-upgrade-portainer/"> 554 <header class="post-card-header"> 555 <div class="post-card-tags">
556 <span class="post-card-primary-tag">Docker</span> 557 </div> 558 <h2 class="post-card-title"> 559 How to install or upgrade Portainer 560 </h2> 561 </header> 562 <div class="post-card-excerpt">Straight to the point: the commands you'll need for installing or upgrading Portainer to the latest version.</div> 563 </a> 564 565 <footer class="post-card-meta"> 566 <time class="post-card-meta-date" datetime="2021-02-04">04 Feb 2021</time> 567 </footer> 568 569 </div> 570 571</article> 572 573<article class="post-card post tag-tech tag-self-hosting"> 574 575 <a class="post-card-image-link" href="/using-github-to-manage-your-ssh-keys-across-devices/"> 576 577 <img class="post-card-image" 578 srcset="https://images.unsplash.com/photo-1512309739986-032cbacdb618?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDd8fGtleXN8ZW58MHx8fHwxNjE1NzIzOTc0&ixlib=rb-1.2.1&q=80&w=300 300w, 579 https://images.unsplash.com/photo-1512309739986-032cbacdb618?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDd8fGtleXN8ZW58MHx8fHwxNjE1NzIzOTc0&ixlib=rb-1.2.1&q=80&w=600 600w, 580 https://images.unsplash.com/photo-1512309739986-032cbacdb618?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDd8fGtleXN8ZW58MHx8fHwxNjE1NzIzOTc0&ixlib=rb-1.2.1&q=80&w=1000 1000w, 581 https://images.unsplash.com/photo-1512309739986-032cbacdb618?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDd8fGtleXN8ZW58MHx8fHwxNjE1NzIzOTc0&ixlib=rb-1.2.1&q=80&w=2000 2000w" 582 sizes="(max-width: 1000px) 400px, 800px" 583 src="https://images.unsplash.com/photo-1512309739986-032cbacdb618?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDd8fGtleXN8ZW58MHx8fHwxNjE1NzIzOTc0&ixlib=rb-1.2.1&q=80&w=600" 584 alt="Using GitHub to manage multiple SSH keys across various devices" 585 loading="lazy" 586 /> 587 588 589 </a> 590 591 <div class="post-card-content"> 592 593 <a class="post-card-content-link" href="/using-github-to-manage-your-ssh-keys-across-devices/"> 594 <header class="post-card-header"> 595 <div class="post-card-tags"> 596 <span class="post-card-primary-tag">Tech</span> 597 </div> 598 <h2 class="post-card-title"> 599 Using GitHub to manage multiple SSH keys across various devices 600 </h2> 601 </header> 602 <div class="post-card-excerpt">A little tip to take away some of the manual pain with having to add or update SSH keys across your servers.</div> 603 </a> 604 605 <footer class="post-card-meta"> 606 <time class="post-card-meta-date" datetime="2020-11-22">22 Nov 2020</time> 607 <span class="post-card-meta-length">1 min read</span> 608 </footer> 609 610 </div> 611 612</article> 613 614<article class="post-card post tag-tech tag-self-hosting tag-docker tag-synology"> 615 616 <a class="post-card-image-link" href="/backup-your-docker-containers-as-docker-compose-files/"> 617 618 <img class="post-card-image" 619 srcset="https://images.unsplash.com/photo-1593968962032-f0e9a88dd09e?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&w=300 300w, 620 https://images.unsplash.com/photo-1593968962032-f0e9a88dd09e?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&w=600 600w, 621 https://images.unsplash.com/photo-1593968962032-f0e9a88dd09e?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&w=1000 1000w, 622 https://images.unsplash.com/photo-1593968962032-f0e9a88dd09e?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&w=2000 2000w" 623 sizes="(max-width: 1000px) 400px, 800px" 624 src="https://images.unsplash.com/photo-1593968962032-f0e9a88dd09e?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&w=600"
625 alt="Create Docker-Compose files from your Docker containers" 626 loading="lazy" 627 /> 628 629 630 </a> 631 632 <div class="post-card-content"> 633 634 <a class="post-card-content-link" href="/backup-your-docker-containers-as-docker-compose-files/"> 635 <header class="post-card-header"> 636 <div class="post-card-tags"> 637 <span class="post-card-primary-tag">Tech</span> 638 </div> 639 <h2 class="post-card-title"> 640 Create Docker-Compose files from your Docker containers 641 </h2> 642 </header> 643 <div class="post-card-excerpt">A simple script that will create Docker-Compose files of your active containers so that you can back them up or use them on another server to re-create your containers.</div> 644 </a> 645 646 <footer class="post-card-meta"> 647 <time class="post-card-meta-date" datetime="2020-11-15">15 Nov 2020</time> 648 <span class="post-card-meta-length">2 min read</span> 649 </footer> 650 651 </div> 652 653</article> 654 </div> 655 656 <nav class="pagination"> 657 <span class="page-number">Page 1 of 1</span> 658</nav> 659 660 661</div> 662</main> 663 664 </div> 665 666 <footer class="site-footer outer"> 667 <div class="inner"> 668 <section class="copyright"><a href="https://andyyang.co.uk">Andy Yang</a> © 2026</section> 669 <div class="site-footer-center"> 670 <div class="site-footer-social-links"> 671 </div> 672 <nav class="site-footer-nav"> 673 <ul class="nav"> 674 <li class="nav-linkedin"><a href="https://linkedin.com/in/andyyanguk">linkedin</a></li> 675 <li class="nav-github"><a href="https://github.com/andyyanguk">github</a></li> 676 <li class="nav-rss"><a href="https://andyyang.co.uk/rss/">rss</a></li> 677</ul> 678 679 </nav> 680 </div> 681 <div class="gh-powered-by"><a href="https://ghost.org/" target="_blank" rel="noopener">Powered by Ghost</a></div> 682 </div> 683 </footer> 684 685</div> 686 687
688<script src="/assets/built/casper.js?v=YtPhrez3GuGLVDYs" defer></script>
688 689
690<script src="https://swetrix.org/swetrix.js" defer></script>
vendor: 1 bytes, line 690
690
691<script> 692 document.addEventListener('DOMContentLoaded', function() { 693 swetrix.init('5umVNMuH6rU5', { 694 apiURL: 'https://swetrixapi-xww0oo408o8g8wcw488c08gk.gc.ytek.uk/log', 695 }) 696 swetrix.trackViews() 697 }) 698</script>
698 699 700<noscript> 701 <img 702 src="https://swetrixapi-xww0oo408o8g8wcw488c08gk.gc.ytek.uk/log/noscript?pid=5umVNMuH6rU5" 703 alt="" 704 referrerpolicy="no-referrer-when-downgrade" 705 /> 706</noscript> 707
708<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"d60acbb022b941d6805f5e7030a6b166","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 708
708
709<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a452a9c7188310f7',t:'MTc5MTEwMDkzNA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
709</body> 710</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.