Hey @david, thanks for reaching out. Prepare for the wall of text!
I can assure you the database data is persistent.
I’m currently running InvoiceNinja in the following docker compose:
version: “2”
services:
db:
image: mysql:8
restart: always
volumes:
- /invnj/db:/var/lib/mysql
environment:
- MYSQL_DATABASE=db-ninja-01
- MYSQL_PASSWORD=ninja
- MYSQL_USER=ninja
- MYSQL_ROOT_PASSWORD=ninjaAdminPassword
networks:
- default
app:
image: shobuprime/invoiceninja:5
#image: invoiceninja/invoiceninja:alpine-4
restart: always
depends_on:
- db
volumes:
- /invnj/storage:/var/www/app/storage
- /invnj/logo:/var/www/app/public/logo
- /invnj/public:/var/www/app/public
environment:
- APP_ENV=production
- INVOICENINJA_USER=invoiceninja
- LOG=errorlog
- DB_PASSWORD=ninja
- DB_USERNAME=ninja
- DB_DATABASE=db-ninja-01
- DB_HOST=db
- DB_STRICT=false
- DB_TYPE=mysql
- APP_CIPHER=AES-256-CBC
- APP_KEY=SomeRandom32bitString
- APP_URL=https://myurlhere
- APP_DEBUG=0
networks:
- default
web:
image: nginx:1
volumes:
- /invnj/config/nginx.conf:/etc/nginx/nginx.conf:ro
- /invnj/storage:/var/www/app/storage
- /invnj/logo:/var/www/app/public/logo
- /invnj/public:/var/www/app/public
- /invnj/ssl/fullchain.pem:/etc/nginx/ssl/fullchain.pem:ro
- /invnj/ssl/privkey.pem:/etc/nginx/ssl/privkey.pem:ro
- /invnj/ssl/dhparam.pem:/etc/nginx/ssl/dhparam.pem:ro
- /invnj/logs/nginx:/var/log/nginx/
expose:
- “80”
- “443”
depends_on:
- app
ports: # Delete if you want to use reverse proxy
- 443:443
networks:
- default
I do plan on creating a monolithic image with mysql and web server built in eventually, but that’s the setup for now.
As for the PDF’s, here are the error’s I’m getting.
This first one happens on the setup page, and if I don’t run the container as privileged:
[2020-07-29 00:24:26] production.INFO: The command “PATH=$PATH:/usr/local/bin NODE_PATH=npm root -g
node ‘/var/www/app/vendor/spatie/browsershot/src/…/bin/browser.js’ '{“url”:“file:///tmp/62987628-0972814001595982262/index.html”,“action”:“pdf”,“options”:{“path”:”/var/www/app/public/test.pdf",“args”:[],“viewport”:{“width”:800,“height”:600},“displayHeaderFooter”:false}}’" failed.
Exit Code: 1(General error)
Working directory: /var/www/app/public
Output:
Error Output:
Error: Failed to launch chrome!
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
[0729/002426.610929:FATAL:zygote_host_impl_linux.cc(190)] Check failed: ReceiveFixedMessage(fds[0], kZygoteBootMessage, sizeof(kZygoteBootMessage), &boot_pid).
Received signal 6
r8: 00007ffcec0c78f4 r9: 00007fedfd036a80 r10: 0000000000000008 r11: 0000000000000246
r12: 00007ffcec0c80c0 r13: 00007ffcec0c7ffc r14: 00007ffcec0c7e58 r15: 00000000000000a0
di: 0000000000000002 si: 00007ffcec0c77c0 bp: 00007ffcec0c77c0 bx: 0000000000000000
dx: 0000000000000000 ax: 0000000000000000 cx: 00007fedfdb73a71 sp: 00007ffcec0c77b8
ip: 00007fedfdb73a71 efl: 0000000000000246 cgf: aaaa000000000033 erf: 0000000000000000
trp: 0000000000000000 msk: 0000000000000000 cr2: 0000000000000000
[end of stack trace]
Calling _exit(1). Core file will not be generated.
TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md
at onClose (/var/www/app/node_modules/puppeteer/lib/Launcher.js:349:14)
at ChildProcess.<anonymous> (/var/www/app/node_modules/puppeteer/lib/Launcher.js:339:60)
at ChildProcess.emit (events.js:327:22)
at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
This next one is when I’m logged in and try to preview a PDF. Doesn’t matter if the container is privileged or not.
[2020-07-29 00:36:06] production.ERROR: The command “PATH=$PATH:/usr/local/bin NODE_PATH=/usr/bin /usr/bin root -g
/usr/bin ‘/var/www/app/vendor/spatie/browsershot/src/…/bin/browser.js’ ‘{“url”:“file:///tmp/210917052-0000350001595982966/index.html”,“action”:“pdf”,“options”:{“args”:[],“viewport”:{“width”:800,“height”:600,“deviceScaleFactor”:1},“displayHeaderFooter”:false,“waitUntil”:“networkidle0”,“printBackground”:true}}’” failed.
Exit Code: 126(Invoked command cannot execute)
Working directory: /var/www/app/public
Output:
Error Output:
sh: /usr/bin: Permission denied
sh: /usr/bin: Permission denied
{“userId”:1,“exception”:"[object] (Symfony\Component\Process\Exception\ProcessFailedException(code: 0): The command “PATH=$PATH:/usr/local/bin NODE_PATH=/usr/bin /usr/bin root -g
/usr/bin ‘/var/www/app/vendor/spatie/browsershot/src/…/bin/browser.js’ ‘{“url”:“file:\/\/\/tmp\/210917052-0000350001595982966\/index.html”,“action”:“pdf”,“options”:{“args”:[],“viewport”:{“width”:800,“height”:600,“deviceScaleFactor”:1},“displayHeaderFooter”:false,“waitUntil”:“networkidle0”,“printBackground”:true}}’” failed.
Exit Code: 126(Invoked command cannot execute)
Working directory: /var/www/app/public
Output:
Error Output:
sh: /usr/bin: Permission denied
sh: /usr/bin: Permission denied
at /var/www/app/vendor/spatie/browsershot/src/Browsershot.php:738)
[stacktrace]
#0 /var/www/app/vendor/spatie/browsershot/src/Browsershot.php(532): Spatie\Browsershot\Browsershot->callBrowser(Array)
#1 /var/www/app/app/Utils/Traits/Pdf/PdfMaker.php(43): Spatie\Browsershot\Browsershot->pdf()
#2 /var/www/app/app/Jobs/Util/PreviewPdf.php(61): App\Jobs\Util\PreviewPdf->makePdf(NULL, NULL, ‘…’)
#3 [internal function]: App\Jobs\Util\PreviewPdf->handle()
#4 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array(Array, Array)
#5 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/Util.php(37): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#6 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#7 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#8 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/Container.php(590): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#9 /var/www/app/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call(Array)
#10 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(App\Jobs\Util\PreviewPdf))
#11 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(App\Jobs\Util\PreviewPdf))
#12 /var/www/app/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#13 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php(26): Illuminate\Bus\Dispatcher->dispatchNow(Object(App\Jobs\Util\PreviewPdf))
#14 /var/www/app/app/Http/Controllers/PreviewController.php(166): App\Jobs\Util\PreviewPdf::dispatchNow(’…’, Object(App\Models\Company))
#15 /var/www/app/app/Http/Controllers/PreviewController.php(126): App\Http\Controllers\PreviewController->blankEntity()
#16 [internal function]: App\Http\Controllers\PreviewController->show()
#17 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#18 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction(‘show’, Array)
#19 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\PreviewController), ‘show’)
#20 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\Routing\Route->runController()
#21 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(681): Illuminate\Routing\Route->run()
#22 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#23 /var/www/app/app/Http/Middleware/Locale.php(34): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#24 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): App\Http\Middleware\Locale->handle(Object(Illuminate\Http\Request), Object(Closure))
#25 /var/www/app/app/Http/Middleware/TokenAuth.php(81): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#26 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): App\Http\Middleware\TokenAuth->handle(Object(Illuminate\Http\Request), Object(Closure))
#27 /var/www/app/app/Http/Middleware/SetDb.php(41): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#28 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): App\Http\Middleware\SetDb->handle(Object(Illuminate\Http\Request), Object(Closure))
#29 /var/www/app/app/Http/Middleware/StartupCheck.php(68): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#30 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): App\Http\Middleware\StartupCheck->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /var/www/app/app/Http/Middleware/QueryLogging.php(40): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#32 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): App\Http\Middleware\QueryLogging->handle(Object(Illuminate\Http\Request), Object(Closure))
#33 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#34 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#35 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(59): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#36 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Routing\Middleware\ThrottleRequests->handle(Object(Illuminate\Http\Request), Object(Closure), 60, ‘1’)
#37 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#38 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(683): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#39 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(658): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#40 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(624): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#41 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(613): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#42 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(170): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#43 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#44 /var/www/app/app/Http/Middleware/Cors.php(35): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#45 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): App\Http\Middleware\Cors->handle(Object(Illuminate\Http\Request), Object(Closure))
#46 /var/www/app/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#47 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#48 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#49 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#50 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#51 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#52 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#53 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#54 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(63): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#55 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#56 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#57 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(145): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#58 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(110): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#59 /var/www/app/public/index.php(57): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#60 {main}
"}