Liferay Cloud IDE, Multiple developpers working on same liferay server - ide

We want to start working with liferay. But the server is too heavy and the developpers computer don't have enought RAM. We want to centralize the server instance.
In other words, we want to build a development server where all developpers can connect and directly develop in their web browser, compile, view the result and push the code to git repository.
I found some good cloud IDE like eclipse CHE and a good maven archetype for liferay projet. So i can build the projet with maven. But now i want to know if it is possible to configure Liferay like every developpers can work without troubling another. And if possible, How ?
The developpers can share the same database and can use different port. Maybe, the server can generate tempory URL like some online cloud editor.
I found this post Liferay With Multiple Server Instances, but i don't think is the best way because he create one server per project. I think is too heavy.
If necessary, We have kubernetes in our IS.

Liferay's tomcat bundle, by default, is configured to take a maximum of 2.5G for the process, but it can run with far less - the default only recently was bumped up, because many people never change the default and then wonder why production systems run out of memory. For 1 concurrent user (the sole developer) on a machine, I guess that the previous default of 1G heap space is enough. Are you saying that that's too much for your developers' machines?
Having many developers on a shared server poses one problem: Yes, you may deploy different code from different machines, but: How about setting a breakpoint? Can you connect with multiple debuggers? If something fails, how do you know whos recent deployment caused the failure?
Sharing a server is an integration technique, not a development technique. If your developers don't have enough memory available for running their own Liferay server next to their IDE, it's a lot cheaper to upgrade their machines than to slow them down when everybody is accessing the same server and they can't properly debug. You pay the memory once, but your waiting developers by the hour.
Is it possible to share one server? Sure it is.
Is it possible to share one server without troubling each other? I doubt.
When you say: You think it's too heavy: What are you basing that assumption on? What does the actual developer machine look like and what keeps you from investing in the extra memory?
It's trivial to share some infrastructure - i.e. have all of them connect to the same database server (and give everyone their own schema). But just the extra effort and setup might require you to pay the developers by the hour as much as you'd otherwise pay for a couple of memory chips.
And yet another option is: Run Liferay on a remote server, but keep 1 instance per developer. This way you don't need the local memory, but can have the memory in the cloud. Calculate if you pay more for remote cloud machines than for local memory - that decision is up to you.

Related

To virtualize or not to virtualize a bare metal server for a kubernetes deployment

I'd like to deploy kubernetes on a large physical server (24 cores) and I'm uncertain as to a number of things.
What are the pros and cons of creating virtual machines for the k8s cluster other than running on bare-metal.
I have the following considerations:
Creating vms will allow for work load isolation. New vms for experiments can be created and assigned to devs.
On the other hand, with k8s running on bare metal a new NAMESPACE can be created for each developer for experimentation and they can run their code in it. After all their code should be running in docker containers.
Security:
Having vms would limit the amount of access given to future maintainers, limiting the amount of damage that could be done. While on the other hand the primary task for any future maintainers would be adding/deleting nodes and they would require bare metal access to do that.
Authentication:
At the moment devs would only touch the server when their code runs through the CI pipeline and their running deployments are deployed. But what about viewing logs? Could we setup tiered kubectl authentication to allow devs to only access whatever namespaces have been assigned to them (I believe this should be possible with the k8s namespace authorization plugin).
A number of vms already exist on the server. Would this be an issue?
128 cores and doubts.... That is a lot of cores for a single server.
For kubernetes however this is not relevant:
Kubernetes can use different sized servers and utilize them to the maximum. However if you combine the master server processes and the node/worker processes on a single server, you might create unwanted resource issues. You can manage those with namespaces, as you already mention.
What we do is use continuous integration with namespaces in a single dev/qa kubernetes environment in which changes have their own namespace (So we run many many namespaces) and run full environment deployments in those namespaces. A bunch of shell scripts are used to manage this. This works both with a large server as what you have, as well as it does with smaller (or virtual) boxes. The benefit of virtualization for you could mainly be in splitting the large box in smaller ones so that you can also use it for other purposes then just kubernetes (yes, kubernetes runs except MS Windows, no desktops, no kernel modules for VPN purposes, etc).
I would separate dev and prod in the form of different vms. I once had a webapp inside docker which used too many threads so the docker daemon on the host crashed. It was limited to one host luckily. You can protect this by setting limits, but it's a risk: one mistake in dev could bring down prod as well.
I think the answer is "it depends!" which is not really an answer. Personally, I would split up the machine using VM's and deploy that way. You've got better flexibility as to how much of the server's resources you carve out and you can easily create new environments, then destroy easily.
Even if these vms are really big, I think it's still easier to manage also given that you have existing vm's on the machine.
That said, there's not a technical reason that you can't run a single node server, but you may run into problems with downtime with upgrades (if that's an issue), as well as if that server needs patched or rebooted, then your entire cluster is down.
I would look at your environment needs for HA and uptime, as well as how you are going to deploy VM's (if you go that route), and decide what works the best for you.

Repository, live site, all in one same server

Honestly, I don't really know how to begin.
I have a live site in a VPS. My development flow is usually making changes on my local machine, then pushes to live via capistrano. I use git, but I don't really know the setup (as it was done by a friend). So I am not sure my git repo is local, or in the server.
Now I wanna do something more manageable. I want to use Redmine to track my development. Having said this, I would like to host my repo in the same server as my live server. This can give easy access to the other remote developers. Is it a good idea to host this repo in a same server?
Also, in future, I will need to have a unit test and functional test server. I reckon this should be separated from the live server right?
What is a good arrangement? Of course I am pretty tight with budget, and I don't wanna buy my own physical server.
Thanks.
I've hosted dev and live versions in the same VPS, e.g. dev.site.com. I usually make it basic auth to give at least a little privacy into its development. But if your source repository is also on the same VPS, then you need to have a standard backup process that gives you an off-VPS copy. You definitely don't want all your eggs in one basket.
For multi-developer use, you just need a repo that everyone can access. The dev instance is better split to the developer machines, plus a regular build cycle for dev version that includes everyone's changes. That would be your test/QA server. Unit tests can just be a local version.
Does that help? Not sure if this answer is as technical as you want.

Sandbox a java applet

I heard that minecraft server is very leaky, can consume a lot of resources very quickly. People say to use a virtual machine, all well and good. I'm making an application to automate server setup, and I'd like my whole application (including minecraft) to run in an ultra basic auto setup vm (or something similar). I've heard of mineos, but I'm not sure if that can be set up very quickly. The vm will be so basic it won't even have a ui. I'm using a Mac, not planning to distribute the server WITH the application but have it download from the minecraft server, not modified.
I want it to be like a one-click-done solution for the end user, they don't have to worry about minecraft server gobbling up resources because it's be in a controllable virtual machine.
Distrubuting minecraft server (Notch's property) could be an issue, but if anyone knows about that if be happy to hear.
If you intend for a server to be fully configured and only for your user to only have to download and 'open' it, what you're seeking is known as an 'appliance'. Virtualbox supports the open-standard of such appliances, allowing a single file to be distributed and it contains all the virtualized hardware info as well as the OS/filesystem. A number of other formats exist, such as Turnkey.
In all likelihood, I would find MineOS CRUX to be perfectly suited for this sort of one-click-done, since the OS was designed for pretty much exactly what you're trying to do...only without the configure-the-hardware-for-the-user (it uses an ISO and an installer, the process you would automate for the end-user).
That said, this distribution has never at any point packaged Minecraft files, as clearly stated: "this Linux distro does not contain ANY Minecraft files. The scripts are, however, designed to download/update files directly from the source: http://minecraft.net"
Hope this answers all the concerns, despite being an old thread.

Questions About Using Amazon Web Services (AWS) For Remote Development

We are a very small mobile company (building an application for the iphone) and we are currently considering hosting services. We are currently leaning towards Amazon's hosting/web services. Accordingly, I have some questions:
1) Can I create an admin account on AWS and assign user accounts to developers that should have access to most (but not all) features.
2) Do we need to learn / use AWS APIs in the development of our product? I don't like the
idea of having to create hooks into a hosting service.
3) It looks like the pricing for AWS scales with usage. So, since we are in development and have only developers accessing the server right now, am I right that the cost will be quite low if anything?
4) How does AWS do version management? We have several developers scattered throughout the country. Each will need to checkout the the recent build from the server for development
on his local box. Basically, something like SVN. Is this possible?
5) I am guessing we need something like a dev, svn, and production server? Is this right? If so, how do I set this up and find out the associated costs?
6) We are considering a few database options, among them NoSQL and Neo4j - will we be able to do this using AWS? The server language will be Java.
Thanks for your time.
To answer your questions:
Yes, kind of. There is Identity and Access Management offered by AWS, but it's not the easiest solution to use. Having said that, it can allow you to lock down some of the access activities on an account so that you have some control over your users. I would say that AWS is still very much a single-user environment for server administrators.
You could get away using only the management console. Your use of scripting may only be required if you want to run batch or periodic activities (eg. take a snapshot of all machines at 2am every night).
Costs for EC2 are low, especially for the Micro machine sizes. But keep in mind that the idea of cloud computing is the availability of on-demand resources for short term use. If you run dev machines needlessly over night then you will still be paying! And if someone launches an Extra Large machine (or 30 machine instances) then you will suddenly find yourself with bigger bills than expected.
(5. and 6. as well) Amazon EC2 is really about issuing you the boxes. What you do thereafter is fully up to you. You can create snapshots daily of your machines, you can deploy SVN and noSQL etc. etc.
I've been seriously into EC2 for a while now, and lots of companies are starting to look at the idea you propose. There are benefits to giving staff on-demand compute power, without having to manage any infrastructure in-house. But I will re-iterate my first point that EC2 is very much a single-user, server administration environment, which doesn't lend itself to being used as a dev playground without additional tools. (Or at least it becomes a challenging task if you have several devs spread around in your company).
I own a business that helps companies use EC2 for dev/lab/playground type of environments. I won't directly flog it here, but will show a quick demo we just put on DropBox: http://dl.dropbox.com/u/16347737/RequestEC2Machines.html Feel free to request a machine to see how adding process to EC2 can help meet your goals.
I run/develop a website using Amazon EC2 & SimpleDB and I have some comments for you on your questions
Hi.
We are a very small mobile company (building an application for the iphone) and we are currently considering hosting services. We are currently leaning towards Amazon's hosting/web services. Accordingly, I have some questions:
1) Can I create an admin account on
AWS and assign user accounts to
developers that should have access to
most (but not all) features.
In my experience, there doesn't seem to be a direct correspondence between Amazon users and users on a single instance. An instance's root account is connected to the amazon account indirectly through a key pair. Although, I must say that I haven't explored this question in detail.
2) Do we need to learn / use AWS APIs in the development of our product? I don't like the > idea of having to create hooks into a hosting service.
I manage everything through their web console and Eclipse IDE plugins. I've never had to touch the API yet for development and deployment.
3) It looks like the pricing for AWS scales with usage. So, since we are in
development and have only developers accessing the server right now, am
I right that the cost will be quite low if anything?
Micro instances cost the lowest and the cost is pretty good if you're just starting an instance for a couple of hours and then stopping it. I never think twice about starting a micro instance to try out something new
4) How does AWS do version management? We have several developers
scattered throughout the country. Each will need to checkout the the recent
build from the server for development on his local box. Basically, something like SVN.
Is this possible?
I haven't seen this feature being offered directly by Amazon. You can of course keep an instance always on for your repository with backups
5) I am guessing we need something like a dev, svn, and production server?
Is this right? If so, how do I set this up and find out the associated costs?
EC Pricing - http://aws.amazon.com/ec2/pricing/
Amazon Simple Monthly Calculator - http://calculator.s3.amazonaws.com/calc5.html
6) We are considering a few database options, among them NoSQL and Neo4j -
will we be able to do this using AWS? The server language will be Java.
Amazon instances can be what you want them to be, hence you can either use a pre-configured ami to launch an instance or start off with a bare bones Ubuntu Server or Windows Server e.g. and build a system with what you want. You can then save the snapshot of that system to launch more in the future or to re-launch if your instance crashes

Stress testing a server and VPS's vs. Dedicated servers

We used to have a dedicated server (1&1) and very infrequently ran into problems with the server having issues.
Recently, we migrated to a VPS (Wiredtree.com) with similar specs to our old dedicated server, but notice frequent problems running out of memory, mysql having to restart, etc... both when knowingly running intensive scrips and also just randomly during normal use.
Because of this, we're considering migrating to another at VPS - this time at Slicehost to see if it performs better.
My question is two fold...
Are their straightforward ways we could stress test a VPS at Slicehost to see if the same issues occur without having to actually migrate everything over?
Also, is it possible that the issues we're facing aren't just because of the provider (Wiredtree) but just the difference between a dedicated box and VPS (despite having similar specs)?
The best way to stress test an environment is to put it under load. If this VPS is hosting a web application, use one of the many available web server benchmark tools: ab, httperf, Siege or http_load. You don't necessarily care that much about the statistics from the tool itself, but more that it puts a predictable load on the server so that you can tune Apache to handle it, or at least not crash and burn.
The one problem you have with testing against Slicehost is that you are at the mercy of the Internet and your bandwidth to Slicehost. You may not be able to put enough load on the server to reach a meaningful conclusion.
Instead, you might find it just as valuable to run one of the many virtualization products on the market and set up a VM with comparable specs to the VPS plan you're considering. Local testing over your LAN will allow you to put a higher and more predictable load on the server.
In either case, you don't need to migrate everything, but you will need to set up an environment for your application to run in, with representative data in your database.
A VPS with similar specs to a dedicated server should perform approximately the same, but in order to get good performance, you still need to tune Apache, MySQL and any other long-lived server processes. In my experience, the out-of-the-box configuration of Apache in many Linux distributions is not ideal and will allow far too many child processes, overcommitting memory and sending the server into a swap-death spiral.