【WordPressより安全】Python製CMS Ploneのインストール

【WordPressより安全】Python製CMS Ploneのインストール ツール

「高いセキュリティレベルのCMSを探している」
「Python製のCMSを利用したい」

このような場合には、Ploneがオススメです。
この記事では、Python製CMSのPloneについて解説しています。

本記事の内容

  • Ploneとは?
  • Ploneのシステム要件
  • Ploneのインストール
  • Ploneの動作確認

それでは、上記に沿って解説していきます。

Ploneとは?

Ploneとは、コンテンツ管理システムです。
CMSと言った方が、わかりやすいかもしれません。

CMSと言えば、WordPressを思い浮かべる人がいるでしょう。
WordPressは、PHPで開発されています。

それに対して、PloneはPython製です。
Pythonで開発されているというのが、大きな特徴と言えます。

また、Ploneには以下の強みがあります。

  • 非常に優れたセキュリティ
  • 拡張性
  • 高いユーザビリティ
  • 柔軟性

特にセキュリティは、他のどのCMSよりも優れていると言われています。
セキュリティを意識するなら、Ploneは有力なCMSと言えるでしょう。

以上、Ploneについて説明しました。
次は、Ploneのシステム要件を説明します。

Ploneのシステム要件

現時点(2022年6月末)でのPloneの最新バージョンは、5.2.8となります。
この最新バージョンは、2022年4月29日にリリースされています。

ここでは、Ploneをpipでインストールする場合のシステム要件を説明します。
pip以外では、Dockerやバイナリ設置などインストール方法が用意されています。

pipでインストールする際には、次の点がポイントになります。

  • OS
  • Pythonバージョン
  • 仮想環境
  • Pasteライブラリ

それぞれを下記で説明します。

OS

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

Pythonバージョン

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 2.7
  • Python 3.6
  • Python 3.7
  • Python 3.8

正直、このサポート状況はどうなんだと言いたいです。
以下は、Python公式開発サイクルになります。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

これに従うと、Python 3.7と3.8しか選択肢がありません。
さすがにこれでは選択肢の幅がありません。

でも、安心してください。
Python 3.10でPlone 5.2.8が動くことは検証済みです。

したがって、Python 3.7以降を推奨しておきます。

仮想環境

システム要件に含めるかどうか微妙です。
しかし、あえてシステム要件に含めます。

Ploneは、必ずPython仮想環境にインストールしましょう。
その理由は、依存パッケージの多さにあります。

過去に見たことがないレベルの多さです。
後ほど、その一覧を確認できます。

Python仮想環境については、次の記事で解説しています。

Pasteライブラリ

Ploneの起動時に、次のようなエラーが出てしまうことがあります。

pkg_resources.DistributionNotFound: The 'Paste' distribution was not found and is required by the application

Pasteモジュール(ライブラリ)が見つからないという内容です。
そのため、個別にPasteライブラリをインストールします。

pip install Plone

まとめ

ここまでをまとめると、Python 3.7以降を使いましょうということです。
そして、「Paste」についてエラーが出る場合はインストールしましょう。

あと、Python仮想環境へのインストールは必須と考えてください。
そうしないと、Pythonの環境がメチャクチャになってしまう可能性があります。

以上、Ploneのシステム要件を説明しました。
次は、Ploneのインストールを説明します。

Ploneのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。
Pasteは事前にインストール済みです。

$ pip list
Package    Version
---------- -------
Paste      3.5.1
pip        22.1.2
setuptools 62.6.0
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、Ploneのインストールです。
Ploneのインストールは、以下のコマンドとなります。

pip install Plone

Ploneのインストールは、かなりの時間がかかります。
途中で不安になるほど待たされます。

でも、処理が続く限りはそのまま待ちましょう。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package                        Version
------------------------------ -----------
AccessControl                  5.3.1
Acquisition                    4.10
attrs                          21.4.0
AuthEncoding                   4.3
beautifulsoup4                 4.11.1
borg.localrole                 3.1.8
BTrees                         4.10.0
calmjs.parse                   1.3.0
certifi                        2022.6.15
cffi                           1.15.0
Chameleon                      3.10.1
charset-normalizer             2.0.12
collective.monkeypatcher       1.2.1
cssselect                      1.1.0
DateTime                       4.4
decorator                      5.1.1
diazo                          1.4.2
DocumentTemplate               4.0
docutils                       0.18.1
ExtensionClass                 4.6
feedparser                     6.0.10
five.customerize               2.0.1
five.intid                     1.2.6
five.localsitemanager          3.3
future                         0.18.2
icalendar                      4.0.9
idna                           3.3
jsonschema                     4.6.0
lxml                           4.9.0
Markdown                       3.3.7
Missing                        4.1
mockup                         4.0.2
MultiMapping                   4.1
multipart                      0.2.4
Paste                          3.5.1
PasteDeploy                    2.1.1
Persistence                    3.3
persistent                     4.9.0
piexif                         1.1.3
Pillow                         9.1.1
pip                            22.1.2
Plone                          5.2.8
plone.alterego                 1.1.5
plone.api                      1.11.1
plone.app.caching              2.1.0
plone.app.content              4.0.0a13
plone.app.contentlisting       2.0.7
plone.app.contentmenu          3.0.0b1
plone.app.contentrules         4.1.6
plone.app.contenttypes         2.2.3
plone.app.customerize          1.3.12
plone.app.dexterity            2.6.11
plone.app.discussion           3.4.7
plone.app.event                3.2.14
plone.app.i18n                 3.0.6
plone.app.intid                1.1.4
plone.app.iterate              4.0.3
plone.app.layout               4.0.0b1
plone.app.linkintegrity        3.6.1
plone.app.locales              6.0.2
plone.app.lockingbehavior      1.0.7
plone.app.multilingual         5.6.4
plone.app.portlets             4.4.7
plone.app.querystring          1.6.0
plone.app.redirector           2.2.1
plone.app.registry             2.0.0a9
plone.app.relationfield        2.0.3
plone.app.textfield            1.3.6
plone.app.theming              4.1.7
plone.app.upgrade              2.1.1
plone.app.users                2.6.6
plone.app.uuid                 2.1.0
plone.app.versioningbehavior   1.4.6
plone.app.viewletmanager       3.1.2
plone.app.vocabularies         4.3.0
plone.app.widgets              4.0.0a2
plone.app.workflow             4.0.4
plone.app.z3cform              3.2.4
plone.autoform                 2.0.0a1
plone.base                     1.0.0b1
plone.batching                 1.1.7
plone.behavior                 1.4.0
plone.browserlayer             2.2.4
plone.cachepurging             2.0.4
plone.caching                  1.2.2
plone.contentrules             2.1.2
plone.dexterity                2.10.5
plone.event                    1.4.1
plone.folder                   3.1.0
plone.formwidget.namedfile     2.1.3
plone.formwidget.recurrence    2.1.5
plone.i18n                     5.0.0a5
plone.indexer                  1.0.7
plone.intelligenttext          3.1.0
plone.keyring                  3.1.3
plone.locking                  2.2.5
plone.memoize                  2.1.1
plone.namedfile                5.6.0
plone.outputfilters            4.1.0
plone.portlet.collection       3.3.6
plone.portlet.static           3.1.6
plone.portlets                 2.3.2
plone.protect                  4.1.6
plone.registry                 1.2.1
plone.resource                 2.1.4
plone.resourceeditor           3.0.3
plone.rest                     1.6.2
plone.restapi                  8.23.0
plone.rfc822                   2.0.2
plone.scale                    3.1.2
plone.schema                   1.4.0
plone.schemaeditor             3.0.3
plone.session                  3.7.5
plone.staticresources          1.4.6
plone.stringinterp             1.3.3
plone.subrequest               1.9.3
plone.supermodel               1.6.4
plone.synchronize              1.0.4
plone.theme                    3.0.7
plone.transformchain           2.0.2
plone.uuid                     1.0.6
plone.z3cform                  2.0.0b1
plonetheme.barceloneta         2.1.10
ply                            3.11
Products.BTreeFolder2          4.3
Products.CMFCore               2.5.4
Products.CMFDiffTool           3.3.3
Products.CMFDynamicViewFTI     6.0.3
Products.CMFEditions           3.3.4
Products.CMFFormController     4.1.4
Products.CMFPlacefulWorkflow   2.0.4
Products.CMFPlone              5.2.8
Products.CMFQuickInstallerTool 4.0.4
Products.CMFUid                3.2.0
Products.DateRecurringIndex    3.0.1
Products.DCWorkflow            2.5.0
Products.ExtendedPathIndex     4.0.1
Products.ExternalMethod        4.5
Products.GenericSetup          2.2.0
Products.isurlinportal         1.2.1
Products.MailHost              4.12
Products.MimetypesRegistry     2.1.9
Products.PlonePAS              6.0.8
Products.PluggableAuthService  2.7.0
Products.PluginRegistry        1.9
Products.PortalTransforms      3.2.0
Products.PythonScripts         4.13
Products.Sessions              4.12
Products.SiteErrorLog          5.5
Products.StandardCacheManagers 4.1.1
Products.statusmessages        5.0.5
Products.TemporaryFolder       6.2
Products.ZCatalog              6.2
Products.ZODBMountPoint        1.2
Products.ZopeVersionControl    2.0.0
pycparser                      2.21
PyJWT                          2.4.0
pyrsistent                     0.18.1
pyScss                         1.4.0
python-dateutil                2.8.2
python-gettext                 4.0
pytz                           2022.1
Record                         3.5
repoze.xmliter                 0.6.1
requests                       2.28.0
RestrictedPython               6.0a1.dev0
roman                          3.3
setuptools                     62.6.0
sgmllib3k                      1.0.0
simplejson                     3.17.6
six                            1.16.0
soupsieve                      2.3.2.post1
tempstorage                    5.2
transaction                    3.0.1
Unidecode                      1.3.4
urllib3                        1.26.9
waitress                       2.1.2
WebOb                          1.8.7
WebTest                        3.0.0
wheel                          0.36.2
WSGIProxy2                     0.5.1
z3c.autoinclude                0.4.1
z3c.caching                    2.2
z3c.form                       4.3
z3c.formwidget.query           0.17
z3c.objpath                    1.2
z3c.pt                         3.3.1
z3c.relationfield              0.9.0
z3c.zcmlhook                   1.1
zc.lockfile                    2.0
zc.relation                    1.1.post2
ZConfig                        3.6.0
zdaemon                        4.3
ZEO                            5.3.0
zExceptions                    4.2
ZODB                           5.7.0
ZODB3                          3.11.0
zodbpickle                     2.3
Zope                           5.5.1
zope.annotation                4.7.0
zope.app.locales               4.2
zope.browser                   2.4
zope.browsermenu               4.4
zope.browserpage               4.4.0
zope.browserresource           4.4
zope.cachedescriptors          4.3.1
zope.component                 5.0.1
zope.componentvocabulary       2.3.0
zope.configuration             4.4.1
zope.container                 4.5.0
zope.contentprovider           4.2.1
zope.contenttype               4.5.0
zope.copy                      4.2
zope.datetime                  4.3.0
zope.deferredimport            4.4
zope.deprecation               4.4.0
zope.dottedname                4.3
zope.event                     4.5.0
zope.exceptions                4.5
zope.filerepresentation        5.0.0
zope.globalrequest             1.5
zope.hookable                  5.1.0
zope.i18n                      4.9.0
zope.i18nmessageid             5.0.1
zope.interface                 5.4.0
zope.intid                     4.4.0
zope.keyreference              5.0.0
zope.lifecycleevent            4.4
zope.location                  4.2
zope.pagetemplate              4.6.0
zope.processlifetime           2.3.0
zope.proxy                     4.5.0
zope.ptresource                4.3.0
zope.publisher                 6.1.0
zope.ramcache                  2.4
zope.schema                    6.2.0
zope.security                  5.3
zope.sendmail                  5.2
zope.sequencesort              4.2
zope.site                      4.5.0
zope.size                      4.3
zope.structuredtext            4.4
zope.tal                       4.5
zope.tales                     5.1
zope.testbrowser               5.6.1
zope.testing                   4.10
zope.traversing                4.4.1
zope.viewlet                   4.3
Zope2                          4.0

依存パッケージの数が、尋常ではありません。
Ploneは、それだけ多くの技術に支えられているということでしょう。

以上、Ploneのインストールを説明しました。
次は、Ploneの動作確認を説明します。

Ploneの動作確認

まずは、次のコマンドが利用できるかどうか確認しましょう。

mkwsgiinstance -h

次のように表示されれば、Ploneのインストールは問題ありません。

$ mkwsgiinstance -h
mkwsgiinstance:  Create a Zope WSGI instance home.

usage:  mkwsgiinstance [options]

Options:
-h/--help -- print this help text
-d/--dir  -- the dir in which the instance home should be created
-u/--user NAME:PASSWORD -- set the user name and password of the initial user
-s/--skelsrc -- the dir from which skeleton files should be copied
-p/--python -- the Python interpreter to use

When run without arguments, this script will ask for the information
necessary to create a Zope WSGI instance home.

Ploneは、ZopeをWebアプリケーションフレームワークに採用しています。
次のコマンドにより、その設定を保存する場所を作成します。

mkwsgiinstance -d 保存先

実際に実行した結果は、以下。

$ mkwsgiinstance -d ./profiles
Please choose a username and password for the initial user.
These will be the credentials you use to initially manage
your new Zope instance.

Username: tester
Password: 
Verify password:

途中でUsernameとPasswordを入力する必要があります。
上記は、「tester」というUsernameを入力しています。

処理が完了すると、指定した(profiles)ディレクトリが作成されます。

ディレクトリの中には、アプリケーションの設定ファイルが作成されています。
準備ができたので、アプリケーション(Zope)を起動します。

起動には、次のコマンドを用います。

runwsgi -v zope.iniのパス

zope.iniには、アプリケーションの情報が記載されています。

zope.ini

[app:zope]
use = egg:Zope#main
zope_conf = %(here)s/zope.conf

[server:main]
use = egg:waitress#main
host = 127.0.0.1
port = 8080

[filter:translogger]
use = egg:Paste#translogger
setup_console_handler = False

[pipeline:main]
pipeline =
    egg:Zope#httpexceptions
    translogger
    zope

[loggers]
keys = root, waitress.queue, waitress, wsgi

[handlers]
keys = console, accesslog, eventlog

[formatters]
keys = generic, message

[formatter_generic]
format = %(asctime)s %(levelname)s [%(name)s:%(lineno)s][%(threadName)s] %(message)s
datefmt = %Y-%m-%d %H:%M:%S

[formatter_message]
format = %(message)s

[logger_root]
level = INFO
handlers = console, eventlog

[logger_waitress.queue]
level = INFO
handlers = eventlog
qualname = waitress.queue
propagate = 0

[logger_waitress]
level = INFO
handlers = eventlog
qualname = waitress

[logger_wsgi]
level = WARN
handlers = accesslog
qualname = wsgi
propagate = 0

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[handler_accesslog]
class = FileHandler
args = ('/home/gansuke/PycharmProjects/Plone/profiles/var/log/Z4.log','a')
level = INFO
formatter = message

[handler_eventlog]
class = FileHandler
args = ('/home/gansuke/PycharmProjects/Plone/profiles/var/log/event.log', 'a')
level = INFO
formatter = generic

実際には、次のようにコマンドを実行しています。

$ runwsgi -v profiles/etc/zope.ini
2022-06-26 19:07:19 INFO [chameleon.config:38][MainThread] directory cache: /home/gansuke/PycharmProjects/Plone/profiles/var/cache.
2022-06-26 19:07:50 INFO [Zope:42][MainThread] Ready to handle requests
Starting server in PID 193817.
2022-06-26 19:07:50 INFO [waitress:486][MainThread] Serving on http://127.0.0.1:8080

デフォルトでは、http://127.0.0.1:8080でPloneは起動しています。
ブラウザでこのURLにアクセスします。

サーバーにPloneをインストールしているなら、そのIPアドレスをもとにアクセス。
IPアドレスを確認する方法は、次の記事で説明しています。

アクセスの際には、ポートは開放しておく必要があります。
今回であれば、ポート8080になります。
変更したければ、zope.iniを変更します。

該当のURLにアクセスしたら、次のような画面を確認できます。

「Ploneが動作中です」と確認できれば、Ploneの動作確認はOKです。

以上、Ploneの動作確認を説明しました。

タイトルとURLをコピーしました