Spaces:
Runtime error
Runtime error
| # HuggingFace Spaces Dockerfile for Overleaf with Japanese LaTeX | |
| # | |
| # Uses pre-built binaries - no compilation or apt needed! | |
| # Uses MongoDB 7.0 for better container compatibility | |
| # | |
| # Features: | |
| # - Full TeX Live 2025 with Japanese support | |
| # - MongoDB 7.0 (stable in containers) | |
| # - Redis (copied from redis:7.4 - Debian based) | |
| # - Port 7860 | |
| # ============================================ | |
| # STAGE 1: Get Redis binaries from redis:7.4 (Debian) | |
| # ============================================ | |
| FROM redis:7.4 AS redis-copy | |
| RUN mkdir /redis-bin && \ | |
| cp /usr/local/bin/redis-server /redis-bin/ && \ | |
| cp /usr/local/bin/redis-cli /redis-bin/ && \ | |
| ls -la /redis-bin/ | |
| # ============================================ | |
| # STAGE 2: Build the Overleaf image | |
| # ============================================ | |
| FROM fifof16/sharelatex-with-texlive-full:latest | |
| USER root | |
| # ============================================ | |
| # STEP 1: COPY REDIS FROM STAGE 1 | |
| # ============================================ | |
| COPY --from=redis-copy /redis-bin/ /tmp/redis-bin/ | |
| RUN ls -la /tmp/redis-bin/ && \ | |
| mv /tmp/redis-bin/* /usr/local/bin/ && \ | |
| chmod +x /usr/local/bin/redis-* && \ | |
| redis-server --version | |
| # ============================================ | |
| # STEP 2: DOWNLOAD MONGODB 7.0 | |
| # ============================================ | |
| RUN mkdir -p /opt/mongodb /usr/local/bin && \ | |
| cd /opt/mongodb && \ | |
| wget -q --no-check-certificate -O mongodb.tgz https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2204-7.0.14.tgz && \ | |
| tar xzf mongodb.tgz && \ | |
| cp mongodb-linux-x86_64-ubuntu2204-7.0.14/bin/mongod /usr/local/bin/ && \ | |
| rm -rf /opt/mongodb && \ | |
| /usr/local/bin/mongod --version | |
| # ============================================ | |
| # STEP 3: DOWNLOAD MONGOSH | |
| # ============================================ | |
| RUN mkdir -p /opt/mongosh /usr/local/bin && \ | |
| cd /opt/mongosh && \ | |
| wget -q --no-check-certificate -O mongosh.tgz https://github.com/mongodb-js/mongosh/releases/download/v2.8.2/mongosh-2.8.2-linux-x64.tgz && \ | |
| tar xzf mongosh.tgz && \ | |
| cp mongosh-2.8.2-linux-x64/bin/mongosh /usr/local/bin/ && \ | |
| rm -rf /opt/mongosh && \ | |
| chmod +x /usr/local/bin/mongosh | |
| # ============================================ | |
| # STEP 4: REMOVE DEFAULT CHECK SCRIPTS | |
| # ============================================ | |
| RUN rm -f /etc/my_init.d/500_check_db_access.sh 2>/dev/null || true | |
| RUN rm -f /etc/my_init.d/500_check_mongo.sh 2>/dev/null || true | |
| RUN rm -f /etc/runit/mongo 2>/dev/null || true | |
| RUN rm -f /etc/runit/redis 2>/dev/null || true | |
| # ============================================ | |
| # STEP 5: CREATE INIT SCRIPT (the working version) | |
| # ============================================ | |
| RUN cat > /etc/my_init.d/00_start_services.sh << 'EOFSCRIPT' | |
| #!/bin/bash | |
| set -e | |
| # Fix for TCMalloc in containers | |
| export GLIBC_TUNABLES=glibc.pthread.rseq=0 | |
| echo "=== CREATING DIRECTORIES ===" | |
| pkill -9 mongod 2>/dev/null || true | |
| pkill -9 redis-server 2>/dev/null || true | |
| pkill -9 nginx 2>/dev/null || true | |
| pkill -9 cron 2>/dev/null || true | |
| pkill -9 node 2>/dev/null || true | |
| pkill -9 runsvdir 2>/dev/null || true | |
| rm -rf /data/mongo /data/redis /data/overleaf /data/git-bridge 2>/dev/null || true | |
| mkdir -p /data/mongo /data/redis /data/overleaf /data/git-bridge | |
| mkdir -p /var/log/mongodb /var/log/redis | |
| chmod -R 777 /data /var/log | |
| rm -f /var/service/*/supervise/lock 2>/dev/null || true | |
| rm -f /etc/service/*/supervise/lock 2>/dev/null || true | |
| rm -f /var/run/crond.pid 2>/dev/null || true | |
| sleep 3 | |
| echo "=== VERIFY PORTS FREE ===" | |
| for port in 80 8080 27017 6379; do | |
| if netstat -tlnp 2>/dev/null | grep -q ":$port " || ss -tlnp 2>/dev/null | grep -q ":$port "; then | |
| echo "WARNING: Port $port in use, killing..." | |
| fuser -k $port/tcp 2>/dev/null || true | |
| else | |
| echo "Port $port OK" | |
| fi | |
| done | |
| echo "=== STARTING MONGODB ===" | |
| /usr/local/bin/mongod --dbpath /data/mongo \ | |
| --bind_ip 127.0.0.1 --replSet overleaf --port 27017 \ | |
| --logpath /var/log/mongodb/mongodb.log 2>&1 & | |
| MONGOPID=$! | |
| echo "MongoDB PID: $MONGOPID, waiting..." | |
| sleep 10 | |
| if kill -0 $MONGOPID 2>/dev/null; then | |
| echo "MongoDB started successfully" | |
| echo "Waiting for MongoDB to be ready..." | |
| for i in {1..30}; do | |
| if /usr/local/bin/mongosh --quiet --eval "db.adminCommand('ping')" 2>/dev/null | grep -q "1"; then | |
| echo "MongoDB ready ($i sec)" | |
| /usr/local/bin/mongosh --quiet --eval "rs.initiate({_id:'overleaf',members:[{_id:0,host:'127.0.0.1:27017'}]})" 2>/dev/null || true | |
| break | |
| fi | |
| sleep 1 | |
| done | |
| else | |
| echo "MongoDB FAILED! Log contents:" | |
| cat /var/log/mongodb/mongodb.log 2>/dev/null || echo "No log file created" | |
| ls -la /data/mongo/ 2>/dev/null || echo "No data dir" | |
| exit 1 | |
| fi | |
| echo "=== STARTING REDIS ===" | |
| pkill -9 redis-server 2>/dev/null || true | |
| sleep 1 | |
| /usr/local/bin/redis-server --port 6379 --bind 127.0.0.1 \ | |
| --dir /data/redis --loglevel debug 2>&1 & | |
| sleep 3 | |
| REDIS_CHECK=$(/usr/local/bin/redis-cli ping 2>/dev/null || echo "FAILED") | |
| echo "Redis ping: $REDIS_CHECK" | |
| echo "=== VERIFICATION ===" | |
| pgrep -x mongod || echo "MongoDB NOT running" | |
| pgrep -x redis-server || echo "Redis NOT running" | |
| /usr/local/bin/redis-cli ping | |
| echo "=== ALL SERVICES STARTED ===" | |
| EOFSCRIPT | |
| RUN chmod +x /etc/my_init.d/00_start_services.sh | |
| # ============================================ | |
| # STEP 6: SET ENVIRONMENT | |
| # ============================================ | |
| RUN mkdir -p /etc/container_environment | |
| RUN echo "mongodb://127.0.0.1:27017/sharelatex" > /etc/container_environment/OVERLEAF_MONGO_URL | |
| RUN echo "127.0.0.1" > /etc/container_environment/OVERLEAF_REDIS_HOST | |
| RUN echo "6379" > /etc/container_environment/OVERLEAF_REDIS_PORT | |
| RUN echo "0.0.0.0" > /etc/container_environment/OVERLEAF_LISTEN_IP | |
| RUN echo "7860" > /etc/container_environment/OVERLEAF_PORT | |
| RUN chmod 644 /etc/container_environment/OVERLEAF_* | |
| RUN echo "OVERLEAF_MONGO_URL=mongodb://127.0.0.1:27017/sharelatex" >> /etc/overleaf/env.sh | |
| RUN echo "OVERLEAF_REDIS_HOST=127.0.0.1" >> /etc/overleaf/env.sh | |
| RUN echo "OVERLEAF_REDIS_PORT=6379" >> /etc/overleaf/env.sh | |
| RUN echo "OVERLEAF_LISTEN_IP=0.0.0.0" >> /etc/overleaf/env.sh | |
| RUN echo "OVERLEAF_PORT=7860" >> /etc/overleaf/env.sh | |
| RUN chmod 644 /etc/overleaf/env.sh | |
| EXPOSE 7860 | |
| CMD ["/sbin/my_init"] |