Docker-Compose with Commandbox 无法更改 web root
Docker-Compose with Commandbox cannot change web root
我正在使用 docker-compose
启动命令框 lucee 容器和 mysql contianer。
我想更改 lucee 服务器的 Web 根目录,以隐藏所有非 public 文件(server.json 等,cfmigrations 资源文件夹)
我已经按照文档更新了我的 server.json
https://commandbox.ortusbooks.com/embedded-server/server.json/packaging-your-server
{
"web":{
"webroot":"./public"
}
}
如果我从 Windows 启动服务器(box start
从 app 文件夹),服务器从 ./public
加载我的 index.cfm 在 http://localhost,完美。
但是使用这个 .yaml
文件,webroot 不会更改为 ./public
并且显示我的 /app
文件夹的内容,带有“public”文件夹在目录列表中可见。
services:
db:
image: mysql:8.0.26
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
MYSQL_DATABASE: cf
MYSQL_USER: $MYSQL_USER
MYSQL_PASSWORD: $MYSQL_PASSWORD
MYSQL_SOURCE: $MYSQL_SOURCE
MYSQL_SOURCE_USER: $MYSQL_SOURCE_USER
MYSQL_SOURCE_PASSWORD: $MYSQL_SOURCE_PASSWORD
volumes:
- ./mysql:/var/lib/mysql
- ./assets/initdb:/docker-entrypoint-initdb.d
- ./assets/sql:/assets/sql
web:
depends_on:
- db
# Post 3.1.0 fails to boot if APP_DIR is set to non /app
# image: ortussolutions/commandbox:lucee5-3.1.0
image: ortussolutions/commandbox:lucee5
# build: .
ports:
- "80:80"
- "443:443"
environment:
- PORT=80
- SSL_PORT=443
- BOX_SERVER_WEB_SSL_ENABLE=true
- BOX_SERVER_WEB_DIRECTORYBROWSING=$CF_DIRECTORY_BROWSING
- BOX_INSTALL=true
- BOX_SERVER_WEB_BLOCKCFADMIN=$CF_BLOCK_ADMIN
- BOX_SERVER_CFCONFIGFILE=/app/.cfconfig.json
# - APP_DIR=/app/public
# - BOX_SERVER_WEB_WEBROOT=/app/public
- cfconfig_robustExceptionEnabled=$CF_ROBOUST_EXCEPTION_ENABLED
- cfconfig_adminPassword=$CF_ADMIN_PASSWORD
- MYSQL_USER=$MYSQL_USER
- MYSQL_PASSWORD=$MYSQL_PASSWORD
- MYSQL_HOST=$MYSQL_HOST
- MYSQL_PORT=$MYSQL_PORT
volumes:
- ./app:/app
- ./assets/mysql-connector-java-8.0.26.jar:/usr/local/lib/CommandBox/lib/mysql-connector-java-8.0.26.jar
这是目录列表:
这是我的项目结构:
好像 server.json
文件被忽略了,或者至少 web.webroot
属性,但是我已经尝试了这两个设置,都没有解决问题
- APP_DIR=/app/public
- BOX_SERVER_WEB_WEBROOT=/app/public
命令框文档建议更改 APP_DIR 以修复 Web 根目录,“APP_DIR - 应用程序目录(Web 根目录)。”
https://hub.docker.com/r/ortussolutions/commandbox/
但是如果我这样做,我会收到关于启动脚本位于错误位置的错误,在我看来应该修复它:
https://github.com/Ortus-Solutions/docker-commandbox/issues/55
BOX_SERVER_WEB_WEBROOT
和 server.json
是一样的(或者至少是 属性)。我也尝试设置以下环境变量(大写和小写)并且没有区别,但请记住 server.json
为我更改了 webroot whe
- BOX_SERVER_WEB_WEBROOT=./public
- BOX_SERVER_WEB_WEBROOT=/app/public
- BOX_SERVER_WEB_WEBROOT=public
Web 容器启动时的输出:
Set verboseErrors = true
INFO: CF Engine defined as lucee@5.3.8+189
INFO: Convention .cfconfig.json found at /app/.cfconfig.json
INFO: Server Home Directory set to: /usr/local/lib/serverHome
√ | Installing ALL dependencies
| √ | Installing package [forgebox:commandbox-cfconfig@1.6.3]
| √ | Installing package [forgebox:commandbox-migrations@3.2.3]
| | √ | Installing package [forgebox:cfmigrations@^2.0.0]
| | | √ | Installing package [forgebox:qb@^8.0.0]
| | | | √ | Installing package [forgebox:cbpaginator@^2.4.0]
+ [[ -n '' ]]
+ [[ -n '' ]]
INFO: Generating server startup script
√ | Starting Server
|------------------------------
| start server in - /app/
| server name - app
| server config file - /app//server.json
| WAR/zip archive already installed.
| Found CFConfig JSON in ".cfconfig.json" file in web root by convention
| .
| Importing luceeserver config from [/app/.cfconfig.json]
| Config transferred!
| Setting OS environment variable [cfconfig_adminPassword] into luceeser
| ver
| [adminPassword] set.
| Setting OS environment variable [cfconfig_robustExceptionEnabled] into
| luceeserver
| [robustExceptionEnabled] set.
| Start script for shell [bash] generated at: /app/server-start.sh
| Server start command:
| /opt/java/openjdk/bin/java
| -jar /usr/local/lib/CommandBox/lib/runwar-4.5.1.jar
| --background=false
| --host 0.0.0.0
| --stop-port 42777
| --processname app [lucee 5.3.8+189]
| --log-dir /usr/local/lib/serverHome//logs
| --server-name app
| --tray-enable false
| --dock-enable true
| --directoryindex true
| --timeout 240
| --proxy-peeraddress true
| --cookie-secure false
| --cookie-httponly false
| --pid-file /usr/local/lib/serverHome//.pid.txt
| --gzip-enable true
| --cfengine-name lucee
| -war /app/
| --web-xml-path /usr/local/lib/serverHome/WEB-INF/web.xml
| --http-enable true
| --ssl-enable true
| --ajp-enable false
| --http2-enable true
| --open-browser false
| --open-url https://0.0.0.0:443
| --port 80
| --ssl-port 443
| --urlrewrite-enable false
| --predicate-file /usr/local/lib/serverHome//.predicateFile.txt
| Dry run specified, exiting without starting server.
|------------------------------
| √ | Setting Server Profile to [production]
| |-----------------------------------------------------
| | Profile set from secure by default
| | Block CF Admin disabled
| | Block Sensitive Paths enabled
| | Block Flash Remoting enabled
| | Directory Browsing enabled
| |-----------------------------------------------------
INFO: Starting server using generated script: /usr/local/bin/startup.sh
[INFO ] runwar.server: Starting RunWAR 4.5.1
[INFO ] runwar.server: HTTP2 Enabled:true
[INFO ] runwar.server: Enabling SSL protocol on port 443
[INFO ] runwar.server: HTTP ajpEnable:false
[INFO ] runwar.server: HTTP warFile exists:true
[INFO ] runwar.server: HTTP warFile isDirectory:true
[INFO ] runwar.server: HTTP background:false
[INFO ] runwar.server: Adding additional lib dir of: /usr/local/lib/serverHome/WEB-INF/lib
[INFO ] runwar.server: ******************************************************************************
[INFO ] runwar.server: Starting - port:80 stop-port:42777 warpath:file:/app/
[INFO ] runwar.server: context: / - version: 4.5.1
[INFO ] runwar.server: web-dirs: ["\/app"]
[INFO ] runwar.server: Log Directory: /usr/local/lib/serverHome/logs
[INFO ] runwar.server: ******************************************************************************
[INFO ] runwar.server: XNIO-Option CONNECTION_LOW_WATER:1000000
[INFO ] runwar.server: XNIO-Option CORK:true
[INFO ] runwar.server: XNIO-Option WORKER_TASK_MAX_THREADS:30
[INFO ] runwar.server: XNIO-Option WORKER_IO_THREADS:8
[INFO ] runwar.server: XNIO-Option TCP_NODELAY:true
[INFO ] runwar.server: XNIO-Option WORKER_TASK_CORE_THREADS:30
[INFO ] runwar.server: XNIO-Option CONNECTION_HIGH_WATER:1000000
[INFO ] runwar.config: Parsing '/usr/local/lib/serverHome/WEB-INF/web.xml'
[INFO ] runwar.server: Extensions allowed by the default servlet for static files: 3gp,3gpp,7z,ai,aif,aiff,asf,asx,atom,au,avi,bin,bmp,btm,cco,crt,css,csv,deb,der,dmg,doc,docx,eot,eps,flv,font,gif,hqx,htc,htm,html,ico,img,ini,iso,jad,jng,jnlp,jpeg,jpg,js,json,kar,kml,kmz,m3u8,m4a,m4v,map,mid,midi,mml,mng,mov,mp3,mp4,mpeg,mpeg4,mpg,msi,msm,msp,ogg,otf,pdb,pdf,pem,pl,pm,png,ppt,pptx,prc,ps,psd,ra,rar,rpm,rss,rtf,run,sea,shtml,sit,svg,svgz,swf,tar,tcl,tif,tiff,tk,ts,ttf,txt,wav,wbmp,webm,webp,wmf,wml,wmlc,wmv,woff,woff2,xhtml,xls,xlsx,xml,xpi,xspf,zip,aifc,aac,apk,bak,bk,bz2,cdr,cmx,dat,dtd,eml,fla,gz,gzip,ipa,ia,indd,hey,lz,maf,markdown,md,mkv,mp1,mp2,mpe,odt,ott,odg,odf,ots,pps,pot,pmd,pub,raw,sdd,tsv,xcf,yml,yaml
[INFO ] runwar.server: welcome pages in deployment manager: [index.cfm, index.lucee, index.html, index.htm]
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.felix.framework.ext.ClassPathExtenderFactory$DefaultClassLoaderExtender (file:/usr/local/lib/serverHome/WEB-INF/lib/lucee.jar) to method java.net.URLClassLoader.addURL(java.net.URL)
WARNING: Please consider reporting this to the maintainers of org.apache.felix.framework.ext.ClassPathExtenderFactory$DefaultClassLoaderExtender
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO ] runwar.server: Direct Buffers: true
[INFO ] runwar.server: ******************************************************************************
[INFO ] runwar.server: *** starting 'stop' listener thread - Host: 0.0.0.0 - Socket: 42777
[INFO ] runwar.server: ******************************************************************************
[INFO ] runwar.server: Server is up - http-port:80 https-port:443 stop-port:42777 PID:286 version 4.5.1
这对我来说都是全新的,所以我可能做错了一些事情,我想知道这是否是文件夹嵌套的问题,尽管我已经尝试重新排列它但无法想出一个可行的方法解决方案。
您正在使用 pre-warmed 图片
image: ortussolutions/commandbox:lucee5
这意味着服务器已经启动并“锁定”到其所有设置,包括网络根目录。使用从未启动过服务器的 vanilla commandbox 图像,这样当您预热图像时,您将第一次使用您的设置启动它。
要设置自定义网络根目录,您需要将其添加到您的 docker 文件
ENV APP_DIR=/app/public
我正在使用 docker-compose
启动命令框 lucee 容器和 mysql contianer。
我想更改 lucee 服务器的 Web 根目录,以隐藏所有非 public 文件(server.json 等,cfmigrations 资源文件夹)
我已经按照文档更新了我的 server.json
https://commandbox.ortusbooks.com/embedded-server/server.json/packaging-your-server
{
"web":{
"webroot":"./public"
}
}
如果我从 Windows 启动服务器(box start
从 app 文件夹),服务器从 ./public
加载我的 index.cfm 在 http://localhost,完美。
但是使用这个 .yaml
文件,webroot 不会更改为 ./public
并且显示我的 /app
文件夹的内容,带有“public”文件夹在目录列表中可见。
services:
db:
image: mysql:8.0.26
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
MYSQL_DATABASE: cf
MYSQL_USER: $MYSQL_USER
MYSQL_PASSWORD: $MYSQL_PASSWORD
MYSQL_SOURCE: $MYSQL_SOURCE
MYSQL_SOURCE_USER: $MYSQL_SOURCE_USER
MYSQL_SOURCE_PASSWORD: $MYSQL_SOURCE_PASSWORD
volumes:
- ./mysql:/var/lib/mysql
- ./assets/initdb:/docker-entrypoint-initdb.d
- ./assets/sql:/assets/sql
web:
depends_on:
- db
# Post 3.1.0 fails to boot if APP_DIR is set to non /app
# image: ortussolutions/commandbox:lucee5-3.1.0
image: ortussolutions/commandbox:lucee5
# build: .
ports:
- "80:80"
- "443:443"
environment:
- PORT=80
- SSL_PORT=443
- BOX_SERVER_WEB_SSL_ENABLE=true
- BOX_SERVER_WEB_DIRECTORYBROWSING=$CF_DIRECTORY_BROWSING
- BOX_INSTALL=true
- BOX_SERVER_WEB_BLOCKCFADMIN=$CF_BLOCK_ADMIN
- BOX_SERVER_CFCONFIGFILE=/app/.cfconfig.json
# - APP_DIR=/app/public
# - BOX_SERVER_WEB_WEBROOT=/app/public
- cfconfig_robustExceptionEnabled=$CF_ROBOUST_EXCEPTION_ENABLED
- cfconfig_adminPassword=$CF_ADMIN_PASSWORD
- MYSQL_USER=$MYSQL_USER
- MYSQL_PASSWORD=$MYSQL_PASSWORD
- MYSQL_HOST=$MYSQL_HOST
- MYSQL_PORT=$MYSQL_PORT
volumes:
- ./app:/app
- ./assets/mysql-connector-java-8.0.26.jar:/usr/local/lib/CommandBox/lib/mysql-connector-java-8.0.26.jar
这是目录列表:
这是我的项目结构:
好像 server.json
文件被忽略了,或者至少 web.webroot
属性,但是我已经尝试了这两个设置,都没有解决问题
- APP_DIR=/app/public
- BOX_SERVER_WEB_WEBROOT=/app/public
命令框文档建议更改 APP_DIR 以修复 Web 根目录,“APP_DIR - 应用程序目录(Web 根目录)。” https://hub.docker.com/r/ortussolutions/commandbox/
但是如果我这样做,我会收到关于启动脚本位于错误位置的错误,在我看来应该修复它: https://github.com/Ortus-Solutions/docker-commandbox/issues/55
BOX_SERVER_WEB_WEBROOT
和 server.json
是一样的(或者至少是 属性)。我也尝试设置以下环境变量(大写和小写)并且没有区别,但请记住 server.json
为我更改了 webroot whe
- BOX_SERVER_WEB_WEBROOT=./public
- BOX_SERVER_WEB_WEBROOT=/app/public
- BOX_SERVER_WEB_WEBROOT=public
Web 容器启动时的输出:
Set verboseErrors = true
INFO: CF Engine defined as lucee@5.3.8+189
INFO: Convention .cfconfig.json found at /app/.cfconfig.json
INFO: Server Home Directory set to: /usr/local/lib/serverHome
√ | Installing ALL dependencies
| √ | Installing package [forgebox:commandbox-cfconfig@1.6.3]
| √ | Installing package [forgebox:commandbox-migrations@3.2.3]
| | √ | Installing package [forgebox:cfmigrations@^2.0.0]
| | | √ | Installing package [forgebox:qb@^8.0.0]
| | | | √ | Installing package [forgebox:cbpaginator@^2.4.0]
+ [[ -n '' ]]
+ [[ -n '' ]]
INFO: Generating server startup script
√ | Starting Server
|------------------------------
| start server in - /app/
| server name - app
| server config file - /app//server.json
| WAR/zip archive already installed.
| Found CFConfig JSON in ".cfconfig.json" file in web root by convention
| .
| Importing luceeserver config from [/app/.cfconfig.json]
| Config transferred!
| Setting OS environment variable [cfconfig_adminPassword] into luceeser
| ver
| [adminPassword] set.
| Setting OS environment variable [cfconfig_robustExceptionEnabled] into
| luceeserver
| [robustExceptionEnabled] set.
| Start script for shell [bash] generated at: /app/server-start.sh
| Server start command:
| /opt/java/openjdk/bin/java
| -jar /usr/local/lib/CommandBox/lib/runwar-4.5.1.jar
| --background=false
| --host 0.0.0.0
| --stop-port 42777
| --processname app [lucee 5.3.8+189]
| --log-dir /usr/local/lib/serverHome//logs
| --server-name app
| --tray-enable false
| --dock-enable true
| --directoryindex true
| --timeout 240
| --proxy-peeraddress true
| --cookie-secure false
| --cookie-httponly false
| --pid-file /usr/local/lib/serverHome//.pid.txt
| --gzip-enable true
| --cfengine-name lucee
| -war /app/
| --web-xml-path /usr/local/lib/serverHome/WEB-INF/web.xml
| --http-enable true
| --ssl-enable true
| --ajp-enable false
| --http2-enable true
| --open-browser false
| --open-url https://0.0.0.0:443
| --port 80
| --ssl-port 443
| --urlrewrite-enable false
| --predicate-file /usr/local/lib/serverHome//.predicateFile.txt
| Dry run specified, exiting without starting server.
|------------------------------
| √ | Setting Server Profile to [production]
| |-----------------------------------------------------
| | Profile set from secure by default
| | Block CF Admin disabled
| | Block Sensitive Paths enabled
| | Block Flash Remoting enabled
| | Directory Browsing enabled
| |-----------------------------------------------------
INFO: Starting server using generated script: /usr/local/bin/startup.sh
[INFO ] runwar.server: Starting RunWAR 4.5.1
[INFO ] runwar.server: HTTP2 Enabled:true
[INFO ] runwar.server: Enabling SSL protocol on port 443
[INFO ] runwar.server: HTTP ajpEnable:false
[INFO ] runwar.server: HTTP warFile exists:true
[INFO ] runwar.server: HTTP warFile isDirectory:true
[INFO ] runwar.server: HTTP background:false
[INFO ] runwar.server: Adding additional lib dir of: /usr/local/lib/serverHome/WEB-INF/lib
[INFO ] runwar.server: ******************************************************************************
[INFO ] runwar.server: Starting - port:80 stop-port:42777 warpath:file:/app/
[INFO ] runwar.server: context: / - version: 4.5.1
[INFO ] runwar.server: web-dirs: ["\/app"]
[INFO ] runwar.server: Log Directory: /usr/local/lib/serverHome/logs
[INFO ] runwar.server: ******************************************************************************
[INFO ] runwar.server: XNIO-Option CONNECTION_LOW_WATER:1000000
[INFO ] runwar.server: XNIO-Option CORK:true
[INFO ] runwar.server: XNIO-Option WORKER_TASK_MAX_THREADS:30
[INFO ] runwar.server: XNIO-Option WORKER_IO_THREADS:8
[INFO ] runwar.server: XNIO-Option TCP_NODELAY:true
[INFO ] runwar.server: XNIO-Option WORKER_TASK_CORE_THREADS:30
[INFO ] runwar.server: XNIO-Option CONNECTION_HIGH_WATER:1000000
[INFO ] runwar.config: Parsing '/usr/local/lib/serverHome/WEB-INF/web.xml'
[INFO ] runwar.server: Extensions allowed by the default servlet for static files: 3gp,3gpp,7z,ai,aif,aiff,asf,asx,atom,au,avi,bin,bmp,btm,cco,crt,css,csv,deb,der,dmg,doc,docx,eot,eps,flv,font,gif,hqx,htc,htm,html,ico,img,ini,iso,jad,jng,jnlp,jpeg,jpg,js,json,kar,kml,kmz,m3u8,m4a,m4v,map,mid,midi,mml,mng,mov,mp3,mp4,mpeg,mpeg4,mpg,msi,msm,msp,ogg,otf,pdb,pdf,pem,pl,pm,png,ppt,pptx,prc,ps,psd,ra,rar,rpm,rss,rtf,run,sea,shtml,sit,svg,svgz,swf,tar,tcl,tif,tiff,tk,ts,ttf,txt,wav,wbmp,webm,webp,wmf,wml,wmlc,wmv,woff,woff2,xhtml,xls,xlsx,xml,xpi,xspf,zip,aifc,aac,apk,bak,bk,bz2,cdr,cmx,dat,dtd,eml,fla,gz,gzip,ipa,ia,indd,hey,lz,maf,markdown,md,mkv,mp1,mp2,mpe,odt,ott,odg,odf,ots,pps,pot,pmd,pub,raw,sdd,tsv,xcf,yml,yaml
[INFO ] runwar.server: welcome pages in deployment manager: [index.cfm, index.lucee, index.html, index.htm]
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.felix.framework.ext.ClassPathExtenderFactory$DefaultClassLoaderExtender (file:/usr/local/lib/serverHome/WEB-INF/lib/lucee.jar) to method java.net.URLClassLoader.addURL(java.net.URL)
WARNING: Please consider reporting this to the maintainers of org.apache.felix.framework.ext.ClassPathExtenderFactory$DefaultClassLoaderExtender
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO ] runwar.server: Direct Buffers: true
[INFO ] runwar.server: ******************************************************************************
[INFO ] runwar.server: *** starting 'stop' listener thread - Host: 0.0.0.0 - Socket: 42777
[INFO ] runwar.server: ******************************************************************************
[INFO ] runwar.server: Server is up - http-port:80 https-port:443 stop-port:42777 PID:286 version 4.5.1
这对我来说都是全新的,所以我可能做错了一些事情,我想知道这是否是文件夹嵌套的问题,尽管我已经尝试重新排列它但无法想出一个可行的方法解决方案。
您正在使用 pre-warmed 图片
image: ortussolutions/commandbox:lucee5
这意味着服务器已经启动并“锁定”到其所有设置,包括网络根目录。使用从未启动过服务器的 vanilla commandbox 图像,这样当您预热图像时,您将第一次使用您的设置启动它。
要设置自定义网络根目录,您需要将其添加到您的 docker 文件
ENV APP_DIR=/app/public