diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d848415 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM dart:stable-sdk + +WORKDIR /app + +# sqlite3 package uses system libsqlite3 at runtime. +RUN apt-get update \ + && apt-get install -y --no-install-recommends libsqlite3-0 curl \ + && rm -rf /var/lib/apt/lists/* + +COPY pubspec.yaml pubspec.lock ./ +RUN dart pub get + +COPY . . + +EXPOSE 8080 + +CMD ["dart", "run", "bin/vpn_server.dart"] diff --git a/README.md b/README.md index 7fb017e..f868ca7 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,8 @@ ## Установка и запуск +### Локально (Dart) + 1. Установить зависимости: ```bash @@ -37,6 +39,34 @@ dart run bin/vpn_server.dart После запуска сервер доступен по адресу `http://127.0.0.1:8080`. +### Через Docker + +Собрать и запустить контейнер: + +```bash +docker build -t vpn_server . +docker run --rm -p 8080:8080 -v "$(pwd)/data:/app/data" vpn_server +``` + +`-v "$(pwd)/data:/app/data"` сохраняет SQLite-базу между перезапусками. + +### Через Docker Compose + +В проекте есть `compose.yml` с `healthcheck` (проверка `GET /connections`). + +Запуск: + +```bash +docker compose -f compose.yml up --build -d +``` + +Проверка статуса и health: + +```bash +docker compose -f compose.yml ps +docker inspect --format='{{json .State.Health}}' vpn_server +``` + ## API ### `GET /connections` diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..711d2aa --- /dev/null +++ b/compose.yml @@ -0,0 +1,17 @@ +services: + vpn_server: + build: + context: . + dockerfile: Dockerfile + container_name: vpn_server + restart: unless-stopped + ports: + - "8080:8080" + volumes: + - ./data:/app/data + healthcheck: + test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:8080/connections > /dev/null || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s