File size: 3,065 Bytes
37d87af
 
7f87add
 
 
 
 
 
 
 
 
0c542b8
 
37d87af
0c542b8
 
e43191e
0c542b8
 
 
 
 
e43191e
4098e5e
 
0c542b8
 
 
4098e5e
 
 
 
0c542b8
4098e5e
 
0c542b8
 
 
4098e5e
7ee1777
37d87af
0c542b8
37d87af
 
 
 
 
 
58914ff
37d87af
 
 
 
0c542b8
 
7ee1777
37d87af
0c542b8
37d87af
 
0c542b8
37d87af
 
0c542b8
37d87af
58914ff
 
 
37d87af
e43191e
 
37d87af
0c542b8
4098e5e
 
 
 
 
37d87af
fcd7471
 
 
a1f943e
 
 
 
 
4098e5e
0c542b8
4098e5e
 
37d87af
 
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
FROM python:3.9-slim

# Install system dependencies
RUN apt-get update && apt-get install -y \
    git \
    build-essential \
    libsndfile1 \
    ffmpeg \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Set up a new user named "user" with user ID 1000
RUN useradd -m -u 1000 user

# Switch to the "user" user
USER user

# Set home to the user's home directory
ENV HOME=/home/user
ENV PATH=/home/user/.local/bin:$PATH

WORKDIR $HOME/app

# Create directories with permissive permissions
RUN mkdir -p /.cache && chmod -R 777 /.cache \
    && mkdir -p $HOME/app/.cache && chmod -R 777 $HOME/app/.cache \
    && mkdir -p $HOME/app/.cache/huggingface && chmod -R 777 $HOME/app/.cache/huggingface \
    && mkdir -p $HOME/app/.cache/huggingface/token && chmod -R 777 $HOME/app/.cache/huggingface \
    && mkdir -p /usr/local/share/nltk_data && chmod -R 777 /usr/local/share/nltk_data \
    && mkdir -p /tmp/librosa_cache && chmod -R 777 /tmp/librosa_cache

# Create token file in the root directory in case it still looks there
RUN mkdir -p /root/.cache/huggingface && chmod -R 777 /root/.cache/huggingface 

# Create the data directories referenced in app.py
RUN mkdir -p $HOME/app/data/uploads && chmod -R 777 $HOME/app/data/uploads \
    && mkdir -p $HOME/app/data/results && chmod -R 777 $HOME/app/data/results \
    && mkdir -p $HOME/app/data/configs && chmod -R 777 $HOME/app/data/configs


# Copy requirements file
COPY --chown=user  requirements.txt .

# Install Python dependencies
RUN pip install --no-cache-dir -U pip && \
    pip install --no-cache-dir -r requirements.txt

# Clone VERSA repository
RUN git clone https://github.com/wavlab-speech/versa.git && \
    cd versa && \
    pip install -e .

# Set up data directories
RUN mkdir -p $HOME/app/data/configs $HOME/app/data/uploads $HOME/app/data/results && \
    chmod -R 777 $HOME/app/data

# Copy universal metrics YAML file
COPY --chown=user universal_metrics.yaml $HOME/app/data/configs/

# Copy application code
COPY --chown=user app.py .

# Create installation complete indicator
RUN touch $HOME/app/versa/.installation_complete

# Set port
EXPOSE 7860

# Set environment variables
ENV GRADIO_SERVER_NAME="0.0.0.0"
ENV NLTK_DATA=/usr/local/share/nltk_data
ENV PYTHONUNBUFFERED=1
ENV HF_HOME=$HOME/.cache/huggingface
# Disable token verification for huggingface models
ENV TRANSFORMERS_OFFLINE=1
ENV HF_DATASETS_OFFLINE=1
# Prevent huggingface from trying to access token
ENV HF_HUB_OFFLINE=1

# Pre-download NLTK data
RUN python -c "import nltk; nltk.download('punkt', download_dir='$NLTK_DATA'); nltk.download('stopwords', download_dir='$NLTK_DATA'); nltk.download('wordnet', download_dir='$NLTK_DATA')"

# Set for Numba cache (error from https://github.com/librosa/librosa/issues/1156)
RUN mkdir -m 777 /tmp/NUMBA_CACHE_DIR /tmp/MPLCONFIGDIR
ENV NUMBA_CACHE_DIR=/tmp/NUMBA_CACHE_DIR/
ENV MPLCONFIGDIR=/tmp/MPLCONFIGDIR/

# Make everything accessible
RUN chmod -R 777 $HOME/app
RUN chmod -R 777 /usr/local/lib/python3.9/site-packages

# Run the application
CMD ["python", "app.py"]