Ready-made Bash script that automates your Docker workflow end-to-end:
-
Build backend & frontend images
-
Tag & push them to Docker Hub
-
Pull & run images on any machine
-
Set up Certbot HTTPS via a temporary NGINX container
Below is a complete script. You just need to edit your Docker Hub username, email, and domain at the top.
deploy_docker.sh
#!/bin/bash
set -e
# -----------------------------
# CONFIGURATION - EDIT THESE
# -----------------------------
DOCKERHUB_USER="yourhubusername"
DOMAIN="immai.acintia.com"
EMAIL="your-email@domain.com"
BACKEND_IMAGE="${DOCKERHUB_USER}/ollama-backend:latest"
FRONTEND_IMAGE="${DOCKERHUB_USER}/ollama-frontend:latest"
# -----------------------------
# STEP 1: Build Docker images
# -----------------------------
echo "Building backend image..."
docker build -t $BACKEND_IMAGE ./backend
echo "Building frontend image..."
docker build -t $FRONTEND_IMAGE ./frontend
# -----------------------------
# STEP 2: Push images to Docker Hub
# -----------------------------
echo "Logging in to Docker Hub..."
docker login
echo "Pushing backend image..."
docker push $BACKEND_IMAGE
echo "Pushing frontend image..."
docker push $FRONTEND_IMAGE
# -----------------------------
# STEP 3: Run containers on this machine
# -----------------------------
echo "Stopping any running containers..."
docker stop ollama-backend ollama-frontend nginx-proxy || true
docker rm ollama-backend ollama-frontend nginx-proxy || true
echo "Running backend container..."
docker run -d --name ollama-backend -p 8000:8000 $BACKEND_IMAGE
echo "Running frontend container..."
docker run -d --name ollama-frontend -p 8080:80 $FRONTEND_IMAGE
# -----------------------------
# STEP 4: Set up temporary NGINX for Certbot
# -----------------------------
echo "Creating temporary NGINX for Certbot challenge..."
docker run -d --name nginx-certbot \
-p 80:80 \
-v certbot-www:/var/www/certbot \
-v certbot-etc:/etc/letsencrypt \
nginx:alpine
sleep 5
echo "Obtaining HTTPS certificate with Certbot..."
docker run --rm \
-v certbot-www:/var/www/certbot \
-v certbot-etc:/etc/letsencrypt \
certbot/certbot certonly \
--webroot --webroot-path=/var/www/certbot \
--email $EMAIL \
-d $DOMAIN \
--agree-tos --no-eff-email
echo "Stopping temporary NGINX..."
docker stop nginx-certbot
docker rm nginx-certbot
# -----------------------------
# STEP 5: Run NGINX with HTTPS
# -----------------------------
echo "Running NGINX proxy with HTTPS..."
cat > nginx.conf <<EOF
server {
listen 80;
server_name $DOMAIN;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://\$host\$request_uri;
}
}
server {
listen 443 ssl;
server_name $DOMAIN;
ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem;
location /api/ {
proxy_pass http://host.docker.internal:8000/;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
location / {
proxy_pass http://host.docker.internal:8080/;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
EOF
docker run -d --name nginx-proxy \
-p 80:80 -p 443:443 \
-v certbot-www:/var/www/certbot \
-v certbot-etc:/etc/letsencrypt \
-v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf:ro \
nginx:alpine
echo "✅ Deployment complete!"
echo "Frontend: https://$DOMAIN/"
echo "Backend API: https://$DOMAIN/api/"
✅ Features
-
Build: backend & frontend Docker images.
-
Push: tags and uploads to Docker Hub.
-
Run: pulls the latest images and runs containers on your host.
-
Certbot HTTPS: temporary NGINX container to get TLS certificates.
-
Production NGINX: runs NGINX reverse proxy with HTTPS for frontend & backend.
🔧 How to use
-
Make script executable:
chmod +x deploy_docker.sh
-
Run it:
./deploy_docker.sh
-
Access services:
-
Frontend:
https://immai.acintia.com/
-
Backend:
https://immai.acintia.com/api/
-
Certificates are stored in Docker volumes:
certbot-www
&certbot-etc
. -
To renew certificates:
docker run --rm \
-v certbot-www:/var/www/certbot \
-v certbot-etc:/etc/letsencrypt \
certbot/certbot renew --webroot -w /var/www/certbot
docker restart nginx-proxy