wwforonce commited on
Commit
bd7caa1
·
1 Parent(s): 26a6ed8

add dockerfile

Browse files
Files changed (3) hide show
  1. Dockerfile +15 -0
  2. add_bash_util.sh +105 -0
  3. run.sh +61 -0
Dockerfile ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM node:22
2
+
3
+ # Install packages
4
+ RUN apt-get update && apt-get install -y git curl wget jq python3
5
+
6
+ COPY run.sh /run.sh
7
+ COPY add_bash_util.sh /add_bash_util.sh
8
+
9
+ RUN chmod +x /run.sh /add_bash_util.sh
10
+
11
+ EXPOSE 7860
12
+
13
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s \
14
+ CMD curl -f http://localhost:7860/ || exit 1
15
+ ENTRYPOINT ["/bin/bash", "/run.sh"]
add_bash_util.sh ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # gh_install vi/websocat websocat.x86_64-unknown-linux-musl
3
+ gh_install() {
4
+ echo "Number of arguments: $#"
5
+ echo "All arguments as separate words: $@"
6
+ echo "All arguments as a single string: $*"
7
+
8
+ if [[ $# -ne 3 ]]; then
9
+ echo "Please set repo, arch, and filename"
10
+ return 1
11
+ fi
12
+
13
+ local repo="$1"
14
+ local arch="$2"
15
+ local filename="$3"
16
+
17
+ echo "Set repo: $repo, arch: $arch, filename: $filename"
18
+
19
+ local url
20
+ local count=0
21
+
22
+ while [[ -z "$url" && $count -lt 5 ]]; do
23
+ content=$(curl -s -L -H "Accept: application/vnd.github+json" "https://api.github.com/repos/$repo/releases")
24
+ url=$(echo "$content" | jq -r --arg arch "$arch" '.[0] | .assets[] | .browser_download_url | select(endswith($arch))')
25
+ count=$((count + 1))
26
+ done
27
+
28
+ if [[ -z "$url" ]]; then
29
+ echo "Failed to find a valid download URL after $count attempts."
30
+ return 1
31
+ fi
32
+
33
+ echo "Download URL: $url"
34
+ wget -q "$url" -O "$filename" && echo "Downloaded $filename successfully." || echo "Failed to download $filename."
35
+ }
36
+
37
+ check_installed() {
38
+ if [ "$#" -ne 1 ]; then
39
+ echo "Usage: check_installed <program_name>"
40
+ return 1
41
+ fi
42
+ if which "$1" &>/dev/null; then
43
+ >&2 echo "$1 is installed"
44
+ >&1 echo 0
45
+ else
46
+ >&2 echo "$1 is not installed"
47
+ >&1 echo 1
48
+ fi
49
+ }
50
+ # check_installed docker 1>/dev/null
51
+ # check_installed docker 2>/dev/null
52
+ # check_installed docker &>/dev/null
53
+
54
+
55
+ # Utility functions for managing processes
56
+ ps_kill() {
57
+ echo "Number of arguments: $#"
58
+ echo "All arguments as separate words: $@"
59
+ echo "All arguments as a single string: $*"
60
+
61
+ if [[ $# -ne 1 ]]; then
62
+ echo "Please set program"
63
+ return 1
64
+ fi
65
+ program="$1"
66
+
67
+ ps -A -o tid,cmd | grep -v grep | grep "$program" | awk '{print $1}' | xargs -I {} /bin/bash -c 'sudo kill -9 {} '
68
+ }
69
+
70
+ install_docker() {
71
+ if ! which docker &>/dev/null; then
72
+ echo "Docker is not installed. Installing..."
73
+ curl -fsSL https://get.docker.com | sh
74
+ sudo systemctl --now enable docker
75
+ echo "Docker installed successfully."
76
+ else
77
+ echo "Docker is already installed."
78
+ fi
79
+ }
80
+
81
+ create_user() {
82
+ if [ "$#" -ne 1 ]; then
83
+ echo "Usage: create_user <username>"
84
+ return 1
85
+ fi
86
+ export USERNAME="$1"
87
+ export MUID=$(id -u)
88
+ export MGID=$(id -g)
89
+
90
+ # add user without password
91
+
92
+ sudo groupadd $USERNAME
93
+ # same uid with host user
94
+ # sudo useradd -u $MUID -g $MGID -m -s /bin/bash $USERNAME
95
+ sudo useradd -g $MGID -m -s /bin/bash $USERNAME
96
+ sudo passwd -d $USERNAME
97
+ sudo usermod -a -G sudo $USERNAME
98
+ sudo usermod -a -G $USERNAME $USERNAME
99
+
100
+ install_docker
101
+ sudo usermod -a -G docker $USERNAME
102
+
103
+
104
+ echo "User $USERNAME created and added to sudo and docker groups."
105
+ }
run.sh ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ source /add_bash_util.sh
3
+
4
+ mkdir -p /tmp/gpt-load
5
+ gh_install tbphp/gpt-load gpt-load-linux-amd64 /tmp/gpt-load/gpt-load
6
+ chmod +x /tmp/gpt-load/gpt-load
7
+
8
+
9
+ cat << EOF | tee /tmp/gpt-load/.env
10
+ # 服务器配置
11
+ PORT=7860
12
+ HOST=0.0.0.0
13
+
14
+ # 服务器读取、写入和空闲连接的超时时间(秒)
15
+ SERVER_READ_TIMEOUT=60
16
+ SERVER_WRITE_TIMEOUT=600
17
+ SERVER_IDLE_TIMEOUT=120
18
+ SERVER_GRACEFUL_SHUTDOWN_TIMEOUT=10
19
+
20
+ # 从节点标识
21
+ IS_SLAVE=false
22
+
23
+ # 时区
24
+ TZ=Asia/Shanghai
25
+
26
+ # 认证配置 是必需的,用于保护管理 API 和 UI 界面
27
+ AUTH_KEY=${AUTH_KEY}
28
+
29
+ # 数据库配置 默认不填写,使用./data/gpt-load.db的SQLite
30
+ # MySQL 示例:
31
+ DATABASE_DSN=${DATABASE_DSN:-"sqlite:./data/gpt-load.db"}
32
+ # PostgreSQL 示例:
33
+ # DATABASE_DSN=postgres://postgres:123456@postgres:5432/gpt-load?sslmode=disable
34
+
35
+ # Redis配置 默认不填写,使用内存存储
36
+ # REDIS_DSN=redis://redis:6379/0
37
+
38
+ # 并发数量
39
+ MAX_CONCURRENT_REQUESTS=100
40
+
41
+ # CORS配置
42
+ ENABLE_CORS=true
43
+ ALLOWED_ORIGINS=*
44
+ ALLOWED_METHODS=GET,POST,PUT,DELETE,OPTIONS
45
+ ALLOWED_HEADERS=*
46
+ ALLOW_CREDENTIALS=false
47
+
48
+ # 日志配置
49
+ LOG_LEVEL=info
50
+ LOG_FORMAT=text
51
+ LOG_ENABLE_FILE=true
52
+ LOG_FILE_PATH=./data/logs/app.log
53
+ EOF
54
+
55
+
56
+
57
+ cd /tmp/gpt-load && ./gpt-load &
58
+ MAIN_PID=$!
59
+
60
+ # Wait for caddy process
61
+ wait $MAIN_PID