├── Dockerfile ├── README.md ├── build.sh ├── docker-compose.yml ├── get_url.sh └── start.sh /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM --platform=$BUILDPLATFORM tonistiigi/xx:latest AS xx 2 | 3 | FROM --platform=$BUILDPLATFORM frolvlad/alpine-glibc:alpine-3.16 AS build 4 | 5 | COPY --from=xx / / 6 | COPY get_url.sh /get_url.sh 7 | ARG TARGETPLATFORM 8 | ARG VERSION 9 | 10 | RUN xx-info env && wget -q -O "snell-server.zip" $(/get_url.sh ${VERSION} $(xx-info arch)) && \ 11 | unzip snell-server.zip && rm snell-server.zip && \ 12 | xx-verify /snell-server 13 | 14 | FROM frolvlad/alpine-glibc:alpine-3.16 15 | 16 | ENV TZ=UTC 17 | 18 | COPY --from=build /snell-server /usr/bin/snell-server 19 | COPY start.sh /start.sh 20 | RUN apk add --update --no-cache libstdc++ 21 | 22 | ENTRYPOINT /start.sh 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # snell-server-docker 2 | 3 | [![Version](https://img.shields.io/docker/v/geekdada/snell-server?style=flat-square)](https://hub.docker.com/r/geekdada/snell-server/) 4 | [![Docker Pulls](https://img.shields.io/docker/pulls/geekdada/snell-server.svg?style=flat-square)](https://hub.docker.com/r/geekdada/snell-server/) 5 | 6 | Docker image for [snell-server](https://manual.nssurge.com/others/snell.html) 7 | 8 | 9 | ## Usage 10 | 11 | ### Available versions 12 | 13 | > **Note** 14 | > 15 | > Version 4 isn't compatible with version 3 clients 16 | 17 | All available versions are listed in [tags](https://hub.docker.com/r/geekdada/snell-server/tags/). 18 | 19 | ### Run 20 | 21 | ```bash 22 | docker run -e PSK= -p :9102 --restart unless-stopped -d geekdada/snell-server:latest 23 | ``` 24 | 25 | If you want to use the service as a Surge Ponte relay server, exposing all ports is recommended: 26 | 27 | ```bash 28 | docker run -e PSK= --name snell-v4 --restart unless-stopped --network host -d geekdada/snell-server:latest 29 | ``` 30 | 31 | ### Run with [shadow-tls](https://github.com/ihciah/shadow-tls) 32 | 33 | Use `docker-compose.yml` to run snell-server with shadow-tls. Please change the environment variables in `docker-compose.yml` to your own. 34 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | VERSION=$1 6 | 7 | if [ -z "$VERSION" ]; then 8 | echo "Usage: build.sh VERSION" 9 | exit 1 10 | fi 11 | 12 | docker buildx build \ 13 | --platform linux/amd64 \ 14 | --build-arg BUILDPLATFORM=linux/amd64 \ 15 | --build-arg TARGETPLATFORM=linux/amd64 \ 16 | --build-arg VERSION=${VERSION} \ 17 | --tag geekdada/snell-server:$VERSION \ 18 | . 19 | 20 | docker tag geekdada/snell-server:$VERSION geekdada/snell-server:latest 21 | 22 | docker push geekdada/snell-server:$VERSION 23 | docker push geekdada/snell-server:latest 24 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2.4' 2 | 3 | services: 4 | snell-server: 5 | image: geekdada/snell-server:4.0.0 6 | restart: unless-stopped 7 | networks: 8 | - snell 9 | environment: 10 | - PSK=password # Change here 11 | - PORT=9102 12 | 13 | shadow-tls: 14 | image: ghcr.io/ihciah/shadow-tls:latest 15 | restart: unless-stopped 16 | ports: 17 | - "9443:9443" # Change to your own port 18 | networks: 19 | - snell 20 | environment: 21 | - MODE=server 22 | - LISTEN=:::9443 23 | - SERVER=snell-server:9102 24 | - TLS=cloud.tencent.com:443 # Change here 25 | - PASSWORD=password # Change here 26 | # - V3=true 27 | 28 | networks: 29 | snell: 30 | driver: bridge 31 | -------------------------------------------------------------------------------- /get_url.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | VERSION=$1 6 | ARCH=$2 7 | 8 | if [ $ARCH == "amd64" ]; then 9 | echo "https://dl.nssurge.com/snell/snell-server-v${VERSION}-linux-amd64.zip" 10 | elif [ $ARCH == "arm64" ]; then 11 | echo "https://dl.nssurge.com/snell/snell-server-v${VERSION}-linux-aarch64.zip" 12 | elif [ $ARCH == "arm" ]; then 13 | echo "https://dl.nssurge.com/snell/snell-server-v${VERSION}-linux-armv7l.zip" 14 | else 15 | echo "Usage: get_url.sh VERSION ARCH" 16 | exit 1 17 | fi 18 | 19 | exit 0 20 | -------------------------------------------------------------------------------- /start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/ash 2 | 3 | set -e 4 | 5 | BIN="/usr/bin/snell-server" 6 | CONF="/etc/snell-server.conf" 7 | 8 | # reuse existing config when the container restarts 9 | 10 | run_bin() { 11 | echo "Running snell-server with config:" 12 | echo "" 13 | cat ${CONF} 14 | 15 | ${BIN} --version 16 | ${BIN} -c ${CONF} 17 | } 18 | 19 | if [ -f ${CONF} ]; then 20 | echo "Found existing config, rm it." 21 | rm ${CONF} 22 | fi 23 | 24 | if [ -z ${PSK} ]; then 25 | PSK=$(tr -dc A-Za-z0-9 > ${CONF} 33 | echo "listen = :::9102" >> ${CONF} 34 | echo "psk = ${PSK}" >> ${CONF} 35 | 36 | run_bin 37 | --------------------------------------------------------------------------------