Skip to content

Instantly share code, notes, and snippets.

View rameerez's full-sized avatar
creating

Javi rameerez

creating
View GitHub Profile
@rameerez
rameerez / exit_the_cloud.md
Last active November 25, 2025 22:41
☁️ How I got off the cloud and migrated everything from AWS to a VPS in Hetzner

☁️ How I got off the cloud and migrated everything from AWS to a VPS in Hetzner

This is an opinionated handbook on how I migrated all my Rails apps off the cloud and into VPS.

This is how I manage real production loads for my Rails apps. It assumes:

  • Rails 7+
  • Ruby 3+
  • PostgreSQL
  • Ubuntu Server 24.04
  • Capistrano, Puma, Nginx
@rameerez
rameerez / remove-site.sh
Last active December 26, 2023 03:40
Remove site from Apache conf
#!/bin/bash
# Ensure the script is run as root
if [ "$(id -u)" -ne 0 ]; then
echo -e "${RED}ERROR: This script must be run as root.${NC}"
exit 1
fi
# Define aesthetics
RED='\033[0;31m'
@rameerez
rameerez / set-up-new-site.sh
Last active June 12, 2024 23:56
Bash script to set up a new site on a LAMP-based Ubuntu server (Wordpress, PHP, etc.)
#!/bin/bash
# Ensure the script is run as root
if [ "$(id -u)" -ne 0 ]; then
echo -e "\e[31mERROR: This script must be run as root.\e[0m"
exit 1
fi
# Define aesthetics
GREEN='\033[0;32m'
@rameerez
rameerez / lamp-production-setup.sh
Last active September 11, 2024 03:48
LAMP Production Server Setup - Set up a new Ubuntu Server 24.04 LTS to run the LAMP stack in production
#!/bin/bash
# Ensure the script is run as root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
# Define aesthetics
GREEN='\033[0;32m'
@rameerez
rameerez / lambda_function.py
Last active December 25, 2023 18:39
AWS Lambda function to send Telegram messages when CloudWatch alarms trigger
# You need to give the Lambda the following permissions.
# Head to the Lambda page, and under Configuration > Permissions > Resource-based policy statements add a new policy statement:
# - Select "AWS Service"
# - On "Service", choose "Other"
# - Statement ID: AlarmAction
# - Principal: lambda.alarms.cloudwatch.amazonaws.com
# - Source ARN: arn:aws:cloudwatch:us-east-1:YOUR_ACCOUNT_ID:alarm:*
# - Action: lambda:InvokeFunction
#
# The same result can be achieved with `aws-cli`:
@rameerez
rameerez / lambda_function.py
Last active December 25, 2023 01:02
AWS Lambda function to forward UptimeRobot up / down events to a Telegram group chat
# Needed previous configuration:
#
# - In UptimeRobot, configure a new **Webhook** Alert Contact with this POST payload:
# ```
# {
# "monitorID": "*monitorID*",
# "monitorURL": "*monitorURL*",
# "monitorFriendlyName": "*monitorFriendlyName*",
# "alertType": "*alertType*",
# "alertTypeFriendlyName": "*alertTypeFriendlyName*",
@rameerez
rameerez / rails-production-setup.sh
Last active November 28, 2025 20:39
Rails Production Server Setup - Set up a new Ubuntu Server 24.04 LTS to run a Rails 7 app, using Capistrano for deployment
#!/bin/bash
# This script takes a clean Ubuntu Server 24.04 LTS AMI and installs and configures
# everything needed to deploy a Rails 7 app to it. The resulting state is a secure,
# production-ready instance.
set -euo pipefail
# --- AESTHETICS ---
@rameerez
rameerez / aws-ec2-rails-user-data.sh
Last active July 15, 2024 17:18
Post-setup script to run after setting up a new Rails + Capistrano server via the Ubuntu Server setup script
#!/bin/bash
# This scripts performs the initial setup for an EC2 AMI that has
# been previously prepared to accept Rails apps.
# --- USER DATA SCRIPT STARTS ---
# Configure SSH key for the rails user (same as ubuntu, AWS configured key)
sudo mkdir /home/rails/.ssh
@rameerez
rameerez / aws-al2023-ec2-instance-setup-for-rails-7-capistrano.sh
Last active May 3, 2023 16:40
Configure an AWS EC2 instance running Amazon Linux 2023 (AL2023) to run a Rails 7 app using Capistrano for deployment
#!/bin/bash
# This scrips takes a clean AWS Amazon Linux 2023 AMI and installs and configures
# everything needed to deploy a Rails app to it. The resulting state is a clean
# instance that can be used to build a base AMI for an EC2 ASG.
# --- AESTHETICS ---
# Define the color code for green for echo messages
@rameerez
rameerez / listmonk-s3-policy.json
Created February 23, 2023 20:04
AWS IAM policy for a Listmonk user to access only one S3 bucket
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:PutBucketPublicAccessBlock",