Deploying an angular 2+ app into cloud Foundry using Ng serve - ibm-cloud

I am attempting to deploy an angular app into IBM Cloud - Cloud Foundry using the CF CLI.
It always seems to fail and doing some research it requires a node script for the start command in package.json. Therefore it is failing due to me having a Ng serve command.
Any ideas about getting around this issue?

So after having a play I realised that the research that I have done is misleading and I have finally figured it out now. Thought that I would post my findings here to save someone else the trouble:
Firstly, unlike doing a ng serve locally, you will need to build the project first i.e npm run-script build. This should give you the dist directory.
Secondly I had a slightly invalid manifest.yml. This is a sample of the file that I have used which finally got it to work:
---
applications:
- name: <App Name>
path: dist <- This points to the compiled code
random-route: true
Hope that this helps someone in the future.

Related

`gcloud run deploy` raises "Revision <revision_name> is not ready and cannot serve traffic."

Command
gcloud run deploy api --region=$REGION --image=$IMAGE
Logs
Deploying container to Cloud Run service [api] in project [[MASKED]] region [[MASKED]]
Deploying...
Creating Revision...........interrupted
Deployment failed
ERROR: (gcloud.run.deploy) Revision [[MASKED]] is not ready and cannot serve traffic.
I've tried to search Google Cloud documentation, but it does not mention such problem.
How to solve the "Revision is not ready and cannot serve traffic."?
Try to wait a few minutes and then just re-launch the procedure. The good old "let's retry without changing anything" worked for me! :)
EDIT: I talked with a Cloud Architect who works with me and he told me that this is the actual solution, because if you retry too quickly to restart the deploy, GCP may still have some pending operations from the previous one!
I faced the same error in Cloud Run after getting the container working correctly locally. In my case the revisions weren't showing as failing, they had a grey checkmark
and when hovering I got the message
The revision is healthy but not currently serving traffic.
I just needed to click Manage Traffic and set 100% of the traffic to a new revision
I faced this problem as well. In my case I checked "Cloud Run" section from hamburger menu of google cloud console. The "Logs" section should give you more idea about what went wrong. I was missing a python library, and adding correct python dependency in my requirements.txt solved the issue for me. Somehow my local testing went well without this issue. I hope this helps. :)
I faced with this problem, my problem is that my docker image is missing required dependency package at build stage, my Dockerfile missed some steps to copy required files for preparing to install package.
To find you problem if cloud build logs was not make sense for you, I think you should:
From gcloud console, go to service "Container Registry" > Images
Select your repository name
From the image version (maybe latest) that you want to check > more actions > show pull command > then copy that command ex: docker pull gcr.io/..
From gcloud console header > select activate cloud shell
At cloud shell terminal, pull docker images of your latest build by running "pull command" that you copied before.
Start your container from this image to see what exactly happens with your run revision

Code compiles in VSCode but not on ubuntu server

I'm new to deploying an app, as this is the first time I've done it. I'm trying to deploy my mern app to an aws ec2 instance with the intention to use mongodb atlas, I'm using a ubuntu 20.04 server.
I'm following this guide https://keithweaverca.medium.com/setting-up-mern-stack-on-aws-ec2-6dc599be4737 and I've got to part after I've pulled my github repo to the ubuntu server, everything is working up to yet, I skipped the mongodb section of the guide, as I have already created a mongodb cluster.
I'm not sure what to do now, my repo folder is split like this...
- frontend
- build
- public
- src
- Components
- images
... other files in src
- package.json
- backend
- server.js
- models
- routes
- package.json
... a few other irrelevant files (node_modules, etc.)
Although the guide doesn't say to, don't I need to run 'npm run build' in the frontend directory? after I've ran 'npm install'?
If so, my code isn't compiling and I'm not sure why, it says there is a memory leak, and javascript overload.
I know this is a lot of questions, without much detail, but I don't even understand this well enough to give more info. Any questions please ask. I just need to know what commands to run after I've pulled my code from the github repo.

GCR Cloud Run says "Image [name] not found"

I'm trying to take my first baby steps with podman (instead of Docker) and Google Cloud Run. I've managed to build an image with a gcr.io tag and push it to Google. I then create a new service, and I can select the image in the "Select Image URL" pop-up dialog. But then the service fails to start, saying "Image [full name] not found".
I can't find anything on Google's support pages, or anywhere else. I can pull the image, I can push new versions, and they appear on the pop-up dialog. But the service still reports that they can't be found.
What am I doing wrong?
Edit in answer to DazWilkin's questions below:
Can you run the podman-created container locally using Docker?
I can't run Docker locally because it is not compatible with Fedora 31 (hence podman). But I can run it locally using podman run
Can you deploy a Docker-created container in Cloud Run?
As above: F31. However podman is supposed to be a drop-in replacement.
Is the container registry in the same project as Cloud Run?
Yes. I did have a problem with that, but I got a permissions message rather than "not found".
Have you tried deploying via gcloud rather than the console?
Yes.
$ podman push eu.gcr.io/my-project/hs-hello-world
Getting image source signatures
Copying blob c7f3d2e0289b done
Copying blob def7032cea8e done
Copying config f1c2e2615f done
Writing manifest to image destination
Storing signatures
$ gcloud run deploy --image eu.gcr.io/my-project/hs-hello-world --platform managed
Service name (hs-hello-world):
Deploying container to Cloud Run service [hs-hello-world] in project [my-project] region [europe-west1]
X Deploying... Image 'eu.gcr.io/my-project/hs-hello-world' not found.
X Creating Revision... Image 'eu.gcr.io/my-project/hs-hello-world' not found.
. Routing traffic...
Deployment failed
ERROR: (gcloud.run.deploy) Image 'eu.gcr.io/my-project/hs-hello-world' not found.
When I used a Google-built container it worked fine.
Update: 5 March 2020
In the end I just carried on with the Google build service, and it works fine. My initial wish for local builds was in large part because a build on Google was taking over half an hour (lots of Haskell libraries to import), but now I've figured out how to use staged builds and multi-processor VMs to avoid this. I appreciate the efforts of those who have tried to help, but right now it's not broke so I'm not going to try to fix it.
I had the same issue: it seems Cloud Run is picky about the kind of manifest it can pull.
By building my images with --format docker and pushing them with --remove-signatures (inspired by this issue), podman will create and push docker-style manifests to the Container Registry and everything ran smoothly!
Too bad I spent a lot of time thinking it was a lack of permissions problem
I had the same error. My issue was that I was using the docker/setup-buildx-action in a GitHub action. When this was removed, Cloud Run was happy with the resulting manifest / container image.
Thanks to #André-Breda for providing the direction.
I've been having the same issue today. I'm using buildah to create the new image. I realized that the image I used successfully yesterday was built as root. So I built the new one as root and pushed it successfully.
Wish I knew why. The images built as my username ran fine locally with rootless podman.

Error creating template PredictionIO

I've created a lot of templates before as by now I was creating the Recommendation following the suggested steps.
$ pio template get PredictionIO/template-scala-parallel-recommendation Foo
Getting this error:
[ERROR] [Template$] Either PredictionIO/template-scala-parallel-universal-recommendation is not a valid GitHub repository, or it does not have any tag. Aborting.
How I fix this and why is this happening?
EDIT:
My Prediction version 0.9.5. Using Ubuntu
It seems that happens when you have made a pio deploy of another template before pio template get, so you have to shutdown the eventserver default port 7070 as:
$ lsof -wni tcp:7070
$ kill -9 PID
This solved the problem.
I had this issue but this google group post had my solution. Basically pio template get is cloning a repository under the covers, so it can have git-related issues.
Check to see if you can access https://api.github.com/ from your web browser. If not, check the google group post.
Also there is no need to do pio template get, just clone it from github. The Universal Recommender is kept up-to-date in its home repo here: https://github.com/actionml/template-scala-parallel-universal-recommendation/tree/v0.3.0
Notice v0.3.0 is nearing release but is not in the template gallery yet.

Fabfile with support for sqlalchemy-migrate deployments?

I have database migrations (with sqlalchemy-migrate) working well in my dev environment. However, I'm a little stumped about how to integrate this into my deployment process.
I'd like to use fabric to execute the manage.py file on the remote server but I'm not sure what to use for the repository value in this file. Referring to both 'appname/migrations' and '/usr/local/pylons/appname/env/lib/python2.6/site-packages/appname-05.egg/appname/migrations/'
both fail with a migrate.versioning.exceptions.InvalidRepositoryError
Does anyone have a fabfile and manage.py that plays nicely with sqlalchemy-migrate?
What I did was to generate a manage.py file per the sqlalchemy-migrations docs. In there I hacked it up to load our config information which includes the db auth info. In our case it's a Pylons app so it reads the proper Pylons config.ini file.
http://readthedocs.org/docs/sqlalchemy-migrate/en/latest/versioning.html#project-management-script
Then the fabric commands all interact with the manage.py file vs using the Python API directly. Since everything, from the SA-Migrate manage.py through the app itself I don't run into any sort of path issues like you mention.
Not sure this is a 'exact' fix but maybe helps.