<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Devops on ilham.dev</title><link>https://ilham.dev/tags/devops/</link><description>Recent content in Devops on ilham.dev</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 27 Sep 2026 00:00:00 +0700</lastBuildDate><atom:link href="https://ilham.dev/tags/devops/index.xml" rel="self" type="application/rss+xml"/><item><title>How I build a basic nginx config without starting from an empty file</title><link>https://ilham.dev/posts/how-to-build-a-basic-nginx-config/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-build-a-basic-nginx-config/</guid><description>An nginx config is easier to write when I start from the kind of site I am serving: static files, SPA, PHP, or reverse proxy.
The nginx Config Generator tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I build a find command without deleting the wrong files</title><link>https://ilham.dev/posts/how-to-build-find-command-safely/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-build-find-command-safely/</guid><description>The find command is one of the most useful Linux commands, but it is also one of the commands I treat with respect. It can search thousands of files very quickly, and with the wrong option it can also delete thousands of files very quickly.</description></item><item><title>How I build an nginx reverse proxy config without memorising everything</title><link>https://ilham.dev/posts/how-to-build-nginx-reverse-proxy-config/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-build-nginx-reverse-proxy-config/</guid><description>An nginx reverse proxy config can look intimidating when you are still learning:
server { listen 80; server_name app.example.com; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } The config is not random.</description></item><item><title>How I check common port numbers when debugging a service</title><link>https://ilham.dev/posts/how-to-check-common-port-numbers/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-common-port-numbers/</guid><description>Port numbers are labels for network services, but a port number alone does not guarantee what is actually running there.
The Port Reference tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I filter Docker logs without losing the useful lines</title><link>https://ilham.dev/posts/how-to-filter-docker-logs-without-losing-context/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-filter-docker-logs-without-losing-context/</guid><description>Docker logs can get noisy very quickly. A service may print hundreds or thousands of lines, and the line you need is often buried in the middle.
The basic command is:</description></item><item><title>How I parse logs before searching randomly</title><link>https://ilham.dev/posts/how-to-parse-logs-before-searching-randomly/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-parse-logs-before-searching-randomly/</guid><description>Logs become easier to investigate when they are split into fields instead of treated as one giant wall of text.
The Log Parser tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I read YAML without getting lost in indentation</title><link>https://ilham.dev/posts/how-to-read-yaml-without-getting-lost-in-indentation/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-read-yaml-without-getting-lost-in-indentation/</guid><description>YAML is readable when indentation is correct and confusing when it is not. A viewer helps validate and inspect the structure.
The YAML Viewer tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I sort .env files without moving comments to the wrong place</title><link>https://ilham.dev/posts/how-to-sort-env-files-without-moving-comments-to-the-wrong-place/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-sort-env-files-without-moving-comments-to-the-wrong-place/</guid><description>A messy .env file makes configuration harder to review. Sorting helps, but comments and duplicates need care.
The .env Key Sorter tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I think about SSH tunnels before copying the command</title><link>https://ilham.dev/posts/how-to-use-ssh-tunnel-builder/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-ssh-tunnel-builder/</guid><description>SSH tunnels are powerful, but the flags are not friendly at first sight:
ssh -L 8080:localhost:80 user@example.com The command is short, but the meaning is not obvious. Which machine is localhost?</description></item><item><title>How I turn a long docker run command into Docker Compose</title><link>https://ilham.dev/posts/how-to-turn-docker-run-into-compose/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-turn-docker-run-into-compose/</guid><description>A docker run command is fine when it is short. But after a few ports, volumes, and environment variables, it becomes hard to read and easy to break.
You may see something like this:</description></item><item><title>How I write a Dockerfile without copying random examples</title><link>https://ilham.dev/posts/how-to-write-a-dockerfile-without-copying-random-examples/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-write-a-dockerfile-without-copying-random-examples/</guid><description>A Dockerfile is a recipe for building an image. The clearer the recipe, the easier the container is to rebuild and debug.
The Dockerfile Builder tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item></channel></rss>