nxdev-org commited on
Commit
6f46ccd
·
verified ·
1 Parent(s): 437eb66

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +27 -154
Dockerfile CHANGED
@@ -1,163 +1,36 @@
1
- # HuggingFace Spaces Dockerfile for Overleaf with Japanese LaTeX
2
- #
3
- # Uses pre-built binaries - no compilation or apt needed!
4
- # Uses MongoDB 7.0 for better container compatibility
5
- #
6
- # Features:
7
- # - Full TeX Live 2025 with Japanese support
8
- # - MongoDB 7.0 (stable in containers)
9
- # - Redis (copied from redis:7.4 - Debian based)
10
- # - Port 7860
11
 
12
- # ============================================
13
- # STAGE 1: Get Redis binaries from redis:7.4 (Debian)
14
- # ============================================
15
- FROM redis:7.4 AS redis-copy
16
- RUN mkdir /redis-bin && \
17
- cp /usr/local/bin/redis-server /redis-bin/ && \
18
- cp /usr/local/bin/redis-cli /redis-bin/ && \
19
- ls -la /redis-bin/
20
 
21
- # ============================================
22
- # STAGE 2: Build the Overleaf image
23
- # ============================================
24
- FROM fifof16/sharelatex-with-texlive-full:latest
 
 
 
 
25
 
26
- USER root
27
 
28
- # ============================================
29
- # STEP 1: COPY REDIS FROM STAGE 1
30
- # ============================================
31
- COPY --from=redis-copy /redis-bin/ /tmp/redis-bin/
32
- RUN ls -la /tmp/redis-bin/ && \
33
- mv /tmp/redis-bin/* /usr/local/bin/ && \
34
- chmod +x /usr/local/bin/redis-* && \
35
- redis-server --version
36
 
37
- # ============================================
38
- # STEP 2: DOWNLOAD MONGODB 7.0
39
- # ============================================
40
- RUN mkdir -p /opt/mongodb /usr/local/bin && \
41
- cd /opt/mongodb && \
42
- wget -q --no-check-certificate -O mongodb.tgz https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2204-7.0.14.tgz && \
43
- tar xzf mongodb.tgz && \
44
- cp mongodb-linux-x86_64-ubuntu2204-7.0.14/bin/mongod /usr/local/bin/ && \
45
- rm -rf /opt/mongodb && \
46
- /usr/local/bin/mongod --version
47
 
48
- # ============================================
49
- # STEP 3: DOWNLOAD MONGOSH
50
- # ============================================
51
- RUN mkdir -p /opt/mongosh /usr/local/bin && \
52
- cd /opt/mongosh && \
53
- 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 && \
54
- tar xzf mongosh.tgz && \
55
- cp mongosh-2.8.2-linux-x64/bin/mongosh /usr/local/bin/ && \
56
- rm -rf /opt/mongosh && \
57
- chmod +x /usr/local/bin/mongosh
58
 
59
- # ============================================
60
- # STEP 4: REMOVE DEFAULT CHECK SCRIPTS
61
- # ============================================
62
- RUN rm -f /etc/my_init.d/500_check_db_access.sh 2>/dev/null || true
63
- RUN rm -f /etc/my_init.d/500_check_mongo.sh 2>/dev/null || true
64
- RUN rm -f /etc/runit/mongo 2>/dev/null || true
65
- RUN rm -f /etc/runit/redis 2>/dev/null || true
66
 
67
- # ============================================
68
- # STEP 5: CREATE INIT SCRIPT (the working version)
69
- # ============================================
70
- RUN cat > /etc/my_init.d/00_start_services.sh << 'EOFSCRIPT'
71
- #!/bin/bash
72
- set -e
73
 
74
- # Fix for TCMalloc in containers
75
- export GLIBC_TUNABLES=glibc.pthread.rseq=0
76
-
77
- echo "=== CREATING DIRECTORIES ==="
78
- pkill -9 mongod 2>/dev/null || true
79
- pkill -9 redis-server 2>/dev/null || true
80
- pkill -9 nginx 2>/dev/null || true
81
- pkill -9 cron 2>/dev/null || true
82
- pkill -9 node 2>/dev/null || true
83
- pkill -9 runsvdir 2>/dev/null || true
84
- pkill -9 runsv 2>/dev/null || true
85
- pkill -9 sv 2>/dev/null || true
86
- rm -rf /data/mongo /data/redis /data/overleaf /data/git-bridge 2>/dev/null || true
87
- mkdir -p /data/mongo /data/redis /data/overleaf /data/git-bridge
88
- mkdir -p /var/log/mongodb /var/log/redis
89
- chmod -R 777 /data /var/log
90
- chmod -R 777 /data/mongo /data/redis
91
- rm -rf /etc/sv/nginx 2>/dev/null || true
92
- rm -rf /var/service/nginx 2>/dev/null || true
93
- rm -rf /etc/service/nginx 2>/dev/null || true
94
- rm -f /var/service/*/supervise/lock 2>/dev/null || true
95
- rm -f /etc/service/*/supervise/lock 2>/dev/null || true
96
- rm -f /var/run/crond.pid 2>/dev/null || true
97
- rm -f /etc/sv/nginx/run 2>/dev/null || true
98
- rm -rf /etc/sv/nginx 2>/dev/null || true
99
- rm -rf /var/service/nginx 2>/dev/null || true
100
- sleep 3
101
-
102
- echo "=== FORCE KILL ALL SERVICES ==="
103
- for svc in mongod redis-server nginx cron node runsvdir; do
104
- pkill -9 $svc 2>/dev/null || true
105
- done
106
- sleep 2
107
-
108
- echo "=== VERIFY PORTS FREE ==="
109
- for port in 80 8080 27017 6379; do
110
- PID=$(lsof -t -i:$port 2>/dev/null) || true
111
- if [ -n "$PID" ]; then
112
- echo "Killing PID $PID on port $port"
113
- kill -9 $PID 2>/dev/null || true
114
- else
115
- echo "Port $port OK"
116
- fi
117
- done
118
-
119
- echo "=== STARTING MONGODB ==="
120
- pkill -9 mongod 2>/dev/null || true
121
- sleep 1
122
-
123
- nohup /usr/local/bin/mongod --dbpath /data/mongo \
124
- --bind_ip 127.0.0.1 --replSet overleaf --port 27017 \
125
- --logpath /var/log/mongodb/mongodb.log \
126
- --wiredTigerDirectoryForIndexes >> /var/log/mongodb/mongodb.log 2>&1 < /dev/null &
127
-
128
- echo "MongoDB started, waiting..."
129
- sleep 15
130
-
131
- echo "=== STARTING REDIS ==="
132
- pkill -9 redis-server 2>/dev/null || true
133
- sleep 1
134
-
135
- nohup /usr/local/bin/redis-server --port 6379 --bind 127.0.0.1 \
136
- --dir /data/redis --loglevel debug >> /var/log/redis/redis.log 2>&1 < /dev/null &
137
-
138
- sleep 5
139
- REDIS_CHECK=$(/usr/local/bin/redis-cli ping 2>/dev/null || echo "FAILED")
140
- echo "Redis ping: $REDIS_CHECK"
141
-
142
- echo "=== VERIFICATION ==="
143
- for i in {1..10}; do
144
- if pgrep -x mongod && pgrep -x redis-server; then
145
- echo "All services running"
146
- break
147
- fi
148
- echo "Waiting for services... $i"
149
- sleep 2
150
- done
151
-
152
- echo "=== ALL SERVICES STARTED ==="
153
- EOFSCRIPT
154
-
155
- RUN chmod +x /etc/my_init.d/00_start_services.sh
156
-
157
- # Debug after container starts
158
- RUN echo 'sleep 60' > /etc/my_init.d/99_debug.sh
159
- RUN chmod +x /etc/my_init.d/99_debug.sh
160
-
161
- EXPOSE 7860
162
-
163
- CMD ["/sbin/my_init"]
 
1
+ FROM ubuntu:latest
 
 
 
 
 
 
 
 
 
2
 
3
+ # 非対面でのインストール設定
4
+ ENV DEBIAN_FRONTEND=noninteractive
5
+ ENV DOCKER_HOST=unix:///var/run/docker.sock
 
 
 
 
 
6
 
7
+ # 必要なパッケージのインストール
8
+ RUN apt-get update && apt-get install -y \
9
+ git \
10
+ docker.io \
11
+ docker-compose \
12
+ curl \
13
+ sed \
14
+ && rm -rf /var/lib/apt/lists/*
15
 
16
+ WORKDIR /app
17
 
18
+ # Toolkitのクローン
19
+ RUN git clone https://github.com /app/toolkit
20
+ WORKDIR /app/toolkit
 
 
 
 
 
21
 
22
+ # Toolkitの初期化
23
+ RUN bin/init
 
 
 
 
 
 
 
 
24
 
25
+ # --- Hugging Face 用の重要な設定変更 ---
26
+ # 1. 公開ポートを 80 から 7860 に変更
27
+ RUN sed -i 's/OVERLEAF_PORT=80/OVERLEAF_PORT=7860/g' config/overleaf.rc
 
 
 
 
 
 
 
28
 
29
+ # 2. 外部からアクセスできるよう LISTEN_IP を 0.0.0.0 に固定
30
+ RUN sed -i 's/OVERLEAF_LISTEN_IP=127.0.0.1/OVERLEAF_LISTEN_IP=0.0.0.0/g' config/overleaf.rc
 
 
 
 
 
31
 
32
+ # 権限の調整(Hugging Faceの実行ユーザーに対応させるため)
33
+ RUN chmod -R 777 /app/toolkit
 
 
 
 
34
 
35
+ # Overleaf Toolkitを起動
36
+ CMD ["bin/up"]