56,966 blogs · [ { "id": "01a087d8-8c27-7335-9a8a-168b2d1572a7", "title": "How to use Ollama with Claude Code", "url": "https://ruan.dev/blog/2026/05/08/how-to-use-ollama-with-claude-code", "published_at": "2026-05-08T21:48:29+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5a56ae33", "title": "Level Up your Code Quality with SonarQube - a Beginners Guide", "url": "https://ruan.dev/blog/2025/06/06/level-up-your-code-quality-with-sonarqube---a-beginners-guide", "published_at": "2025-06-06T11:09:46+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5ab1507c", "title": "How to Choose a Career in IT - A Practical Guide", "url": "https://ruan.dev/blog/2025/06/04/how-to-choose-a-career-in-it", "published_at": "2025-06-04T16:35:57+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5af70ee9", "title": "Building a Local AI Assistant with llama-cpp-python", "url": "https://ruan.dev/blog/2025/02/14/building-a-local-ai-assistant-with-llama-cpp-python", "published_at": "2025-02-14T21:36:25+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5b795563", "title": "Getting Started with Ollama and LLMs in Python", "url": "https://ruan.dev/blog/2025/02/14/getting-started-with-ollama-and-llms-in-python", "published_at": "2025-02-14T20:54:57+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5bac23ad", "title": "GitOps: ArgoCD Basics", "url": "https://ruan.dev/blog/2025/01/30/gitops-argocd-basics", "published_at": "2025-01-30T16:15:07+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5bb11a61", "title": "GitOps Fundamentals: a Better Way to Deliver Software", "url": "https://ruan.dev/blog/2025/01/28/gitops-fundamentals-a-better-way-to-deliver-software", "published_at": "2025-01-28T21:10:34+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5c1ee150", "title": "How to Prevent SSH Brute Force Attacks with Fail2ban", "url": "https://ruan.dev/blog/2025/01/24/how-to-prevent-ssh-brute-force-attacks-with-fail2ban", "published_at": "2025-01-24T14:17:46+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5c49fef3", "title": "Terraform Module usage on Running Kubernetes KinD Clusters", "url": "https://ruan.dev/blog/2024/11/15/terraform-module-usage-on-running-kubernetes-kind-clusters", "published_at": "2024-11-15T14:48:15+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5cd8d8ba", "title": "Run a Minecraft Server with Docker Compose", "url": "https://ruan.dev/blog/2024/11/10/run-a-minecraft-server-with-docker-compose", "published_at": "2024-11-10T08:19:53+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5d5d8bc5", "title": "Using Terraform to Store Passwords in AWS SecretsManager", "url": "https://ruan.dev/blog/2024/10/16/using-terraform-to-store-passwords-in-aws-secretsmanager", "published_at": "2024-10-16T12:18:56+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5d78b08d", "title": "Using KEDA for Autoscaling Pods using Prometheus Metrics", "url": "https://ruan.dev/blog/2024/10/07/how-to-use-keda-to-scale-pods-using-prometheus", "published_at": "2024-10-07T07:11:06+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5d79027e", "title": "Cross Account Terraform Assume Roles in AWS", "url": "https://ruan.dev/blog/2024/09/15/cross-account-terraform-assume-roles-in-aws", "published_at": "2024-09-15T13:11:17+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5e389e2a", "title": "Scaling with Kubernetes: An Introduction to KEDA", "url": "https://ruan.dev/blog/2024/08/29/scaling-with-kubernetes-an-introduction-to-keda", "published_at": "2024-08-29T05:51:52+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5efbd231", "title": "Enhancing High Availability in Kubernetes: Strategies for Robust Application Deployment", "url": "https://ruan.dev/blog/2024/08/22/high-availability-options-for-your-deployments-on-kubernetes", "published_at": "2024-08-22T21:59:21+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a5f449300", "title": "Scaling Applications in Kubernetes with Horizontal Pod Autoscaler", "url": "https://ruan.dev/blog/2024/08/14/scaling-applications-in-kubernetes-with-horizontal-pod-autoscaler", "published_at": "2024-08-13T22:43:14+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a602bd33d", "title": "Getting Started with Localstack: Overview, Setup, and Practical Usage Guide", "url": "https://ruan.dev/blog/2024/08/06/getting-started-with-localstack-overview-setup-and-practical-usage-guide", "published_at": "2024-08-06T20:10:45+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a610a212b", "title": "Step-by-step Guide to Setting up Atlantis with Gitlab", "url": "https://ruan.dev/blog/2024/08/04/step-by-step-guide-to-setting-up-atlantis-with-gitlab", "published_at": "2024-08-04T07:31:58+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a61c29b3f", "title": "Unleashing Terraform Automation with Atlantis: An Overview", "url": "https://ruan.dev/blog/2024/07/31/unleashing-terraform-automation-with-atlantis-an-overview", "published_at": "2024-07-31T07:00:34+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a61f21dd1", "title": "How to Create a KinD Kubernetes Terraform Module", "url": "https://ruan.dev/blog/2024/07/28/how-to-create-a-kind-kubernetes-terraform-module", "published_at": "2024-07-27T23:48:48+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a61f7d7fe", "title": "Deploy a Golang App to Interact with the Kubernetes API", "url": "https://ruan.dev/blog/2024/07/21/deploy-a-golang-app-to-interact-with-the-kubernetes-api", "published_at": "2024-07-20T22:19:09+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a62849649", "title": "Automate Grafana Dashboards with Terraform and Helm", "url": "https://ruan.dev/blog/2024/05/01/automate-grafana-dashboards-with-terraform-and-helm", "published_at": "2024-05-01T11:48:46+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a62f9ab54", "title": "Grafana CloudWatch Datasource IRSA for Kubernetes using Terraform", "url": "https://ruan.dev/blog/2024/04/23/grafana-cloudwatch-datasource-iam-role-service-account-for-kubernetes-using-terraform", "published_at": "2024-04-23T09:35:15+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a63065c74", "title": "Multi-Arch Docker Builds with Github Actions", "url": "https://ruan.dev/blog/2024/04/21/multi-architecture-docker-builds-with-github-actions", "published_at": "2024-04-21T11:17:30+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6342e9e1", "title": "Using Terraform to Deploy KinD Kubernetes Clusters", "url": "https://ruan.dev/blog/2024/04/07/using-terraform-to-deploy-kind-kubernetes-clusters", "published_at": "2024-04-07T19:16:46+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a63731a36", "title": "Getting Started with Argo CD on Kubernetes - The Ultimate Guide", "url": "https://ruan.dev/blog/2024/26/03/getting-started-with-argo-cd-on-kubernetes---the-ultimate-guide", "published_at": "2024-03-26T00:00:00+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a639af0a5", "title": "How to use Cert-Manager DNS Challenge with Cloudflare on Kubernetes with Helm", "url": "https://ruan.dev/blog/2023/12/22/how-to-use-cert-manager-dns-challenge-with-cloudflare-on-kubernetes-with-helm", "published_at": "2023-12-22T13:04:02+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a642c4c46", "title": "How to deploy Ingress-Nginx Controller on Kubernetes with Helm", "url": "https://ruan.dev/blog/2023/12/22/how-to-deploy-ingress-nginx-controller-on-kubernetes-with-helm", "published_at": "2023-12-22T12:56:22+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a64959846", "title": "Create Kubernetes Clusters with Kind", "url": "https://ruan.dev/blog/2023/10/24/create-kubernetes-clusters-with-kind", "published_at": "2023-10-24T00:00:00+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6566aaf8", "title": "Creating a Python Lambda Function with Terraform on AWS", "url": "https://ruan.dev/blog/2023/08/03/creating-a-python-lambda-function-with-terraform-on-aws", "published_at": "2023-08-03T15:29:35+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a661e14d0", "title": "How to use the MySQL Terraform Provider", "url": "https://ruan.dev/blog/2023/07/15/how-to-use-the-mysql-terraform-provider", "published_at": "2023-07-16T00:55:23+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a66233626", "title": "How to use the AWS Terraform Provider", "url": "https://ruan.dev/blog/2023/07/15/how-to-use-the-aws-terraform-provider", "published_at": "2023-07-16T00:01:13+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a66831706", "title": "Getting Started with FerretDB on Docker", "url": "https://ruan.dev/blog/2023/06/14/getting-started-with-ferretdb-on-docker", "published_at": "2023-06-15T02:00:00+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a66873b72", "title": "How to Run a AMD64 Bit Linux VM on a Mac M1", "url": "https://ruan.dev/blog/2023/05/26/how-to-run-a-amd64-bit-linux-vm-on-a-mac-m1", "published_at": "2023-05-26T12:35:38+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a673e74da", "title": "Running a Multi-Broker Kafka Cluster on Docker", "url": "https://ruan.dev/blog/2023/05/17/running-a-multi-broker-kafka-cluster-on-docker", "published_at": "2023-05-17T14:50:57+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a676a5278", "title": "Manage Helm Releases with Terraform", "url": "https://ruan.dev/blog/2023/03/09/manage-helm-releases-with-terraform", "published_at": "2023-03-09T21:15:47+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a685ab4d6", "title": "Persisting Terraform Remote State in Gitlab", "url": "https://ruan.dev/blog/2023/03/05/persisting-terraform-remote-state-in-gitlab", "published_at": "2023-03-05T06:43:54+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a685d550d", "title": "Everything you need to know about Helm", "url": "https://ruan.dev/blog/2023/01/24/everything-you-need-to-know-about-helm", "published_at": "2023-01-24T21:02:22+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a68c32c8b", "title": "Getting Started with Wiremock", "url": "https://ruan.dev/blog/2023/01/14/getting-started-with-wiremock", "published_at": "2023-01-14T23:03:12+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6923e7db", "title": "Logging with Docker Promtail and Grafana Loki", "url": "https://ruan.dev/blog/2022/11/18/logging-with-docker-promtail-and-grafana-loki", "published_at": "2022-11-18T05:42:49+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a69bdbcba", "title": "KinD for Local Kubernetes Clusters", "url": "https://ruan.dev/blog/2022/09/20/kind-for-local-kubernetes-clusters", "published_at": "2022-09-20T06:18:16+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a69c9594a", "title": "Setup a Digibyte Mainnet Fullnode", "url": "https://ruan.dev/blog/2022/09/17/setup-a-digibyte-mainnet-fullnode", "published_at": "2022-09-18T00:55:23+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a69fb8d9a", "title": "Ansible Playbook for your Macbook Homebrew Packages", "url": "https://ruan.dev/blog/2022/08/28/ansible-playbook-for-your-macbook-homebrew-packages", "published_at": "2022-08-28T23:14:54+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6aab941b", "title": "Docker Multistage Builds for Hugo", "url": "https://ruan.dev/blog/2022/07/31/docker-multistage-builds-for-hugo", "published_at": "2022-07-31T06:23:51+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6b71f512", "title": "Remote Builds with Docker Contexts", "url": "https://ruan.dev/blog/2022/07/14/remote-builds-with-docker-contexts", "published_at": "2022-07-14T05:57:34+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6c0214b5", "title": "Create a RAID5 Array with mdadm on Linux", "url": "https://ruan.dev/blog/2022/06/29/create-a-raid5-array-with-mdadm-on-linux", "published_at": "2022-06-29T09:02:13+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6c7b347e", "title": "Install a specific Python version on Ubuntu", "url": "https://ruan.dev/blog/2022/06/23/install-a-specific-python-version-on-ubuntu", "published_at": "2022-06-23T21:53:46+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6c853614", "title": "How to persist iptables rules after reboots", "url": "https://ruan.dev/blog/2022/06/15/how-to-persist-iptables-rules-after-reboots", "published_at": "2022-06-15T10:10:12+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6c91a9db", "title": "How to Read and Write json data with Python", "url": "https://ruan.dev/blog/2022/06/14/how-to-read-and-write-json-data-with-python", "published_at": "2022-06-14T23:02:53+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6c953849", "title": "Setup Linkding Bookmarks Manager on Docker", "url": "https://ruan.dev/blog/2022/05/31/setup-linkding-bookmarks-manager-on-docker", "published_at": "2022-05-31T19:50:24+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6cef68a9", "title": "Python Flask Forms with Jinja Templating", "url": "https://ruan.dev/blog/2022/05/31/python-flask-forms-with-jinja-templating", "published_at": "2022-05-31T06:39:30+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6d8eef8a", "title": "Prometheus Relabel Config Examples", "url": "https://ruan.dev/blog/2022/05/30/prometheus-relabel-config-examples", "published_at": "2022-05-30T07:01:01+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6e6f0609", "title": "Create a AWS Lambda Layer with Docker", "url": "https://ruan.dev/blog/2022/05/27/create-a-aws-lambda-layer-with-docker", "published_at": "2022-05-27T10:19:05+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a6f607683", "title": "Customize VIM Editor with a Brand New Look", "url": "https://ruan.dev/blog/2022/05/11/customize-vim-editor-with-a-brand-new-look", "published_at": "2022-05-11T21:10:16+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a702eb14c", "title": "Create a Discord Bot in Python", "url": "https://ruan.dev/blog/2022/05/05/create-a-discord-bot-in-python", "published_at": "2022-05-05T08:32:12+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a70c50c95", "title": "Publish and use your Ansible Role from Git", "url": "https://ruan.dev/blog/2022/04/19/publish-and-use-your-ansible-role-from-git", "published_at": "2022-04-19T08:35:09+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a71b4b6f1", "title": "Provision a AWS EC2 Instance with Terraform", "url": "https://ruan.dev/blog/2022/04/16/provision-a-aws-ec2-instance-with-terraform", "published_at": "2022-04-16T23:04:08+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a72b4ad0f", "title": "Matrix Bot using SimpleMatrixBotlib in Python", "url": "https://ruan.dev/blog/2022/03/29/matrix-bot-using-simplematrixbotlib-in-python", "published_at": "2022-03-29T22:50:43+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a72fbd9b6", "title": "Setup Matrix and Element Chat Server", "url": "https://ruan.dev/blog/2022/03/29/setup-matrix-and-element-chat-server", "published_at": "2022-03-29T22:33:49+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a73f29daa", "title": "Load Environment Variables from File in Python", "url": "https://ruan.dev/blog/2022/03/22/load-environment-variables-from-file-in-python", "published_at": "2022-03-22T11:34:11+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a74716da8", "title": "Run a Basic Python Flask Restful API", "url": "https://ruan.dev/blog/2022/03/20/run-a-basic-python-flask-restful-api", "published_at": "2022-03-20T21:33:17+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a74af2d33", "title": "Run OpenLDAP with a UI on Docker", "url": "https://ruan.dev/blog/2022/03/20/run-openldap-with-a-ui-on-docker", "published_at": "2022-03-20T20:55:39+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a752ec035", "title": "Setup a Monero Testnet Fullnode", "url": "https://ruan.dev/blog/2022/03/02/setup-a-monero-testnet-fullnode", "published_at": "2022-03-03T00:55:23+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a75f5cd21", "title": "Create DNS Records with Terraform on Cloudflare", "url": "https://ruan.dev/blog/2022/02/20/create-dns-records-with-terraform-on-cloudflare", "published_at": "2022-02-20T18:11:06+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a76b445b8", "title": "Bitcoin JSON RPC Usage Examples", "url": "https://ruan.dev/blog/2022/02/15/bitcoin-rpc-usage-examples", "published_at": "2022-02-16T00:10:12+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a76ebb1d3", "title": "Setup a Bitcoin Fullnode", "url": "https://ruan.dev/blog/2022/02/12/setup-a-bitcoin-fullnode", "published_at": "2022-02-13T00:00:00+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a773a4c06", "title": "Getting to know Blockchain Basics", "url": "https://ruan.dev/blog/2022/02/10/blockchain-basics", "published_at": "2022-02-11T00:10:01+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a7825c85a", "title": "Blockchain Basics", "url": "https://ruan.dev/blog/2021/12/05/blockchain-basics", "published_at": "2021-12-05T13:12:10+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a78708d04", "title": "Run a GETH Ethereum Light Node", "url": "https://ruan.dev/blog/2021/12/05/run-a-geth-ethereum-light-node", "published_at": "2021-12-05T09:14:11+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a78960a9a", "title": "Run Docker Containers with Terraform", "url": "https://ruan.dev/blog/2021/11/23/run-docker-containers-with-terraform", "published_at": "2021-11-23T16:06:03+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a7918aa42", "title": "Setup Traefik Version 2 on Docker", "url": "https://ruan.dev/blog/2021/11/03/setup-traefik-version-2-on-docker", "published_at": "2021-11-03T05:20:27+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a798d9e00", "title": "Install Nodejs on Linux using NVM", "url": "https://ruan.dev/blog/2021/10/11/install-nodejs-on-linux-using-nvm", "published_at": "2021-10-11T23:07:43+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a79ff6900", "title": "Setup TLS and Basic Authentication on Node Exporter for Prometheus", "url": "https://ruan.dev/blog/2021/10/10/setup-basic-authentication-on-node-exporter-and-prometheus", "published_at": "2021-10-10T20:50:17+00:00" }, { "id": "01a087d8-8c28-7177-924c-f63a7a5e749a", "title": "Install Concourse CI v7.4 on Ubuntu Linux", "url": "https://ruan.dev/blog/2021/10/07/install-concourse-ci-v7-dot-4-on-ubuntu-linux", "published_at": "2021-10-07T23:27:05+00:00" }, { "id": "01a087d8-8c29-7291-915a-f75103a909bd", "title": "A Tour with Vagrant and Virtualbox on Mac", "url": "https://ruan.dev/blog/2021/08/14/a-tour-with-vagrant-and-virtualbox-on-mac", "published_at": "2021-08-14T17:41:32+00:00" }, { "id": "01a087d8-8c29-7291-915a-f75104928793", "title": "How to specify wallet name in Bitcoin Core walletnotify", "url": "https://ruan.dev/blog/2021/08/04/how-to-specify-wallet-name-in-bitcoin-core-walletnotify", "published_at": "2021-08-04T13:41:51+00:00" }, { "id": "01a087d8-8c29-7291-915a-f75105486378", "title": "AWS EC2 Linux - warning: setlocale: LC_CTYPE: cannot change locale UTF-8", "url": "https://ruan.dev/blog/2021/08/02/aws-ec2-linux-warning-setlocale-lc-ctype-cannot-change-locale-utf-8", "published_at": "2021-08-02T06:40:53+00:00" }, { "id": "01a087d8-8c29-7291-915a-f75105d2031d", "title": "Task runner with YAML config written in Go", "url": "https://ruan.dev/blog/2021/08/01/task-runner-with-yaml-config-written-in-go", "published_at": "2021-08-01T10:11:54+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510634b005", "title": "Basic Logging with Python", "url": "https://ruan.dev/blog/2021/07/31/basic-logging-with-python", "published_at": "2021-07-31T08:17:24+00:00" }, { "id": "01a087d8-8c29-7291-915a-f751068bd747", "title": "Difference with ECS Task and Execution IAM Roles on AWS", "url": "https://ruan.dev/blog/2021/07/31/difference-with-ecs-task-and-execution-iam-roles-on-aws", "published_at": "2021-07-31T07:37:34+00:00" }, { "id": "01a087d8-8c29-7291-915a-f751072fbe30", "title": "Install Java 11 and Maven on Ubuntu Linux", "url": "https://ruan.dev/blog/2021/07/12/install-java-11-and-maven-on-ubuntu-linux", "published_at": "2021-07-12T06:36:32+00:00" }, { "id": "01a087d8-8c29-7291-915a-f75107f81205", "title": "Setup a Crypto Digibyte Full Node on Linux", "url": "https://ruan.dev/blog/2021/05/03/setup-a-crypto-digibyte-full-node-on-linux", "published_at": "2021-05-03T21:14:49+00:00" }, { "id": "01a087d8-8c29-7291-915a-f75108235dff", "title": "Install Concourse CI v6 on Ubuntu 20.04", "url": "https://ruan.dev/blog/2021/04/06/install-concourse-ci-v6-on-ubuntu-20-dot-04", "published_at": "2021-04-06T21:56:38+00:00" }, { "id": "01a087d8-8c29-7291-915a-f75108b1c84e", "title": "Wireguard VPN with Unbound ADS Blocking DNS", "url": "https://ruan.dev/blog/2021/03/10/wireguard-vpn-with-unbound-ads-blocking-dns", "published_at": "2021-03-10T05:59:51+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510917a236", "title": "SSH using AWS SSM Session Manager", "url": "https://ruan.dev/blog/2021/03/10/ssh-using-aws-ssm-session-manager", "published_at": "2021-03-10T05:52:54+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510a105869", "title": "Bypass the Medium Paywall System", "url": "https://ruan.dev/blog/2021/03/10/bypass-the-medium-paywall-system", "published_at": "2021-03-10T05:45:54+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510a35c3bc", "title": "Generate Grafana Loki Log Links from Metric Label Values", "url": "https://ruan.dev/blog/2021/03/10/generate-grafana-loki-log-links-from-metric-label-values", "published_at": "2021-03-10T05:34:04+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510aa6d545", "title": "Visualize Weather Data with Grafana and the DHT22 Sensor", "url": "https://ruan.dev/blog/2021/03/10/visualize-weather-data-with-grafana-and-the-dht22-sensor", "published_at": "2021-03-10T05:06:31+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510aeffc3d", "title": "CICD with DroneCI and Gitea using Docker Compose", "url": "https://ruan.dev/blog/2021/03/09/cicd-with-droneci-and-gitea-using-docker-compose", "published_at": "2021-03-09T06:10:10+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510bd47a79", "title": "Ship your Docker Logs to Loki using Fluentbit", "url": "https://ruan.dev/blog/2021/02/26/ship-your-docker-logs-to-loki-using-fluentbit", "published_at": "2021-02-26T20:26:34+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510c6a6d5f", "title": "Installing Arduino and Setup the NodeMCU ESP32", "url": "https://ruan.dev/blog/2021/01/31/installing-arduino-and-setup-the-nodemcu-esp32", "published_at": "2021-01-31T16:33:31+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510d6108f8", "title": "Reduce Docker Log Size on Disk", "url": "https://ruan.dev/blog/2020/12/23/reduce-docker-log-size-on-disk", "published_at": "2020-12-23T09:11:35+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510dcf51cd", "title": "HTTPS for Local Development with MiniCA", "url": "https://ruan.dev/blog/2020/12/23/https-for-local-development-with-minica", "published_at": "2020-12-23T08:11:08+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510e8ef66e", "title": "Harden your SSH Security on Linux Servers", "url": "https://ruan.dev/blog/2020/12/18/harden-your-ssh-security-on-linux-servers", "published_at": "2020-12-18T13:32:18+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7510f8c9ee8", "title": "Encrypt and Decrypt files with ccrypt", "url": "https://ruan.dev/blog/2020/11/20/encrypt-and-decrypt-files-with-ccrypt", "published_at": "2020-11-20T06:27:01+00:00" }, { "id": "01a087d8-8c29-7291-915a-f75110891f79", "title": "Deploy Loki on Multipass", "url": "https://ruan.dev/blog/2020/11/11/deploy-loki-on-multipass", "published_at": "2020-11-11T14:19:05+00:00" }, { "id": "01a087d8-8c29-7291-915a-f751117347f0", "title": "How to Setup Alerting with Loki", "url": "https://ruan.dev/blog/2020/11/06/how-to-setup-alerting-with-loki", "published_at": "2020-11-06T15:13:53+00:00" }, { "id": "01a087d8-8c29-7291-915a-f7511228ab03", "title": "Sending Slack Messages with Python", "url": "https://ruan.dev/blog/2020/11/06/sending-slack-messages-with-python", "published_at": "2020-11-06T13:58:50+00:00" }, { "id": "01a087d8-8c29-7291-915a-f75112401d51", "title": "Running SSH Commands on AWS EC2 Instances with Python", "url": "https://ruan.dev/blog/2020/11/02/running-ssh-commands-on-aws-ec2-instances-with-python", "published_at": "2020-11-02T09:55:43+00:00" }, { "id": "01a087d8-8c29-7291-915a-f751126eb2ba", "title": "Running Loki behind Nginx Reverse Proxy", "url": "https://ruan.dev/blog/2020/10/29/running-loki-behind-nginx-reverse-proxy", "published_at": "2020-10-29T08:29:13+00:00" } ] posts Claim your blog
Back to ruan.dev
Blog · corpus.blog/blogs/ruan.dev/posts

ruan.dev

ruan.dev

2026

2025

2024

2023

2022

2021

2020