udp-custom / Dockerfile
eikarna
feat: fix start scripts & Dockerfile
5f54a34
# ==================================================================================================
# Dockerfile untuk VPN Server (UDP Custom, ZIVPN, BadVPN)
# Target: Hugging Face Spaces
# ==================================================================================================
# Gunakan base image Ubuntu 22.04 dengan build tools, mirip dengan contoh
FROM buildpack-deps:22.04-curl
# Set variabel lingkungan
ENV DEBIAN_FRONTEND=noninteractive \
TZ=Asia/Jakarta \
# Tentukan direktori kerja aplikasi
APP_HOME=/app
# Buat direktori aplikasi
WORKDIR ${APP_HOME}
# Instal dependensi yang diperlukan untuk skrip jaringan dan server
# - iptables: Untuk firewall dan NAT
# - iproute2: Menyediakan command 'ip' untuk routing
# - ethtool: Untuk optimasi network interface card (NIC)
# - procps: Menyediakan 'pgrep', 'pkill' (berguna untuk debugging)
# - taskset: Untuk mengikat proses ke core CPU (opsional, tapi ada di service asli)
RUN apt-get update && apt-get install -y --no-install-recommends \
iptables \
python3 \
python3-pip \
iproute2 \
ethtool \
procps \
util-linux \
sudo \
&& rm -rf /var/lib/apt/lists/*
# Salin semua file dari proyek ke dalam direktori kerja di container
COPY . .
# Install requirements (python 3)
# Pastikan Anda memiliki file requirements.txt dengan 'flask' di dalamnya
RUN pip install --no-cache-dir -r requirements.txt
# Berikan izin eksekusi ke semua biner dan skrip yang relevan
RUN chmod +x \
${APP_HOME}/scripts/*.sh \
${APP_HOME}/udpgw/badvpn-udpgw \
${APP_HOME}/udp_custom/udp-custom \
${APP_HOME}/start.sh
# ==================================================================================================
# Port Exposure
# --------------------------------------------------------------------------------------------------
# Port-port berikut diekspos berdasarkan aturan iptables di 'port-forward.sh'.
# Karena Hugging Face Spaces mungkin memiliki batasan jumlah port,
# Anda mungkin perlu menyesuaikan ini. Namun, untuk fungsionalitas penuh,
# Port untuk UDP-Custom
EXPOSE 3671/udp
# Port untuk ZIVPN
EXPOSE 5667/udp
# Port untuk ZIVPN Legacy
EXPOSE 5666/udp
# Port untuk Prometheus Metrics dari ZIVPN
EXPOSE 8080/tcp
# Port Ranges (jika platform mendukung atau untuk penggunaan di luar HF Spaces)
# Sebaiknya definisikan port utama di atas, dan jika memungkinkan, gunakan range.
# Docker tidak secara teknis "mengekspos" range dengan cara ini, ini lebih untuk dokumentasi.
# Aturan iptables di dalam kontainer yang akan menangani traffic ini.
EXPOSE 1-5999/udp
EXPOSE 6000-19999/udp
EXPOSE 20000-65535/udp
# ==================================================================================================
# Needed by HuggingFace Spaces (to avoid starting stuck)
EXPOSE 7860
# Setup sudo untuk user 'nix'
RUN useradd -m nix
RUN echo "nix ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER nix
# Tentukan entrypoint yang akan menjalankan skrip startup
# Semua logika dinamis (iptables, sysctl) dipindahkan ke start.sh
ENTRYPOINT ["/app/start.sh"]
# ==================================================================================================
# CATATAN PENTING UNTUK DEPLOYMENT (Hugging Face Spaces & Docker)
# --------------------------------------------------------------------------------------------------
# Untuk menjalankan kontainer ini dengan benar, Anda HARUS memberikan kapabilitas kernel
# dan mengatur parameter sysctl.
#
# Contoh Perintah 'docker run':
# docker run -d --name my-vpn-server \
# --cap-add=NET_ADMIN \
# --cap-add=SYS_NICE \
# --sysctl net.ipv4.ip_forward=1 \
# --sysctl net.core.rmem_max=16777216 \
# --sysctl net.core.wmem_max=16777216 \
# -p 7860:7860 \
# -p 8080:8080/tcp \
# -p 1-65535:1-65535/udp \
# <nama-image-anda>
#
# Di Hugging Face Spaces, Anda perlu mengkonfigurasi ini di `README.md` (metadata).
# Contoh metadata di README.md:
# ---
# title: My VPN Server
# emoji: ๐Ÿš€
# colorFrom: blue
# colorTo: green
# sdk: docker
# app_port: 7860
# docker_args: "--cap-add=NET_ADMIN --cap-add=SYS_NICE"
# ---
#
# Catatan: Hugging Face Spaces mungkin tidak mendukung semua flag --sysctl.
# Skrip start.sh mencoba mengaturnya, tetapi --cap-add=NET_ADMIN adalah yang paling krusial.
# ==================================================================================================