dunglas / frankenphp

🧟 The modern PHP app server
https://frankenphp.dev
MIT License
6.67k stars 220 forks source link

Embedded Standalone Binary not serving content #714

Closed logosur closed 5 months ago

logosur commented 5 months ago

What happened?

I've been following instructions on how to build docker and generate an standalone binary from symfony project, then move it out to my local machine and then try to make it serve content. But as much I try it, it seems that source symfony project is not in the executable and also it seems to be serving my local paths, not the content in the executable itself. I've even tried the demo project at https://github.com/dunglas/frankenphp-demo and still the same result...

When I try to execute console, this neither works: ./my-app php-cli bin/console

XXXX@PC-1003234:~/projects$ ./my-app php-cli bin/console

Warning: Unknown: Failed to open stream: No such file or directory in Unknown on line 0

Fatal error: Failed opening required 'bin/console' (include_path='.:') in Unknown on line 0

what am I missing ? if instructions are wrong, they should be corrected.

Thanks !

Commands:

docker build -t static-app -f static-build.Dockerfile .
docker cp $(docker create --name static-app-tmp static-app):/go/src/app/dist/frankenphp-linux-x86_64 my-app ; docker rm static-app-tmp
./my-app php-server -l 127.0.0.1:8081
neither
./my-app php-server -l 127.0.0.1:8081 --worker public/index.php

static-build.Dockerfile:

FROM --platform=linux/amd64 dunglas/frankenphp:static-builder

# Copy your app
WORKDIR /go/src/app/dist/app
COPY . .

RUN apk update \
    && apk add php82-ctype \
    php82-iconv \
    php82-openssl \
    php82-session \
    php82-sodium \
    php82-dom \
    php82-xml \
    php82-tokenizer \
    php82-xmlwriter \
    php82-simplexml \
    php82-gd \
    php82-fileinfo

#RUN sed -i 's/php82/php83/g' /usr/bin/composer

RUN echo APP_ENV=prod > .env.local ; \
    echo APP_DEBUG=0 >> .env.local ;

RUN set -eux; \
    mkdir -p var/cache var/log; \
    chmod +x bin/console; sync;

RUN composer install  --no-dev -a
# --ignore-platform-reqs 

COPY ./build-static.sh build-static-test.sh

# Build the static binary, be sure to select only the PHP extensions you want
WORKDIR /go/src/app/
RUN ./dist/frankenphp-linux-x86_64 version \
    export FRANKENPHP_VERSION=1.1.2 \
    export PHP_VERSION=8.2 \
    export EMBED=dist/app/ \
    export PHP_EXTENSIONS=ctype,iconv,pdo_sqlite,php82-simplexml \
    ./build-static-test.sh

Build Type

Standalone binary

Worker Mode

No

Operating System

GNU/Linux

CPU Architecture

x86_64

PHP configuration

phpinfo()
PHP Version => 8.2.17

System => Linux PC-1003234 5.15.146.1-microsoft-standard-WSL2 #1 SMP Thu Jan 11 04:09:03 UTC 2024 x86_64
Build Date => Mar 16 2024 08:41:44
Build System => Linux
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /etc/php/8.2/cli
Loaded Configuration File => /etc/php/8.2/cli/php.ini
Scan this dir for additional .ini files => /etc/php/8.2/cli/conf.d
Additional .ini files parsed => /etc/php/8.2/cli/conf.d/10-opcache.ini,
/etc/php/8.2/cli/conf.d/10-pdo.ini,
/etc/php/8.2/cli/conf.d/20-calendar.ini,
/etc/php/8.2/cli/conf.d/20-ctype.ini,
/etc/php/8.2/cli/conf.d/20-exif.ini,
/etc/php/8.2/cli/conf.d/20-ffi.ini,
/etc/php/8.2/cli/conf.d/20-fileinfo.ini,
/etc/php/8.2/cli/conf.d/20-ftp.ini,
/etc/php/8.2/cli/conf.d/20-gettext.ini,
/etc/php/8.2/cli/conf.d/20-iconv.ini,
/etc/php/8.2/cli/conf.d/20-phar.ini,
/etc/php/8.2/cli/conf.d/20-posix.ini,
/etc/php/8.2/cli/conf.d/20-readline.ini,
/etc/php/8.2/cli/conf.d/20-shmop.ini,
/etc/php/8.2/cli/conf.d/20-sockets.ini,
/etc/php/8.2/cli/conf.d/20-sysvmsg.ini,
/etc/php/8.2/cli/conf.d/20-sysvsem.ini,
/etc/php/8.2/cli/conf.d/20-sysvshm.ini,
/etc/php/8.2/cli/conf.d/20-tokenizer.ini

PHP API => 20220829
PHP Extension => 20220829
Zend Extension => 420220829
Zend Extension Build => API420220829,NTS
PHP Extension Build => API20220829,NTS
Debug Build => no
Thread Safety => disabled
Zend Signal Handling => enabled
Zend Memory Manager => enabled
Zend Multibyte Support => disabled
Zend Max Execution Timers => disabled
IPv6 Support => enabled
DTrace Support => available, disabled

Registered PHP Streams => https, ftps, compress.zlib, php, file, glob, data, http, ftp, phar
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, tls, tlsv1.0, tlsv1.1, tlsv1.2, tlsv1.3
Registered Stream Filters => zlib.*, string.rot13, string.toupper, string.tolower, convert.*, consumed, dechunk, convert.iconv.*

This program makes use of the Zend Scripting Language Engine:
Zend Engine v4.2.17, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.17, Copyright (c), by Zend Technologies

 _______________________________________________________________________

Configuration

calendar

Calendar support => enabled

Core

PHP Version => 8.2.17

Directive => Local Value => Master Value
allow_url_fopen => On => On
allow_url_include => Off => Off
arg_separator.input => & => &
arg_separator.output => & => &
auto_append_file => no value => no value
auto_globals_jit => On => On
auto_prepend_file => no value => no value
browscap => no value => no value
default_charset => UTF-8 => UTF-8
default_mimetype => text/html => text/html
disable_classes => no value => no value
disable_functions => no value => no value
display_errors => Off => Off
display_startup_errors => Off => Off
doc_root => no value => no value
docref_ext => no value => no value
docref_root => no value => no value
enable_dl => Off => Off
enable_post_data_reading => On => On
error_append_string => no value => no value
error_log => no value => no value
error_log_mode => 0644 => 0644
error_prepend_string => no value => no value
error_reporting => 22527 => 22527
expose_php => On => On
extension_dir => /usr/lib/php/20220829 => /usr/lib/php/20220829
fiber.stack_size => no value => no value
file_uploads => On => On
hard_timeout => 2 => 2
highlight.comment => <font style="color: #FF8000">#FF8000</font> => <font style="color: #FF8000">#FF8000</font>
highlight.default => <font style="color: #0000BB">#0000BB</font> => <font style="color: #0000BB">#0000BB</font>
highlight.html => <font style="color: #000000">#000000</font> => <font style="color: #000000">#000000</font>
highlight.keyword => <font style="color: #007700">#007700</font> => <font style="color: #007700">#007700</font>
highlight.string => <font style="color: #DD0000">#DD0000</font> => <font style="color: #DD0000">#DD0000</font>
html_errors => Off => Off
ignore_repeated_errors => Off => Off
ignore_repeated_source => Off => Off
ignore_user_abort => Off => Off
implicit_flush => On => On
include_path => .:/usr/share/php => .:/usr/share/php
input_encoding => no value => no value
internal_encoding => no value => no value
log_errors => On => On
mail.add_x_header => Off => Off
mail.force_extra_parameters => no value => no value
mail.log => no value => no value
mail.mixed_lf_and_crlf => Off => Off
max_execution_time => 0 => 0
max_file_uploads => 20 => 20
max_input_nesting_level => 64 => 64
max_input_time => -1 => -1
max_input_vars => 1000 => 1000
max_multipart_body_parts => -1 => -1
memory_limit => -1 => -1
open_basedir => no value => no value
output_buffering => 0 => 0
output_encoding => no value => no value
output_handler => no value => no value
post_max_size => 8M => 8M
precision => 14 => 14
realpath_cache_size => 4096K => 4096K
realpath_cache_ttl => 120 => 120
register_argc_argv => On => On
report_memleaks => On => On
report_zend_debug => Off => Off
request_order => GP => GP
sendmail_from => no value => no value
sendmail_path => /usr/sbin/sendmail -t -i => /usr/sbin/sendmail -t -i
serialize_precision => -1 => -1
short_open_tag => Off => Off
SMTP => localhost => localhost
smtp_port => 25 => 25
sys_temp_dir => no value => no value
syslog.facility => LOG_USER => LOG_USER
syslog.filter => no-ctrl => no-ctrl
syslog.ident => php => php
unserialize_callback_func => no value => no value
upload_max_filesize => 2M => 2M
upload_tmp_dir => no value => no value
user_dir => no value => no value
user_ini.cache_ttl => 300 => 300
user_ini.filename => .user.ini => .user.ini
variables_order => GPCS => GPCS
xmlrpc_error_number => 0 => 0
xmlrpc_errors => Off => Off
zend.assertions => -1 => -1
zend.detect_unicode => On => On
zend.enable_gc => On => On
zend.exception_ignore_args => On => On
zend.exception_string_param_max_len => 0 => 0
zend.multibyte => Off => Off
zend.script_encoding => no value => no value
zend.signal_check => Off => Off

ctype

ctype functions => enabled

date

date/time support => enabled
timelib version => 2022.10
"Olson" Timezone Database Version => 0.system
Timezone Database => internal
Default timezone => UTC

Directive => Local Value => Master Value
date.default_latitude => 31.7667 => 31.7667
date.default_longitude => 35.2333 => 35.2333
date.sunrise_zenith => 90.833333 => 90.833333
date.sunset_zenith => 90.833333 => 90.833333
date.timezone => UTC => UTC

exif

EXIF Support => enabled
Supported EXIF Version => 0220
Supported filetypes => JPEG, TIFF
Multibyte decoding support using mbstring => disabled
Extended EXIF tag formats => Canon, Casio, Fujifilm, Nikon, Olympus, Samsung, Panasonic, DJI, Sony, Pentax, Minolta, Sigma, Foveon, Kyocera, Ricoh, AGFA, Epson

Directive => Local Value => Master Value
exif.decode_jis_intel => JIS => JIS
exif.decode_jis_motorola => JIS => JIS
exif.decode_unicode_intel => UCS-2LE => UCS-2LE
exif.decode_unicode_motorola => UCS-2BE => UCS-2BE
exif.encode_jis => no value => no value
exif.encode_unicode => ISO-8859-15 => ISO-8859-15

FFI

FFI support => enabled

Directive => Local Value => Master Value
ffi.enable => preload => preload
ffi.preload => no value => no value

fileinfo

fileinfo support => enabled
libmagic => 540

filter

Input Validation and Filtering => enabled

Directive => Local Value => Master Value
filter.default => unsafe_raw => unsafe_raw
filter.default_flags => no value => no value

ftp

FTP support => enabled
FTPS support => enabled

gettext

GetText Support => enabled

hash

hash support => enabled
Hashing Engines => md2 md4 md5 sha1 sha224 sha256 sha384 sha512/224 sha512/256 sha512 sha3-224 sha3-256 sha3-384 sha3-512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost gost-crypto adler32 crc32 crc32b crc32c fnv132 fnv1a32 fnv164 fnv1a64 joaat murmur3a murmur3c murmur3f xxh32 xxh64 xxh3 xxh128 haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5 

MHASH support => Enabled
MHASH API Version => Emulated Support

iconv

iconv support => enabled
iconv implementation => glibc
iconv library version => 2.31

Directive => Local Value => Master Value
iconv.input_encoding => no value => no value
iconv.internal_encoding => no value => no value
iconv.output_encoding => no value => no value

json

json support => enabled

libxml

libXML support => active
libXML Compiled Version => 2.9.14
libXML Loaded Version => 20910
libXML streams => enabled

openssl

OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.1.1f  31 Mar 2020
OpenSSL Header Version => OpenSSL 1.1.1f  31 Mar 2020
Openssl default config => /usr/lib/ssl/openssl.cnf

Directive => Local Value => Master Value
openssl.cafile => no value => no value
openssl.capath => no value => no value

pcntl

pcntl support => enabled

pcre

PCRE (Perl Compatible Regular Expressions) Support => enabled
PCRE Library Version => 10.42 2022-12-11
PCRE Unicode Version => 14.0.0
PCRE JIT Support => enabled
PCRE JIT Target => x86 64bit (little endian + unaligned)

Directive => Local Value => Master Value
pcre.backtrack_limit => 1000000 => 1000000
pcre.jit => On => On
pcre.recursion_limit => 100000 => 100000

PDO

PDO support => enabled
PDO drivers =>  

Phar

Phar: PHP Archive support => enabled
Phar API version => 1.1.1
Phar-based phar archives => enabled
Tar-based phar archives => enabled
ZIP-based phar archives => enabled
gzip compression => enabled
bzip2 compression => disabled (install ext/bz2)
Native OpenSSL support => enabled

Phar based on pear/PHP_Archive, original concept by Davey Shafik.
Phar fully realized by Gregory Beaver and Marcus Boerger.
Portions of tar implementation Copyright (c) 2003-2009 Tim Kientzle.
Directive => Local Value => Master Value
phar.cache_list => no value => no value
phar.readonly => On => On
phar.require_hash => On => On

posix

POSIX support => enabled

random

Version => 8.2.17

readline

Readline Support => enabled
Readline library => EditLine wrapper

Directive => Local Value => Master Value
cli.pager => no value => no value
cli.prompt => \b \>  => \b \> 

Reflection

Reflection => enabled

session

Session Support => enabled
Registered save handlers => files user 
Registered serializer handlers => php_serialize php php_binary 

Directive => Local Value => Master Value
session.auto_start => Off => Off
session.cache_expire => 180 => 180
session.cache_limiter => nocache => nocache
session.cookie_domain => no value => no value
session.cookie_httponly => Off => Off
session.cookie_lifetime => 0 => 0
session.cookie_path => / => /
session.cookie_samesite => no value => no value
session.cookie_secure => Off => Off
session.gc_divisor => 1000 => 1000
session.gc_maxlifetime => 1440 => 1440
session.gc_probability => 0 => 0
session.lazy_write => On => On
session.name => PHPSESSID => PHPSESSID
session.referer_check => no value => no value
session.save_handler => files => files
session.save_path => /var/lib/php/sessions => /var/lib/php/sessions
session.serialize_handler => php => php
session.sid_bits_per_character => 5 => 5
session.sid_length => 26 => 26
session.upload_progress.cleanup => On => On
session.upload_progress.enabled => On => On
session.upload_progress.freq => 1% => 1%
session.upload_progress.min_freq => 1 => 1
session.upload_progress.name => PHP_SESSION_UPLOAD_PROGRESS => PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix => upload_progress_ => upload_progress_
session.use_cookies => On => On
session.use_only_cookies => On => On
session.use_strict_mode => Off => Off
session.use_trans_sid => Off => Off

shmop

shmop support => enabled

sockets

Sockets Support => enabled

sodium

sodium support => enabled
libsodium headers version => 1.0.18
libsodium library version => 1.0.18

SPL

SPL support => enabled
Interfaces => OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
Classes => AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException

standard

Dynamic Library Support => enabled
Path to sendmail => /usr/sbin/sendmail -t -i

Directive => Local Value => Master Value
assert.active => On => On
assert.bail => Off => Off
assert.callback => no value => no value
assert.exception => On => On
assert.warning => On => On
auto_detect_line_endings => Off => Off
default_socket_timeout => 60 => 60
from => no value => no value
session.trans_sid_hosts => no value => no value
session.trans_sid_tags => a=href,area=href,frame=src,form= => a=href,area=href,frame=src,form=
unserialize_max_depth => 4096 => 4096
url_rewriter.hosts => no value => no value
url_rewriter.tags => form= => form=
user_agent => no value => no value

sysvmsg

sysvmsg support => enabled

sysvsem

sysvsem support => enabled

sysvshm

sysvshm support => enabled

tokenizer

Tokenizer Support => enabled

Zend OPcache

Opcode Caching => Disabled
Optimization => Disabled
SHM Cache => Enabled
File Cache => Disabled
JIT => Disabled
Startup Failed => Opcode Caching is disabled for CLI

Directive => Local Value => Master Value
opcache.blacklist_filename => no value => no value
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => On => On
opcache.enable_cli => Off => Off
opcache.enable_file_override => Off => Off
opcache.error_log => no value => no value
opcache.file_cache => no value => no value
opcache.file_cache_consistency_checks => On => On
opcache.file_cache_only => Off => Off
opcache.file_update_protection => 2 => 2
opcache.force_restart_timeout => 180 => 180
opcache.huge_code_pages => Off => Off
opcache.interned_strings_buffer => 8 => 8
opcache.jit => no value => no value
opcache.jit_bisect_limit => 0 => 0
opcache.jit_blacklist_root_trace => 16 => 16
opcache.jit_blacklist_side_trace => 8 => 8
opcache.jit_buffer_size => 0 => 0
opcache.jit_debug => 0 => 0
opcache.jit_hot_func => 127 => 127
opcache.jit_hot_loop => 64 => 64
opcache.jit_hot_return => 8 => 8
opcache.jit_hot_side_exit => 8 => 8
opcache.jit_max_exit_counters => 8192 => 8192
opcache.jit_max_loop_unrolls => 8 => 8
opcache.jit_max_polymorphic_calls => 2 => 2
opcache.jit_max_recursive_calls => 2 => 2
opcache.jit_max_recursive_returns => 2 => 2
opcache.jit_max_root_traces => 1024 => 1024
opcache.jit_max_side_traces => 128 => 128
opcache.jit_prof_threshold => 0.005 => 0.005
opcache.lockfile_path => /tmp => /tmp
opcache.log_verbosity_level => 1 => 1
opcache.max_accelerated_files => 10000 => 10000
opcache.max_file_size => 0 => 0
opcache.max_wasted_percentage => 5 => 5
opcache.memory_consumption => 128 => 128
opcache.opt_debug_level => 0 => 0
opcache.optimization_level => 0x7FFEBFFF => 0x7FFEBFFF
opcache.preferred_memory_model => no value => no value
opcache.preload => no value => no value
opcache.preload_user => no value => no value
opcache.protect_memory => Off => Off
opcache.record_warnings => Off => Off
opcache.restrict_api => no value => no value
opcache.revalidate_freq => 2 => 2
opcache.revalidate_path => Off => Off
opcache.save_comments => On => On
opcache.use_cwd => On => On
opcache.validate_permission => Off => Off
opcache.validate_root => Off => Off
opcache.validate_timestamps => On => On

zlib

ZLib Support => enabled
Stream Wrapper => compress.zlib://
Stream Filter => zlib.inflate, zlib.deflate
Compiled Version => 1.2.11
Linked Version => 1.2.11

Directive => Local Value => Master Value
zlib.output_compression => Off => Off
zlib.output_compression_level => -1 => -1
zlib.output_handler => no value => no value

Additional Modules

Module Name

Environment

Variable => Value
SHELL => /bin/bash
COLORTERM => truecolor
WSL2_GUI_APPS_ENABLED => 1
TERM_PROGRAM_VERSION => 1.88.0
WSL_DISTRO_NAME => Ubuntu-20.04
NAME => PC-1003234
PWD => /home/XXXX/projects/wound-monitoring
LOGNAME => XXXX
VSCODE_GIT_ASKPASS_NODE => /home/XXXX/.vscode-server/bin/5c3e652f63e798a5ac2f31ffd0d863669328dc4c/node
HOME => /home/XXXX
LANG => C.UTF-8
WSL_INTEROP => /run/WSL/489108_interop
LS_COLORS => rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
WAYLAND_DISPLAY => wayland-0
GIT_ASKPASS => /home/XXXX/.vscode-server/bin/5c3e652f63e798a5ac2f31ffd0d863669328dc4c/extensions/git/dist/askpass.sh
VSCODE_GIT_ASKPASS_EXTRA_ARGS =>  
LESSCLOSE => /usr/bin/lesspipe %s %s
TERM => xterm-256color
LESSOPEN => | /usr/bin/lesspipe %s
USER => XXXX
VSCODE_GIT_IPC_HANDLE => /run/user/1000/vscode-git-81edcfd8ec.sock
DISPLAY => :0
SHLVL => 1
XDG_RUNTIME_DIR => /run/user/1000/
WSLENV => VSCODE_WSL_EXT_LOCATION/up:VSCODE_SERVER_TAR/up
VSCODE_GIT_ASKPASS_MAIN => /home/XXXX/.vscode-server/bin/5c3e652f63e798a5ac2f31ffd0d863669328dc4c/extensions/git/dist/askpass-main.js
XDG_DATA_DIRS => /usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH => /home/XXXX/.vscode-server/bin/5c3e652f63e798a5ac2f31ffd0d863669328dc4c/bin/remote-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/dotnet/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/Users/i.lopezmorales/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/i.lopezmorales/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/i.lopezmorales/AppData/Local/GitHubDesktop/bin:/mnt/c/Users/i.lopezmorales/AppData/Local/gitkraken/bin:/mnt/c/Users/i.lopezmorales/AppData/Local/Programs/Python/Python311:/snap/bin
DBUS_SESSION_BUS_ADDRESS => unix:path=/run/user/1000/bus
HOSTTYPE => x86_64
PULSE_SERVER => unix:/mnt/wslg/PulseServer
TERM_PROGRAM => vscode
VSCODE_IPC_HOOK_CLI => /run/user/1000/vscode-ipc-09e90db0-2549-4bdc-aef0-41d903738ff3.sock
_ => /usr/bin/php
OLDPWD => /home/XXXX/projects

PHP Variables

Variable => Value
$_SERVER['SHELL'] => /bin/bash
$_SERVER['COLORTERM'] => truecolor
$_SERVER['WSL2_GUI_APPS_ENABLED'] => 1
$_SERVER['TERM_PROGRAM_VERSION'] => 1.88.0
$_SERVER['WSL_DISTRO_NAME'] => Ubuntu-20.04
$_SERVER['NAME'] => PC-1003234
$_SERVER['PWD'] => /home/XXXX/projects/wound-monitoring
$_SERVER['LOGNAME'] => XXXX
$_SERVER['VSCODE_GIT_ASKPASS_NODE'] => /home/XXXX/.vscode-server/bin/5c3e652f63e798a5ac2f31ffd0d863669328dc4c/node
$_SERVER['HOME'] => /home/XXXX
$_SERVER['LANG'] => C.UTF-8
$_SERVER['WSL_INTEROP'] => /run/WSL/489108_interop
$_SERVER['LS_COLORS'] => rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
$_SERVER['WAYLAND_DISPLAY'] => wayland-0
$_SERVER['GIT_ASKPASS'] => /home/XXXX/.vscode-server/bin/5c3e652f63e798a5ac2f31ffd0d863669328dc4c/extensions/git/dist/askpass.sh
$_SERVER['VSCODE_GIT_ASKPASS_EXTRA_ARGS'] => 
$_SERVER['LESSCLOSE'] => /usr/bin/lesspipe %s %s
$_SERVER['TERM'] => xterm-256color
$_SERVER['LESSOPEN'] => | /usr/bin/lesspipe %s
$_SERVER['USER'] => XXXX
$_SERVER['VSCODE_GIT_IPC_HANDLE'] => /run/user/1000/vscode-git-81edcfd8ec.sock
$_SERVER['DISPLAY'] => :0
$_SERVER['SHLVL'] => 1
$_SERVER['XDG_RUNTIME_DIR'] => /run/user/1000/
$_SERVER['WSLENV'] => VSCODE_WSL_EXT_LOCATION/up:VSCODE_SERVER_TAR/up
$_SERVER['VSCODE_GIT_ASKPASS_MAIN'] => /home/XXXX/.vscode-server/bin/5c3e652f63e798a5ac2f31ffd0d863669328dc4c/extensions/git/dist/askpass-main.js
$_SERVER['XDG_DATA_DIRS'] => /usr/local/share:/usr/share:/var/lib/snapd/desktop
$_SERVER['PATH'] => /home/XXXX/.vscode-server/bin/5c3e652f63e798a5ac2f31ffd0d863669328dc4c/bin/remote-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/dotnet/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/Users/i.lopezmorales/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/i.lopezmorales/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/i.lopezmorales/AppData/Local/GitHubDesktop/bin:/mnt/c/Users/i.lopezmorales/AppData/Local/gitkraken/bin:/mnt/c/Users/i.lopezmorales/AppData/Local/Programs/Python/Python311:/snap/bin
$_SERVER['DBUS_SESSION_BUS_ADDRESS'] => unix:path=/run/user/1000/bus
$_SERVER['HOSTTYPE'] => x86_64
$_SERVER['PULSE_SERVER'] => unix:/mnt/wslg/PulseServer
$_SERVER['TERM_PROGRAM'] => vscode
$_SERVER['VSCODE_IPC_HOOK_CLI'] => /run/user/1000/vscode-ipc-09e90db0-2549-4bdc-aef0-41d903738ff3.sock
$_SERVER['_'] => /usr/bin/php
$_SERVER['OLDPWD'] => /home/XXXX/projects
$_SERVER['PHP_SELF'] => 
$_SERVER['SCRIPT_NAME'] => 
$_SERVER['SCRIPT_FILENAME'] => 
$_SERVER['PATH_TRANSLATED'] => 
$_SERVER['DOCUMENT_ROOT'] => 
$_SERVER['REQUEST_TIME_FLOAT'] => 1712776572.2175
$_SERVER['REQUEST_TIME'] => 1712776572
$_SERVER['argv'] => Array
(
)

$_SERVER['argc'] => 0

PHP License
This program is free software; you can redistribute it and/or modify
it under the terms of the PHP License as published by the PHP Group
and included in the distribution in the file:  LICENSE

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

If you did not receive a copy of the PHP license, or have any
questions about PHP licensing, please contact license@php.net.

Relevant log output

XXXX@PC-1003234:~/projects/wound-monitoring$ ./my-app php-server -l 127.0.0.1:8081
2024/04/10 19:15:45.321 WARN    admin   admin endpoint disabled
2024/04/10 19:15:45.321 INFO    tls.cache.maintenance   started background certificate maintenance      {"cache": "0xc0001f1400"}
2024/04/10 19:15:45.323 INFO    http.log        server running  {"name": "php", "protocols": ["h1", "h2", "h3"]}
2024/04/10 19:15:45.323 INFO    FrankenPHP started 🐘   {"php_version": "8.3.4"}
2024/04/10 19:15:45.323 INFO    Caddy serving PHP app on 127.0.0.1:8081
2024/04/10 19:15:45.330 WARN    tls     storage cleaning happened too recently; skipping for now        {"storage": "FileStorage:/home/XXXX/.local/share/caddy", "instance": "e0aa4d7c-5ae4-454b-bcdc-676299003287", "try_again": "2024/04/11 19:15:45.330", "try_again_in": 86399.999999549}
2024/04/10 19:15:45.330 INFO    tls     finished cleaning storage units
^C2024/04/10 19:16:07.988       INFO    shutting down   {"signal": "SIGINT"}
2024/04/10 19:16:07.988 WARN    exiting; byeee!! 👋     {"signal": "SIGINT"}
2024/04/10 19:16:07.988 INFO    http    servers shutting down with eternal grace period
^C2024/04/10 19:16:08.829       WARN    force quit      {"signal": "SIGINT"}
withinboredom commented 5 months ago
./my-app php-cli bin/console

I believe this isn't running code INSIDE the binary, but in whatever shell you are currently running in. So wherever you are running it, there is no bin/console.

Currently, static builds are broken for just about everyone (#709, #710) due to an upstream library so it'll probably be a minute before we can try helping out more in-depth.

I believe though, that you just need to run:

./my-app run

as

./my-app php-server

will start a PHP server from your current directory.

Either way, I like the way you're thinking and agree that it probably should work the way you're trying to use it.

withinboredom commented 5 months ago

@dunglas what do you think about this (pseudocode):

if is_embedded():
  embedded_dir := extract()
  chdir(embedded_dir)

// continue as normal

for all cli commands?

(happy to create a pr)

Though probably we want to disable php-server in an embedded context ... I suspect run or start would be the preferred method.

dunglas commented 5 months ago

I didn't do that in the beginning on purpose for a reason that I cannot remember 😅 I'll try to figure out.

Using php-server looks safer to me. This allows to use Caddy as usual in other contexts. I don't want to highjack too much standard Caddy behaviors.

logosur commented 5 months ago

Hi @dunglas , but in your website you claim that the php code is embedded in the binary, also I can see in the builder script that all the app code is tarred in .tar file, why when I run the command ./my-app php-server -l 127.0.0.1:8081 this is serving my localhost storage content instead of the app itself ?

Thanks !

withinboredom commented 5 months ago

I didn't do that in the beginning on purpose for a reason that I cannot remember

I mean, it makes sense logically that you did it that way. It's regular 'ole frankenphp that knows how to serve the embedded app...

Just to scope creep a bit, it'd be really cool if you could embed a "command manifest" in the composer.json or a frankenphp.json file that the cli would embed separately during the build (maybe just using regular go embeds?) and then allow you to do something like:

{
  "console": { "run": "bin/console", "description": "Symfony console" }
}

Then the output of the embedded app:

Available Commands:
  adapt          Adapts a configuration to Caddy's native JSON
  add-package    Adds Caddy packages (EXPERIMENTAL)
  build-info     Prints information about this build
  completion     Generate completion script
  console        Symfony console                     <-----
  environ        Prints the environment
  file-server    Spins up a production-ready file server
  fmt            Formats a Caddyfile
  ...

Then other commands would/could behave like normal. Even allow overriding existing commands with either a custom command or null to "strip" it out of the possible commands:

{ "adapt": null }

I dunno though, at this point I'm thinking this scope creep has creeped far and away from caddy anything. So maybe not... Interesting idea though.

dunglas commented 5 months ago

@logosur it is! I'll try to figure out what's your issue tomorrow.

@withinboredom Ok got it! Indeed that would be nice. I'm working on extension auto detection for standalone binaries, that Ill parse the composer.json file, so composer.json would be a good place to add such features!

abdul-jabbar-ms commented 5 months ago
./my-app php-cli bin/console

I believe this isn't running code INSIDE the binary, but in whatever shell you are currently running in. So wherever you are running it, there is no bin/console.

Currently, static builds are broken for just about everyone (#709, #710) due to an upstream library so it'll probably be a minute before we can try helping out more in-depth.

I believe though, that you just need to run:

./my-app run

as

./my-app php-server

will start a PHP server from your current directory.

Either way, I like the way you're thinking and agree that it probably should work the way you're trying to use it.

Can I run an ftp server inside my binary? I need to figure out how to upload some image files to my public folder like we can do normally with apache and php fpm.

withinboredom commented 5 months ago

Can I run an ftp server inside my binary?

Um, technically yes, if you write an ftp server (or use a caddy module, if there is one) and carefully compile it ... anything is theoretically possible; it's software afterall. We're (probably, very) unlikely to create such a feature.

I need to figure out how to upload some image files to my public folder like we can do normally with apache and php fpm.

Using an embedded php app probably isn't the best way to go about that. If you just need to add some images, you can add them to the app before embedding the app. If while running the app, you need to mutate the app (add images, change files, etc) then an embedded app is NOT a proper solution for your app. The files live "inside" the executable and are mostly immutable.

skmirajbn commented 5 months ago

Hello, I created the binary file and tried to run it.

I used ./my-app php-server command to run it. In the terminal, it looks like it started but in the browser localhost, I can't see my app is running. image But in browser image

I also tried run and start but not work.

here I used run image but sill nothing on localhost image also visited localhost:2019 but got page not found image

I am not an expert on it and also not as much expert on Linux. here is the loom video that I tried. If you could help me I will be blessed.

Loom video: https://www.loom.com/share/a8c46cd7756148b3bad634d9b6b7bc03

dunglas commented 5 months ago

The Dockerfile seems broken and not similar to the official one: https://frankenphp.dev/docs/embed/#creating-a-linux-binary

Especially, the call to export mixed in the build command cannot work. Also, the app should be prepared on your host, using the proper PHP version, not in the Docker image.

I tried to bundle an app by following the docs, and it works.

Closing for now, feel free to re-open if you still have issue by using the documented and recommended way.

dunglas commented 5 months ago

@skmirajbn try http://localhost in your browser (notice that there is no s in http://). Modern browsers always use HTTPS by default, so you have to explicitly add the HTTP scheme.

skmirajbn commented 5 months ago

image First I tried this docker file as in the document but got error about on git like this issue: https://github.com/dunglas/frankenphp/issues/680

Then I get solved as instructed on this issue to add a new line export FRANKENPHP_VERSION=1.1.2 \

I followed that binery is successfully created. but then this issue here occurred.

Ok, I will create a new issue let see. If this can be fixed. 😒

dunglas commented 5 months ago

Please copy your entire Dockerfile. #680 was because the second WORKDIR directive was missing in the Dockerfile of the user, and it is mandatory.

skmirajbn commented 4 months ago

If I use this docker file then got error about git. image

And so I tried this of #680 from this person dockerfile image But this time get stack on this place. image

here is the terminal logs skmiraj@skmiraj-VirtualBox:~/Desktop/projectsourcecode/laravelfranken$ sudo docker build -t static-app -f static-build.Dockerfile .

[sudo] password for skmiraj:

[+] Building 2776.3s (11/12) docker:default

=> [internal] load build definition from static-build.Dockerfile 0.2s

=> => transferring dockerfile: 504B 0.1s

=> [internal] load metadata for docker.io/dunglas/frankenphp:static-buil 2.7s

=> [internal] load .dockerignore 0.2s

=> => transferring context: 2B 0.0s

=> [1/8] FROM docker.io/dunglas/frankenphp:static-builder@sha256:4cb4088 0.0s

=> [internal] load build context 2.3s

=> => transferring context: 736.26kB 2.2s

=> CACHED [2/8] WORKDIR /go/src/app/dist/app 0.0s

=> [3/8] COPY . . 5.7s

=> [4/8] RUN rm -rf tests/ 1.4s

=> [5/8] WORKDIR /go/src/app/ 0.6s

=> [6/8] RUN git clone https://github.com/dunglas/frankenphp 5.9s

=> [7/8] WORKDIR /go/src/app/frankenphp 0.6s

=> [8/8] RUN EMBED=../dist/app/ ./build-static.sh 2756.3s

=> => # PKG_CONFIG='pkg-config'

=> => # GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=

=> => # 0 -ffile-prefix-map=/tmp/go-build4142773356=/tmp/go-build -gno-record-

=> => # gcc-switches'

=> => # Ultimate Packer for eXecutables

=> => # Copyright (C) 1996 - 2023