This guide covers deployment strategies and procedures for CitizenAI in different environments.
CitizenAI supports multiple deployment scenarios:
Before deploying CitizenAI, ensure you have:
git clone https://github.com/your-org/citizen-ai.git
cd citizen-ai
pip install -r requirements.txt
cp .env.example .env
# Edit .env with your configuration
python app.py
The application will be available at http://localhost:5000.
sudo apt update
sudo apt install python3 python3-pip nginx
git clone https://github.com/your-org/citizen-ai.git
cd citizen-ai
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
sudo nano /etc/environment
# Add your environment variables
sudo nano /etc/systemd/system/citizen-ai.service
Service file content:
[Unit]
Description=CitizenAI Flask Application
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/path/to/citizen-ai
Environment="PATH=/path/to/citizen-ai/venv/bin"
ExecStart=/path/to/citizen-ai/venv/bin/python app.py
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start citizen-ai
sudo systemctl enable citizen-ai
Create nginx configuration:
sudo nano /etc/nginx/sites-available/citizen-ai
Configuration content:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Enable the site:
sudo ln -s /etc/nginx/sites-available/citizen-ai /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Create a Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
Create docker-compose.yml:
version: '3.8'
services:
citizen-ai:
build: .
ports:
- "5000:5000"
environment:
- FLASK_ENV=production
- DATABASE_URL=postgresql://user:pass@db:5432/citizenai
depends_on:
- db
db:
image: postgres:13
environment:
- POSTGRES_DB=citizenai
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
# Build and run
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down
application.py (entry point)Create app.yaml:
runtime: python39
env_variables:
FLASK_ENV: production
DATABASE_URL: your-database-url
automatic_scaling:
min_instances: 1
max_instances: 10
Deploy:
gcloud app deploy
Required environment variables:
# Application
FLASK_ENV=production
SECRET_KEY=your-secret-key
# Database
DATABASE_URL=postgresql://user:pass@host:port/db
# AI Services
OPENAI_API_KEY=your-openai-key
GEMINI_API_KEY=your-gemini-key
# Security
JWT_SECRET_KEY=your-jwt-secret
CORS_ORIGINS=https://your-domain.com
Use different configuration files for different environments:
config/development.pyconfig/production.pyconfig/testing.pysudo apt install postgresql postgresql-contrib
CREATE DATABASE citizenai;
CREATE USER citizenai_user WITH PASSWORD 'secure_password';
GRANT ALL PRIVILEGES ON DATABASE citizenai TO citizenai_user;
python manage.py db upgrade
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
sudo crontab -e
# Add: 0 12 * * * /usr/bin/certbot renew --quiet
Configure logging in your application:
import logging
from logging.handlers import RotatingFileHandler
if not app.debug:
file_handler = RotatingFileHandler('logs/citizenai.log', maxBytes=10240, backupCount=10)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'
))
file_handler.setLevel(logging.INFO)
app.logger.addHandler(file_handler)
Use tools like:
# Create backup
pg_dump citizenai > backup_$(date +%Y%m%d).sql
# Restore backup
psql citizenai < backup_20231201.sql
# Backup application files
tar -czf citizen-ai-backup-$(date +%Y%m%d).tar.gz /path/to/citizen-ai
gunicorn --workers 4 --bind 0.0.0.0:5000 app:app
worker_processes auto;
worker_connections 1024;
# Check service status
sudo systemctl status citizen-ai
# View logs
sudo journalctl -u citizen-ai -f
# Check ports
sudo netstat -tlnp | grep :5000
# Test database connection
psql -h localhost -U citizenai_user -d citizenai
pip install --upgrade -r requirements.txt
# Vacuum database
psql citizenai -c "VACUUM ANALYZE;"
# Configure logrotate
sudo nano /etc/logrotate.d/citizen-ai
sudo apt update && sudo apt upgrade
For deployment issues:
After successful deployment: