Install Caddy with rate limiting plugin for ARM64 deployment
- Install Go 1.21.5 for ARM64 architecture - Use xcaddy to build Caddy with caddy-ratelimit plugin - Create custom systemd service for plugin-enabled Caddy - Restore rate limiting configuration in Caddyfile - Production-ready setup with proper security and rate limiting - Automatic SSL with enhanced protection against API abuse
This commit is contained in:
parent
3d3eb2fd3b
commit
c95d159a95
2 changed files with 60 additions and 9 deletions
|
@ -41,7 +41,7 @@ yourdomain.com {
|
||||||
# Gzip compression
|
# Gzip compression
|
||||||
encode gzip zstd
|
encode gzip zstd
|
||||||
|
|
||||||
# Logging for security monitoring
|
# Logging for monitoring
|
||||||
log {
|
log {
|
||||||
output file /var/log/caddy/icewatch.log {
|
output file /var/log/caddy/icewatch.log {
|
||||||
roll_size 100MB
|
roll_size 100MB
|
||||||
|
@ -50,7 +50,7 @@ yourdomain.com {
|
||||||
format json
|
format json
|
||||||
}
|
}
|
||||||
|
|
||||||
# Rate limiting for API endpoints
|
# Rate limiting for API endpoints (requires caddy-ratelimit plugin)
|
||||||
rate_limit {
|
rate_limit {
|
||||||
zone api {
|
zone api {
|
||||||
key {remote_host}
|
key {remote_host}
|
||||||
|
|
|
@ -16,13 +16,64 @@ echo "📦 Installing Node.js..."
|
||||||
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
||||||
sudo apt install -y nodejs build-essential
|
sudo apt install -y nodejs build-essential
|
||||||
|
|
||||||
# Install Caddy for reverse proxy
|
# Install Go (required for xcaddy)
|
||||||
echo "📦 Installing Caddy..."
|
echo "📦 Installing Go..."
|
||||||
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
|
wget -q https://go.dev/dl/go1.21.5.linux-arm64.tar.gz
|
||||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
|
sudo rm -rf /usr/local/go
|
||||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
|
sudo tar -C /usr/local -xzf go1.21.5.linux-arm64.tar.gz
|
||||||
sudo apt update
|
export PATH=$PATH:/usr/local/go/bin
|
||||||
sudo apt install caddy
|
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
|
||||||
|
|
||||||
|
# Install xcaddy to build Caddy with plugins
|
||||||
|
echo "📦 Installing xcaddy..."
|
||||||
|
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
|
||||||
|
export PATH=$PATH:$(go env GOPATH)/bin
|
||||||
|
|
||||||
|
# Build Caddy with rate limiting plugin
|
||||||
|
echo "🔧 Building Caddy with rate limiting plugin..."
|
||||||
|
xcaddy build --with github.com/mholt/caddy-ratelimit
|
||||||
|
|
||||||
|
# Install the custom Caddy binary
|
||||||
|
echo "📦 Installing custom Caddy..."
|
||||||
|
sudo mv caddy /usr/local/bin/caddy
|
||||||
|
sudo chmod +x /usr/local/bin/caddy
|
||||||
|
|
||||||
|
# Create Caddy user and directories
|
||||||
|
sudo groupadd --system caddy
|
||||||
|
sudo useradd --system --gid caddy --create-home --home-dir /var/lib/caddy --shell /usr/sbin/nologin caddy
|
||||||
|
sudo mkdir -p /etc/caddy /var/log/caddy
|
||||||
|
sudo chown -R caddy:caddy /var/log/caddy
|
||||||
|
|
||||||
|
# Create systemd service for custom Caddy
|
||||||
|
echo "⚙️ Creating Caddy systemd service..."
|
||||||
|
sudo tee /etc/systemd/system/caddy.service > /dev/null <<EOF
|
||||||
|
[Unit]
|
||||||
|
Description=Caddy
|
||||||
|
Documentation=https://caddyserver.com/docs/
|
||||||
|
After=network.target network-online.target
|
||||||
|
Requires=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
User=caddy
|
||||||
|
Group=caddy
|
||||||
|
ExecStart=/usr/local/bin/caddy run --environ --config /etc/caddy/Caddyfile
|
||||||
|
ExecReload=/usr/local/bin/caddy reload --config /etc/caddy/Caddyfile --force
|
||||||
|
TimeoutStopSec=5s
|
||||||
|
LimitNOFILE=1048576
|
||||||
|
LimitNPROC=1048576
|
||||||
|
PrivateTmp=true
|
||||||
|
ProtectSystem=full
|
||||||
|
AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Clean up Go archive
|
||||||
|
rm -f go1.21.5.linux-arm64.tar.gz
|
||||||
|
|
||||||
|
echo "✅ Caddy with rate limiting plugin installed successfully!"
|
||||||
|
|
||||||
# Create app directory
|
# Create app directory
|
||||||
echo "📁 Setting up app directory..."
|
echo "📁 Setting up app directory..."
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue