Spaces:
Runtime error
Runtime error
File size: 6,277 Bytes
251402d d7ca863 ab2931b 691869c d7ca863 cadde18 d2728ca d7ca863 251402d 7fb96cf d2728ca 7fb96cf d2728ca 7fb96cf 76b4530 7fb96cf 251402d 5702fff 7fb96cf 76b4530 7fb96cf 632c0d2 5702fff 691869c 5702fff 691869c ab2931b cadde18 5702fff cadde18 7fb96cf cadde18 ab2931b cadde18 ab2931b 632c0d2 cadde18 d7ca863 3a68f6b d7ca863 3a68f6b d7ca863 50c9df8 d7ca863 5702fff d7ca863 cadde18 691869c 5702fff 9808575 31b4174 a748dc1 5702fff 30e01b7 31b4174 50c9df8 cadde18 53d4685 5702fff a748dc1 30e01b7 a748dc1 d7ca863 5702fff 9808575 5702fff fd26e4f a748dc1 fd26e4f a748dc1 fd26e4f 5702fff a748dc1 5702fff d7ca863 50c9df8 d7ca863 cadde18 d7ca863 3a68f6b 5702fff 3a68f6b 5702fff 3a68f6b e928d09 3a68f6b | 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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | # 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"] |