add cicd
This commit is contained in:
312
.gitea/workflows/deploy.yml
Normal file
312
.gitea/workflows/deploy.yml
Normal file
@@ -0,0 +1,312 @@
|
||||
name: Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
name: Deploy to Production
|
||||
runs-on: ubuntu-latest
|
||||
environment: production
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: '9.0.x'
|
||||
|
||||
- name: Restore dependencies
|
||||
run: dotnet restore --verbosity normal
|
||||
|
||||
- name: Build application
|
||||
run: dotnet build --no-restore --configuration Release --verbosity normal
|
||||
|
||||
- name: Publish application
|
||||
run: dotnet publish ChatBot/ChatBot.csproj --configuration Release --output ./publish --verbosity normal
|
||||
|
||||
- name: Create deployment package
|
||||
run: |
|
||||
mkdir -p ./deployment
|
||||
cp -r ./publish/* ./deployment/
|
||||
cp -r ./ChatBot/Prompts ./deployment/
|
||||
cp ./ChatBot/appsettings.json ./deployment/
|
||||
cp ./ChatBot/appsettings.Production.json ./deployment/ 2>/dev/null || echo "Production config not found, using default"
|
||||
|
||||
# Create deployment script
|
||||
cat > ./deployment/deploy.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "Starting ChatBot deployment..."
|
||||
|
||||
# Stop existing service if running
|
||||
sudo systemctl stop chatbot || echo "Service not running"
|
||||
|
||||
# Backup current version
|
||||
if [ -d "/opt/chatbot" ]; then
|
||||
sudo mv /opt/chatbot /opt/chatbot.backup.$(date +%Y%m%d_%H%M%S)
|
||||
fi
|
||||
|
||||
# Create application directory
|
||||
sudo mkdir -p /opt/chatbot
|
||||
|
||||
# Copy new files
|
||||
sudo cp -r ./* /opt/chatbot/
|
||||
|
||||
# Set permissions
|
||||
sudo chown -R chatbot:chatbot /opt/chatbot
|
||||
sudo chmod +x /opt/chatbot/ChatBot
|
||||
|
||||
# Start service
|
||||
sudo systemctl start chatbot
|
||||
sudo systemctl enable chatbot
|
||||
|
||||
echo "Deployment completed successfully!"
|
||||
EOF
|
||||
|
||||
chmod +x ./deployment/deploy.sh
|
||||
|
||||
# Create systemd service file
|
||||
cat > ./deployment/chatbot.service << 'EOF'
|
||||
[Unit]
|
||||
Description=ChatBot Telegram Service
|
||||
After=network.target postgresql.service
|
||||
Wants=postgresql.service
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
User=chatbot
|
||||
Group=chatbot
|
||||
WorkingDirectory=/opt/chatbot
|
||||
ExecStart=/opt/chatbot/ChatBot
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
Environment=ASPNETCORE_ENVIRONMENT=Production
|
||||
Environment=ASPNETCORE_URLS=http://localhost:5000
|
||||
|
||||
# Environment variables (set these in /etc/systemd/system/chatbot.service.d/override.conf)
|
||||
# Environment=TELEGRAM_BOT_TOKEN=your_bot_token
|
||||
# Environment=OLLAMA_URL=http://localhost:11434
|
||||
# Environment=OLLAMA_DEFAULT_MODEL=llama3.2
|
||||
# Environment=DB_HOST=localhost
|
||||
# Environment=DB_PORT=5432
|
||||
# Environment=DB_NAME=chatbot
|
||||
# Environment=DB_USER=postgres
|
||||
# Environment=DB_PASSWORD=your_password
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# Create Docker Compose file for easy deployment
|
||||
cat > ./deployment/docker-compose.yml << 'EOF'
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
chatbot:
|
||||
build: .
|
||||
container_name: chatbot
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- ASPNETCORE_ENVIRONMENT=Production
|
||||
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
|
||||
- OLLAMA_URL=${OLLAMA_URL:-http://ollama:11434}
|
||||
- OLLAMA_DEFAULT_MODEL=${OLLAMA_DEFAULT_MODEL:-llama3.2}
|
||||
- DB_HOST=postgres
|
||||
- DB_PORT=5432
|
||||
- DB_NAME=${DB_NAME:-chatbot}
|
||||
- DB_USER=${DB_USER:-postgres}
|
||||
- DB_PASSWORD=${DB_PASSWORD}
|
||||
depends_on:
|
||||
- postgres
|
||||
- ollama
|
||||
networks:
|
||||
- chatbot-network
|
||||
|
||||
postgres:
|
||||
image: postgres:15-alpine
|
||||
container_name: chatbot-postgres
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_DB=${DB_NAME:-chatbot}
|
||||
- POSTGRES_USER=${DB_USER:-postgres}
|
||||
- POSTGRES_PASSWORD=${DB_PASSWORD}
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
|
||||
networks:
|
||||
- chatbot-network
|
||||
|
||||
ollama:
|
||||
image: ollama/ollama:latest
|
||||
container_name: chatbot-ollama
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ollama_data:/root/.ollama
|
||||
networks:
|
||||
- chatbot-network
|
||||
ports:
|
||||
- "11434:11434"
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
ollama_data:
|
||||
|
||||
networks:
|
||||
chatbot-network:
|
||||
driver: bridge
|
||||
EOF
|
||||
|
||||
# Create Dockerfile
|
||||
cat > ./deployment/Dockerfile << 'EOF'
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
|
||||
WORKDIR /app
|
||||
EXPOSE 8080
|
||||
EXPOSE 8081
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
|
||||
WORKDIR /src
|
||||
COPY ["ChatBot/ChatBot.csproj", "ChatBot/"]
|
||||
RUN dotnet restore "ChatBot/ChatBot.csproj"
|
||||
COPY . .
|
||||
WORKDIR "/src/ChatBot"
|
||||
RUN dotnet build "ChatBot.csproj" -c Release -o /app/build
|
||||
|
||||
FROM build AS publish
|
||||
RUN dotnet publish "ChatBot.csproj" -c Release -o /app/publish /p:UseAppHost=false
|
||||
|
||||
FROM base AS final
|
||||
WORKDIR /app
|
||||
COPY --from=publish /app/publish .
|
||||
COPY --from=publish /src/ChatBot/Prompts ./Prompts
|
||||
ENTRYPOINT ["dotnet", "ChatBot.dll"]
|
||||
EOF
|
||||
|
||||
# Create .env.example file
|
||||
cat > ./deployment/.env.example << 'EOF'
|
||||
# Telegram Bot Configuration
|
||||
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here
|
||||
|
||||
# Ollama Configuration
|
||||
OLLAMA_URL=http://localhost:11434
|
||||
OLLAMA_DEFAULT_MODEL=llama3.2
|
||||
|
||||
# Database Configuration
|
||||
DB_HOST=localhost
|
||||
DB_PORT=5432
|
||||
DB_NAME=chatbot
|
||||
DB_USER=postgres
|
||||
DB_PASSWORD=your_secure_password_here
|
||||
EOF
|
||||
|
||||
# Create README for deployment
|
||||
cat > ./deployment/README.md << 'EOF'
|
||||
# ChatBot Deployment
|
||||
|
||||
## System Requirements
|
||||
- Ubuntu 20.04+ or similar Linux distribution
|
||||
- .NET 9.0 Runtime
|
||||
- PostgreSQL 12+
|
||||
- Ollama (for AI functionality)
|
||||
|
||||
## Deployment Options
|
||||
|
||||
### Option 1: Direct Deployment (Recommended for VPS)
|
||||
1. Copy all files to your server
|
||||
2. Install dependencies:
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y postgresql postgresql-contrib
|
||||
sudo apt install -y dotnet-runtime-9.0
|
||||
curl -fsSL https://ollama.ai/install.sh | sh
|
||||
```
|
||||
3. Create chatbot user:
|
||||
```bash
|
||||
sudo useradd -r -s /bin/false chatbot
|
||||
```
|
||||
4. Set up environment variables in systemd override:
|
||||
```bash
|
||||
sudo mkdir -p /etc/systemd/system/chatbot.service.d
|
||||
sudo nano /etc/systemd/system/chatbot.service.d/override.conf
|
||||
```
|
||||
5. Run deployment script:
|
||||
```bash
|
||||
sudo ./deploy.sh
|
||||
```
|
||||
|
||||
### Option 2: Docker Deployment
|
||||
1. Install Docker and Docker Compose
|
||||
2. Copy .env.example to .env and configure
|
||||
3. Run:
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## Configuration
|
||||
Set the following environment variables:
|
||||
- TELEGRAM_BOT_TOKEN: Your Telegram bot token
|
||||
- OLLAMA_URL: Ollama server URL (default: http://localhost:11434)
|
||||
- OLLAMA_DEFAULT_MODEL: Model to use (default: llama3.2)
|
||||
- DB_*: Database connection settings
|
||||
|
||||
## Health Checks
|
||||
The application includes health checks at:
|
||||
- /health/ollama
|
||||
- /health/telegram
|
||||
- /health (overall)
|
||||
EOF
|
||||
|
||||
- name: Create deployment archive
|
||||
run: |
|
||||
cd deployment
|
||||
tar -czf ../chatbot-deployment-$(date +%Y%m%d_%H%M%S).tar.gz .
|
||||
cd ..
|
||||
ls -la *.tar.gz
|
||||
|
||||
- name: Upload deployment artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: chatbot-deployment
|
||||
path: |
|
||||
./deployment/
|
||||
./chatbot-deployment-*.tar.gz
|
||||
retention-days: 30
|
||||
|
||||
- name: Create release
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
tag_name: v${{ github.run_number }}
|
||||
name: ChatBot Release v${{ github.run_number }}
|
||||
body: |
|
||||
## ChatBot Release v${{ github.run_number }}
|
||||
|
||||
### Changes
|
||||
- Automated deployment package
|
||||
- Includes Docker and systemd deployment options
|
||||
- Ready for production deployment
|
||||
|
||||
### Deployment
|
||||
1. Download the deployment package
|
||||
2. Follow instructions in README.md
|
||||
3. Configure environment variables
|
||||
4. Deploy using your preferred method
|
||||
|
||||
### Files Included
|
||||
- Application binaries
|
||||
- Docker configuration
|
||||
- Systemd service file
|
||||
- Deployment scripts
|
||||
- Documentation
|
||||
files: |
|
||||
./chatbot-deployment-*.tar.gz
|
||||
draft: false
|
||||
prerelease: false
|
||||
Reference in New Issue
Block a user