Statistics
| Branch: | Tag: | Revision:

root / docs / quick-install-admin-guide.rst @ 0c40b4ac

History | View | Annotate | Download (29.9 kB)

1
.. _quick-install-admin-guide:
2

    
3
Administrator's Quick Installation Guide
4
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5

    
6
This is the Administrator's quick installation guide.
7

    
8
It describes how to install the whole synnefo stack on two (2) physical nodes,
9
with minimum configuration. It installs synnefo from Debian packages, and
10
assumes the nodes run Debian Squeeze. After successful installation, you will
11
have the following services running:
12

    
13
 * Identity Management (Astakos)
14
 * Object Storage Service (Pithos+)
15
 * Compute Service (Cyclades)
16
 * Image Registry Service (Plankton)
17

    
18
and a single unified Web UI to manage them all.
19

    
20
The Volume Storage Service (Archipelago) and the Billing Service (Aquarium) are
21
not released yet.
22

    
23
If you just want to install the Object Storage Service (Pithos+), follow the guide
24
and just stop after the "Testing of Pithos+" section.
25

    
26

    
27
Installation of Synnefo / Introduction
28
======================================
29

    
30
We will install the services with the above list's order. Cyclades and Plankton
31
will be installed in a single step (at the end), because at the moment they are
32
contained in the same software component. Furthermore, we will install all
33
services in the first physical node, except Pithos+ which will be installed in
34
the second, due to a conflict between the snf-pithos-app and snf-cyclades-app
35
component (scheduled to be fixed in the next version).
36

    
37
For the rest of the documentation we will refer to the first physical node as
38
"node1" and the second as "node2". We will also assume that their domain names
39
are "node1.example.com" and "node2.example.com" and their IPs are "4.3.2.1" and
40
"4.3.2.2" respectively.
41

    
42

    
43
General Prerequisites
44
=====================
45

    
46
These are the general synnefo prerequisites, that you need on node1 and node2
47
and are related to all the services (Astakos, Pithos+, Cyclades, Plankton).
48

    
49
To be able to download all synnefo components you need to add the following
50
lines in your ``/etc/apt/sources.list`` file:
51

    
52
| ``deb http://apt.okeanos.grnet.gr squeeze main``
53
| ``deb-src http://apt.okeanos.grnet.gr squeeze main``
54

    
55
| ``deb http://apt.okeanos.grnet.gr squeeze backports``
56
| ``deb-src http://apt.okeanos.grnet.gr squeeze backports``
57

    
58
You also need a shared directory visible by both nodes. Pithos+ will save all
59
data inside this directory. By 'all data', we mean files, images, and pithos
60
specific mapping data. If you plan to upload more than one basic image, this
61
directory should have at least 50GB of free space. During this guide, we will
62
assume that node1 acts as an NFS server and serves the directory ``/srv/pithos``
63
to node2. Node2 has this directory mounted under ``/srv/pithos``, too.
64

    
65
Before starting the synnefo installation, you will need basic third party
66
software to be installed and configured on the physical nodes. We will describe
67
each node's general prerequisites separately. Any additional configuration,
68
specific to a synnefo service for each node, will be described at the service's
69
section.
70

    
71
Node1
72
-----
73

    
74
General Synnefo dependencies
75
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76

    
77
 * apache (http server)
78
 * gunicorn (WSGI http server)
79
 * postgresql (database)
80
 * rabbitmq (message queue)
81

    
82
You can install the above by running:
83

    
84
.. code-block:: console
85

    
86
   # apt-get install apache2 gunicorn postgresql
87

    
88
Make sure you have installed gunicorn >= v0.12.2. On node1, we will create our
89
databases, so you will also need the python-psycopg2 package:
90

    
91
.. code-block:: console
92

    
93
   # apt-get install python-psycopg2
94

    
95
Database setup
96
~~~~~~~~~~~~~~
97

    
98
On node1, we create a database called ``snf_apps``, that will host all django
99
apps related tables. We also create the user ``synnefo`` and grant him all
100
privileges on the database. We do this by running:
101

    
102
.. code-block:: console
103

    
104
   root@node1:~ # su - postgres
105
   postgres@node1:~ $ psql
106
   postgres=# CREATE DATABASE snf_apps WITH ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' TEMPLATE=template0;
107
   postgres=# CREATE USER synnefo WITH PASSWORD 'example_passw0rd';
108
   postgres=# GRANT ALL PRIVILEGES ON DATABASE snf_apps TO synnefo;
109

    
110
We also create the database ``snf_pithos`` needed by the pithos+ backend and
111
grant the ``synnefo`` user all privileges on the database. This database could
112
be created on node2 instead, but we do it on node1 for simplicity. We will
113
create all needed databases on node1 and then node2 will connect to them.
114

    
115
.. code-block:: console
116

    
117
   postgres=# CREATE DATABASE snf_pithos WITH ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C'
118
   postgres=# GRANT ALL PRIVILEGES ON DATABASE snf_pithos TO synnefo;
119

    
120
Configure the database to listen to all network interfaces. You can do this by
121
editting the file ``/etc/postgresql/8.4/main/postgresql.conf`` and change
122
``listen_addresses`` to ``'*'`` :
123

    
124
.. code-block:: console
125

    
126
   listen_addresses = '*'
127

    
128
Furthermore, edit ``/etc/postgresql/8.4/main/pg_hba.conf`` to allow node1 and
129
node2 to connect to the database. Add the following lines under ``#IPv4 local
130
connections:`` :
131

    
132
.. code-block:: console
133

    
134
   host		all	all	4.3.2.1/32	md5
135
   host		all	all	4.3.2.2/32	md5
136

    
137
Make sure to substitute "4.3.2.1" and "4.3.2.2" with node1's and node2's
138
actual IPs. Now, restart the server to apply the changes:
139

    
140
.. code-block:: console
141

    
142
   # /etc/init.d/postgresql restart
143

    
144
Gunicorn setup
145
~~~~~~~~~~~~~~
146

    
147
Create the file ``synnefo`` under ``/etc/gunicorn.d/`` containing the following:
148

    
149
.. code-block:: console
150

    
151
   CONFIG = {
152
    'mode': 'django',
153
    'environment': {
154
      'DJANGO_SETTINGS_MODULE': 'synnefo.settings',
155
    },
156
    'working_dir': '/etc/synnefo',
157
    'user': 'www-data',
158
    'group': 'www-data',
159
    'args': (
160
      '--bind=127.0.0.1:8080',
161
      '--workers=4',
162
      '--log-level=debug',
163
    ),
164
   }
165

    
166
.. warning:: Do NOT start the server yet, because it won't find the
167
``synnefo.settings`` module. We will start the server after successful
168
installation of astakos. If the server is running:
169

    
170
.. code-block:: console
171

    
172
   # /etc/init.d/gunicorn stop
173

    
174
Apache2 setup
175
~~~~~~~~~~~~~
176

    
177
Create the file ``synnefo`` under ``/etc/apache2/sites-available/`` containing
178
the following:
179

    
180
.. code-block:: console
181

    
182
   <VirtualHost *:80>
183
     ServerName node1.example.com
184

    
185
     RewriteEngine On
186
     RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
187
   </VirtualHost>
188

    
189
Create the file ``synnefo-ssl`` under ``/etc/apache2/sites-available/``
190
containing the following:
191

    
192
.. code-block:: console
193

    
194
   <IfModule mod_ssl.c>
195
   <VirtualHost _default_:443>
196
     ServerName node1.example.com
197

    
198
     Alias /static "/usr/share/synnefo/static"
199

    
200
   #  SetEnv no-gzip
201
   #  SetEnv dont-vary
202

    
203
     AllowEncodedSlashes On
204

    
205
     RequestHeader set X-Forwarded-Protocol "https"
206

    
207
     <Proxy * >
208
       Order allow,deny
209
       Allow from all
210
     </Proxy>
211

    
212
     SetEnv                proxy-sendchunked
213
     SSLProxyEngine        off
214
     ProxyErrorOverride    off
215

    
216
     ProxyPass        /static !
217
     ProxyPass        / http://localhost:8080/ retry=0
218
     ProxyPassReverse / http://localhost:8080/
219

    
220
     RewriteEngine On
221
     RewriteRule ^/login(.*) /im/login/redirect$1 [PT,NE]
222

    
223
     SSLEngine on
224
     SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
225
     SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
226
   </VirtualHost>
227
   </IfModule>
228

    
229
Now enable sites and modules by running:
230

    
231
.. code-block:: console
232

    
233
   # a2enmod ssl
234
   # a2enmod rewrite
235
   # a2dissite default
236
   # a2ensite synnefo
237
   # a2ensite synnefo-ssl
238
   # a2enmod headers
239
   # a2enmod proxy_http
240

    
241
.. warning:: Do NOT start/restart the server yet. If the server is running:
242

    
243
.. code-block:: console
244

    
245
   # /etc/init.d/apache2 stop
246

    
247
Pithos+ data directory setup
248
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
249

    
250
As mentioned in the General Prerequisites section, there is a directory called
251
``/srv/pithos`` visible by both nodes. We create and setup the ``data``
252
directory inside it:
253

    
254
.. code-block:: console
255

    
256
   # cd /srv/pithos
257
   # mkdir data
258
   # chown www-data:www-data data
259
   # chmod g+ws data
260

    
261
You are now ready with all general prerequisites concerning node1. Let's go to
262
node2.
263

    
264
Node2
265
-----
266

    
267
General Synnefo dependencies
268
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
269

    
270
 * apache (http server)
271
 * gunicorn (WSGI http server)
272
 * postgresql (database)
273
 * rabbitmq (message queue)
274

    
275
You can install the above by running:
276

    
277
.. code-block:: console
278

    
279
   # apt-get install apache2 gunicorn postgresql
280

    
281
Make sure you have installed the same package versions as in node1. Node2 will
282
connect to the databases on node1, so you will also need the python-psycopg2
283
package:
284

    
285
.. code-block:: console
286

    
287
   # apt-get install python-psycopg2
288

    
289
Database setup
290
~~~~~~~~~~~~~~
291

    
292
All databases have been created and setup on node1, so we do not need to take
293
any action here. From node2, we will just connect to them. When you get familiar
294
with the software you may choose to run different databases on different nodes,
295
for performance/scalability/redundancy reasons, but those kind of setups are out
296
of the purpose of this guide.
297

    
298
Gunicorn setup
299
~~~~~~~~~~~~~~
300

    
301
Create the file ``synnefo`` under ``/etc/gunicorn.d/`` containing the following
302
(same contents as in node1; you can just copy/paste the file):
303

    
304
.. code-block:: console
305

    
306
   CONFIG = {
307
    'mode': 'django',
308
    'environment': {
309
      'DJANGO_SETTINGS_MODULE': 'synnefo.settings',
310
    },
311
    'working_dir': '/etc/synnefo',
312
    'user': 'www-data',
313
    'group': 'www-data',
314
    'args': (
315
      '--bind=127.0.0.1:8080',
316
      '--workers=4',
317
      '--log-level=debug',
318
    ),
319
   }
320

    
321
.. warning:: Do NOT start the server yet, because it won't find the
322
``synnefo.settings`` module. We will start the server after successful
323
installation of astakos. If the server is running:
324

    
325
.. code-block:: console
326

    
327
   # /etc/init.d/gunicorn stop
328

    
329
Apache2 setup
330
~~~~~~~~~~~~~
331

    
332
Create the file ``synnefo`` under ``/etc/apache2/sites-available/`` containing
333
the following:
334

    
335
.. code-block:: console
336

    
337
   <VirtualHost *:80>
338
     ServerName node2.example.com
339

    
340
     RewriteEngine On
341
     RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
342
   </VirtualHost>
343

    
344
Create the file ``synnefo-ssl`` under ``/etc/apache2/sites-available/``
345
containing the following:
346

    
347
.. code-block:: console
348

    
349
   <IfModule mod_ssl.c>
350
   <VirtualHost _default_:443>
351
     ServerName node2.example.com
352

    
353
     Alias /static "/usr/share/synnefo/static"
354

    
355
     SetEnv no-gzip
356
     SetEnv dont-vary
357
     AllowEncodedSlashes On
358

    
359
     RequestHeader set X-Forwarded-Protocol "https"
360

    
361
     <Proxy * >
362
       Order allow,deny
363
       Allow from all
364
     </Proxy>
365

    
366
     SetEnv                proxy-sendchunked
367
     SSLProxyEngine        off
368
     ProxyErrorOverride    off
369

    
370
     ProxyPass        /static !
371
     ProxyPass        / http://localhost:8080/ retry=0
372
     ProxyPassReverse / http://localhost:8080/
373

    
374
     SSLEngine on
375
     SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
376
     SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
377
   </VirtualHost>
378
   </IfModule>
379

    
380
As in node1, enable sites and modules by running:
381

    
382
.. code-block:: console
383

    
384
   # a2enmod ssl
385
   # a2enmod rewrite
386
   # a2dissite default
387
   # a2ensite synnefo
388
   # a2ensite synnefo-ssl
389
   # a2enmod headers
390
   # a2enmod proxy_http
391

    
392
.. warning:: Do NOT start/restart the server yet. If the server is running:
393

    
394
.. code-block:: console
395

    
396
   # /etc/init.d/apache2 stop
397

    
398
We are now ready with all general prerequisites for node2. Now that we have
399
finished with all general prerequisites for both nodes, we can start installing
400
the services. First, let's install Astakos on node1.
401

    
402

    
403
Installation of Astakos on node1
404
================================
405

    
406
To install astakos, grab the package from our repository (make sure  you made
407
the additions needed in your ``/etc/apt/sources.list`` file, as described
408
previously), by running:
409

    
410
.. code-block:: console
411

    
412
   # apt-get install snf-astakos-app
413

    
414
After successful installation of snf-astakos-app, make sure that also
415
snf-webproject has been installed (marked as "Recommended" package). By default
416
Debian installs "Recommended" packages, but if you have changed your
417
configuration and the package didn't install automatically, you should
418
explicitly install it manually running:
419

    
420
.. code-block:: console
421

    
422
   # apt-get install snf-webproject
423

    
424
The reason snf-webproject is "Recommended" and not a hard dependency, is to give
425
the experienced administrator the ability to install synnefo in a custom made
426
django project. This corner case concerns only very advanced users that know
427
what they are doing and want to experiment with synnefo.
428

    
429

    
430
Configuration of Astakos
431
========================
432

    
433
Conf Files
434
----------
435

    
436
After astakos is successfully installed, you will find the directory
437
``/etc/synnefo`` and some configuration files inside it. The files contain
438
commented configuration options, which are the default options. While installing
439
new snf-* components, new configuration files will appear inside the directory.
440
In this guide (and for all services), we will edit only the minimum necessary
441
configuration options, to reflect our setup. Everything else will remain as is.
442

    
443
After getting familiar with synnefo, you will be able to customize the software
444
as you wish and fits your needs. Many options are available, to empower the
445
administrator with extensively customizable setups.
446

    
447
For the snf-webproject component (installed as an astakos dependency), we
448
need the following:
449

    
450
Edit ``/etc/synnefo/10-snf-webproject-database.conf``. You will need to
451
uncomment and edit the ``DATABASES`` block to reflect our database:
452

    
453
.. code-block:: console
454

    
455
   DATABASES = {
456
    'default': {
457
        # 'postgresql_psycopg2', 'postgresql','mysql', 'sqlite3' or 'oracle'
458
        'ENGINE': 'postgresql_psycopg2',
459
         # ATTENTION: This *must* be the absolute path if using sqlite3.
460
         # See: http://docs.djangoproject.com/en/dev/ref/settings/#name
461
        'NAME': 'snf_apps',
462
        'USER': 'synnefo',                      # Not used with sqlite3.
463
        'PASSWORD': 'examle_passw0rd',          # Not used with sqlite3.
464
        # Set to empty string for localhost. Not used with sqlite3.
465
        'HOST': '4.3.2.1',
466
        # Set to empty string for default. Not used with sqlite3.
467
        'PORT': '5432',
468
    }
469
   }
470

    
471
Edit ``/etc/synnefo/10-snf-webproject-deploy.conf``. Uncomment and edit
472
``SECRET_KEY``. This is a django specific setting which is used to provide a
473
seed in secret-key hashing algorithms. Set this to a random string of your
474
choise and keep it private:
475

    
476
.. code-block:: console
477

    
478
   SECRET_KEY = 'sy6)mw6a7x%n)-example_secret_key#zzk4jo6f2=uqu!1o%)'
479

    
480
For astakos specific configuration, edit the following options in
481
``/etc/synnefo/20-snf-astakos-setting.conf`` :
482

    
483
.. code-block:: console
484

    
485
   ASTAKOS_IM_MODULES = ['local']
486

    
487
   ASTAKOS_COOKIE_DOMAIN = '.example.com'
488

    
489
   ASTAKOS_BASEURL = 'https://node1.example.com'
490

    
491
   ASTAKOS_SITENAME = '~okeanos demo example'
492

    
493
   ASTAKOS_CLOUD_SERVICES = (
494
           { 'url':'https://node1.example.com/im/', 'name':'~okeanos home', 'id':'cloud', 'icon':'home-icon.png' },
495
           { 'url':'https://node1.example.com/ui/', 'name':'cyclades', 'id':'cyclades' },
496
           { 'url':'https://node2.example.com/ui/', 'name':'pithos+', 'id':'pithos' })
497

    
498
   ASTAKOS_RECAPTCHA_PUBLIC_KEY = 'example_recaptcha_public_key!@#$%^&*('
499
   ASTAKOS_RECAPTCHA_PRIVATE_KEY = 'example_recaptcha_private_key!@#$%^&*('
500

    
501
   ASTAKOS_RECAPTCHA_USE_SSL = True
502

    
503
``ASTAKOS_IM_MODULES`` refers to the astakos login methods. For now only local
504
is supported. The ``ASTAKOS_COOKIE_DOMAIN`` should be the base url of our
505
domain (for all services). ``ASTAKOS_BASEURL`` is the astakos home page.
506
``ASTAKOS_CLOUD_SERVICES`` contains all services visible to and served by
507
astakos. The first element of the dictionary is used to point to a generic
508
landing page for your services (cyclades, pithos). If you don't have such a
509
page it can be omitted. The second and third element point to our services
510
themselves (the apps) and should be set as above.
511

    
512
For the ``ASTAKOS_RECAPTCHA_PUBLIC_KEY`` and ``ASTAKOS_RECAPTCHA_PRIVATE_KEY``
513
go to https://www.google.com/recaptcha/admin/create and create your own pair.
514

    
515
Servers Initialization
516
----------------------
517

    
518
After configuration is done, we initialize the servers on node1:
519

    
520
.. code-block:: console
521

    
522
   root@node1:~ # /etc/init.d/gunicorn restart
523
   root@node1:~ # /etc/init.d/apache2 restart
524

    
525
Database Initialization
526
-----------------------
527

    
528
Then, we initialize the database by running:
529

    
530
.. code-block:: console
531

    
532
   # snf-manage syncdb
533

    
534
At this example we don't need to create a django superuser, so we select
535
``[no]`` to the question. After a successful sync, we run the migration needed
536
for astakos:
537

    
538
.. code-block:: console
539

    
540
   # snf-manage migrate im
541

    
542
You have now finished the Astakos setup. Let's test it now.
543

    
544

    
545
Testing of Astakos
546
==================
547

    
548
Open your favorite browser and go to:
549

    
550
``http://node1.example.com/im``
551

    
552
If this redirects you to ``https://node1.example.com/im`` and you can see
553
the "welcome" door of Astakos, then you have successfully setup Astakos.
554

    
555
Let's create our first user. At the homepage click the "CREATE ACCOUNT" button
556
and fill all your data at the sign up form. Then click "SUBMIT". You should now
557
see a green box on the top, which informs you that you made a successful request
558
and the request has been sent to the administrators. So far so good.
559

    
560
Now we need to activate that user. Return to a command prompt at node1 and run:
561

    
562
.. code-block:: console
563

    
564
   root@node1:~ # snf-manage listusers
565

    
566
This command should show you a list with only one user; the one we just created.
567
This user should have an id with a value of ``1``. It should also have an
568
"active" status with the value of ``0`` (inactive). Now run:
569

    
570
.. code-block:: console
571

    
572
   root@node1:~ # snf-manage modifyuser --set-active 1
573

    
574
This modifies the active value to ``1``, and actually activates the user.
575
When running in production, the activation is done automatically with different
576
types of moderation, that Astakos supports. You can see the moderation methods
577
(by invitation, whitelists, matching regexp, etc.) at the Astakos specific
578
documentation.
579

    
580
Now let's go back to the homepage. Open ``http://node1.example.com/im`` with
581
your browser again. Try to sign in using your new credentials. If the astakos
582
menu appears and you can see your profile, then you have successfully setup
583
Astakos.
584

    
585
Let's continue to install Pithos+ now.
586

    
587

    
588
Installation of Pithos+ on node2
589
================================
590

    
591
To install pithos+, grab the packages from our repository (make sure  you made
592
the additions needed in your ``/etc/apt/sources.list`` file, as described
593
previously), by running:
594

    
595
.. code-block:: console
596

    
597
   # apt-get install snf-pithos-app
598

    
599
After successful installation of snf-pithos-app, make sure that also
600
snf-webproject has been installed (marked as "Recommended" package). Refer to
601
the "Installation of Astakos on node1" section, if you don't remember why this
602
should happen. Now, install the pithos web interface:
603

    
604
.. code-block:: console
605

    
606
   # apt-get install snf-pithos-webclient
607

    
608
This package provides the standalone pithos web client. The web client is the
609
web UI for pithos+ and will be accessible by clicking "pithos+" on the Astakos
610
interface's cloudbar, at the top of the Astakos homepage.
611

    
612
Configuration of Pithos+
613
========================
614

    
615
Conf Files
616
----------
617

    
618
After pithos+ is successfully installed, you will find the directory
619
``/etc/synnefo`` and some configuration files inside it, as you did in node1
620
after installation of astakos. Here, you will not have to change anything that
621
has to do with snf-common or snf-webproject. Everything is set at node1. You
622
only need to change settings that have to do with pithos+. Specifically:
623

    
624
Edit ``/etc/synnefo/20-snf-pithos-app-settings.conf``. There you need to set
625
only the two options:
626

    
627
.. code-block:: console
628

    
629
   PITHOS_BACKEND_DB_CONNECTION = 'postgresql://synnefo:example_passw0rd@node1.example.com:5432/snf_pithos'
630

    
631
   PITHOS_BACKEND_BLOCK_PATH = '/srv/pithos/data'
632

    
633
The ``PITHOS_BACKEND_DB_CONNECTION`` option tells to the pithos+ backend where
634
to find its database. Above we tell pithos+ that its database is ``snf_pithos``
635
at node1 and to connect as user ``synnefo`` with password ``example_passw0rd``.
636
All those settings where setup during node1's "Database setup" section.
637

    
638
The ``PITHOS_BACKEND_BLOCK_PATH`` option tells to the pithos+ backend where to
639
store its data. Above we tell pithos+ to store its data under
640
``/srv/pithos/data``, which is visible by both nodes. We have already setup this
641
directory at node1's "Pithos+ data directory setup" section.
642

    
643
Then we need to setup the web UI and connect it to astakos. To do so, edit
644
``/etc/synnefo/20-snf-pithos-webclient-settings.conf``:
645

    
646
.. code-block:: console
647

    
648
   PITHOS_UI_LOGIN_URL = "https://node1.example.com/im/login?next="
649
   PITHOS_UI_FEEDBACK_URL = "https://node1.example.com/im/feedback"
650

    
651
The ``PITHOS_UI_LOGIN_URL`` option tells the client where to redirect you, if
652
you are not logged in. The ``PITHOS_UI_FEEDBACK_URL`` option points at the
653
pithos+ feedback form. Astakos already provides a generic feedback form for all
654
services, so we use this one.
655

    
656
Then edit ``/etc/synnefo/20-snf-pithos-webclient-cloudbar.conf``, to connect the
657
pithos+ web UI with the astakos web UI (through the top cloudbar):
658

    
659
.. code-block:: console
660

    
661
   CLOUDBAR_LOCATION = 'https://node1.example.com/static/im/cloudbar/'
662
   CLOUDBAR_ACTIVE_SERVICE = 'pithos'
663
   CLOUDBAR_SERVICES_URL = 'https://node1.example.com/im/get_services'
664
   CLOUDBAR_MENU_URL = 'https://node1.example.com/im/get_menu'
665

    
666
The ``CLOUDBAR_LOCATION`` tells the client where to find the astakos common
667
cloudbar.
668

    
669
The ``CLOUDBAR_ACTIVE_SERVICE`` registers the client as a new service served by
670
astakos. It's name should be identical with the ``id`` name given at the
671
astakos' ``ASTAKOS_CLOUD_SERVICES`` variable. Note that at the Astakos "Conf
672
Files" section, we actually set the third item of the ``ASTAKOS_CLOUD_SERVICES``
673
list, to the dictionary:
674
``{ 'url':'https://nod...', 'name':'pithos+', 'id':'pithos }``. This item
675
represents the pithos+ service. The ``id`` we set there, is the ``id`` we want
676
here.
677

    
678
The ``CLOUDBAR_SERVICES_URL`` and ``CLOUDBAR_MENU_URL`` options are used by the
679
pithos+ web client to get from astakos all the information needed to fill its
680
own cloudbar.  So we put our astakos deployment urls there.
681

    
682
Servers Initialization
683
----------------------
684

    
685
After configuration is done, we initialize the servers on node2:
686

    
687
.. code-block:: console
688

    
689
   root@node2:~ # /etc/init.d/gunicorn restart
690
   root@node2:~ # /etc/init.d/apache2 restart
691

    
692
You have now finished the Pithos+ setup. Let's test it now.
693

    
694

    
695
Testing of Pithos+
696
==================
697

    
698

    
699
Installation of Cyclades (and Plankton) on node1
700
================================================
701

    
702
Installation of cyclades is a two step process:
703

    
704
1. install the external services (prerequisites) on which cyclades depends
705
2. install the synnefo software components associated with cyclades
706

    
707
Prerequisites
708
-------------
709
.. _cyclades-install-ganeti:
710

    
711
Ganeti installation
712
~~~~~~~~~~~~~~~~~~~
713

    
714
Synnefo requires a working Ganeti installation at the backend. Installation
715
of Ganeti is not covered by this document, please refer to
716
`ganeti documentation <http://docs.ganeti.org/ganeti/current/html>`_ for all the
717
gory details. A successful Ganeti installation concludes with a working
718
:ref:`GANETI-MASTER <GANETI_NODES>` and a number of :ref:`GANETI-NODEs <GANETI_NODES>`.
719

    
720
.. _cyclades-install-db:
721

    
722
Database
723
~~~~~~~~
724

    
725
Database installation is done as part of the
726
:ref:`snf-webproject <snf-webproject>` component.
727

    
728
.. _cyclades-install-rabbitmq:
729

    
730
RabbitMQ
731
~~~~~~~~
732

    
733
RabbitMQ is used as a generic message broker for cyclades. It should be
734
installed on two seperate :ref:`QUEUE <QUEUE_NODE>` nodes in a high availability
735
configuration as described here:
736

    
737
    http://www.rabbitmq.com/pacemaker.html
738

    
739
After installation, create a user and set its permissions:
740

    
741
.. code-block:: console
742

    
743
    $ rabbitmqctl add_user <username> <password>
744
    $ rabbitmqctl set_permissions -p / <username>  "^.*" ".*" ".*"
745

    
746
The values set for the user and password must be mirrored in the
747
``RABBIT_*`` variables in your settings, as managed by
748
:ref:`snf-common <snf-common>`.
749

    
750
.. todo:: Document an active-active configuration based on the latest version
751
   of RabbitMQ.
752

    
753
.. _cyclades-install-vncauthproxy:
754

    
755
vncauthproxy
756
~~~~~~~~~~~~
757

    
758
To support OOB console access to the VMs over VNC, the vncauthproxy
759
daemon must be running on every :ref:`APISERVER <APISERVER_NODE>` node.
760

    
761
.. note:: The Debian package for vncauthproxy undertakes all configuration
762
   automatically.
763

    
764
Download and install the latest vncauthproxy from its own repository,
765
at `https://code.grnet.gr/git/vncauthproxy`, or a specific commit:
766

    
767
.. code-block:: console
768

    
769
    $ bin/pip install -e git+https://code.grnet.gr/git/vncauthproxy@INSERT_COMMIT_HERE#egg=vncauthproxy
770

    
771
Create ``/var/log/vncauthproxy`` and set its permissions appropriately.
772

    
773
Alternatively, build and install Debian packages.
774

    
775
.. code-block:: console
776

    
777
    $ git checkout debian
778
    $ dpkg-buildpackage -b -uc -us
779
    # dpkg -i ../vncauthproxy_1.0-1_all.deb
780

    
781
.. warning::
782
    **Failure to build the package on the Mac.**
783

    
784
    ``libevent``, a requirement for gevent which in turn is a requirement for
785
    vncauthproxy is not included in `MacOSX` by default and installing it with
786
    MacPorts does not lead to a version that can be found by the gevent
787
    build process. A quick workaround is to execute the following commands::
788

    
789
        $ cd $SYNNEFO
790
        $ sudo pip install -e git+https://code.grnet.gr/git/vncauthproxy@5a196d8481e171a#egg=vncauthproxy
791
        <the above fails>
792
        $ cd build/gevent
793
        $ sudo python setup.py -I/opt/local/include -L/opt/local/lib build
794
        $ cd $SYNNEFO
795
        $ sudo pip install -e git+https://code.grnet.gr/git/vncauthproxy@5a196d8481e171a#egg=vncauthproxy
796

    
797
.. todo:: Mention vncauthproxy bug, snf-vncauthproxy, inability to install using pip
798
.. todo:: kpap: fix installation commands
799

    
800
.. _cyclades-install-nfdhcpd:
801

    
802
NFDHCPD
803
~~~~~~~
804

    
805
Setup Synnefo-specific networking on the Ganeti backend.
806
This part is deployment-specific and must be customized based on the
807
specific needs of the system administrators.
808

    
809
A reference installation will use a Synnefo-specific KVM ifup script,
810
NFDHCPD and pre-provisioned Linux bridges to support public and private
811
network functionality. For this:
812

    
813
Grab NFDHCPD from its own repository (https://code.grnet.gr/git/nfdhcpd),
814
install it, modify ``/etc/nfdhcpd/nfdhcpd.conf`` to reflect your network
815
configuration.
816

    
817
Install a custom KVM ifup script for use by Ganeti, as
818
``/etc/ganeti/kvm-vif-bridge``, on GANETI-NODEs. A sample implementation is
819
provided under ``/contrib/ganeti-hooks``. Set ``NFDHCPD_STATE_DIR`` to point
820
to NFDHCPD's state directory, usually ``/var/lib/nfdhcpd``.
821

    
822
.. todo:: soc: document NFDHCPD installation, settle on KVM ifup script
823

    
824
.. _cyclades-install-snfimage:
825

    
826
snf-image
827
~~~~~~~~~
828

    
829
Install the :ref:`snf-image <snf-image>` Ganeti OS provider for image
830
deployment.
831

    
832
For :ref:`cyclades <cyclades>` to be able to launch VMs from specified
833
Images, you need the snf-image OS Provider installed on *all* Ganeti nodes.
834

    
835
Please see `https://code.grnet.gr/projects/snf-image/wiki`_
836
for installation instructions and documentation on the design
837
and implementation of snf-image.
838

    
839
Please see `https://code.grnet.gr/projects/snf-image/files`
840
for the latest packages.
841

    
842
Images should be stored in ``extdump``, or ``diskdump`` format in a directory
843
of your choice, configurable as ``IMAGE_DIR`` in
844
:file:`/etc/default/snf-image`.
845

    
846
synnefo components
847
------------------
848

    
849
You need to install the appropriate synnefo software components on each node,
850
depending on its type, see :ref:`Architecture <cyclades-architecture>`.
851

    
852
Most synnefo components have dependencies on additional Python packages.
853
The dependencies are described inside each package, and are setup
854
automatically when installing using :command:`pip`, or when installing
855
using your system's package manager.
856

    
857
Please see the page of each synnefo software component for specific
858
installation instructions, where applicable.
859

    
860
Install the following synnefo components:
861

    
862
Nodes of type :ref:`APISERVER <APISERVER_NODE>`
863
    Components
864
    :ref:`snf-common <snf-common>`,
865
    :ref:`snf-webproject <snf-webproject>`,
866
    :ref:`snf-cyclades-app <snf-cyclades-app>`
867
Nodes of type :ref:`GANETI-MASTER <GANETI_MASTER>` and :ref:`GANETI-NODE <GANETI_NODE>`
868
    Components
869
    :ref:`snf-common <snf-common>`,
870
    :ref:`snf-cyclades-gtools <snf-cyclades-gtools>`
871
Nodes of type :ref:`LOGIC <LOGIC_NODE>`
872
    Components
873
    :ref:`snf-common <snf-common>`,
874
    :ref:`snf-webproject <snf-webproject>`,
875
    :ref:`snf-cyclades-app <snf-cyclades-app>`.
876

    
877

    
878
Configuration of Cyclades (and Plankton)
879
========================================
880

    
881
This section targets the configuration of the prerequisites for cyclades,
882
and the configuration of the associated synnefo software components.
883

    
884
synnefo components
885
------------------
886

    
887
cyclades uses :ref:`snf-common <snf-common>` for settings.
888
Please refer to the configuration sections of
889
:ref:`snf-webproject <snf-webproject>`,
890
:ref:`snf-cyclades-app <snf-cyclades-app>`,
891
:ref:`snf-cyclades-gtools <snf-cyclades-gtools>` for more
892
information on their configuration.
893

    
894
Ganeti
895
~~~~~~
896

    
897
Set ``GANETI_NODES``, ``GANETI_MASTER_IP``, ``GANETI_CLUSTER_INFO`` based on
898
your :ref:`Ganeti installation <cyclades-install-ganeti>` and change the
899
`BACKEND_PREFIX_ID`` setting, using an custom ``PREFIX_ID``.
900

    
901
Database
902
~~~~~~~~
903

    
904
Once all components are installed and configured,
905
initialize the Django DB:
906

    
907
.. code-block:: console
908

    
909
   $ snf-manage syncdb
910
   $ snf-manage migrate
911

    
912
and load fixtures ``{users, flavors, images}``,
913
which make the API usable by end users by defining a sample set of users,
914
hardware configurations (flavors) and OS images:
915

    
916
.. code-block:: console
917

    
918
   $ snf-manage loaddata /path/to/users.json
919
   $ snf-manage loaddata flavors
920
   $ snf-manage loaddata images
921

    
922
.. warning::
923
    Be sure to load a custom users.json and select a unique token
924
    for each of the initial and any other users defined in this file.
925
    **DO NOT LEAVE THE SAMPLE AUTHENTICATION TOKENS** enabled in deployed
926
    configurations.
927

    
928
sample users.json file:
929

    
930
.. literalinclude:: ../../synnefo/db/fixtures/users.json
931

    
932
`download <../_static/users.json>`_
933

    
934
RabbitMQ
935
~~~~~~~~
936

    
937
Change ``RABBIT_*`` settings to match your :ref:`RabbitMQ setup
938
<cyclades-install-rabbitmq>`.
939

    
940
.. include:: ../../Changelog
941

    
942

    
943
Testing of Cyclades (and Plankton)
944
==================================
945

    
946

    
947
General Testing
948
===============
949

    
950

    
951
Notes
952
=====