Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
Создайте образ Docker для разработки:
docker build -t frankenphp-dev -f dev.Dockerfile .
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -p 8080:8080 -p 443:443 -p 443:443/udp -v $PWD:/go/src/app -it frankenphp-dev
Образ содержит стандартные инструменты для разработки (Go, GDB, Valgrind, Neovim и др.).
Если версия Docker ниже 23.0, сборка может завершиться ошибкой из-за проблемы с шаблонами dockerignore. Добавьте в .dockerignore
следующие директории:
!testdata/*.php
!testdata/*.txt
+!caddy
+!internal
Следуйте инструкциям по компиляции из исходников и укажите флаг конфигурации --debug
.
go test -tags watcher -race -v ./...
Соберите Caddy с модулем FrankenPHP:
cd caddy/frankenphp/
go build -tags watcher,brotli,nobadger,nomysql,nopgx
cd ../../
Запустите Caddy с модулем FrankenPHP:
cd testdata/
../caddy/frankenphp/frankenphp run
Сервер будет доступен по адресу 127.0.0.1:8080
:
curl -vk https://localhost/phpinfo.php
Соберите минимальный тестовый сервер:
cd internal/testserver/
go build
cd ../../
Запустите тестовый сервер:
cd testdata/
../internal/testserver/testserver
Сервер будет доступен по адресу 127.0.0.1:8080
:
curl -v http://127.0.0.1:8080/phpinfo.php
Выведите план bake:
docker buildx bake -f docker-bake.hcl --print
Соберите образы FrankenPHP для amd64 локально:
docker buildx bake -f docker-bake.hcl --pull --load --set "*.platform=linux/amd64"
Соберите образы FrankenPHP для arm64 локально:
docker buildx bake -f docker-bake.hcl --pull --load --set "*.platform=linux/arm64"
Соберите образы FrankenPHP с нуля для arm64 и amd64 и отправьте их в Docker Hub:
docker buildx bake -f docker-bake.hcl --pull --no-cache --push
Скачайте отладочную версию бинарного файла FrankenPHP с GitHub или создайте собственную статическую сборку с включённым отладочным режимом:
docker buildx bake \
--load \
--set static-builder.args.DEBUG_SYMBOLS=1 \
--set "static-builder.platform=linux/amd64" \
static-builder
docker cp $(docker create --name static-builder dunglas/frankenphp:static-builder):/go/src/app/dist/frankenphp-linux-$(uname -m) frankenphp
Замените текущую версию frankenphp
на бинарный файл с включенным отладочным режимом.
Запустите FrankenPHP как обычно (или сразу запустите FrankenPHP с GDB: gdb --args frankenphp run
).
Подключитесь к процессу через GDB:
gdb -p `pidof frankenphp`
При необходимости введите continue
в консоли GDB.
Вызовите сбой FrankenPHP.
Введите bt
в консоли GDB.
Скопируйте вывод.
Откройте файл .github/workflows/tests.yml
.
Включите режим отладки PHP:
- uses: shivammathur/setup-php@v2
# ...
env:
phpts: ts
+ debug: true
Настройте tmate
для удалённого подключения к контейнеру:
-
name: Set CGO flags
run: echo "CGO_CFLAGS=$(php-config --includes)" >> "$GITHUB_ENV"
+ -
+ run: |
+ sudo apt install gdb
+ mkdir -p /home/runner/.config/gdb/
+ printf "set auto-load safe-path /\nhandle SIG34 nostop noprint pass" > /home/runner/.config/gdb/gdbinit
+ -
+ uses: mxschmitt/action-tmate@v3
Подключитесь к контейнеру.
Откройте файл frankenphp.go
.
Включите cgosymbolizer
:
- //_ "github.com/ianlancetaylor/cgosymbolizer"
+ _ "github.com/ianlancetaylor/cgosymbolizer"
Загрузите модуль: go get
.
В контейнере используйте GDB и другие инструменты:
go test -tags watcher -c -ldflags=-w
gdb --args frankenphp.test -test.run ^MyTest$
После исправления ошибки откатите все внесенные изменения.
apk add strace util-linux gdb
strace -e 'trace=!futex,epoll_ctl,epoll_pwait,tgkill,rt_sigreturn' -p 1
Чтобы перевести документацию и сайт на новый язык, выполните следующие шаги:
docs/
..md
файлы из корня папки docs/
в новую директорию (используйте английскую версию как основу для перевода).README.md
и CONTRIBUTING.md
из корневой директории в новую папку.> [!
, это специальная разметка GitHub.content/
, data/
и i18n/
.