Embedded Standalone Binary not serving content
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 [email protected].
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"}
./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.
@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.
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.
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 !
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.
@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!
./my-app php-cli bin/consoleI 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 runas
./my-app php-serverwill 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.
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.
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.
But in browser
I also tried run and start but not work.
here I used run
but sill nothing on localhost
also visited localhost:2019 but got page not found
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
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.
@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.
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. 😒
Please copy your entire Dockerfile. #680 was because the second WORKDIR directive was missing in the Dockerfile of the user, and it is mandatory.
If I use this docker file then got error about git.
And so I tried this of #680 from this person dockerfile
But this time get stack on this place.
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