src/source/appinstall.rst
changeset 21 e1cb9c606859
parent 16 aeb2f717165d
child 32 fd15bdd3192e
equal deleted inserted replaced
20:8c0c5400e770 21:e1cb9c606859
       
     1 .. _appinstall:
       
     2 
       
     3 Installing PyAMS application
       
     4 ============================
       
     5 
       
     6 PyAMS default installation is based on `Buildout <http://www.buildout.org>`_ utility. It's not mandatory to use a
       
     7 virtual environment, but it allows you to have a better control over your Python resources.
       
     8 
       
     9 Current PyAMS version is based and validated for Python 3.5; your Python environment must also include a C
       
    10 compiler as well as development headers for Python, *libjpeg*, *libpng*, *libfreetype*, *libxml2*, *libxslt* and
       
    11 eventually *libldap*, *libpq*, *libffi*, *libgdal* or *libzmq*. *Cython* compiler can also be useful to optimize
       
    12 several packages.
       
    13 
       
    14 PyAMS default components configuration also pre-suppose that the following external tools are available:
       
    15 
       
    16 - a *Memcached* or *Redis* server, to store sessions and cache (can be changed through Beaker configuration)
       
    17 
       
    18 Optional tools also include:
       
    19 
       
    20 - an *LDAP* server for authentication
       
    21 
       
    22 - an *ElasticSearch* server for full text indexing (see *PyAMS_content_es* package)
       
    23 
       
    24 - a *WebSockets* server using AsyncIO. This is used to manage notifications (see *PyAMS_notify* and *PyAMS_notify_ws*
       
    25   packages). An *out of the box* environment can be built using *pyams_notify* scaffold.
       
    26 
       
    27 
       
    28 PyAMS also needs that you use a ZODB shared server, as several background processes needing a concurrent access to ZODB
       
    29 are started by PyAMS main process. Three ZODB storages are already provided through PyAMS: ZEO, RelStorage or Newt.db.
       
    30 See :ref:`zodb` to know how to initialize database with the help of PyAMS tools.
       
    31 
       
    32 
       
    33 Creating initial buildout
       
    34 -------------------------
       
    35 
       
    36 PyAMS provides a new Pyramid scaffold, called *pyams*, generated via a *cookiecutter* template.
       
    37 
       
    38 A simple option to install PyAMS is to create a buildout environment including *Pyramid* and all *PyAMS* packages:
       
    39 
       
    40 .. code-block:: bash
       
    41 
       
    42     # mkdir /var/local/
       
    43     # pip3 install virtualenv
       
    44     # virtualenv --python=python3.5 env
       
    45     # cd env
       
    46     # . bin/activate
       
    47     (env) # pip3.5 install cookiecutter
       
    48     (env) # cookiecutter hg+http://hg.ztfy.org/pyams/scaffolds/pyams
       
    49 
       
    50 *CookieCutter* will ask you for a small set of input variables that you can change or not:
       
    51 
       
    52 - **pyams_release**: version of PyAMS configuration file to use. "latest" (default value) will point to last release;
       
    53   you can also choose to point to a given release ("0.1.4" for example)
       
    54 
       
    55 - **project_name**: current environment name in "human form"
       
    56 
       
    57 - **project_slug**: "technical" package name, based on project name
       
    58 
       
    59 - **virtual_hostname**: Apache virtual-host name
       
    60 
       
    61 - **webapp_name**: web application package name ("webapp" as default)
       
    62 
       
    63 - **webapp_port**: TCP/IP port to use when running application outside Apache ("6543" as default)
       
    64 
       
    65 - **eggs_directory**: relative or absolute path to directory containing downloaded eggs; this directory can be
       
    66   shared with other projects ("eggs" as default)
       
    67 
       
    68 - **logs_directory**: absolute path to directory containing Apache's log files
       
    69 
       
    70 - **run_user**: user name under which Apache process will run ("www-data" as default)
       
    71 
       
    72 - **run_group**: group name under which Apache process will run ("www-data" as default)
       
    73 
       
    74 - **beaker_backend**: name of Beaker backend to use to store sessions and cache data ("redis" as default)
       
    75 
       
    76 - **beaker_server**: IP address and port of Beaker backend server ("127.0.0.1:6379" as default)
       
    77 
       
    78 - **db_type**: ZODB database storage; available options include ZEO, RelStorage and NewtDB
       
    79 
       
    80 - **db_host**: IP address of database server ("127.0.0.1" as default); WARNING: database server installation
       
    81   is not part of application installation; another "zeo_server" cookiecutter recipe is available for ZEO
       
    82 
       
    83 - **db_port**: listening port of database server ("8100" is given as default for ZEO)
       
    84 
       
    85 - **db_name**: database or ZEO storage name to use
       
    86 
       
    87 - **db_username**: database user name
       
    88 
       
    89 - **db_password**: database password
       
    90 
       
    91 - **zeo_realm**: ZEO authentication realm
       
    92 
       
    93 - **blobs_dir**: local directory to use to store cache of ZODB blobs; cache size is limited to 10GB as default
       
    94 
       
    95 - **use_postgresql**: specify if PostgreSQL access is required; if so, please check that PostgreSQL development files
       
    96   are available to compile PsycoPG2 extension
       
    97 
       
    98 - **use_oracle**: specify if Oracle access is required; if so, please check that Oracle development files are
       
    99   available to compile cx_Oracle extension, and that ORACLE_HOME environment variable is correctly defined (see below)
       
   100 
       
   101 - **use_ldap**: specify if LDAP access will be required for authentication
       
   102 
       
   103 - **use_elasticsearch**: specify if an ElasticSearch server will be used for indexation
       
   104 
       
   105 - **elasticsearch_server**: URL used to access Elasticsearch server ("http://127.0.0.1:9200" as default); this URL can
       
   106   include login and password ("http://login:password@127.0.0.1:9200"), if required...
       
   107 
       
   108 - **elasticsearch_index**: name of Elasticsearch index to use ("pyams" as default)
       
   109 
       
   110 - **create_elasticsearch_index**: specify if Elasticsearch index should be created after installation is complete
       
   111 
       
   112 - **define_elasticsearch_mappings** : specify if Elasticsearch mappings should be defined after installation is complete
       
   113 
       
   114 - **smtp_server**: DNS name of SMTP server ("localhost" as default)
       
   115 
       
   116 - **smtp_server_name**: "human" name given to SMTP server ("pyams" as default)
       
   117 
       
   118 - **pyams_scheduler**: TCP/IP address and port to use to access PyAMS tasks scheduler process ("127.0.0.1:5555" as
       
   119   default); see :ref:`pyams_scheduler`
       
   120 
       
   121 - **start_scheduler**: boolean value to indicate if scheduler process is started by this application instance
       
   122 
       
   123 - **pyams_medias_converter**: TCP/IP address and port to use to access PyAMS medias converter process ("127.0.0.1:5556"
       
   124   as default); see :ref:`pyams_medias`
       
   125 
       
   126 - **start_medias_converter**: boolean value to indicate if medias converter process is started by this application
       
   127   instance
       
   128 
       
   129 - **pyams_es_indexer**: TCP/IP address and port to use to access PyAMS Elasticsearch indexer process ("127.0.0.1:5557"
       
   130   as default); see :ref:`pyams_content_es`
       
   131 
       
   132 - **start_es_indexer** boolean value to indicate if Elasticsearch indexer process is started by this application
       
   133   instance
       
   134 
       
   135 - **use_notifications**: specify if PyAMS notifications services are to be used (see :ref:`pyams_notify`)
       
   136 
       
   137 - **pyams_ws_notify**: TCP/IP address and port of PyAMS websockets server managing notifications service
       
   138   ("127.0.0.1:8081" as default)
       
   139 
       
   140 - **lexicon_languages**: NLTK lexicon languages to use ("en:english fr:french" as default)
       
   141 
       
   142 - **extension_package**: name of a PyAMS extension package to include in environment configuration
       
   143 
       
   144 - **need_pyams_gis**: specify if PyAMS GIS features are to be used by given extension package; if so, please check
       
   145   that *libgdal* development files are available; on Debian (and maybe others), you have to specify environment
       
   146   variables (see below).
       
   147 
       
   148 
       
   149 Boolean values accept "true", "yes", "on" or "1" (in any case) as *true* values, and anything else as *false*; setting
       
   150 any option to empty string will keep the default proposed value.
       
   151 
       
   152 You can then check, and eventually update, the proposed Buildout configuration file *buildout.cfg*, to add or remove
       
   153 packages or update settings to your needs. Then finalize Bootstrap initialization:
       
   154 
       
   155 .. code-block:: bash
       
   156 
       
   157     (env) # python3.5 bootstrap.py
       
   158     (env) # ./bin/buildout
       
   159 
       
   160 This last operation can be quite long, as many packages have to downloaded, compiled and installed in the virtual
       
   161 environment. If you encounter any compile error, just install the required dependencies and restart the buildout.
       
   162 
       
   163 Some dependencies can require the definition of custom environment variables before running *buildout*, like:
       
   164 
       
   165 - for *libgdal*, which is required by **PyAMS_gis** package, use:
       
   166 
       
   167 .. code-block:: bash
       
   168 
       
   169     (env) # export C_INCLUDE_PATH=/usr/include/gdal
       
   170     (env) # export CPLUS_INCLUDE_PATH=/usr/include/gdal
       
   171 
       
   172 **WARNING**: you have to check also that your *libgdal* release is matching "GDAL" release given in PyAMS
       
   173 configuration file (actually 2.1.0).
       
   174 
       
   175 - for *cx_Oracle*, which is required if you use Oracle database connections, use:
       
   176 
       
   177 .. code-block:: bash
       
   178 
       
   179     (env) # export ORACLE_HOME=/usr/lib/oracle/12.1/client64
       
   180 
       
   181 These examples are given for Debian GNU/Linux. You may have to adapt configuration based on your own Linux
       
   182 distribution and packages versions.
       
   183 
       
   184 
       
   185 Environment settings
       
   186 --------------------
       
   187 
       
   188 The project generated from *pyams* scaffold is based on default Pyramid's *zodb* scaffold, but it adds:
       
   189 
       
   190 - a custom application factory, in the *webapp* directory (see :ref:`site`)
       
   191 
       
   192 - a set of directories to store runtime data, in the *var* directory; each directory contains a *README.txt* file
       
   193   which should be self-explanatory to indicate what this directory should contain, including a ZEO cache
       
   194 
       
   195 - a set of configuration files, in the *etc* directory; here are standard *development.ini* and *production.ini*
       
   196   configuration files, a ZODB configuration files (*zodb-zeo.conf*) for a ZEO client storage and two Apache
       
   197   configurations (for Apache 2.2 and 2.4) using *mod_wsgi*.
       
   198 
       
   199 Once the project have been created from the scaffold, you are free to update all the configuration files.
       
   200 
       
   201 If you need to add packages to the environment, you have to add them to the *buildout.cfg* file **AND** to the INI
       
   202 file (in the *pyramid.includes* section) before running the *buildout* another time; don't forget to add the
       
   203 requested version at the end of *buildout.cfg* file, as Buildout is not configured by default to automatically
       
   204 download the last release of a given unknown package.
       
   205 
       
   206 *development.ini* and *production.ini* files contain many commented directives related to PyAMS components. Read and
       
   207 update them carefully before initializing your application database!
       
   208 
       
   209 
       
   210 Initializing the database
       
   211 -------------------------
       
   212 
       
   213 When you have downloaded and installed all required packages, you have to initialize the database so that all
       
   214 required components are available.
       
   215 
       
   216 From a shell, just type:
       
   217 
       
   218 .. code-block:: bash
       
   219 
       
   220     (env) # ./bin/pyams_upgrade etc/development.ini
       
   221 
       
   222 This process requires that every package is correctly included into *pyramid.includes* directive from selected
       
   223 configuration file.
       
   224 
       
   225 
       
   226 Initializing Elasticsearch index
       
   227 --------------------------------
       
   228 
       
   229 If you want to use an Elasticsearch index, you have to initialize index settings and mappings; the Ingest attachment
       
   230 plug-in is also required to handle attachments correctly.
       
   231 
       
   232 Elasticsearch integration is defined through the *PyAMS_content_es* package. Configuration files are available in this
       
   233 package, for attachment pipeline, index settings and mappings:
       
   234 
       
   235 .. code-block:: bash
       
   236 
       
   237     (env) # cd /var/local/src/pyams/pyams_content_es
       
   238     (env) # curl --noproxy localhost -XDELETE http://localhost:9200/pyams (1)
       
   239     (env) # curl --noproxy localhost -XPUT    http://localhost:9200/pyams -d @index-settings.json
       
   240 
       
   241     (env) # curl --noproxy localhost -XPUT    http://localhost:9200/pyams/WfNewsEvent/_mapping -d @mappings/WfNewsEvent.json
       
   242     (env) # curl --noproxy localhost -XPUT    http://localhost:9200/pyams/WfTopic/_mapping -d @mappings/WfTopic.json
       
   243     (env) # curl --noproxy localhost -XPUT    http://localhost:9200/pyams/WfBlogPost/_mapping -d @mappings/WfBlogPost.json
       
   244 
       
   245 (1) If 'pyams' is defined as Elasticsearch index name.
       
   246 
       
   247 
       
   248 NLTK initialization
       
   249 -------------------
       
   250 
       
   251 Some NLTK (Natural Language Toolkit) tokenizers and stopwords utilities are used to index fulltext contents elements. 
       
   252 This package requires downloading and configuration of several elements which are done as follow:
       
   253 
       
   254 .. code-block:: bash
       
   255 
       
   256     (end) # ./bin/py
       
   257     >>> import nltk
       
   258     >>> nltk.download()
       
   259     NLTK Downloader
       
   260     ---------------------------------------------------------------------------
       
   261         d) Download   l) List    u) Update   c) Config   h) Help   q) Quit
       
   262     ---------------------------------------------------------------------------
       
   263     Downloader> c
       
   264 
       
   265     Data Server:
       
   266       - URL: <https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml>
       
   267       - 6 Package Collections Available
       
   268       - 107 Individual Packages Available
       
   269 
       
   270     Local Machine:
       
   271       - Data directory: /home/tflorac/nltk_data
       
   272 
       
   273     ---------------------------------------------------------------------------
       
   274         s) Show Config   u) Set Server URL   d) Set Data Dir   m) Main Menu
       
   275     ---------------------------------------------------------------------------
       
   276     Config> d
       
   277       New directory> /usr/local/lib/nltk_data (1)
       
   278     Config> m
       
   279 
       
   280     ---------------------------------------------------------------------------
       
   281         d) Download   l) List    u) Update   c) Config   h) Help   q) Quit
       
   282     ---------------------------------------------------------------------------
       
   283     Downloader> d
       
   284 
       
   285     Download which package (l=list; x=cancel)?
       
   286       Identifier> punkt
       
   287         Downloading package punkt to /usr/local/lib/nltk_data...
       
   288 
       
   289     Downloader> d
       
   290 
       
   291     Download which package (l=list; x=cancel)?
       
   292       Identifier> stopwords
       
   293         Downloading package stopwords to /usr/local/lib/nltk_data...
       
   294 
       
   295 
       
   296 (1) On Debian GNU/Linux, you can choose any directory between '*~/nltk_data*' (where '~' is the homedir of user running
       
   297 Pyramid application), '*/usr/share/nltk_data*', '*/usr/local/share/nltk_data*', '*/usr/lib/nltk_data*' and
       
   298 '*/usr/local/lib/nltk_data*'.
       
   299 
       
   300 
       
   301 Starting the application
       
   302 ------------------------
       
   303 
       
   304 When database upgrade process has ended, you can start the web application process with the standard Pyramid's
       
   305 *pserve* command line tool:
       
   306 
       
   307 .. code-block:: bash
       
   308 
       
   309     (env) # ./bin/pserve etc/development.ini
       
   310 
       
   311 In standard debug mode, all registered components are displayed in the console, until the final line (here using ZEO):
       
   312 
       
   313 .. code-block:: bash
       
   314 
       
   315     2018-01-14 11:37:54,339 INFO  [ZEO.ClientStorage][MainThread] [('127.0.0.1', 8100)] ClientStorage (pid=28695) created RW/normal for storage: 'pyams'
       
   316     2018-01-14 11:37:54,340 INFO  [ZEO.cache][MainThread] created temporary cache file 3
       
   317     2018-01-14 11:37:54,345 INFO  [ZODB.blob][MainThread] (28695) Blob directory `/var/local/env/pyams/var/db/blobs` is used but has no layout marker set. Selected `lawn` layout.
       
   318     2018-01-14 11:37:54,345 WARNI [ZODB.blob][MainThread] (28695) The `lawn` blob directory layout is deprecated due to scalability issues on some file systems, please consider migrating to the `bushy` layout.
       
   319     2018-01-14 11:37:54,346 DEBUG [asyncio][[('127.0.0.1', 8100)] zeo client networking thread] Using selector: EpollSelector
       
   320     2018-01-14 11:37:54,347 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] disconnected <ZEO.asyncio.client.Client object at 0x7feeb1de7390> None
       
   321     2018-01-14 11:37:54,348 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] try_connecting
       
   322     2018-01-14 11:37:54,349 INFO  [ZEO.asyncio.base][[('127.0.0.1', 8100)] zeo client networking thread] Connected Protocol(('127.0.0.1', 8100), 'pyams', False)
       
   323     2018-01-14 11:37:54,355 INFO  [ZEO.ClientStorage][[('127.0.0.1', 8100)] zeo client networking thread] [('127.0.0.1', 8100)] Connected to storage: ('localhost', 8100)
       
   324     2018-01-14 11:37:54,358 DEBUG [txn.140663320073984][MainThread] new transaction
       
   325     2018-01-14 11:37:54,360 DEBUG [txn.140663320073984][MainThread] commit
       
   326     2018-01-14 11:37:54,484 DEBUG [config][MainThread] include /home/tflorac/Dropbox/src/PyAMS/pyams_template/src/pyams_template/configure.zcml
       
   327     2018-01-14 11:37:54,485 DEBUG [config][MainThread] include /var/local/env/pycharm/lib/python3.5/site-packages/pyramid_zcml/configure.zcml
       
   328     ...
       
   329     2018-01-14 11:37:54,833 DEBUG [PyAMS (utils)][MainThread] Registering utility <class 'pyams_utils.timezone.utility.TimezoneGenerationsChecker'> named 'PyAMS timezone' providing <InterfaceClass pyams_utils.interfaces.site.ISiteGenerations>
       
   330     2018-01-14 11:37:54,834 DEBUG [PyAMS (utils)][MainThread] Registering class <class 'pyams_utils.timezone.vocabulary.TimezonesVocabulary'> as vocabulary with name "PyAMS timezones"
       
   331     2018-01-14 11:37:54,835 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.traversing.PathElementsAdapter'> for (<InterfaceClass zope.location.interfaces.IContained>,) providing <InterfaceClass pyams_utils.interfaces.traversing.IPathElements>
       
   332     2018-01-14 11:37:54,839 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.url.AbsoluteUrlTalesExtension'> for (<InterfaceClass zope.interface.Interface>, <InterfaceClass zope.interface.Interface>, <InterfaceClass zope.interface.Interface>) providing <InterfaceClass pyams_utils.interfaces.tales.ITALESExtension>
       
   333     2018-01-14 11:37:54,847 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.widget.decimal.DottedDecimalDataConverter'> for (<InterfaceClass pyams_utils.schema.IDottedDecimalField>, <InterfaceClass z3c.form.interfaces.IWidget>) providing <InterfaceClass z3c.form.interfaces.IDataConverter>
       
   334     2018-01-14 11:37:54,942 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.zmi.intids.IntIdsLengthAdapter'> for (<InterfaceClass zope.intid.interfaces.IIntIds>,) providing <InterfaceClass pyams_utils.interfaces.intids.IIndexLength>
       
   335     2018-01-14 11:37:54,943 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "properties.html" for <InterfaceClass zope.intid.interfaces.IIntIds> (<class 'pyams_utils.zmi.intids.IntIdsPropertiesDisplayForm'>)
       
   336     2018-01-14 11:37:54,949 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "properties.html" for <InterfaceClass pyams_utils.interfaces.timezone.IServerTimezone> (<class 'pyams_utils.zmi.timezone.ServerTimezonePropertiesEditForm'>)
       
   337     2018-01-14 11:37:54,980 DEBUG [PyAMS (utils)][MainThread] Registering class <class 'pyams_utils.zodb.ZEOConnectionVocabulary'> as vocabulary with name "PyAMS ZEO connections"
       
   338     2018-01-14 11:37:54,981 DEBUG [PyAMS (utils)][MainThread] Registering class <class 'pyams_utils.zodb.ZODBConnectionVocabulary'> as vocabulary with name "PyAMS ZODB connections"
       
   339     2018-01-14 11:37:55,015 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "add-zeo-connection.html" for <InterfaceClass zope.component.interfaces.ISite> (<class 'pyams_utils.zmi.zeo.ZEOConnectionAddForm'>)
       
   340     2018-01-14 11:37:55,016 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.zmi.zeo.ZEOConnectionNameAdapter'> for (<InterfaceClass pyams_utils.interfaces.zeo.IZEOConnection>, <InterfaceClass pyams_zmi.layer.IAdminLayer>) providing <InterfaceClass pyams_skin.interfaces.container.ITableElementName>
       
   341     2018-01-14 11:37:55,017 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "properties.html" for <InterfaceClass pyams_utils.interfaces.zeo.IZEOConnection> (<class 'pyams_utils.zmi.zeo.ZEOConnectionPropertiesEditForm'>)
       
   342     ...
       
   343     2018-01-14 11:41:13,214 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_default_theme.skin.ResourcesAdapter'> for (<InterfaceClass zope.interface.Interface>, <InterfaceClass pyams_default_theme.layer.IPyAMSDefaultLayer>, <InterfaceClass zope.interface.Interface>) providing <InterfaceClass pyams_skin.interfaces.resources.IResources>
       
   344     2018-01-14 11:43:36,665 INFO  [ZEO.ClientStorage][MainThread] [('127.0.0.1', 8100)] ClientStorage (pid=29335) created RW/normal for storage: 'pyams'
       
   345     2018-01-14 11:43:36,665 INFO  [ZEO.cache][MainThread] created temporary cache file 9
       
   346     2018-01-14 11:43:36,673 DEBUG [asyncio][[('127.0.0.1', 8100)] zeo client networking thread] Using selector: EpollSelector
       
   347     2018-01-14 11:43:36,674 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328 Checking blob cache size. (target: 966367642)
       
   348     2018-01-14 11:43:36,674 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] disconnected <ZEO.asyncio.client.Client object at 0x7ffa54058860> None
       
   349     2018-01-14 11:43:36,675 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   blob cache size: 0
       
   350     2018-01-14 11:43:36,675 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] try_connecting
       
   351     2018-01-14 11:43:36,675 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   -->
       
   352     2018-01-14 11:43:36,677 INFO  [ZEO.asyncio.base][[('127.0.0.1', 8100)] zeo client networking thread] Connected Protocol(('127.0.0.1', 8100), 'pyams', False)
       
   353     2018-01-14 11:43:36,679 INFO  [ZEO.ClientStorage][[('127.0.0.1', 8100)] zeo client networking thread] [('127.0.0.1', 8100)] Connected to storage: ('localhost', 8100)
       
   354     2018-01-14 11:43:36,682 DEBUG [txn.140713340237568][MainThread] new transaction
       
   355     2018-01-14 11:43:36,683 DEBUG [txn.140713340237568][MainThread] commit
       
   356     2018-01-14 11:43:36,690 INFO  [PyAMS (scheduler][MainThread] Starting tasks scheduler <SchedulerProcess(SchedulerProcess-1, initial)>...
       
   357     2018-01-14 11:43:36,698 INFO  [PyAMS (scheduler][MainThread] Started tasks scheduler with PID 29361.
       
   358     2018-01-14 11:43:36,701 INFO  [apscheduler.scheduler][MainThread] Scheduler started
       
   359     2018-01-14 11:43:36,702 DEBUG [apscheduler.scheduler][APScheduler] Looking for jobs to run
       
   360     2018-01-14 11:43:36,704 DEBUG [apscheduler.scheduler][APScheduler] No jobs; waiting until a job is added
       
   361     2018-01-14 11:43:36,719 INFO  [ZEO.ClientStorage][MainThread] [('127.0.0.1', 8100)] ClientStorage (pid=29335) created RW/normal for storage: 'pyams'
       
   362     2018-01-14 11:43:36,720 INFO  [ZEO.cache][MainThread] created temporary cache file 15
       
   363     2018-01-14 11:43:36,724 DEBUG [asyncio][[('127.0.0.1', 8100)] zeo client networking thread] Using selector: EpollSelector
       
   364     2018-01-14 11:43:36,725 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] disconnected <ZEO.asyncio.client.Client object at 0x7ffa557e8b00> None
       
   365     2018-01-14 11:43:36,726 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] try_connecting
       
   366     2018-01-14 11:43:36,727 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328 Checking blob cache size. (target: 966367642)
       
   367     2018-01-14 11:43:36,728 INFO  [ZEO.asyncio.base][[('127.0.0.1', 8100)] zeo client networking thread] Connected Protocol(('127.0.0.1', 8100), 'pyams', False)
       
   368     2018-01-14 11:43:36,729 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   blob cache size: 0
       
   369     2018-01-14 11:43:36,729 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   -->
       
   370     2018-01-14 11:43:36,732 INFO  [ZEO.ClientStorage][[('127.0.0.1', 8100)] zeo client networking thread] [('127.0.0.1', 8100)] Connected to storage: ('localhost', 8100)
       
   371     2018-01-14 11:43:36,735 DEBUG [txn.140713340237568][MainThread] new transaction
       
   372     2018-01-14 11:43:36,736 DEBUG [txn.140713340237568][MainThread] commit
       
   373     2018-01-14 11:43:36,743 INFO  [PyAMS (media)][MainThread] Starting medias converter <MediaConversionProcess(MediaConversionProcess-2, initial)>...
       
   374     2018-01-14 11:43:36,751 INFO  [PyAMS (media)][MainThread] Started medias converter with PID 29367.
       
   375     Starting server in PID 29335.
       
   376     Serving on http://0.0.0.0:6543
       
   377 
       
   378 
       
   379 From this point, you can launch a browser and open URL *http://127.0.0.1:6543/admin* to get access to PyAMS
       
   380 management interface; default login is "admin/admin", that you may change as soon as possible (see
       
   381 :ref:`pyams_security`)!!.