Esta página foi traduzida pela comunidade e pode não estar atualizada. Consulte a versão de referência.
Esta página foi traduzida pela comunidade e pode não estar atualizada. Consulte a versão de referência.
Esta página foi traduzida pela comunidade e pode não estar atualizada. Consulte a versão de referência.
Crie a imagem Docker de desenvolvimento:
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
A imagem contém as ferramentas de desenvolvimento usuais (Go, GDB, Valgrind, Neovim…) e usa os seguintes locais de configuração do PHP:
/etc/frankenphp/php.ini
.
Um arquivo php.ini
com configurações de desenvolvimento é fornecido por
padrão./etc/frankenphp/php.d/*.ini
./usr/lib/frankenphp/modules/
.Se a sua versão do Docker for anterior à 23.0, a compilação falhará devido ao
problema de padrão do .dockerignore
.
Adicione diretórios ao .dockerignore
.
!testdata/*.php
!testdata/*.txt
+!caddy
+!internal
Siga as instruções para compilar a partir do código-fonte e passe
a flag de configuração --debug
.
go test -tags watcher -race -v ./...
Construa o Caddy com o módulo Caddy FrankenPHP:
cd caddy/frankenphp/
go build -tags watcher,brotli,nobadger,nomysql,nopgx
cd ../../
Execute o Caddy com o módulo Caddy FrankenPHP:
cd testdata/
../caddy/frankenphp/frankenphp run
O servidor está escutando em 127.0.0.1:80
:
Note
Se você estiver usando o Docker, terá que vincular a porta 80 do contêiner ou executar de dentro do contêiner.
curl -vk http://127.0.0.1/phpinfo.php
Construa o servidor de teste mínimo:
cd internal/testserver/
go build
cd ../../
Execute o servidor de teste:
cd testdata/
../internal/testserver/testserver
O servidor está escutando em 127.0.0.1:8080
:
curl -v http://127.0.0.1:8080/phpinfo.php
Imprima o plano do bake:
docker buildx bake -f docker-bake.hcl --print
Construa imagens FrankenPHP para amd64 localmente:
docker buildx bake -f docker-bake.hcl --pull --load --set "*.platform=linux/amd64"
Construa imagens FrankenPHP para arm64 localmente:
docker buildx bake -f docker-bake.hcl --pull --load --set "*.platform=linux/arm64"
Construa imagens FrankenPHP do zero para arm64 e amd64 e envie para o Docker Hub:
docker buildx bake -f docker-bake.hcl --pull --no-cache --push
Baixe a versão de depuração do binário do FrankenPHP do GitHub ou crie sua própria compilação estática personalizada, incluindo símbolos de depuração:
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-musl dunglas/frankenphp:static-builder-musl):/go/src/app/dist/frankenphp-linux-$(uname -m) frankenphp
Substitua sua versão atual do frankenphp
pelo executável de depuração do
FrankenPHP.
Inicie o FrankenPHP normalmente (alternativamente, você pode iniciar o
FrankenPHP diretamente com o GDB: gdb --args frankenphp run
).
Anexe ao processo com o GDB:
gdb -p `pidof frankenphp`
Se necessário, digite continue
no shell do GDB.
Faça o FrankenPHP travar.
Digite bt
no shell do GDB.
Copie a saída.
Abra o arquivo .github/workflows/tests.yml
.
Habilite os símbolos de depuração do PHP:
- uses: shivammathur/setup-php@v2
# ...
env:
phpts: ts
+ debug: true
Habilite o tmate
para se conectar ao contêiner:
- 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
Conecte-se ao contêiner.
Abra o frankenphp.go
.
Habilite o cgosymbolizer
:
- //_ "github.com/ianlancetaylor/cgosymbolizer"
+ _ "github.com/ianlancetaylor/cgosymbolizer"
Baixe o módulo: go get
.
No contêiner, você pode usar o GDB e similares:
go test -tags watcher -c -ldflags=-w
gdb --args frankenphp.test -test.run ^MyTest$
Quando a falha for corrigida, reverta todas essas alterações.
apk add strace util-linux gdb
strace -e 'trace=!futex,epoll_ctl,epoll_pwait,tgkill,rt_sigreturn' -p 1
Para traduzir a documentação e o site para um novo idioma, siga estes passos:
docs/
deste repositório..md
da raiz do diretório docs/
para o novo
diretório (sempre use a versão em inglês como fonte para tradução, pois está
sempre atualizada).README.md
e CONTRIBUTING.md
do diretório raiz para o
novo diretório.> [!
(é uma marcação especial para o
GitHub).content/
, data/
e
i18n/
.