Create initial installer
This commit is contained in:
101
install-docker-appliance.sh
Normal file
101
install-docker-appliance.sh
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# install-docker-appliance.sh
|
||||||
|
#
|
||||||
|
# Installs a lightweight Docker management appliance on Debian with Portainer.
|
||||||
|
#
|
||||||
|
# Copyright (c) Robbie Ferguson
|
||||||
|
# https://baldnerd.com
|
||||||
|
# All rights reserved.
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
APP_NAME="Docker Appliance"
|
||||||
|
INSTALL_USER="${SUDO_USER:-$(whoami)}"
|
||||||
|
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
|
||||||
|
LOG_FILE="/var/log/docker-appliance-install.log"
|
||||||
|
|
||||||
|
log() {
|
||||||
|
echo "[$TIMESTAMP] $1" | tee -a "$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
header() {
|
||||||
|
echo
|
||||||
|
echo "====================================="
|
||||||
|
echo "$1"
|
||||||
|
echo "====================================="
|
||||||
|
}
|
||||||
|
|
||||||
|
header "Starting $APP_NAME Installation"
|
||||||
|
|
||||||
|
log "Updating system..."
|
||||||
|
apt update && apt upgrade -y
|
||||||
|
|
||||||
|
header "Installing dependencies..."
|
||||||
|
apt install -y curl ca-certificates gnupg lsb-release software-properties-common apt-transport-https unzip sudo
|
||||||
|
|
||||||
|
header "Installing Docker..."
|
||||||
|
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||||
|
sh get-docker.sh
|
||||||
|
log "Docker installed."
|
||||||
|
|
||||||
|
log "Adding $INSTALL_USER to docker group..."
|
||||||
|
usermod -aG docker "$INSTALL_USER"
|
||||||
|
|
||||||
|
header "Installing Docker Compose plugin..."
|
||||||
|
apt install -y docker-compose-plugin
|
||||||
|
log "Docker Compose plugin installed."
|
||||||
|
|
||||||
|
header "Launching Portainer container..."
|
||||||
|
docker volume create portainer_data
|
||||||
|
|
||||||
|
docker run -d \
|
||||||
|
--name portainer \
|
||||||
|
-p 9000:9000 \
|
||||||
|
-p 8000:8000 \
|
||||||
|
--restart=always \
|
||||||
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
-v portainer_data:/data \
|
||||||
|
portainer/portainer-ce:latest
|
||||||
|
log "Portainer running on port 9000"
|
||||||
|
|
||||||
|
# ============================
|
||||||
|
# Setup NGINX reverse proxy
|
||||||
|
# ============================
|
||||||
|
|
||||||
|
header "Installing NGINX..."
|
||||||
|
apt install -y nginx
|
||||||
|
|
||||||
|
log "Creating reverse proxy for Portainer..."
|
||||||
|
cat >/etc/nginx/sites-available/portainer <<EOF
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name docker.local;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost:9000/;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade \$http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_cache_bypass \$http_upgrade;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
ln -sf /etc/nginx/sites-available/portainer /etc/nginx/sites-enabled/portainer
|
||||||
|
nginx -t && systemctl reload nginx
|
||||||
|
log "NGINX reverse proxy set up for http://docker.local"
|
||||||
|
|
||||||
|
# ============================
|
||||||
|
# Prepare for Certbot
|
||||||
|
# ============================
|
||||||
|
|
||||||
|
header "Installing Certbot (not running yet)..."
|
||||||
|
apt install -y certbot python3-certbot-nginx
|
||||||
|
log "Certbot installed. To enable HTTPS, run: certbot --nginx"
|
||||||
|
|
||||||
|
header "$APP_NAME setup complete!"
|
||||||
|
log "Access Portainer at http://docker.local or http://<your-ip>:9000"
|
||||||
|
log "Reboot recommended to finalize docker group membership."
|
Reference in New Issue
Block a user