Nanocloud relies on Docker containers to run its stack.
docker-compose build
docker-compose up
Some configuration variable are expected to be set in
config/env/development.js
but you can also create the file config/local.js
to avoid commiting those changes
- iaas (mandatory) currently only "manual", "qemu" and "aws" are implemented
- host (mandatory, defaults to localhost) nanocloud's host
- photon (defaults to false) activate Photon as default streaming engine (experimental feature, AWS only)
- expirationDate (Defaults to 0 (deactivated)) number of days a user account should remain active
- autoRegister (Defaults to false) user can signup to the platform
- autoLogoff (Defaults to false) VDI sessions are signed off automatically
- defaultGroup (Defaults to empty string (no default group)) id of the group users should be attached to automatically
- machinePoolSize (Defaults to 1) the number of machine to provision in advance ready to accept users
- instancesSize (Defaults to 'medium') currently only "small", "medium", "large", "veryLarge" are implemented
- machinesName (Defaults to 'Nanocloud Exec Server') default name for machines
- plazaURI (Defaults to https://s3-eu-west-1.amazonaws.com/nanocloud/plaza/1.0.1/windows/amd64/plaza.exe) URL to download plaza from
- plazaPort (Defaults to 9090) port to communicate with plaza
- neverTerminateMachine (Defaults to false) if set to true, machines are never destroyed, users always keep the same machine at all time.
- smtpServerHost host to send email
- smtpServerPort (defaults to 25) port for the SMTP server
- smtpLogin login for the SMTP server
- smtpPassword password for the SMTP server
- smtpSendFrom (defaults to mail@nanocloud.com) nanocloud's sender
- title (defaults to Nanocloud) page title
- favIconPath (defaults to favicon.ico) relative path from
assets/dist
- logoPath (defaults to
/assets/images/logo.png
) relative path fromassets/dist
(URL works) - primaryColor (defaults to #006CB6) primary color to use
- machines (array) Array of machine object to statically insert in the database
Machines objects contains several pieces of information, here's an example:
machines: [
{
name: 'Machine1',
type: 'manual',
ip: '1.2.3.4',
username: 'Administrator',
password: 'secr3t'
}, {
name: 'Machine2',
type: 'manual',
ip: '5.6.7.8',
username: 'Administrator',
password: 's3cret'
}
]
You can use config.env to set this variable too:
MACHINES=[{"name": "My Machine", "type": "manual", "ip": "1.2.3.4", "username": "Administrator", "password": "s3cr3t", "plazaport": 9090, "rdpPort": 3389 }]
- awsRegion region where machines will spawn
- awsAccessKeyId AWS key id
- awsSecretAccessKey AWS private key
- awsKeyName private key name
- awsPrivateKey (Defaults to /opt/back/id_rsa) path to where the key will be stored
- awsImage Nanocloud's execution servers default image
- awsMachineUsername (Defaults to Administrator) administrator account on the machine
- awsMachinePassword (Defaults to empty string, will be generated if possible) administrator password on the machine
- awsMachineSubnet (Defaults to empty string, automatic subnet) subnet to assign to the machine
- awsDiskSize (Defaults to 0, automatic size) root disk size in GB
- creditLimit (Defaults empty string) set a credit limit to users (aws only)
- openstackUsername username to connect to openstack
- openstackPassword password to connect to openstack
- openstackAuthUrl url of the openstack's API (example: https://identity.example.com:5000)
- openstackRegion (Defaults to 'RegionOne') region name to use on openstack
- openstackImage if of the image to boot Windows execution servers from
- openstackFlavor (defaults to m1.medium) flavor for the virtual machine
- openstackSecurityGroups (Defaults to ['default']) array of security groups to apply to the instance
- openstackMachineUsername (Defaults to Administrator) windows account username
- openstackMachinePassword (Defaults empty, password will generated) windows account password
- qemuServiceURL (Default to localhost) url of qemu manager service
- qemuServicePort (Default to 3000) port of qemu manager service
- qemuMachineUsername (Defaults to Administrator) windows account username
- qemuMachinePassword (Defaults empty) windows account password
Qemu use 10.0.2.2 to contact host, you should replace default 'localhost' by this ip to be able to use storage.
- storageAddress (mandatory, defaults to 'localhost') storage service's IP
- storagePort (mandatory, defaults to 9090) storage service's port
- uploadLimit (defaults 0 (deactivate)) upload limit, in MB, for each user
Once loaded, Nanocloud will be accessible on localhost.
- ldapActivated (defaults to false) if true activates LDAP features
- ldapUrl (defaults to 'ldap://localhost:389')
- ldapBaseDn (defaults to empty string)
- ldapDomain (defaults to empty string)
- ldapDns (defaults to empty string)
- ldapConnectLogin (defaults to empty string) login to connect virtual machine to ldap controller
- ldapConnectPassword (defaults to empty string) password to connect virtual machine to ldap controller
- ldapGroup (default to empty string) ldap user group authorized to connect to machine
- defaultGroupLdap (defaults to empty string (no default group)) id of the group users should be attached to automatically
- ldapUsersPerMachine (defaults to 1 number) maximum number of users for one machine
You can use RDP options detailed on Guacamole documentation. Use config variables with 'rdp' prefix and option name in camel case.
All options are Guacamole defaults except the following:
- rdpSecurity (Nanocloud defaults to nla)
- rdpIgnoreCert (Nanocloud defaults to true)
- rdpWidth (Nanocloud defaults to 0 (automatic))
- rdpHeight (Nanocloud defaults to 0 (automatic))
- rdpDpi (Nanocloud defaults to 0 (automatic))
- rdpEnablePrinting (Nanocloud defaults to true)
- rdpPreconnectionID (Nanocloud defaults to 0 (desactivated))
- rdpEnableWallpaper (Nanocloud defaults to true)
- rdpEnableFontSmoothing (Nanocloud defaults to true)
Nanocloud also relies on Docker to run its development stack:
docker-compose build
docker-compose -f docker-compose-dev.yml build
docker-compose -f docker-compose-dev.yml up
Backend and frontend containers are automatically updated when source code changes in dev mode. All services are accessible on localhost.
There are 2 optional services described in docker-compose-extra.yml
:
- team-storage : Another storage container to provide team feature
- qemumanager : This is a service aiming to simulate a IaaS on a developer's machine. This is not production ready.
To launch those services, run:
docker-compose -f docker-compose-extra.yml build
docker-compose -f docker-compose-extra.yml up
To run all tests:
make tests
This will run all tests defined in ./tests/test-all.sh
.
To run test coverage:
make test-coverage
This will run api and unit tests, with code coverage
Alternativelly, tests can be run individually:
make test-api
to test the APImake test-units
to run unit testsmake test-linter
to analyse code for errors and warningsmake test-licenses
to check for licenses headers
Some environment variables can be set to customize tests:
- testMail (boolean, defaults to false) load stub email transporter for testing purpose
- dummyBootingState (boolean, defaults to false) force machine to stay in booting state for a moment
API tests expects a postgres database up and running on localhost Some tests may require storage and frontend to be up as well
This file is part of Nanocloud.
Nanocloud is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Nanocloud is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/.