pjpjq commited on
Commit
234908b
·
0 Parent(s):

MySQL 8 + new-api, all secrets from env vars

Browse files
Files changed (3) hide show
  1. Dockerfile +20 -0
  2. README.md +9 -0
  3. start.sh +55 -0
Dockerfile ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM calciumion/new-api:latest AS newapi
2
+
3
+ FROM mysql:8.0
4
+
5
+ RUN apt-get update && \
6
+ apt-get install -y --no-install-recommends ca-certificates tzdata && \
7
+ rm -rf /var/lib/apt/lists/* && \
8
+ update-ca-certificates
9
+
10
+ # Copy new-api binary
11
+ COPY --from=newapi /new-api /new-api
12
+
13
+ # Copy startup script (no secrets baked in)
14
+ COPY start.sh /start.sh
15
+ RUN chmod +x /start.sh
16
+
17
+ EXPOSE 7860
18
+ WORKDIR /data
19
+
20
+ CMD ["/start.sh"]
README.md ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: New API
3
+ emoji: 🚀
4
+ colorFrom: blue
5
+ colorTo: purple
6
+ sdk: docker
7
+ app_port: 7860
8
+ pinned: false
9
+ ---
start.sh ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ MYSQL_DATA_DIR="/var/lib/mysql"
5
+ MYSQL_RUN_DIR="/var/run/mysqld"
6
+
7
+ mkdir -p "$MYSQL_RUN_DIR"
8
+ chown -R mysql:mysql "$MYSQL_RUN_DIR" "$MYSQL_DATA_DIR"
9
+
10
+ # Initialize MySQL if needed
11
+ if [ ! -d "$MYSQL_DATA_DIR/sys" ]; then
12
+ echo "[init] Initializing MySQL 8..."
13
+ mysqld --initialize-insecure --user=mysql --datadir="$MYSQL_DATA_DIR"
14
+
15
+ # Start temporarily
16
+ mysqld --user=mysql --datadir="$MYSQL_DATA_DIR" --skip-networking &
17
+ PID=$!
18
+ for i in $(seq 1 60); do
19
+ mysqladmin -u root ping --silent 2>/dev/null && break
20
+ sleep 1
21
+ done
22
+
23
+ # Decode and import dump from Secret
24
+ if [ -n "$MYSQL_DUMP_B64" ]; then
25
+ echo "[init] Decoding and importing MySQL dump from secret..."
26
+ echo "$MYSQL_DUMP_B64" | base64 -d | gunzip | mysql -u root
27
+ echo "[init] Import done."
28
+ fi
29
+
30
+ # Set root password from Secret
31
+ if [ -n "$MYSQL_ROOT_PASSWORD" ]; then
32
+ mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD'; FLUSH PRIVILEGES;"
33
+ echo "[init] Root password set."
34
+ fi
35
+
36
+ mysqladmin -u root -p"$MYSQL_ROOT_PASSWORD" shutdown
37
+ wait $PID 2>/dev/null || true
38
+ fi
39
+
40
+ # Start MySQL in background
41
+ echo "[start] Starting MySQL 8..."
42
+ mysqld --user=mysql --datadir="$MYSQL_DATA_DIR" &
43
+
44
+ for i in $(seq 1 60); do
45
+ mysqladmin -u root -p"$MYSQL_ROOT_PASSWORD" ping --silent 2>/dev/null && break
46
+ sleep 1
47
+ done
48
+ echo "[start] MySQL ready."
49
+
50
+ # Build SQL_DSN from secrets
51
+ export SQL_DSN="root:${MYSQL_ROOT_PASSWORD}@tcp(127.0.0.1:3306)/zeabur"
52
+ export PORT=7860
53
+
54
+ echo "[start] Starting new-api on port $PORT..."
55
+ exec /new-api