File size: 3,807 Bytes
db9f671
 
9f97180
db9f671
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9f97180
db9f671
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9f97180
db9f671
 
 
9f97180
db9f671
 
9f97180
db9f671
 
 
9f97180
db9f671
 
 
9f97180
db9f671
 
 
 
 
 
 
 
 
 
9f97180
db9f671
 
 
 
 
9f97180
db9f671
 
9f97180
db9f671
 
 
9f97180
db9f671
9f97180
db9f671
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# Start with PostgreSQL image with pgvector
FROM pgvector/pgvector:pg16

# Set environment variables
ENV POSTGRES_USER=db-user \
    POSTGRES_PASSWORD=password \
    POSTGRES_DB=ai_assistant \
    POSTGRES_INITDB_ARGS=--data-checksums \
    PGDATA=/var/lib/postgresql/data/pgdata \
    OPENAI_API_KEY="dumy-key" \
    PGUSER=db-user \
    PGPASSWORD=password \
    PGDATABASE=ai_assistant \
    PGHOST=localhost \
    PGPORT=5432 \
    API_AUTH_TOKEN=secret \
    JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2gzhmJ9TDanEzWdP1WG+\n0Ecwbe7f3bv6e5UUpvcT5q68IQJKP47AQdBAnSlFVi4X9SaurbWoXdS6jpmPpk24\nQvitzLNFphHdwjFBelTAOa6taZrSusoFvrtK9x5xsW4zzt/bkpUraNx82Z8MwLwr\nt6HlY7dgO9+xBAabj4t1d2t+0HS8O/ed3CB6T2lj6S8AbLDSEFc9ScO6Uc1XJlSo\nrgyJJSPCpNhSq3AubEZ1wMS1iEtgAzTPRDsQv50qWIbn634HLWxTP/UH6YNJBwzt\n3O6q29kTtjXlMGXCvin37PyX4Jy1IiPFwJm45aWJGKSfVGMDojTJbuUtM+8P9Rrn\nAwIDAQAB\n-----END PUBLIC KEY-----" \
    JWT_ALGORITHM=RS256 \
    DASHBOARD_USERNAME=dashboard \
    DASHBOARD_PASSWORD=secret \
    SECRET_KEY_BASE=secret-key-base

# Install required packages including nginx
RUN apt-get update && \
    apt-get install -y nodejs npm python3-venv python3-pip wget curl unzip nginx-light procps && \
    mkdir -p /tmp/llamafile && \
    cd /tmp/llamafile && \
    wget --no-check-certificate https://github.com/Mozilla-Ocho/llamafile/releases/download/0.8.17/llamafile-0.8.17.zip && \
    unzip llamafile-0.8.17.zip && \
    cp llamafile-0.8.17/bin/llamafiler /usr/local/bin/ && \
    chmod +x /usr/local/bin/llamafiler && \
    rm -rf /tmp/llamafile && \
    # Create all required nginx directories and files with correct ownership and permissions
    mkdir -p /var/run/nginx && \
    mkdir -p /var/lib/nginx/body && \
    mkdir -p /var/lib/nginx/proxy && \
    mkdir -p /var/lib/nginx/fastcgi && \
    mkdir -p /var/lib/nginx/uwsgi && \
    mkdir -p /var/lib/nginx/scgi && \
    mkdir -p /var/log/nginx && \
    touch /var/log/nginx/access.log && \
    touch /var/log/nginx/error.log && \
    chmod 755 /var/lib && \
    chmod 755 /var/log && \
    chmod 755 /var/run && \
    chown -R postgres:postgres /var/run/nginx /var/log/nginx /var/lib/nginx && \
    chmod -R 755 /var/lib/nginx /var/log/nginx && \
    chmod 777 /var/run/nginx && \
    chmod 666 /var/log/nginx/access.log && \
    chmod 666 /var/log/nginx/error.log

# Create and activate virtual environment
RUN python3 -m venv /venv
ENV PATH="/venv/bin:$PATH"

# Install Flask in the virtual environment
RUN /venv/bin/pip install flask

# Copy the Flask app
COPY app.py /app.py
COPY service-config.yml /service-config.yml

# Create a healthcheck script
COPY healthcheck.sh /usr/local/bin/healthcheck.sh
RUN chmod +x /usr/local/bin/healthcheck.sh

# Pull and extract the AI assistant image
COPY --from=pspdfkit/ai-assistant:nightly / /ai-assistant
COPY service-config.yml /ai-assistant/base/config/service-config.yml

# Copy and prepare start script
COPY start-services.sh /start-services.sh
RUN chmod +x /start-services.sh

# Copy Nginx configuration
COPY nginx.conf /etc/nginx/nginx.conf

# Create base directory and download models during build
RUN mkdir -p /base && \
    wget -q https://huggingface.co/bartowski/gemma-2-2b-it-GGUF/resolve/main/gemma-2-2b-it-Q4_K_M.gguf -O /base/gemma-2b.gguf && \
    wget -q https://huggingface.co/leliuga/all-MiniLM-L6-v2-GGUF/resolve/main/all-MiniLM-L6-v2.F16.gguf -O /base/embeddings.gguf && \
    chown -R postgres:postgres /base

# Expose ports
EXPOSE 5432 7860 4000 8080 8081 8082

# Add a healthcheck
HEALTHCHECK --interval=3s --timeout=3s --retries=10 \
  CMD ["healthcheck.sh"]

USER postgres

# Start PostgreSQL, Flask, and AI assistant
CMD ["sh", "-c", "/venv/bin/flask run --host=0.0.0.0 --port=7860 & docker-entrypoint.sh postgres & /start-services.sh"]