|
|
Line 2: |
Line 2: |
|
| |
|
| Juju can deploy to LXC <ref>See also: [[Docker]]</ref> (for local environments), OpenStack (for HP Cloud), Windows Azure, Joyent or Amazon EC2 | | Juju can deploy to LXC <ref>See also: [[Docker]]</ref> (for local environments), OpenStack (for HP Cloud), Windows Azure, Joyent or Amazon EC2 |
|
| |
| Kapil Thangavelu wrote [https://github.com/kapilt/juju-digitalocean JuDo] - A juju provider for [[Digital Ocean]] using a client side plugin and manual provisioning.
| |
|
| |
|
| == Links == | | == Links == |
| # https://jujucharms.com/get-started | | # https://juju.is/ |
| # https://jujucharms.com/docs/1.20/config-manual | | # https://juju.is/docs/juju/tutorial |
| # https://jujucharms.com/docs/1.20/config-aws
| | # https://charmhub.io/ |
| # https://jujucharms.com/docs/1.20/config-digitalocean
| |
| # https://jujucharms.com/docs/1.20/config-vagrant
| |
| | |
| == TLDR ==
| |
| <source lang="bash">
| |
| sudo add-apt-repository ppa:juju/stable
| |
| sudo apt-get update
| |
| | |
| sudo apt-get install juju-quickstart
| |
| sudo apt-get install juju-core
| |
| # to just show existing/default
| |
| # juju generate-config --show
| |
| juju generate-config
| |
| # edit .juju/environments.yaml to add your AWS KEYS
| |
| juju bootstrap
| |
| juju status
| |
| # assuming it shows a single machine numbered '0'
| |
| juju deploy apache2 --to 0
| |
| juju deploy mediawiki --to 0
| |
| # in our test, this deployed cs:trusty/mediawiki-3
| |
| juju deploy mysql --to 0
| |
| juju add-relation mediawiki:db mysql
| |
| juju expose apache2
| |
| juju expose mediawiki
| |
| juju status
| |
| juju ssh 0
| |
| </source>
| |
| | |
| You'll end up with an address like this <ref>
| |
| When setting up a service on EC2, make sure to obtain and assign an "elastic IP" so that the instance has a static IP. Otherwise every shutdown will result in a different public IP address being assigned to the instance.
| |
| </ref>
| |
| http://52.5.215.128/mediawiki/index.php/Special:Version
| |
| with
| |
| * Ubuntu 14.04.2 LTS (Trusty Tahr)
| |
| * Apache 2.4.7 (Ubuntu) (with MaxRequestWorkers at 2048 which would require 32 servers while servers is set at 16 = sloppy)
| |
| * MediaWiki <code>1.19.14+dfsg-1</code> installed with no extensions, and no git
| |
| * PHP 5.5.9-1ubuntu4.7 (apache2handler)
| |
| * MySQL 5.5.41-0ubuntu0.14.04.1-log
| |
| | |
| | |
| | |
| You can see what keys were added to the machine
| |
| <code>juju authorised-keys list</code>
| |
| and verify the key fingerprint for the key you want to use
| |
| <code>ssh-keygen -lf /home/user/.ssh/id_rsa</code>
| |
| | |
| but you have to know/guess what user was installed by your charm
| |
| | |
| <code>ssh -i /home/user/.ssh/id_rsa -o IdentitiesOnly=true -vvv ubuntu@ec2-55-5-555-55.compute-1.amazonaws.com</code>
| |
| | |
| The above 'recipe' installs [https://jujucharms.com/mediawiki/trusty/3 this MediaWiki charm] which has been deployed 813 times as of this writing. BFD. It didn't work for me (I had to add [https://jujucharms.com/apache2/trusty/13/ Apache]). Although this charm invokes a2enconf, I don't see any code which installs or verifies Apache2 as a dependency in the [http://bazaar.launchpad.net/~charmers/charms/trusty/mediawiki/trunk/view/head:/hooks/install install hook]. So, yeah, garbage. They should read the docs about [https://jujucharms.com/docs/1.20/authors-charm-writing how to write a charm]. The example explicitly installs, configures and starts Apache as part of a simple web service. But the documentation is very sparse. The only "interface" (a primary element of orchestration) that is documented is 'mysql' and even that is barely covered.
| |
| | |
| | |
| [https://jujucharms.com/wordpress/trusty/2 The Wordpress charm] is [http://bazaar.launchpad.net/~charmers/charms/trusty/wordpress/trunk/files written better] because it works, and actually offers a simple switch between nginx and Apache. Although it's a bit more 'polished' the WordPress Charm is still [http://bazaar.launchpad.net/~charmers/charms/trusty/wordpress/trunk/view/head:/inc/common a bunch of bash scripts] that end up installing things all over the place (standard locations?). It installs [http://php-fpm.org/ php-fpm] (FastCGI Process Manager, which is an alternative PHP FastCGI implementation) It does use git, but is it configurable as to who/what/where you can pull from? I figured out that for the Wordpress charm, you can see the 'components' in the [http://bazaar.launchpad.net/~charmers/charms/trusty/wordpress/trunk/files/head:/files/charm/ 'charm' directory].
| |
| | |
| In general, I'm '''very''' unimpressed with the implementation of the Charm Store. The underlying technology doesn't seem fully baked either, but I profess that I didn't look into it much.
| |
| | |
| | |
| == Help ==
| |
| <source lang="bash">
| |
| juju help | |
| </source>
| |
| <pre>
| |
| | |
| Juju -- devops distilled
| |
| https://juju.ubuntu.com/ | |
| | |
| Juju provides easy, intelligent service orchestration on top of environments
| |
| such as Amazon EC2, HP Cloud, OpenStack, MaaS, or your own local machine.
| |
| | |
| Basic commands:
| |
| juju init generate boilerplate configuration for juju environments
| |
| juju bootstrap start up an environment from scratch
| |
| | |
| juju deploy deploy a new service
| |
| juju add-relation add a relation between two services
| |
| juju expose expose a service
| |
| | |
| juju help bootstrap more help on e.g. bootstrap command
| |
| juju help commands list all commands
| |
| juju help glossary glossary of terms
| |
| juju help topics list all help topics
| |
| | |
| Provider information:
| |
| juju help azure-provider use on Windows Azure
| |
| juju help ec2-provider use on Amazon EC2
| |
| juju help hpcloud-provider use on HP Cloud
| |
| juju help local-provider use on this computer
| |
| juju help openstack-provider use on OpenStack
| |
| </pre>
| |
| | |
| === Commands ===
| |
| <source lang="bash">
| |
| juju help commands
| |
| </source>
| |
| <pre>
| |
| add-machine alias for 'machine add'
| |
| add-relation add a relation between two services
| |
| add-unit add one or more units of an already-deployed service
| |
| api-endpoints print the API server address(es)
| |
| api-info print the field values used to connect to the environment's API servers
| |
| authorised-keys alias for 'authorized-keys'
| |
| authorized-keys manage authorized ssh keys
| |
| backups create, manage, and restore backups of juju's state
| |
| block block an operation that would alter a running environment
| |
| bootstrap start up an environment from scratch
| |
| cached-images manage cached os images
| |
| debug-hooks launch a tmux session to debug a hook
| |
| debug-log display the consolidated log file
| |
| deploy deploy a new service
| |
| destroy-environment terminate all machines and other associated resources for an environment
| |
| destroy-machine alias for 'machine remove'
| |
| destroy-relation alias for 'remove-relation'
| |
| destroy-service alias for 'remove-service'
| |
| destroy-unit alias for 'remove-unit'
| |
| ensure-availability ensure the availability of Juju state servers
| |
| env alias for 'switch'
| |
| environment manage environments
| |
| expose expose a service
| |
| generate-config alias for 'init'
| |
| get get service configuration options
| |
| get-constraints view constraints on the environment or a service
| |
| get-env alias for 'environment get'
| |
| get-environment alias for 'environment get'
| |
| help show help on a command or other topic
| |
| help-tool show help on a juju charm tool
| |
| init generate boilerplate configuration for juju environments
| |
| machine manage machines
| |
| publish publish charm to the store
| |
| remove-machine alias for 'machine remove'
| |
| remove-relation remove a relation between two services
| |
| remove-service remove a service from the environment
| |
| remove-unit remove service units from the environment
| |
| resolved marks unit errors resolved
| |
| retry-provisioning retries provisioning for failed machines
| |
| run run the commands on the remote targets specified
| |
| scp launch a scp command to copy files to/from remote machine(s)
| |
| set set service config options
| |
| set-constraints set constraints on the environment or a service
| |
| set-env alias for 'environment set'
| |
| set-environment alias for 'environment set'
| |
| ssh launch an ssh shell on a given unit or machine
| |
| stat alias for 'status'
| |
| status output status information about an environment
| |
| switch show or change the default juju environment name
| |
| sync-tools copy tools from the official tool store into a local environment
| |
| terminate-machine alias for 'machine remove'
| |
| unblock unblock an operation that would alter a running environment
| |
| unexpose unexpose a service
| |
| unset set service config options back to their default
| |
| unset-env alias for 'environment unset'
| |
| unset-environment alias for 'environment unset'
| |
| upgrade-charm upgrade a service's charm
| |
| upgrade-juju upgrade the tools in a juju environment
| |
| user manage user accounts and access control
| |
| version print the current version
| |
| </pre>
| |
| | |
| | |
| Setting up a MediaWiki instance with Juju, using the https://jujucharms.com/mediawiki/trusty/3 charm was completely unacceptable. The charm doesn't even setup a web server environment at all so it doesn't work "out of the box". When I specified an Apache2 charm https://jujucharms.com/apache2/trusty/13/ the configuration has a miscompiled PHP and also conflicting configurations (ServerLimit, MaxRequestWorkers) that causes errors in the log.
| |
|
| |
|
| <pre>
| |
| root@ip-172-31-57-182:~# /usr/sbin/apache2 -S
| |
| [Thu Apr 09 13:42:06.748287 2015] [core:warn] [pid 2247] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
| |
| [Thu Apr 09 13:42:06.748800 2015] [core:warn] [pid 2247] AH00111: Config variable ${APACHE_PID_FILE} is not defined
| |
| [Thu Apr 09 13:42:06.749138 2015] [core:warn] [pid 2247] AH00111: Config variable ${APACHE_RUN_USER} is not defined
| |
| [Thu Apr 09 13:42:06.749457 2015] [core:warn] [pid 2247] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
| |
| [Thu Apr 09 13:42:06.749808 2015] [core:warn] [pid 2247] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
| |
| [Thu Apr 09 13:42:06.786167 2015] [:crit] [pid 2247:tid 139742374446976] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
| |
| AH00013: Pre-configuration failed
| |
| root@ip-172-31-57-182:~# /usr/sbin/apache2 -M
| |
| [Thu Apr 09 13:42:19.687521 2015] [core:warn] [pid 2248] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
| |
| [Thu Apr 09 13:42:19.688010 2015] [core:warn] [pid 2248] AH00111: Config variable ${APACHE_PID_FILE} is not defined
| |
| [Thu Apr 09 13:42:19.688345 2015] [core:warn] [pid 2248] AH00111: Config variable ${APACHE_RUN_USER} is not defined
| |
| [Thu Apr 09 13:42:19.688604 2015] [core:warn] [pid 2248] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
| |
| [Thu Apr 09 13:42:19.688886 2015] [core:warn] [pid 2248] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
| |
| [Thu Apr 09 13:42:19.700934 2015] [:crit] [pid 2248:tid 140047498663808] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
| |
| AH00013: Pre-configuration failed
| |
| </pre>
| |
|
| |
|
| {{References}} | | {{References}} |