add-docker-registry-deployment-scripts
This commit is contained in:
parent
fcff57dd1f
commit
cdef6f04e1
207
DEPLOY.md
Normal file
207
DEPLOY.md
Normal file
@ -0,0 +1,207 @@
|
||||
# TeleShop & TeleBot Docker Deployment Guide
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Docker installed on your local machine or build server
|
||||
- Network access to the Docker registry at `10.8.0.1:5000`
|
||||
- Git repository cloned locally
|
||||
|
||||
## Quick Deployment
|
||||
|
||||
### Option 1: Using the Deployment Script (Recommended)
|
||||
|
||||
```bash
|
||||
# Make script executable (if not already)
|
||||
chmod +x deploy-to-registry.sh
|
||||
|
||||
# Run the deployment
|
||||
./deploy-to-registry.sh
|
||||
```
|
||||
|
||||
The script will:
|
||||
1. ✅ Test registry connectivity
|
||||
2. 📦 Build both TeleShop and TeleBot images
|
||||
3. 🏷️ Tag images with `latest` and `clean-slate` tags
|
||||
4. 🚀 Push all images to the registry
|
||||
|
||||
### Option 2: Manual Steps
|
||||
|
||||
If you prefer to run commands manually:
|
||||
|
||||
```bash
|
||||
# 1. Build TeleShop image
|
||||
docker build -f Dockerfile -t teleshop:latest .
|
||||
|
||||
# 2. Build TeleBot image
|
||||
docker build -f Dockerfile.telebot -t telebot:latest .
|
||||
|
||||
# 3. Tag images for registry
|
||||
docker tag teleshop:latest 10.8.0.1:5000/teleshop:latest
|
||||
docker tag teleshop:latest 10.8.0.1:5000/teleshop:clean-slate
|
||||
docker tag telebot:latest 10.8.0.1:5000/telebot:latest
|
||||
docker tag telebot:latest 10.8.0.1:5000/telebot:clean-slate
|
||||
|
||||
# 4. Push to registry
|
||||
docker push 10.8.0.1:5000/teleshop:latest
|
||||
docker push 10.8.0.1:5000/teleshop:clean-slate
|
||||
docker push 10.8.0.1:5000/telebot:latest
|
||||
docker push 10.8.0.1:5000/telebot:clean-slate
|
||||
```
|
||||
|
||||
## Registry Configuration
|
||||
|
||||
### If Using HTTP (Insecure) Registry
|
||||
|
||||
The registry at `10.8.0.1:5000` is HTTP (not HTTPS). You need to configure Docker to allow insecure registries:
|
||||
|
||||
#### On Linux
|
||||
Edit `/etc/docker/daemon.json`:
|
||||
```json
|
||||
{
|
||||
"insecure-registries": ["10.8.0.1:5000"]
|
||||
}
|
||||
```
|
||||
|
||||
Restart Docker:
|
||||
```bash
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
#### On Windows (Docker Desktop)
|
||||
1. Open Docker Desktop
|
||||
2. Go to Settings → Docker Engine
|
||||
3. Add to the JSON configuration:
|
||||
```json
|
||||
{
|
||||
"insecure-registries": ["10.8.0.1:5000"]
|
||||
}
|
||||
```
|
||||
4. Click "Apply & Restart"
|
||||
|
||||
#### On macOS (Docker Desktop)
|
||||
1. Open Docker Desktop
|
||||
2. Go to Preferences → Docker Engine
|
||||
3. Add to the JSON configuration:
|
||||
```json
|
||||
{
|
||||
"insecure-registries": ["10.8.0.1:5000"]
|
||||
}
|
||||
```
|
||||
4. Click "Apply & Restart"
|
||||
|
||||
## Verify Deployment
|
||||
|
||||
After pushing, verify the images are in the registry:
|
||||
|
||||
```bash
|
||||
# List all repositories
|
||||
curl http://10.8.0.1:5000/v2/_catalog
|
||||
|
||||
# Expected output:
|
||||
# {"repositories":["telebot","teleshop"]}
|
||||
|
||||
# List tags for TeleShop
|
||||
curl http://10.8.0.1:5000/v2/teleshop/tags/list
|
||||
|
||||
# List tags for TeleBot
|
||||
curl http://10.8.0.1:5000/v2/telebot/tags/list
|
||||
```
|
||||
|
||||
## Pulling Images
|
||||
|
||||
On your deployment server, pull the images:
|
||||
|
||||
```bash
|
||||
# Pull TeleShop
|
||||
docker pull 10.8.0.1:5000/teleshop:latest
|
||||
# or specific version
|
||||
docker pull 10.8.0.1:5000/teleshop:clean-slate
|
||||
|
||||
# Pull TeleBot
|
||||
docker pull 10.8.0.1:5000/telebot:latest
|
||||
# or specific version
|
||||
docker pull 10.8.0.1:5000/telebot:clean-slate
|
||||
```
|
||||
|
||||
## Using with docker-compose
|
||||
|
||||
Update your `docker-compose.yml` to use the registry images:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
littleshop:
|
||||
image: 10.8.0.1:5000/teleshop:latest
|
||||
# ... rest of configuration
|
||||
|
||||
telebot:
|
||||
image: 10.8.0.1:5000/telebot:latest
|
||||
# ... rest of configuration
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Cannot connect to registry
|
||||
```bash
|
||||
# Test connectivity
|
||||
curl http://10.8.0.1:5000/v2/_catalog
|
||||
|
||||
# If this fails, check:
|
||||
# - Network connectivity to 10.8.0.1
|
||||
# - Registry service is running
|
||||
# - Port 5000 is accessible (check firewall)
|
||||
```
|
||||
|
||||
### Permission denied when pushing
|
||||
```bash
|
||||
# Registry may require authentication. Contact your registry administrator.
|
||||
```
|
||||
|
||||
### HTTP request forbidden
|
||||
```bash
|
||||
# You need to configure the insecure registry setting (see above)
|
||||
```
|
||||
|
||||
## Image Details
|
||||
|
||||
### TeleShop Image
|
||||
- **Base Image**: mcr.microsoft.com/dotnet/aspnet:9.0
|
||||
- **Exposed Port**: 8080
|
||||
- **Database**: SQLite at `/app/data/teleshop-prod.db`
|
||||
- **Volumes**:
|
||||
- `/app/data` - Database storage
|
||||
- `/app/wwwroot/uploads` - Product images
|
||||
- `/app/logs` - Application logs
|
||||
|
||||
### TeleBot Image
|
||||
- **Base Image**: mcr.microsoft.com/dotnet/aspnet:9.0
|
||||
- **Dependencies**: Connects to TeleShop API
|
||||
- **Volumes**:
|
||||
- `/app/logs` - Application logs
|
||||
- `/app/data` - Bot data
|
||||
- `/app/image_cache` - Cached product images
|
||||
|
||||
## Version Tags
|
||||
|
||||
- `latest` - Always points to the most recent build
|
||||
- `clean-slate` - Baseline version with migrations, no sample data (current clean state)
|
||||
|
||||
## CI/CD Integration
|
||||
|
||||
You can integrate this deployment script into your CI/CD pipeline:
|
||||
|
||||
```yaml
|
||||
# GitLab CI example
|
||||
deploy:
|
||||
stage: deploy
|
||||
script:
|
||||
- ./deploy-to-registry.sh
|
||||
only:
|
||||
- main
|
||||
- tags
|
||||
```
|
||||
|
||||
```yaml
|
||||
# GitHub Actions example
|
||||
- name: Deploy to Registry
|
||||
run: ./deploy-to-registry.sh
|
||||
```
|
||||
93
deploy-to-registry.sh
Normal file
93
deploy-to-registry.sh
Normal file
@ -0,0 +1,93 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Docker Registry Configuration
|
||||
REGISTRY="10.8.0.1:5000"
|
||||
TELESHOP_IMAGE="teleshop"
|
||||
TELEBOT_IMAGE="telebot"
|
||||
VERSION_TAG="clean-slate"
|
||||
|
||||
echo "=================================="
|
||||
echo "TeleShop & TeleBot Docker Deployment"
|
||||
echo "Registry: $REGISTRY"
|
||||
echo "=================================="
|
||||
echo ""
|
||||
|
||||
# Check if Docker is available
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "❌ Error: Docker is not installed or not in PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if registry is accessible
|
||||
echo "🔍 Testing registry connectivity..."
|
||||
if curl -s "http://$REGISTRY/v2/_catalog" > /dev/null 2>&1; then
|
||||
echo "✅ Registry is accessible at http://$REGISTRY"
|
||||
else
|
||||
echo "❌ Error: Cannot connect to registry at $REGISTRY"
|
||||
echo "Please ensure the registry is running and accessible"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "📦 Building TeleShop image..."
|
||||
docker build -f Dockerfile -t $TELESHOP_IMAGE:latest . || {
|
||||
echo "❌ Failed to build TeleShop image"
|
||||
exit 1
|
||||
}
|
||||
echo "✅ TeleShop image built successfully"
|
||||
|
||||
echo ""
|
||||
echo "📦 Building TeleBot image..."
|
||||
docker build -f Dockerfile.telebot -t $TELEBOT_IMAGE:latest . || {
|
||||
echo "❌ Failed to build TeleBot image"
|
||||
exit 1
|
||||
}
|
||||
echo "✅ TeleBot image built successfully"
|
||||
|
||||
echo ""
|
||||
echo "🏷️ Tagging images for registry..."
|
||||
docker tag $TELESHOP_IMAGE:latest $REGISTRY/$TELESHOP_IMAGE:latest
|
||||
docker tag $TELESHOP_IMAGE:latest $REGISTRY/$TELESHOP_IMAGE:$VERSION_TAG
|
||||
docker tag $TELEBOT_IMAGE:latest $REGISTRY/$TELEBOT_IMAGE:latest
|
||||
docker tag $TELEBOT_IMAGE:latest $REGISTRY/$TELEBOT_IMAGE:$VERSION_TAG
|
||||
echo "✅ Images tagged successfully"
|
||||
|
||||
echo ""
|
||||
echo "🚀 Pushing TeleShop to registry..."
|
||||
docker push $REGISTRY/$TELESHOP_IMAGE:latest || {
|
||||
echo "❌ Failed to push TeleShop:latest"
|
||||
exit 1
|
||||
}
|
||||
docker push $REGISTRY/$TELESHOP_IMAGE:$VERSION_TAG || {
|
||||
echo "❌ Failed to push TeleShop:$VERSION_TAG"
|
||||
exit 1
|
||||
}
|
||||
echo "✅ TeleShop pushed successfully"
|
||||
|
||||
echo ""
|
||||
echo "🚀 Pushing TeleBot to registry..."
|
||||
docker push $REGISTRY/$TELEBOT_IMAGE:latest || {
|
||||
echo "❌ Failed to push TeleBot:latest"
|
||||
exit 1
|
||||
}
|
||||
docker push $REGISTRY/$TELEBOT_IMAGE:$VERSION_TAG || {
|
||||
echo "❌ Failed to push TeleBot:$VERSION_TAG"
|
||||
exit 1
|
||||
}
|
||||
echo "✅ TeleBot pushed successfully"
|
||||
|
||||
echo ""
|
||||
echo "=================================="
|
||||
echo "✅ Deployment Complete!"
|
||||
echo "=================================="
|
||||
echo ""
|
||||
echo "Images pushed to registry:"
|
||||
echo " - $REGISTRY/$TELESHOP_IMAGE:latest"
|
||||
echo " - $REGISTRY/$TELESHOP_IMAGE:$VERSION_TAG"
|
||||
echo " - $REGISTRY/$TELEBOT_IMAGE:latest"
|
||||
echo " - $REGISTRY/$TELEBOT_IMAGE:$VERSION_TAG"
|
||||
echo ""
|
||||
echo "Verify with:"
|
||||
echo " curl http://$REGISTRY/v2/_catalog"
|
||||
echo ""
|
||||
Loading…
Reference in New Issue
Block a user