File size: 2,732 Bytes
87ea122
 
 
 
 
 
 
42ebf9f
87ea122
 
 
 
42ebf9f
 
 
 
 
 
 
87ea122
 
 
42ebf9f
 
87ea122
 
 
 
42ebf9f
87ea122
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42ebf9f
 
 
87ea122
2abee8b
87ea122
 
 
 
 
 
 
 
 
 
42ebf9f
 
 
 
 
 
 
 
 
 
87ea122
42ebf9f
 
 
 
 
 
87ea122
 
 
 
 
 
 
42ebf9f
87ea122
 
42ebf9f
 
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
FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive
ENV TERM=xterm-256color
ENV NPM_CONFIG_PREFIX=/home/Draco/.npm-global
ENV PATH=$PATH:/home/Draco/.npm-global/bin

# Create sudoers.d directory, user Draco with passwordless sudo and npm global folder
RUN mkdir -p /etc/sudoers.d && \
    useradd -m -u 1000 -s /bin/bash Draco && \
    echo "Draco ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/draco && \
    chmod 440 /etc/sudoers.d/draco && \
    mkdir -p /home/Draco/.npm-global && \
    chown -R Draco:Draco /home/Draco/.npm-global

# Install curl, gnupg, and add NodeSource Node.js 20 repo
RUN apt-get update && \
    apt-get install -y curl gnupg && \
    apt-get clean

RUN curl -sL https://deb.nodesource.com/setup_20.x | bash -

# Install Node.js 20, ffmpeg, and required packages
RUN apt-get install -y --no-install-recommends \
    nodejs \
    ffmpeg \
    python3 python3-pip python3-venv \
    build-essential \
    tmate \
    openssh-client \
    neofetch \
    git \
    wget \
    vim \
    nano \
    unzip \
    zip \
    htop \
    net-tools \
    iputils-ping \
    dnsutils \
    tmux \
    screen \
    jq \
    ca-certificates \
    software-properties-common \
    sqlite3 \
    libsqlite3-dev \
    libssl-dev \
    libffi-dev \
    libxml2-dev \
    libxslt1-dev \
    libjpeg-dev \
    zlib1g-dev \
    libpng-dev \
    libwebp-dev \
    pkg-config \
    rsync \
    lsof \
    sudo \
    gnupg \
    openssl \
    tree \
    mc \
    python3-dev \
    python3-distutils \
    python3-setuptools \
    cron \
    aria2 \
    telnet \
    expect && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Install Python packages globally
RUN pip3 install --no-cache-dir \
    pytelegrambotapi \
    requests \
    beautifulsoup4 \
    lxml \
    flask \
    httpx \
    aiohttp \
    schedule

# Generate SSH keys for tmate (root)
RUN mkdir -p /root/.ssh && \
    ssh-keygen -t rsa -f /root/.ssh/id_rsa -N '' && \
    chmod 700 /root/.ssh && \
    chmod 600 /root/.ssh/id_rsa

# Create /dev/ptmx if missing to avoid crashes (permission 666)
RUN if [ ! -c /dev/ptmx ]; then \
        mknod /dev/ptmx c 5 2 && chmod 666 /dev/ptmx ; \
    fi

# Create /dev/pts directory (empty, since mounting devpts is not possible here)
RUN mkdir -p /dev/pts

# Prepare /app directory owned by Draco
RUN mkdir -p /app && \
    echo "Tmate Session Running..." > /app/index.html && \
    chown -R Draco:Draco /app

WORKDIR /app

# Switch to Draco user
USER Draco

# Verify important versions (optional)
RUN node -v && npm -v && python3 --version && ffmpeg -version

# Use tmate -F foreground, no background, ignore terminal errors to avoid crash
CMD python3 -m http.server 7860 & tmate -F || echo "tmate exited or failed"