<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://ruan.dev/</loc>
<lastmod>2025-06-09</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog</loc>
<lastmod>2025-06-09</lastmod>
</url>
<url>
<loc>https://ruan.dev/projects</loc>
<lastmod>2025-06-09</lastmod>
</url>
<url>
<loc>https://ruan.dev/tags</loc>
<lastmod>2025-06-09</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/24/create-a-zfs-raidz1-volume-pool-on-ubuntu-16</loc>
<lastmod>2017-08-24T13:16:34.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/24/modern-reverse-proxy-with-traefik-on-docker-swarm</loc>
<lastmod>2017-08-24T23:00:33.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/24/setup-mongodb-client-on-centos-6</loc>
<lastmod>2017-08-24T12:58:10.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/25/structured-search-with-elasticsearch</loc>
<lastmod>2017-08-26T03:42:19.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/26/building-a-alpine-nginx-php-fpm-image-on-docker-for-php-applications</loc>
<lastmod>2017-08-27T00:41:16.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/26/create-a-lightweight-webserver-service-with-lighttpd-on-alpine-running-on-docker-swarm</loc>
<lastmod>2017-08-26T15:37:19.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/27/setup-a-local-mongodb-development-3-member-replica-set</loc>
<lastmod>2017-08-27T05:10:16.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/27/using-the-python-api-for-mongodb-using-pymongo</loc>
<lastmod>2017-08-27T20:19:48.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/28/change-iam-username-with-aws-cli</loc>
<lastmod>2017-08-28T22:27:21.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/31/reference-credentials-outside-your-main-application-in-python</loc>
<lastmod>2017-08-31T07:00:58.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/31/secure-your-access-to-kibana-5-and-elasticsearch-5-with-nginx-for-aws</loc>
<lastmod>2017-08-31T14:40:09.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/08/31/setup-haproxy-load-balancer-for-mysql-galera-with-ip-whitelisting-and-backup-servers</loc>
<lastmod>2017-08-31T23:15:50.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/02/setup-a-3-node-mongodb-replica-set-on-ubuntu-16</loc>
<lastmod>2017-09-02T23:29:10.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/04/getting-started-with-chef-creating-a-website-with-apache</loc>
<lastmod>2017-09-04T18:21:20.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/04/getting-started-with-chef-working-with-files</loc>
<lastmod>2017-09-04T18:06:01.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/04/splitting-characters-with-python-to-determine-name-surname-and-email-address</loc>
<lastmod>2017-09-04T13:22:42.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/07/how-to-create-a-local-docker-swarm-cluster-with-docker-in-docker-on-your-workstation</loc>
<lastmod>2017-09-07T08:03:37.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/08/run-your-self-hosted-s3-service-with-minio-on-docker-swarm</loc>
<lastmod>2017-09-08T19:29:29.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/08/using-minios-python-sdk-to-interact-with-a-minio-s3-bucket</loc>
<lastmod>2017-09-08T20:15:52.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/09/https-termination-using-letsencrypt-with-traefik-on-docker-swarm</loc>
<lastmod>2017-09-09T22:40:15.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/09/run-kibana-on-docker-swarm-with-traefik</loc>
<lastmod>2017-09-09T22:33:12.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/09/using-python-to-read-data-from-a-mysql-database</loc>
<lastmod>2017-09-09T19:23:05.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/09/using-python-to-write-data-to-a-mysql-database</loc>
<lastmod>2017-09-09T20:39:59.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/10/setup-rocketchat-on-docker-swarm</loc>
<lastmod>2017-09-10T22:45:12.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/11/using-python-for-image-analysis-with-amazons-rekognition-service</loc>
<lastmod>2017-09-11T14:20:28.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/15/aws-iam-s3-policy-for-cyberduck-to-allow-listing-buckets-and-access-to-one-bucket</loc>
<lastmod>2017-09-15T15:18:17.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/16/nginx-reverse-proxy-for-elasticsearch-and-kibana-5-on-aws</loc>
<lastmod>2017-09-16T21:24:32.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/16/setup-a-postfix-relay-server-that-uses-ses-to-relay-outbound-mail</loc>
<lastmod>2017-09-16T22:01:49.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/18/using-the-python-sys-library-to-read-data-from-stdin</loc>
<lastmod>2017-09-18T15:42:01.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/22/using-the-aws-cli-tools-to-grab-cloudwatch-metrics-for-elasticsearch</loc>
<lastmod>2017-09-22T22:06:23.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/24/create-a-3-node-elasticsearch-stack-with-haproxy-on-docker-swarm</loc>
<lastmod>2017-09-24T19:40:19.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/24/creating-a-nodejs-hostname-app-with-docker-stacks-on-swarm</loc>
<lastmod>2017-09-24T21:52:51.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/09/24/simple-program-with-c-language-on-linux</loc>
<lastmod>2017-09-24T10:41:58.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/03/backup-and-restore-mutliple-collections-from-a-database-with-mongodb</loc>
<lastmod>2017-10-03T20:42:34.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/09/sending-mail-with-ssmtp-on-alpine-linux</loc>
<lastmod>2017-10-09T20:36:35.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/11/customize-ubuntu-16-desktop-with-arc-dark-theme</loc>
<lastmod>2017-10-11T19:56:10.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/11/display-php-content-through-html-files</loc>
<lastmod>2017-10-11T06:43:55.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/14/using-python-to-build-a-dictionary-from-data-eg-sports-per-person</loc>
<lastmod>2017-10-14T18:53:48.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/18/setup-kerberos-server-and-client-on-ubuntu</loc>
<lastmod>2017-10-18T22:25:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/20/python-script-to-decrypt-encrypted-data-with-aws-kms</loc>
<lastmod>2017-10-20T08:54:51.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/22/basic-example-with-python-to-create-a-module-that-consists-of-classes-and-functions</loc>
<lastmod>2017-10-22T09:45:17.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/24/managing-traefik-configuration-with-consul-on-docker-swarm</loc>
<lastmod>2017-10-24T07:08:15.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/24/running-java-web-applications-on-tomcat-with-docker-swarm</loc>
<lastmod>2017-10-24T13:37:38.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/25/new-posts-on-github-pages-with-octopress-not-showing-on-your-blog</loc>
<lastmod>2017-10-25T10:54:59.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/25/your-first-hello-world-app-with-golang</loc>
<lastmod>2017-10-25T21:16:25.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/10/26/using-python-to-query-mysql-database-with-mysqldb-library</loc>
<lastmod>2017-10-26T07:40:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/06/linux-shell-commands-with-the-python-commands-module</loc>
<lastmod>2017-11-06T20:15:23.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/07/installing-elastalert-for-elasticsearch-on-amazon-linux</loc>
<lastmod>2017-11-07T12:53:33.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/07/setup-a-concourse-ci-server-on-ubuntu-16</loc>
<lastmod>2017-11-07T22:55:46.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/13/local-dev-environment-with-docker-mysql-and-adminer-webui-with-docker-compose</loc>
<lastmod>2017-11-13T21:15:34.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/14/routing-web-traffic-with-a-socks-tunnel</loc>
<lastmod>2017-11-14T15:17:07.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/22/delete-old-items-with-amazons-dynamodb-ttl-feature</loc>
<lastmod>2017-11-22T22:47:31.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/22/setup-a-3-node-galera-mariadb-cluster-on-ubuntu-16</loc>
<lastmod>2017-11-22T23:17:14.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/22/update-your-ghost-blog-with-the-ghost-cli</loc>
<lastmod>2017-11-22T22:36:45.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/22/use-the-reindex-api-on-elasticsearch-to-reindex-your-data</loc>
<lastmod>2017-11-22T14:32:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/22/using-elasticdump-to-backup-elasticsearch-indexes-to-json</loc>
<lastmod>2017-11-22T13:35:28.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/22/using-elasticsearch-curator-to-reindex-data</loc>
<lastmod>2017-11-22T14:09:28.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/23/use-docker-secrets-with-mysql-on-docker-swarm</loc>
<lastmod>2017-11-23T21:55:15.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/11/24/basic-concourse-pipeline-with-bash-and-golang-jobs</loc>
<lastmod>2017-11-24T23:38:15.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/12/04/elasticsearch-curator-to-manage-and-curate-your-elasticsearch-indexes</loc>
<lastmod>2017-12-04T13:39:06.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/12/05/setup-a-nfs-server-on-a-raspberrypi</loc>
<lastmod>2017-12-05T15:45:35.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/12/09/unmask-a-masked-service-in-systemd</loc>
<lastmod>2017-12-09T07:02:21.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/12/10/rejoining-or-bootstrapping-mysql-galera-cluster-nodes-after-shutdown</loc>
<lastmod>2017-12-10T23:03:44.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/12/11/setup-a-3-node-kubernetes-cluster-on-ubuntu</loc>
<lastmod>2017-12-11T14:31:47.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/12/13/create-a-chatbot-with-chatterbot-on-python</loc>
<lastmod>2017-12-13T13:53:50.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/12/13/ssh-host-key-warnings-with-strict-checking-enabled</loc>
<lastmod>2017-12-13T07:07:29.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/12/14/change-your-relayhost-on-postfix-using-sed</loc>
<lastmod>2017-12-14T15:11:33.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2017/12/14/graphing-pretty-charts-with-python-flask-and-chartjs</loc>
<lastmod>2017-12-14T07:28:51.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/01/11/setup-a-basic-hello-world-pipeline-on-concourse</loc>
<lastmod>2018-01-11T14:15:27.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/01/22/using-getpass-in-python-to-accept-passwords-from-stdin-without-echoing-it-back</loc>
<lastmod>2018-01-22T18:15:09.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/01/23/using-hive-for-small-datasets-on-my-mac-using-docker</loc>
<lastmod>2018-01-23T15:06:16.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/01/30/authenticate-to-your-aws-mysql-rds-instance-via-iam</loc>
<lastmod>2018-01-30T15:02:05.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/02/11/setup-a-nfs-server-on-ubuntu</loc>
<lastmod>2018-02-11T22:26:56.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/02/11/setup-a-site-to-site-ipsec-vpn-with-strongswan-and-preshared-key-authentication</loc>
<lastmod>2018-02-11T21:09:37.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/02/16/guide-to-setup-docker-convoy-volume-driver-for-docker-swarm-with-nfs</loc>
<lastmod>2018-02-16T13:51:59.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/02/20/setup-a-kvm-hypervisor-on-ubuntu-to-host-virtual-machines</loc>
<lastmod>2018-02-20T11:21:56.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/03/02/golang-reading-from-files-and-writing-to-disk-with-arguments</loc>
<lastmod>2018-03-02T12:11:13.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/03/02/golang-reading-from-files-and-writing-to-disk-with-golang</loc>
<lastmod>2018-03-02T11:44:59.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/03/02/send-sms-messages-with-python-and-twilio-via-their-api</loc>
<lastmod>2018-03-02T22:09:56.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/03/12/populate-environment-variables-from-docker-secrets-with-a-flask-demo-app</loc>
<lastmod>2018-03-12T22:16:42.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/03/19/nginx-basic-authentication-with-source-ip-whitelisting</loc>
<lastmod>2018-03-19T14:57:36.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/03/28/expanding-the-size-of-your-ebs-volume-on-aws-ec2-for-linux</loc>
<lastmod>2018-03-28T05:45:07.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/03/29/setup-payara-application-server-on-ubuntu-16-dot-04</loc>
<lastmod>2018-03-29T23:57:40.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/03/30/create-a-logical-volume-using-lvm-on-ubuntu</loc>
<lastmod>2018-03-31T00:38:18.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/01/setup-mongodb-server-on-arm64-using-scaleway</loc>
<lastmod>2018-04-01T22:46:27.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/03/using-python-boto3-and-dreamhosts-dreamobjects-to-interact-with-their-object-storage-offering</loc>
<lastmod>2018-04-03T11:19:27.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/04/using-aws-ssm-parameter-store-to-retrieve-secrets-encrypted-by-kms-using-python</loc>
<lastmod>2018-04-04T20:47:16.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/07/docker-environment-substitution-with-dockerfile</loc>
<lastmod>2018-04-07T13:18:20.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/07/set-docker-environment-variables-during-build-time</loc>
<lastmod>2018-04-07T13:51:35.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/15/experimenting-with-python-and-flata-the-lightweight-document-orientated-database</loc>
<lastmod>2018-04-15T19:09:25.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/15/experimenting-with-python-and-tinymongo-a-mongodb-wrapper-for-tinydb</loc>
<lastmod>2018-04-15T20:39:22.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/16/how-to-monitor-a-amazon-elasticsearch-service-cluster-update-process</loc>
<lastmod>2018-04-16T07:24:09.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/18/basic-introduction-to-use-arguments-with-argparse-on-python</loc>
<lastmod>2018-04-18T17:35:28.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/21/basic-restful-api-server-with-python-flask</loc>
<lastmod>2018-04-21T23:35:34.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/23/setup-a-ssh-tunnel-with-the-sshtunnel-module-in-python</loc>
<lastmod>2018-04-23T15:56:46.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/23/using-paramiko-module-in-python-to-execute-remote-bash-commands</loc>
<lastmod>2018-04-23T16:16:59.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/29/encryption-and-decryption-with-simple-crypt-using-python</loc>
<lastmod>2018-04-29T14:50:46.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/29/running-a-3-node-elasticsearch-cluster-with-docker-compose-on-your-laptop-for-testing</loc>
<lastmod>2018-04-29T17:43:35.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/29/using-the-bulk-api-with-elasticsearch</loc>
<lastmod>2018-04-29T17:32:21.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/30/encryption-and-decryption-with-the-pycrypto-module-using-the-aes-cipher-in-python</loc>
<lastmod>2018-04-30T05:43:26.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/04/30/forwarding-the-docker-socket-via-a-ssh-tunnel-to-execute-docker-commands-locally</loc>
<lastmod>2018-04-30T12:30:23.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/05/02/setup-the-elasticsearch-log-driver-on-docker-swarm</loc>
<lastmod>2018-05-02T19:10:30.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/05/08/use-python-requests-to-interact-with-the-itunes-api-to-search-for-music-info</loc>
<lastmod>2018-05-08T21:01:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/05/09/manage-scaleway-instances-via-their-api-like-a-boss-with-their-command-line-tool-scw</loc>
<lastmod>2018-05-09T16:31:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/05/09/temporary-iam-credentials-from-ec2-instance-metadata-using-python</loc>
<lastmod>2018-05-09T16:14:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/05/23/generate-random-characters-with-python-using-random-and-string-modules</loc>
<lastmod>2018-05-23T10:29:06.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/05/27/web-forms-with-python-flask-and-the-wtforms-module-with-bootstrap</loc>
<lastmod>2018-05-27T21:44:41.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/05/28/wildcard-ssl-certificate-with-letsencrypt-on-docker-swarm-using-traefik</loc>
<lastmod>2018-05-28T21:36:17.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/05/31/ssh-tools-that-comes-in-handy-when-dealing-with-multiple-servers</loc>
<lastmod>2018-05-31T09:18:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/06/01/add-a-authentication-header-to-your-python-flask-app</loc>
<lastmod>2018-06-01T07:28:05.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/06/01/clearing-up-disk-space-on-docker-swarm-by-removing-unused-data-with-prune</loc>
<lastmod>2018-06-01T06:19:21.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/06/02/setup-a-peer-to-peer-vpn-with-vpncloud-on-ubuntu</loc>
<lastmod>2018-06-02T18:15:33.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/06/09/hello-world-programs-in-different-languages</loc>
<lastmod>2018-06-10T01:11:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/06/13/setup-a-3-node-ceph-storage-cluster-on-ubuntu-16</loc>
<lastmod>2018-06-13T22:22:06.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/06/14/deploy-docker-swarm-using-ansible</loc>
<lastmod>2018-06-14T10:05:46.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/06/27/setup-a-pptp-vpn-on-ubuntu</loc>
<lastmod>2018-06-27T08:18:51.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/07/04/salt-and-hash-example-using-python-with-bcrypt-on-alpine</loc>
<lastmod>2018-07-04T09:05:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/07/08/getting-started-with-ansible-on-ubuntu</loc>
<lastmod>2018-07-08T19:56:06.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/07/08/setup-a-lamp-stack-with-ansible-using-ubuntu</loc>
<lastmod>2018-07-08T21:15:15.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/07/15/install-java-development-kit-10-on-ubuntu</loc>
<lastmod>2018-07-15T10:17:43.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/07/16/capture-geo-location-data-with-python-flask-and-pygeoip</loc>
<lastmod>2018-07-16T21:46:01.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/07/20/hello-world-ruby-on-rails-app-tutorial-using-mac</loc>
<lastmod>2018-07-20T07:30:20.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/08/03/hello-world-web-app-with-java-springboot-and-maven</loc>
<lastmod>2018-08-03T12:31:58.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/08/09/build-a-rest-api-war-file-for-payara-with-java-springboot-and-maven-part-1</loc>
<lastmod>2018-08-10T00:43:34.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/08/09/ruby-programming-tutorial-series</loc>
<lastmod>2018-08-10T00:59:34.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/08/09/ruby-tutorial-series-setup-and-variables</loc>
<lastmod>2018-08-10T01:11:52.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/08/14/tutorial-on-dynamodb-using-bash-and-the-aws-cli-tools-to-interact-with-a-music-dataset</loc>
<lastmod>2018-08-14T20:33:22.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/08/15/get-blogpost-titles-links-and-tags-from-a-rss-link-using-python-feedparser</loc>
<lastmod>2018-08-15T22:14:54.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/08/20/using-iam-authentication-with-amazon-elasticsearch-service</loc>
<lastmod>2018-08-20T08:12:21.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/08/21/send-emails-using-python-and-sendgrid-using-smtplib</loc>
<lastmod>2018-08-21T15:30:08.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/08/27/distributing-a-shared-secret-amongst-a-group-of-participants-using-shamirs-secret-sharing-scheme-aka-ssss</loc>
<lastmod>2018-08-27T22:29:48.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/08/27/improving-performance-from-your-lambda-function-from-the-use-of-global-variables</loc>
<lastmod>2018-08-27T12:30:30.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/08/29/review-and-secure-your-facebook-account</loc>
<lastmod>2018-08-29T19:03:10.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/09/01/dockerizing-a-memcached-server-for-docker-on-alpine</loc>
<lastmod>2018-09-01T20:01:09.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/09/01/give-your-database-a-break-and-use-memcached-to-return-frequently-accessed-data</loc>
<lastmod>2018-09-01T21:05:10.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/09/05/investigating-high-request-latencies-on-amazon-dynamodb</loc>
<lastmod>2018-09-05T22:03:09.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/09/12/using-the-geoip-processor-plugin-with-elasticsearch-to-enrich-your-location-based-data</loc>
<lastmod>2018-09-12T14:14:30.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/04/splitting-query-string-parameters-from-a-url-in-python</loc>
<lastmod>2018-10-04T13:58:46.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/11/capturing-54-million-passwords-with-a-docker-ssh-honeypot</loc>
<lastmod>2018-10-11T20:38:52.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/23/build-a-traefik-proxy-image-for-your-raspberry-pi-on-docker-swarm</loc>
<lastmod>2018-10-23T21:31:02.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/23/building-a-raspberry-pi-nginx-image-with-caching-on-alpine-for-docker-swarm</loc>
<lastmod>2018-10-23T21:00:02.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/23/building-ghost-version-2-blog-for-the-raspberrypi</loc>
<lastmod>2018-10-23T21:37:49.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/23/my-pistack-blog-proudly-hosted-on-my-raspberrypi-swarm-cluster</loc>
<lastmod>2018-10-23T20:11:19.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/23/nginx-caching-performance-for-static-content-on-docker-swarm-with-raspberrypi</loc>
<lastmod>2018-10-23T20:41:41.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/23/setting-up-a-docker-swarm-cluster-on-3-raspberrypi-nodes</loc>
<lastmod>2018-10-23T20:24:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/24/using-python-flask-and-javascript-for-client-side-filtering-through-returned-data</loc>
<lastmod>2018-10-24T09:39:33.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/30/query-24-hours-worth-of-data-using-batchget-on-amazon-dynamodb-using-scan-and-filter-without-a-gsi</loc>
<lastmod>2018-10-30T18:53:43.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/31/benchmark-website-response-times-with-curl</loc>
<lastmod>2018-10-31T06:17:12.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/31/how-to-bootstrap-nodes-with-python-using-ansible</loc>
<lastmod>2018-10-31T05:48:15.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/10/31/how-to-install-packages-on-remote-systems-with-ansible</loc>
<lastmod>2018-10-31T05:28:18.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/11/11/get-application-performance-metrics-on-python-flask-with-elastic-apm-on-kibana-and-elasticsearch</loc>
<lastmod>2018-11-11T18:09:18.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/11/11/setup-apm-server-on-ubuntu-for-your-elastic-stack-to-get-insights-in-your-application-performance-metrics</loc>
<lastmod>2018-11-11T17:31:43.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/11/12/create-read-only-users-in-mongodb</loc>
<lastmod>2018-11-12T22:02:53.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/11/12/iam-policy-to-allow-team-wide-and-user-level-permissions-on-aws-secrets-manager</loc>
<lastmod>2018-11-12T21:32:24.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/11/21/golang-building-a-basic-web-server-in-go</loc>
<lastmod>2018-11-21T05:57:54.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/11/22/setup-a-golang-environment-on-ubuntu</loc>
<lastmod>2018-11-22T22:09:29.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/11/23/setup-a-relayhost-with-postfix-to-send-mail-via-sendgrid</loc>
<lastmod>2018-11-23T12:40:49.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/11/27/introduction-to-python-flask-tutorial-series</loc>
<lastmod>2018-11-27T13:28:33.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/11/27/python-flask-tutorial-series-create-a-hello-world-app-p1</loc>
<lastmod>2018-11-27T13:36:20.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/11/30/how-to-setup-a-serverless-url-shortener-with-api-gateway-lambda-and-dynamodb-on-aws</loc>
<lastmod>2018-11-30T07:51:24.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/12/09/python-flask-tutorial-series-setup-a-python-virtual-environment-p2</loc>
<lastmod>2018-12-09T22:19:24.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/12/11/python-flask-tutorial-series-routing-in-flask-p3</loc>
<lastmod>2018-12-11T10:29:14.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/12/12/vultr-cloud-servers-limited-singup-promotion</loc>
<lastmod>2018-12-12T06:00:32.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/12/18/creating-a-ui-in-python-flask-and-bootstrap-for-our-serverless-url-shortener</loc>
<lastmod>2018-12-18T14:35:53.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/12/19/local-dev-environment-for-mediawiki-using-docker-compose</loc>
<lastmod>2018-12-19T13:22:36.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/12/19/local-dev-environment-for-wordpress-using-docker-compose</loc>
<lastmod>2018-12-19T13:33:44.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/12/19/resizing-hetzner-cloud-block-storage-volumes-on-the-fly</loc>
<lastmod>2018-12-19T05:59:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/12/19/setup-a-basic-ci-pipeline-on-gitlab</loc>
<lastmod>2018-12-19T10:43:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2018/12/20/setup-a-gitlab-runner-on-your-own-server-to-run-your-jobs-that-gets-triggered-from-gitlab-ci</loc>
<lastmod>2018-12-20T09:21:16.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/01/05/tutorial-on-using-gitlab-cicd-pipelines-to-deploy-your-python-flask-restful-api-with-postgres-on-heroku</loc>
<lastmod>2019-01-05T15:27:31.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/01/07/fix-mac-high-sierra-opendlrectoryd-too-many-corpses-being-created-issue</loc>
<lastmod>2019-01-07T11:57:56.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/01/10/setup-a-3-node-docker-swarm-cluster-on-ubuntu-16-dot-04</loc>
<lastmod>2019-01-10T14:52:07.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/01/29/paginate-through-iam-users-on-aws-using-python-and-boto3</loc>
<lastmod>2019-01-29T15:03:24.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/05/convert-float-to-decimal-data-types-for-boto3-dynamodb-using-python</loc>
<lastmod>2019-02-05T14:45:40.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/05/python-multiprocessing-tutorial</loc>
<lastmod>2019-02-05T15:05:49.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/07/the-aws-cli-cheatsheet-for-bash</loc>
<lastmod>2019-02-07T08:24:12.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/08/port-status-checker-script-in-c-language</loc>
<lastmod>2019-02-08T13:56:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/10/sysadmin-linux-troubleshooting-cheatsheet</loc>
<lastmod>2019-02-10T19:17:54.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/12/concourse-tasks-and-inputs-tutorial</loc>
<lastmod>2019-02-12T19:57:27.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/14/concourse-pipeline-with-resources-tutorial</loc>
<lastmod>2019-02-14T20:58:10.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/14/how-to-cache-data-with-python-flask</loc>
<lastmod>2019-02-14T11:37:30.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/19/parallel-processing-on-aws-lambda-with-python-using-multiprocessing</loc>
<lastmod>2019-02-19T14:39:47.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/19/parallel-processing-with-python-and-multiprocessing-using-queue</loc>
<lastmod>2019-02-19T13:05:47.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/19/sharing-global-variables-in-python-using-multiprocessing</loc>
<lastmod>2019-02-19T14:02:43.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/21/building-python-serverless-slack-apps-on-openfaas</loc>
<lastmod>2019-02-21T21:29:15.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/25/how-to-tag-all-your-aws-iam-users-with-python</loc>
<lastmod>2019-02-25T11:44:55.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/27/how-to-validate-strings-in-python-with-regex</loc>
<lastmod>2019-02-27T11:47:53.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/02/28/use-swarm-managed-configs-in-docker-swarm-to-store-your-application-configs</loc>
<lastmod>2019-02-28T14:48:28.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/04/setup-a-distributed-storage-volume-with-glusterfs</loc>
<lastmod>2019-03-04T20:32:53.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/05/container-persistent-storage-for-docker-swarm-using-a-glusterfs-volume-plugin</loc>
<lastmod>2019-03-05T18:18:30.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/05/setup-a-3-node-replicated-storage-volume-with-glusterfs</loc>
<lastmod>2019-03-05T19:01:37.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/06/create-users-databases-and-granting-access-for-users-on-postgresql</loc>
<lastmod>2019-03-06T21:28:25.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/09/setup-a-reverse-proxy-on-nginx-for-your-backend-applications</loc>
<lastmod>2019-03-09T22:50:32.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/13/how-to-setup-a-nagios-monitoring-server</loc>
<lastmod>2019-03-13T21:53:42.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/18/how-to-setup-the-nagiosgraph-plugin-on-nagios-monitoring-server</loc>
<lastmod>2019-03-18T16:27:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/18/monitor-your-first-host-and-services-with-nagios</loc>
<lastmod>2019-03-18T16:49:23.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/18/setup-nrpe-client-and-server-for-monitoring-remote-services-in-nagios</loc>
<lastmod>2019-03-18T16:49:59.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/20/deploy-scaleway-servers-via-the-api-in-python</loc>
<lastmod>2019-03-20T23:04:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/21/how-to-deploy-a-docker-swarm-cluster-on-scaleway-with-terraform</loc>
<lastmod>2019-03-21T06:15:07.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/27/concourse-pipeline-to-build-a-docker-image-automatically-on-git-commit</loc>
<lastmod>2019-03-27T21:50:54.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/27/ship-your-logs-to-elasticsearch-with-filebeat</loc>
<lastmod>2019-03-27T14:52:21.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/03/28/snippet-create-custom-cloudwatch-metrics-with-python</loc>
<lastmod>2019-03-28T12:05:28.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/02/secure-your-elasticsearch-cluster-with-basic-auth-using-nginx</loc>
<lastmod>2019-04-02T18:55:58.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/02/setup-a-5-node-highly-available-elasticsearch-cluster</loc>
<lastmod>2019-04-02T09:05:19.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/02/setup-kibana-dashboards-for-nginx-log-data-to-understand-the-behavior</loc>
<lastmod>2019-04-02T16:34:18.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/03/build-small-golang-docker-containers</loc>
<lastmod>2019-04-03T12:24:08.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/04/self-hosted-git-and-cicd-platform-with-gitea-and-drone-on-docker</loc>
<lastmod>2019-04-04T21:57:16.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/06/elasticsearch-templates-tutorial</loc>
<lastmod>2019-04-06T19:41:53.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/06/install-elasticsearch-with-ansible-tutorial</loc>
<lastmod>2019-04-06T19:45:09.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/06/reindex-your-elasticsearch-indexes-tutorial</loc>
<lastmod>2019-04-06T19:37:18.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/06/shrink-your-elasticsearch-index-by-reducing-the-shard-count-with-the-shards-api</loc>
<lastmod>2019-04-06T19:33:48.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/06/sql-inner-joins-examples-with-sqlite</loc>
<lastmod>2019-04-06T19:47:38.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/17/mongodb-examples-with-golang</loc>
<lastmod>2019-04-17T12:51:35.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/18/setup-a-drone-cicd-environment-on-docker-with-letsencrypt</loc>
<lastmod>2019-04-18T16:53:49.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/18/setup-a-slack-webhook-for-sending-messages-from-applications</loc>
<lastmod>2019-04-18T10:07:42.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/23/setup-a-blog-with-hugo</loc>
<lastmod>2019-04-23T09:41:10.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/23/using-drone-ci-to-build-a-jekyll-site-and-deploy-to-docker-swarm</loc>
<lastmod>2019-04-23T21:57:02.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/04/28/queries-failing-via-beeline-due-to-anonymous-user</loc>
<lastmod>2019-04-28T16:25:12.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/04/using-concourse-ci-to-deploy-to-docker-swarm</loc>
<lastmod>2019-05-04T21:11:17.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/04/using-mongodb-inside-drone-ci-services-for-unit-testing</loc>
<lastmod>2019-05-04T18:52:37.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/06/setup-hashicorp-vault-server-on-docker-and-cli-guide</loc>
<lastmod>2019-05-06T20:49:09.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/07/create-secrets-with-vaults-transits-secret-engine</loc>
<lastmod>2019-05-07T20:31:54.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/07/how-to-fix-the-following-signatures-couldnt-be-verified-because-the-public-key-is-not-available-with-apt</loc>
<lastmod>2019-05-07T10:16:31.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/07/persist-vault-data-with-amazon-s3-as-a-storage-backend</loc>
<lastmod>2019-05-07T20:01:45.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/07/setup-prometheus-and-node-exporter-on-ubuntu-for-epic-monitoring</loc>
<lastmod>2019-05-07T13:55:37.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/07/use-the-vault-api-to-provision-app-keys-and-create-kv-pairs</loc>
<lastmod>2019-05-07T20:23:10.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/10/running-a-ha-mysql-galera-cluster-on-docker-swarm</loc>
<lastmod>2019-05-10T11:02:39.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/17/install-alertmanager-to-alert-based-on-metrics-from-prometheus</loc>
<lastmod>2019-05-17T16:49:26.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/17/install-blackbox-exporter-to-monitor-websites-with-prometheus</loc>
<lastmod>2019-05-17T16:55:15.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/17/install-grafana-to-visualize-your-metrics-from-datasources-such-as-prometheus-on-linux</loc>
<lastmod>2019-05-17T16:08:02.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/17/install-pushgateway-to-expose-metrics-to-prometheus</loc>
<lastmod>2019-05-17T11:04:03.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/17/prometheus-series-of-tutorials-for-your-guide-to-epic-metrics</loc>
<lastmod>2019-05-17T18:24:40.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/05/30/use-vagrant-to-setup-a-local-development-environment-on-linux</loc>
<lastmod>2019-05-30T19:14:15.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/06/04/setup-a-logstash-server-for-amazon-elasticsearch-service-and-auth-with-iam</loc>
<lastmod>2019-06-04T21:46:27.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/06/10/setup-traefik-as-an-ingress-controller-on-kubernetes</loc>
<lastmod>2019-06-10T20:21:36.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/06/10/testing-out-scaleways-kapsule-their-kubernetes-as-a-service-offering</loc>
<lastmod>2019-06-10T16:28:45.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/06/22/play-with-kinesis-data-streams-for-free</loc>
<lastmod>2019-06-22T21:35:19.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/07/06/2019-07-06-using-openfaas-with-amazon-dynamodb</loc>
<lastmod>2019-07-06T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/07/06/using-openfaas-with-amazon-dynamodb</loc>
<lastmod>2019-07-06T23:11:23.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/07/07/making-deploying-functions-even-easier-with-faas-cli-up-using-openfaas</loc>
<lastmod>2019-07-07T07:53:59.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/09/04/aws-s3-kms-and-python-for-secrets-management</loc>
<lastmod>2019-09-04T17:58:45.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/09/04/deploy-traefik-using-bekker-stacks</loc>
<lastmod>2019-09-04T19:46:35.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/09/05/deploy-a-monitoring-stack-on-docker-swarm-with-grafana-and-prometheus</loc>
<lastmod>2019-09-04T22:07:52.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/09/08/reindex-elasticsearch-indices-with-logstash</loc>
<lastmod>2019-09-08T11:00:59.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/09/12/expire-objects-in-aws-s3-automatically-after-30-days</loc>
<lastmod>2019-09-12T20:37:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/09/14/running-vs-code-in-your-browser-with-docker</loc>
<lastmod>2019-09-14T10:56:05.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/11/10/integrating-google-oauth-with-traefik</loc>
<lastmod>2019-11-10T18:03:06.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/11/14/testing-aws-lambda-functions-locally-on-docker-with-lambci</loc>
<lastmod>2019-11-14T21:57:10.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/11/16/how-to-setup-a-aws-eks-kubernetes-cluster</loc>
<lastmod>2019-11-16T20:31:36.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/11/17/how-to-deploy-a-webapp-on-a-aws-eks-kubernetes-cluster</loc>
<lastmod>2019-11-16T22:21:19.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/11/23/how-to-setup-vpc-peering-on-aws</loc>
<lastmod>2019-11-23T07:09:40.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/11/26/setup-aws-s3-cross-account-access</loc>
<lastmod>2019-11-26T20:40:12.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2019/12/11/setting-the-correct-service-name-in-datadog-logging-for-docker-swarm</loc>
<lastmod>2019-12-11T21:35:53.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/01/01/2019-my-personal-highlights-for-the-year</loc>
<lastmod>2020-01-01T10:23:08.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/01/02/managing-background-processes-with-screen</loc>
<lastmod>2020-01-02T08:42:54.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/01/11/setup-a-wireguard-vpn-server-on-linux</loc>
<lastmod>2020-01-11T21:37:03.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/01/24/environment-variables-with-ansible</loc>
<lastmod>2020-01-24T17:28:16.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/01/24/save-output-to-local-file-with-ansible</loc>
<lastmod>2020-01-24T17:56:01.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/02/01/setup-thanos-on-docker-a-highly-available-prometheus</loc>
<lastmod>2020-01-31T23:28:12.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/02/04/run-kubernetes-k3s-as-a-service-container-on-drone-ci</loc>
<lastmod>2020-02-04T20:37:06.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/02/04/run-localstack-as-a-service-container-for-aws-mock-services-on-drone-ci</loc>
<lastmod>2020-02-04T21:43:30.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/02/04/setup-gitea-and-drone-on-docker-2020-edition</loc>
<lastmod>2020-02-04T19:58:39.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/02/12/install-openfaas-on-k3d-kubernetes</loc>
<lastmod>2020-02-11T22:57:47.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/02/12/lightweight-development-kubernetes-options-k3d</loc>
<lastmod>2020-02-11T22:27:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/02/17/python-asynchronous-function-with-openfaas</loc>
<lastmod>2020-02-17T21:51:22.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/02/17/traefik-ingress-for-openfaas-on-kubernetes-k3d</loc>
<lastmod>2020-02-17T21:36:33.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/02/21/persistent-volumes-with-k3d-kubernetes</loc>
<lastmod>2020-02-20T22:07:48.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/04/19/ipsec-site-to-site-vpn-with-dynamic-ips-with-openswan</loc>
<lastmod>2020-04-19T18:58:17.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/04/25/nginx-metrics-on-prometheus-with-the-nginx-log-exporter</loc>
<lastmod>2020-04-24T23:42:35.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/04/26/graphing-covid-19-stats-with-grafana-and-elasticsearch-using-python</loc>
<lastmod>2020-04-26T00:24:27.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/04/27/how-to-do-port-forwarding-with-iptables</loc>
<lastmod>2020-04-27T11:42:41.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/04/27/how-to-set-a-static-ip-in-ubuntu-18</loc>
<lastmod>2020-04-27T11:39:19.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/04/28/nginx-analysis-dashboard-using-grafana-and-elasticsearch</loc>
<lastmod>2020-04-28T18:07:22.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/05/05/how-to-setup-a-redis-exporter-for-prometheus</loc>
<lastmod>2020-05-05T21:14:52.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/05/08/server-backups-to-google-drive-using-the-drive-cli-tool</loc>
<lastmod>2020-05-08T16:43:35.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/05/09/selecting-and-returning-specific-data-with-jq</loc>
<lastmod>2020-05-09T20:23:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/05/16/using-python-rq-for-task-queues-in-python</loc>
<lastmod>2020-05-16T19:12:36.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/06/08/build-a-ghost-blog-with-nginx-cache-on-docker</loc>
<lastmod>2020-06-08T21:28:07.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/06/08/ingesting-pocket-items-into-elasticsearch</loc>
<lastmod>2020-06-08T21:06:23.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/06/13/get-the-top-10-items-on-hackernews-in-python</loc>
<lastmod>2020-06-13T17:53:20.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/06/13/improve-mysql-write-performance-using-batch-writes</loc>
<lastmod>2020-06-13T17:31:32.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/06/13/using-a-ssh-reverse-tunnel-to-access-nodes-on-private-ranges</loc>
<lastmod>2020-06-13T17:59:27.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/06/13/using-proxyjump-with-ssh-for-vms-with-no-public-ips</loc>
<lastmod>2020-06-13T18:06:35.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/06/14/setup-a-hugo-blog-with-the-kiera-theme</loc>
<lastmod>2020-06-14T13:23:51.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/08/13/getting-started-on-logging-with-loki-using-docker</loc>
<lastmod>2020-08-13T13:39:28.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/08/14/using-if-statements-in-bash-to-check-if-environment-variables-exist</loc>
<lastmod>2020-08-14T11:00:25.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/09/20/setup-a-nfs-server-with-docker</loc>
<lastmod>2020-09-20T16:07:09.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/09/27/using-the-local-exec-provisioner-with-terraform</loc>
<lastmod>2020-09-27T17:08:49.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/10/07/setup-a-kvm-host-for-virtualization-on-oneprovider</loc>
<lastmod>2020-10-07T23:31:43.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/10/08/using-the-libvirt-provisioner-with-terraform-for-kvm</loc>
<lastmod>2020-10-08T00:06:21.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/10/23/basic-ping-role-with-ansible-in-a-playbook</loc>
<lastmod>2020-10-23T13:13:16.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/10/26/easy-ad-hoc-vpns-with-sshuttle</loc>
<lastmod>2020-10-26T06:59:44.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/10/26/upload-public-ssh-keys-using-ansible</loc>
<lastmod>2020-10-26T07:44:25.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/10/26/use-a-ssh-jump-host-with-ansible</loc>
<lastmod>2020-10-26T05:25:18.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/10/29/running-loki-behind-nginx-reverse-proxy</loc>
<lastmod>2020-10-29T08:29:13.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/11/02/running-ssh-commands-on-aws-ec2-instances-with-python</loc>
<lastmod>2020-11-02T09:55:43.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/11/06/how-to-setup-alerting-with-loki</loc>
<lastmod>2020-11-06T15:13:53.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/11/06/sending-slack-messages-with-python</loc>
<lastmod>2020-11-06T13:58:50.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/11/11/deploy-loki-on-multipass</loc>
<lastmod>2020-11-11T14:19:05.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/11/20/encrypt-and-decrypt-files-with-ccrypt</loc>
<lastmod>2020-11-20T06:27:01.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/12/18/harden-your-ssh-security-on-linux-servers</loc>
<lastmod>2020-12-18T13:32:18.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/12/23/https-for-local-development-with-minica</loc>
<lastmod>2020-12-23T08:11:08.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2020/12/23/reduce-docker-log-size-on-disk</loc>
<lastmod>2020-12-23T09:11:35.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/01/31/installing-arduino-and-setup-the-nodemcu-esp32</loc>
<lastmod>2021-01-31T16:33:31.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/02/26/ship-your-docker-logs-to-loki-using-fluentbit</loc>
<lastmod>2021-02-26T20:26:34.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/03/09/cicd-with-droneci-and-gitea-using-docker-compose</loc>
<lastmod>2021-03-09T06:10:10.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/03/10/bypass-the-medium-paywall-system</loc>
<lastmod>2021-03-10T05:45:54.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/03/10/generate-grafana-loki-log-links-from-metric-label-values</loc>
<lastmod>2021-03-10T05:34:04.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/03/10/ssh-using-aws-ssm-session-manager</loc>
<lastmod>2021-03-10T05:52:54.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/03/10/visualize-weather-data-with-grafana-and-the-dht22-sensor</loc>
<lastmod>2021-03-10T05:06:31.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/03/10/wireguard-vpn-with-unbound-ads-blocking-dns</loc>
<lastmod>2021-03-10T05:59:51.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/04/06/install-concourse-ci-v6-on-ubuntu-20-dot-04</loc>
<lastmod>2021-04-06T21:56:38.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/05/03/setup-a-crypto-digibyte-full-node-on-linux</loc>
<lastmod>2021-05-03T21:14:49.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/07/12/install-java-11-and-maven-on-ubuntu-linux</loc>
<lastmod>2021-07-12T06:36:32.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/07/31/basic-logging-with-python</loc>
<lastmod>2021-07-31T08:17:24.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/07/31/difference-with-ecs-task-and-execution-iam-roles-on-aws</loc>
<lastmod>2021-07-31T07:37:34.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/08/01/task-runner-with-yaml-config-written-in-go</loc>
<lastmod>2021-08-01T10:11:54.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/08/02/aws-ec2-linux-warning-setlocale-lc-ctype-cannot-change-locale-utf-8</loc>
<lastmod>2021-08-02T06:40:53.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/08/04/how-to-specify-wallet-name-in-bitcoin-core-walletnotify</loc>
<lastmod>2021-08-04T13:41:51.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/08/14/a-tour-with-vagrant-and-virtualbox-on-mac</loc>
<lastmod>2021-08-14T17:41:32.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/10/07/install-concourse-ci-v7-dot-4-on-ubuntu-linux</loc>
<lastmod>2021-10-07T23:27:05.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/10/10/setup-basic-authentication-on-node-exporter-and-prometheus</loc>
<lastmod>2021-10-10T20:50:17.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/10/11/install-nodejs-on-linux-using-nvm</loc>
<lastmod>2021-10-11T23:07:43.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/11/03/setup-traefik-version-2-on-docker</loc>
<lastmod>2021-11-03T05:20:27.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/11/23/run-docker-containers-with-terraform</loc>
<lastmod>2021-11-23T16:06:03.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/12/05/blockchain-basics</loc>
<lastmod>2021-12-05T13:12:10.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2021/12/05/run-a-geth-ethereum-light-node</loc>
<lastmod>2021-12-05T09:14:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/02/10/blockchain-basics</loc>
<lastmod>2022-02-11T00:10:01.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/02/12/setup-a-bitcoin-fullnode</loc>
<lastmod>2022-02-13T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/02/15/bitcoin-rpc-usage-examples</loc>
<lastmod>2022-02-16T00:10:12.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/02/20/create-dns-records-with-terraform-on-cloudflare</loc>
<lastmod>2022-02-20T18:11:06.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/03/02/setup-a-monero-testnet-fullnode</loc>
<lastmod>2022-03-03T00:55:23.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/03/20/run-a-basic-python-flask-restful-api</loc>
<lastmod>2022-03-20T21:33:17.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/03/20/run-openldap-with-a-ui-on-docker</loc>
<lastmod>2022-03-20T20:55:39.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/03/22/load-environment-variables-from-file-in-python</loc>
<lastmod>2022-03-22T11:34:11.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/03/29/matrix-bot-using-simplematrixbotlib-in-python</loc>
<lastmod>2022-03-29T22:50:43.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/03/29/setup-matrix-and-element-chat-server</loc>
<lastmod>2022-03-29T22:33:49.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/04/16/provision-a-aws-ec2-instance-with-terraform</loc>
<lastmod>2022-04-16T23:04:08.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/04/19/publish-and-use-your-ansible-role-from-git</loc>
<lastmod>2022-04-19T08:35:09.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/05/05/create-a-discord-bot-in-python</loc>
<lastmod>2022-05-05T08:32:12.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/05/11/customize-vim-editor-with-a-brand-new-look</loc>
<lastmod>2022-05-11T21:10:16.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/05/27/create-a-aws-lambda-layer-with-docker</loc>
<lastmod>2022-05-27T10:19:05.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/05/30/prometheus-relabel-config-examples</loc>
<lastmod>2022-05-30T07:01:01.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/05/31/python-flask-forms-with-jinja-templating</loc>
<lastmod>2022-05-31T06:39:30.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/05/31/setup-linkding-bookmarks-manager-on-docker</loc>
<lastmod>2022-05-31T19:50:24.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/06/14/how-to-read-and-write-json-data-with-python</loc>
<lastmod>2022-06-14T23:02:53.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/06/15/how-to-persist-iptables-rules-after-reboots</loc>
<lastmod>2022-06-15T10:10:12.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/06/23/install-a-specific-python-version-on-ubuntu</loc>
<lastmod>2022-06-23T21:53:46.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/06/29/create-a-raid5-array-with-mdadm-on-linux</loc>
<lastmod>2022-06-29T09:02:13.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/07/14/remote-builds-with-docker-contexts</loc>
<lastmod>2022-07-14T05:57:34.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/07/31/docker-multistage-builds-for-hugo</loc>
<lastmod>2022-07-31T06:23:51.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/08/28/ansible-playbook-for-your-macbook-homebrew-packages</loc>
<lastmod>2022-08-28T23:14:54.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/09/17/setup-a-digibyte-mainnet-fullnode</loc>
<lastmod>2022-09-18T00:55:23.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/09/20/kind-for-local-kubernetes-clusters</loc>
<lastmod>2022-09-20T06:18:16.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2022/11/18/logging-with-docker-promtail-and-grafana-loki</loc>
<lastmod>2022-11-18T05:42:49.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/01/14/getting-started-with-wiremock</loc>
<lastmod>2023-01-14T23:03:12.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/01/24/everything-you-need-to-know-about-helm</loc>
<lastmod>2023-01-24T21:02:22.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/03/05/persisting-terraform-remote-state-in-gitlab</loc>
<lastmod>2023-03-05T06:43:54.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/03/09/manage-helm-releases-with-terraform</loc>
<lastmod>2023-03-09T21:15:47.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/05/17/running-a-multi-broker-kafka-cluster-on-docker</loc>
<lastmod>2023-05-17T14:50:57.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/05/26/how-to-run-a-amd64-bit-linux-vm-on-a-mac-m1</loc>
<lastmod>2023-05-26T12:35:38.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/06/14/getting-started-with-ferretdb-on-docker</loc>
<lastmod>2023-06-15T02:00:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/07/15/how-to-use-the-aws-terraform-provider</loc>
<lastmod>2023-07-16T00:01:13.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/07/15/how-to-use-the-mysql-terraform-provider</loc>
<lastmod>2023-07-16T00:55:23.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/08/03/creating-a-python-lambda-function-with-terraform-on-aws</loc>
<lastmod>2023-08-03T15:29:35.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/10/24/create-kubernetes-clusters-with-kind</loc>
<lastmod>2023-10-24T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/12/22/how-to-deploy-ingress-nginx-controller-on-kubernetes-with-helm</loc>
<lastmod>2023-12-22T12:56:22.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2023/12/22/how-to-use-cert-manager-dns-challenge-with-cloudflare-on-kubernetes-with-helm</loc>
<lastmod>2023-12-22T13:04:02.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/04/07/using-terraform-to-deploy-kind-kubernetes-clusters</loc>
<lastmod>2024-04-07T19:16:46.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/04/21/multi-architecture-docker-builds-with-github-actions</loc>
<lastmod>2024-04-21T11:17:30.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/04/23/grafana-cloudwatch-datasource-iam-role-service-account-for-kubernetes-using-terraform</loc>
<lastmod>2024-04-23T09:35:15.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/05/01/automate-grafana-dashboards-with-terraform-and-helm</loc>
<lastmod>2024-05-01T11:48:46.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/07/21/deploy-a-golang-app-to-interact-with-the-kubernetes-api</loc>
<lastmod>2024-07-20T22:19:09.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/07/28/how-to-create-a-kind-kubernetes-terraform-module</loc>
<lastmod>2024-07-27T23:48:48.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/07/31/unleashing-terraform-automation-with-atlantis-an-overview</loc>
<lastmod>2024-07-31T07:00:34.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/08/04/step-by-step-guide-to-setting-up-atlantis-with-gitlab</loc>
<lastmod>2024-08-04T07:31:58.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/08/06/getting-started-with-localstack-overview-setup-and-practical-usage-guide</loc>
<lastmod>2024-08-06T20:10:45.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/08/14/scaling-applications-in-kubernetes-with-horizontal-pod-autoscaler</loc>
<lastmod>2024-08-13T22:43:14.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/08/29/scaling-with-kubernetes-an-introduction-to-keda</loc>
<lastmod>2024-08-29T05:51:52.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/08/22/high-availability-options-for-your-deployments-on-kubernetes</loc>
<lastmod>2024-08-22T21:59:21.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/09/15/cross-account-terraform-assume-roles-in-aws</loc>
<lastmod>2024-09-15T13:11:17.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/10/07/how-to-use-keda-to-scale-pods-using-prometheus</loc>
<lastmod>2024-10-07T07:11:06.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/10/16/using-terraform-to-store-passwords-in-aws-secretsmanager</loc>
<lastmod>2024-10-16T12:18:56.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/11/10/run-a-minecraft-server-with-docker-compose</loc>
<lastmod>2024-11-10T08:19:53.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/11/15/terraform-module-usage-on-running-kubernetes-kind-clusters</loc>
<lastmod>2024-11-15T14:48:15.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2024/26/03/getting-started-with-argo-cd-on-kubernetes---the-ultimate-guide</loc>
<lastmod>2024-03-26T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2025/01/24/how-to-prevent-ssh-brute-force-attacks-with-fail2ban</loc>
<lastmod>2025-01-24T14:17:46.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2025/01/28/gitops-fundamentals-a-better-way-to-deliver-software</loc>
<lastmod>2025-01-28T21:10:34.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2025/01/30/gitops-argocd-basics</loc>
<lastmod>2025-01-30T16:15:07.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2025/02/14/building-a-local-ai-assistant-with-llama-cpp-python</loc>
<lastmod>2025-02-14T21:36:25.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2025/02/14/getting-started-with-ollama-and-llms-in-python</loc>
<lastmod>2025-02-14T20:54:57.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2025/06/04/how-to-choose-a-career-in-it</loc>
<lastmod>2025-06-04T16:35:57.000Z</lastmod>
</url>
<url>
<loc>https://ruan.dev/blog/2025/06/06/level-up-your-code-quality-with-sonarqube---a-beginners-guide</loc>
<lastmod>2025-06-06T11:09:46.000Z</lastmod>
</url>
</urlset>
