Running non-js localhost server in Electron: recommended pattern? - electron

I'm trying to run an executable that starts a server on localhost and listens on port 3030 inside an electron app (with typescript).
I'm currently playing around with placing the server and its executable inside the /electron folder close to /preload and /main, and am running require("child_process").execFile(pathToExecutable) inside of /preload/index.ts.
What's the recommended way to spawn these child processes and discard them in electron? Also, how can I ensure that it'll work in production (collisions of port numbers, typescript compiler not copying non-ts files, etc.)?
I tried moving the server directory into the /electron directory. I'm having some typescript issues where it's not copying non-TS files over to the dist-electron directory, but I don't think that's anything a postbuild script can't fix.

Related

How can I package a windows dependent program into a lightweight docker container?

I currently have a folder containing some .dll files, .bin files and some .exe files. The main .exe that I will be executing only works on windows, and I am not entirely sure what are all its dependencies. My goal is to package all the files in the folder into a docker container so I can integrate it into the rest of my pipeline. The main .exe is a command line tool which is only called once with some arguments and left to run.
I have tried to use windows server core as the container image and it works. However this image is too big for my needs. I have tried to use nano server but when I try to run the executable there is nothing printed in the command line and the program does not run. In that scenario, if I type:
C:\Bin\x64>echo %ERRORLEVEL%
I get the following output:
-1073741515
Meaning I am missing some dependencies.
So, I'm wondering if there is an alternate solution to packaging this folder since windows server core is too big.
Most likely you'll have to stick with the Server Core image. The main thing is that these images server different purposes, and the Nano Server is intended to new applications being developed with the targeted Nano Server API. Server Core is the image focused on existing apps, but its APIs make the image larger than what one would expect from a container.
Keep in mind that it's still better than a full VM. :)
I blogged about this here: https://techcommunity.microsoft.com/t5/containers/nano-server-x-server-core-x-server-which-base-image-is-the-right/ba-p/2835785

How to setup dockerized binaries in VSCode

I have learned to use docker as development server (LAMP and MEAN) and now I feel I should take next step, By removing PHP and node binaries from system and use binaries from containers. So on a fresh Solus install, I setup containers for PHP, node, Ruby etc. Solus already recommends using containers for such tasks. But I got stuck on first day.
I installed vs code (Code-oss) on installed extensions (prettier, PHPCS etc) on it, and they need path of installed binaries (path/to/phpcs, path/to/node etc).
I initially set up configuration path as
docker run -it --rm herloct/phpcs phpcs
based on https://gist.github.com/barraq/e7f85262bc7a0af2d8d8884d27b62d2c but using more updated container. It didn't work, So I set it up as alias thinking it would fool VSCode into thinking it is native command, but it didn't work either. I have confirmed that using those command directly from terminal does work, But VSCode PHPIntellisense extension does not want to work.
Any suggestion?
P.S. Any tip to keep container running in background as to avoid container bootup delay everytime I use PHPCS or javac from container? I can keep LAMP server running but everytime I enter terminal tools, it loads up new container to execute command, and then kill container causing delay for bootup and closing.
In case it is still relevant to someone: You might want to create a VS Code development container to use dockerized binaries.
For this to work, a .devcontainer.json is required which could be as simple as:
{
"image": "mcr.microsoft.com/vscode/devcontainers/typescript-node:0-12"
}

docker, vagrant sandboxes in php development

I have a missunderstanding and i want to find the best approach of a development sandbox environment for a PHP project.
I have a github repo that will host the code , .php, .js (will using webpack with babel), .scss files and different machines for development (windows, mac, ubuntu) .
I want to be able to pull the code from git hub , run a command (like vagrant up) and start a VM / container / sandbox with apache2 , php, nodejs that will run to parse .scss files and .js files into one and then be able to start the server on every platform without having to run gulp locally on developers PC, and then have the XAMPP installed with the correct path for apache2 http folder.
What would be the best approach ? To use vagrant VM with a file config on the repo or docker containers ?
I just want to simplify the development experience and to have this automated tools that start a server, compile sass and babel js.
Thank you
While I am a big Docker fan, it isn't always the right tool for the job. Docker has principals like immutability and single-service-per-container that probably won't work well for what you're looking to do without a learning curve.
There is a great open-source Vagrant tool called PuPHPet that make configuring a development environment straightforward.
https://puphpet.com/
From the PuPHPet web site you can configure an image with Apache2, PHP, and NodeJS via their wizard and it will generate a Vagrant file that you to run locally on your workstation. This way you can have all the software you need, without having to deal with installing/maintaining it yourself. It also supports installing databases, queues, and mail applications, should you need them.
For your scenario, I would clone the code from Github onto your workstation (not the VM) and mount it using Synced Folders against Vagrant, but still directly accessible by your IDE.

Springboot running on Docker unable to read files from resources

I have a springboot project with default structure. I have an excel file under resources/data. My program need to load excel file and dump data into different tables from each sheet.
When I run from Eclipse, program loads excel file correctly and everything looks good. However, when I deploy the same App on Docker, it fails to read the File from resources.
Have anyone encountered this issues? How have you solved it?
First of all try to check whether the Docker is a reason, or there is an issue with java code. Spring boot creates an artifact that can be run with just java -jar <your-spring-boot-artifact.jar>
If this doesn't run even without docker, then you should change the way you access Excel files from spring boot application (your java code):
if the file is in resources folder, it should be packaged into the spring boot artifact.
In this case, you have to use getClass().getResourceAsStream() to access the file, and not rely on java.io.File API, because File API doesn't allow working with files inside a Jar, its not a regular filesystem.

Using Wildfly 8, I'm able to HTTP GET the entire filesystem through any WAR deployed in the server

I'm using WildFly 8.1.0.Final (JBoss) on a windows server and I've deployed a WAR ("test.war") with a single HTML file at its root.
Now, using CURL I can read any file on my filesystem:
curl http://localhost/test/..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\Windows\\win.ini
Note that this also happens when accessing a remote host.
Also note that the number of "..\" probably depends on where is Wildfly deployed.
Obviously this is not desired...
So I tried to fix this by explicitly disabling directory-listing even though listing is disabled by default and my using "curl" doesn't browse any directory. This didn't help.
It feels like a bug in Undertow though I can't prove it.
Any help will be appreciated.
Thanks.

Resources