pjpjq commited on
Commit
60cccdf
·
1 Parent(s): 98275fe

Simplify: use Zeabur MySQL directly via SQL_DSN secret

Browse files
Files changed (3) hide show
  1. .gitignore +2 -0
  2. Dockerfile +2 -15
  3. start.sh +0 -89
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ zeabur_dump*
2
+ *.sql*
Dockerfile CHANGED
@@ -1,17 +1,4 @@
1
- FROM calciumion/new-api:latest AS newapi
2
-
3
- FROM mysql:8.0
4
-
5
- # mysql:8.0 is Oracle Linux, use microdnf
6
- RUN microdnf install -y ca-certificates tzdata && microdnf clean all
7
-
8
- # Copy new-api binary
9
- COPY --from=newapi /new-api /new-api
10
-
11
- COPY start.sh /start.sh
12
- RUN chmod +x /start.sh
13
 
 
14
  EXPOSE 7860
15
- WORKDIR /data
16
-
17
- CMD ["/start.sh"]
 
1
+ FROM calciumion/new-api:latest
 
 
 
 
 
 
 
 
 
 
 
2
 
3
+ ENV PORT=7860
4
  EXPOSE 7860
 
 
 
start.sh DELETED
@@ -1,89 +0,0 @@
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"
9
-
10
- # If data dir is empty, do full init
11
- if [ ! -d "$MYSQL_DATA_DIR/sys" ]; then
12
- echo "[init] Initializing MySQL data directory..."
13
- chown -R mysql:mysql "$MYSQL_DATA_DIR"
14
- mysqld --initialize-insecure --user=mysql --datadir="$MYSQL_DATA_DIR"
15
- fi
16
-
17
- # Start MySQL
18
- echo "[start] Starting MySQL 8..."
19
- mysqld --user=mysql --datadir="$MYSQL_DATA_DIR" &
20
- MYSQL_PID=$!
21
-
22
- for i in $(seq 1 60); do
23
- mysqladmin -u root ping --silent 2>/dev/null && break
24
- mysqladmin -u root -p"$MYSQL_ROOT_PASSWORD" ping --silent 2>/dev/null && break
25
- sleep 1
26
- done
27
-
28
- # Determine root auth
29
- if mysql -u root -e "SELECT 1" 2>/dev/null; then
30
- ROOT_AUTH="-u root"
31
- if [ -n "$MYSQL_ROOT_PASSWORD" ]; then
32
- mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD';"
33
- ROOT_AUTH="-u root -p$MYSQL_ROOT_PASSWORD"
34
- fi
35
- else
36
- ROOT_AUTH="-u root -p$MYSQL_ROOT_PASSWORD"
37
- fi
38
-
39
- # Ensure TCP root access
40
- mysql $ROOT_AUTH -e "CREATE USER IF NOT EXISTS 'root'@'127.0.0.1' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; FLUSH PRIVILEGES;" 2>/dev/null || true
41
-
42
- # Check if zeabur database has data
43
- DB_EXISTS=$(mysql $ROOT_AUTH -N -e "SELECT COUNT(*) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='zeabur'" 2>/dev/null || echo "0")
44
- TABLE_COUNT="0"
45
- if [ "$DB_EXISTS" != "0" ]; then
46
- TABLE_COUNT=$(mysql $ROOT_AUTH -N -e "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='zeabur'" 2>/dev/null || echo "0")
47
- fi
48
-
49
- export SQL_DSN="root:${MYSQL_ROOT_PASSWORD}@tcp(127.0.0.1:3306)/zeabur"
50
- export PORT=7860
51
-
52
- if [ "$DB_EXISTS" = "0" ] || [ "$TABLE_COUNT" = "0" ]; then
53
- # Create empty database so new-api can start
54
- mysql $ROOT_AUTH -e "CREATE DATABASE IF NOT EXISTS zeabur;" 2>/dev/null || true
55
- echo "[init] Created 'zeabur' database."
56
-
57
- # Start new-api first (so HF health check passes)
58
- echo "[start] Starting new-api on port $PORT..."
59
- /new-api &
60
- NEWAPI_PID=$!
61
- sleep 5
62
-
63
- # Now do the import in foreground
64
- if [ -n "$REMOTE_MYSQL_HOST" ] && [ -n "$REMOTE_MYSQL_PORT" ]; then
65
- echo "[init] Importing data from remote MySQL (this may take a few minutes)..."
66
- echo "[init] Connecting to $REMOTE_MYSQL_HOST:$REMOTE_MYSQL_PORT ..."
67
- # Test connectivity first
68
- if mysqladmin -h "$REMOTE_MYSQL_HOST" -P "$REMOTE_MYSQL_PORT" -u "$REMOTE_MYSQL_USER" -p"$REMOTE_MYSQL_PASS" ping 2>/dev/null; then
69
- echo "[init] Remote MySQL reachable, starting dump..."
70
- mysqldump -h "$REMOTE_MYSQL_HOST" -P "$REMOTE_MYSQL_PORT" \
71
- -u "$REMOTE_MYSQL_USER" -p"$REMOTE_MYSQL_PASS" \
72
- "$REMOTE_MYSQL_DB" \
73
- --single-transaction --routines --triggers \
74
- 2>/dev/null | mysql $ROOT_AUTH zeabur \
75
- && echo "[init] Import completed successfully!" \
76
- || echo "[init] Import failed!"
77
- else
78
- echo "[init] ERROR: Cannot connect to remote MySQL at $REMOTE_MYSQL_HOST:$REMOTE_MYSQL_PORT"
79
- fi
80
- fi
81
-
82
- # Wait for new-api
83
- wait $NEWAPI_PID
84
- else
85
- echo "[start] Database 'zeabur' has $TABLE_COUNT tables, skipping import."
86
- echo "[start] Starting new-api on port $PORT..."
87
- /new-api &
88
- wait $!
89
- fi