deploy to cloud run

This commit is contained in:
ja'far shodiq 2025-06-30 17:20:37 +07:00
parent ddf9587ca1
commit 608992ff30
7 changed files with 192 additions and 1 deletions

61
.dockerignore Normal file
View File

@ -0,0 +1,61 @@
# Git
.git
.gitignore
# Python
__pycache__
*.pyc
*.pyo
*.pyd
.Python
env
venv
.venv
pip-log.txt
pip-delete-this-directory.txt
.tox
.coverage
.coverage.*
.pytest_cache
nosetests.xml
coverage.xml
*.cover
*.log
.mypy_cache
.dmypy.json
dmypy.json
# IDE
.vscode
.idea
*.swp
*.swo
*~
# OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Documentation
README.md
TUTORIAL.txt
# Development files
circle.png
# Node modules (if any)
node_modules
npm-debug.log*
# Vercel
vercel.json
# Large static files that can be re-generated
static/files/*.pkl
static/files/*.png
static/files/*.csv

46
Dockerfile Normal file
View File

@ -0,0 +1,46 @@
# Use Python 3.8 slim image
FROM python:3.8-slim
# Set working directory
WORKDIR /app
# Install system dependencies required for ML libraries
RUN apt-get update && apt-get install -y \
gcc \
g++ \
wget \
&& rm -rf /var/lib/apt/lists/*
# Upgrade pip to version 25 (latest available)
RUN pip install --upgrade pip
# Copy requirements first for better caching
COPY requirements_docker.txt .
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements_docker.txt
# Download NLTK data
RUN python -c "import nltk; nltk.download('punkt'); nltk.download('stopwords')"
# Copy application code
COPY . .
# Create necessary directories for file uploads and static files
RUN mkdir -p static/files
# Set environment variables
ENV FLASK_APP=app.py
ENV FLASK_ENV=production
ENV PYTHONUNBUFFERED=1
# Expose port
EXPOSE 8080
# Create non-root user for security
RUN useradd --create-home --shell /bin/bash app \
&& chown -R app:app /app
USER app
# Command to run the application
CMD ["python", "-m", "gunicorn", "--bind", "0.0.0.0:8080", "--workers", "1", "--timeout", "120", "app:app"]

Binary file not shown.

3
app.py
View File

@ -433,4 +433,5 @@ def visualisasi():
return render_template('visualisasi.html')
if __name__ == "__main__":
app.run(debug=True)
port = int(os.environ.get("PORT", 8080))
app.run(host="0.0.0.0", port=port, debug=False)

27
cloudrun.yaml Normal file
View File

@ -0,0 +1,27 @@
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
annotations:
run.googleapis.com/ingress: all
run.googleapis.com/execution-environment: gen2
name: flask-sentiment-analysis
spec:
template:
metadata:
annotations:
run.googleapis.com/execution-environment: gen2
run.googleapis.com/cpu-throttling: "false"
spec:
containerConcurrency: 1000
timeoutSeconds: 300
containers:
- image: gcr.io/PROJECT_ID/flask-sentiment-analysis
ports:
- containerPort: 8080
resources:
limits:
memory: 2Gi
cpu: 1000m
env:
- name: PORT
value: "8080"

27
deploy.sh Normal file
View File

@ -0,0 +1,27 @@
#!/bin/bash
# Set your project variables
PROJECT_ID="your-gcp-project-id"
SERVICE_NAME="flask-sentiment-analysis"
REGION="asia-southeast1" # Singapore region (closest to Indonesia)
echo "Building Docker image..."
docker build -t gcr.io/$PROJECT_ID/$SERVICE_NAME .
echo "Pushing image to Google Container Registry..."
docker push gcr.io/$PROJECT_ID/$SERVICE_NAME
echo "Deploying to Cloud Run..."
gcloud run deploy $SERVICE_NAME \
--image gcr.io/$PROJECT_ID/$SERVICE_NAME \
--platform managed \
--region $REGION \
--allow-unauthenticated \
--memory 2Gi \
--cpu 1 \
--timeout 300 \
--max-instances 10 \
--port 8080
echo "Deployment completed!"
echo "Your app should be available at the URL shown above."

29
requirements_docker.txt Normal file
View File

@ -0,0 +1,29 @@
# Core Flask dependencies
Flask==2.3.3
gunicorn==21.2.0
Werkzeug==2.3.7
# Machine Learning & Data Processing
scikit-learn==1.3.0
pandas==2.0.3
numpy==1.24.3
nltk==3.8.1
textblob==0.17.1
# Indonesian NLP
Sastrawi==1.0.1
# Social Media API
tweepy==4.14.0
# Translation
googletrans==4.0.0rc1
# Image Processing & Visualization
matplotlib==3.7.2
wordcloud==1.9.2
Pillow==10.0.0
# Utilities
requests==2.31.0
urllib3==2.0.4