src/Doc/System/Phabricator.thy
author wenzelm
Thu, 12 Dec 2019 15:42:58 +0100
changeset 71278 197aa6b57a83
parent 71276 b4401dfd6544
child 71279 2e873da296ae
permissions -rw-r--r--
more documentation;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
     1
(*:maxLineLen=78:*)
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
     2
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
     3
theory Phabricator
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
     4
imports Base
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
     5
begin
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
     6
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
     7
chapter \<open>Phabricator server administration\<close>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
     8
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
     9
text \<open>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    10
  Phabricator\<^footnote>\<open>\<^url>\<open>https://www.phacility.com/phabricator\<close>\<close> is an open-source
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    11
  product to support the development process of complex software projects
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    12
  (open or closed ones). The official slogan is:
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    13
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    14
  \begin{quote}
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    15
    Discuss. Plan. Code. Review. Test. \\
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    16
    Every application your project needs, all in one tool.
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    17
  \end{quote}
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    18
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    19
  Ongoing changes and discussions about changes are maintained uniformly
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    20
  within a MySQL database. There are standard connections to major version
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    21
  control systems: \<^bold>\<open>Subversion\<close>, \<^bold>\<open>Mercurial\<close>, \<^bold>\<open>Git\<close>. So Phabricator offers
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    22
  a counter-model to trends of monoculture and centralized version control,
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    23
  especially due to Microsoft's Github and Atlassian's Bitbucket.
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    24
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    25
  The small company behind Phabricator provides paid plans for support and
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    26
  hosting of servers, but it is easy to do \<^emph>\<open>independent self-hosting\<close> on a
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    27
  standard LAMP server (Linux, Apache, MySQL, PHP). This merely requires a
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    28
  virtual machine on the Net, which can be rented cheaply from local hosting
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    29
  providers --- there is no need to follow big cloud corporations. So it is
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    30
  feasible to remain the master of your virtual home, following the slogan
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    31
  ``own all your data''. In many respects, Phabricator is similar to the
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    32
  well-known Nextcloud\<^footnote>\<open>\<^url>\<open>https://nextcloud.org\<close>\<close> product, concerning both
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    33
  the technology and sociology.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    34
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    35
  \<^medskip>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    36
  The following Phabricator instances may serve as examples:
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    37
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    38
    \<^item> Phabricator development \<^url>\<open>https://secure.phabricator.com\<close>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    39
    \<^item> Wikimedia development \<^url>\<open>https://phabricator.wikimedia.org\<close>
71133
962eda254ac4 more examples;
wenzelm
parents: 71132
diff changeset
    40
    \<^item> Blender development \<^url>\<open>https://developer.blender.org/\<close>
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    41
    \<^item> Mercurial development \<^url>\<open>https://phab.mercurial-scm.org\<close>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    42
    \<^item> Isabelle development \<^url>\<open>https://isabelle-dev.sketis.net\<close>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    43
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    44
  \<^medskip> Initial Phabricator configuration requires many details to be done
71105
wenzelm
parents: 71103
diff changeset
    45
  right.\<^footnote>\<open>See also
wenzelm
parents: 71103
diff changeset
    46
  \<^url>\<open>https://secure.phabricator.com/book/phabricator/article/installation_guide\<close>
wenzelm
parents: 71103
diff changeset
    47
  in the context of \<^url>\<open>https://help.ubuntu.com/lts/serverguide\<close>.\<close> Isabelle
wenzelm
parents: 71103
diff changeset
    48
  provides some command-line tools to help with the setup, and afterwards
wenzelm
parents: 71103
diff changeset
    49
  Isabelle support is optional: it is possible to run and maintain the server,
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    50
  without requiring the somewhat bulky Isabelle distribution again.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    51
\<close>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    52
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    53
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    54
section \<open>Quick start\<close>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    55
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    56
text \<open>
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    57
  The starting point is a fresh installation of \<^bold>\<open>Ubuntu 18.04
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    58
  LTS\<close>\<^footnote>\<open>\<^url>\<open>https://ubuntu.com/download\<close>\<close>: this version is mandatory due to
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    59
  subtle dependencies on system packages and configuration that is assumed by
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    60
  the Isabelle setup tool.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    61
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    62
  For production use, a proper \<^emph>\<open>Virtual Server\<close> or \<^emph>\<open>Root Server\<close> product
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    63
  from a hosting provider will be required, including an Internet Domain Name
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    64
  (a pseudo sub-domain in the style of Apache is sufficient).
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    65
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    66
  Initial experimentation also works on a local host, e.g.\ via
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    67
  VirtualBox\<^footnote>\<open>\<^url>\<open>https://www.virtualbox.org\<close>\<close>. The public domain \<^verbatim>\<open>lvh.me\<close> is
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    68
  used below: it maps arbitrary subdomains to \<^verbatim>\<open>localhost\<close>.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    69
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    70
  All administrative commands need to be run as \<^verbatim>\<open>root\<close> user (e.g.\ via
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    71
  \<^verbatim>\<open>sudo\<close>). Note that Isabelle refers to user-specific configuration in the
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    72
  user home directory via @{setting ISABELLE_HOME_USER}
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    73
  (\secref{sec:settings}); that may be different or absent for the root user
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    74
  and thus cause confusion.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    75
\<close>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    76
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    77
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    78
subsection \<open>Initial setup\<close>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    79
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    80
text \<open>
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    81
  Isabelle can manage multiple named Phabricator installations: this allows to
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    82
  separate administrative responsibilities, e.g.\ different approaches to user
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    83
  management for different projects. Subsequently we always use the default
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    84
  name ``\<^verbatim>\<open>vcs\<close>'': it will appear in file and directory locations, internal
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    85
  database names and URLs.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    86
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    87
  The initial setup works as follows (with full Linux package upgrade):
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    88
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    89
  @{verbatim [display] \<open>  isabelle phabricator_setup -U\<close>}
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    90
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    91
  After installing many packages, cloning the Phabricator distribution,
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    92
  initializing the MySQL database and Apache, the tool prints an URL for
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    93
  further configuration. The following needs to be provided by the web
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    94
  interface:
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
    95
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    96
    \<^item> An initial user that will get administrator rights. There is no need to
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    97
    create a special \<^verbatim>\<open>admin\<close> account. Instead, a regular user that will take
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    98
    over this responsibility can be used here. Subsequently we assume that
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
    99
    user \<^verbatim>\<open>makarius\<close> becomes the initial administrator.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   100
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   101
    \<^item> An \<^emph>\<open>Auth Provider\<close> to manage user names and passwords. None is provided
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   102
    by default, and Phabricator points out this omission prominently in its
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   103
    overview of \<^emph>\<open>Setup Issues\<close>: following these hints quickly leads to the
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   104
    place where a regular \<^emph>\<open>Username/Password\<close> provider can be added.
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   105
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   106
    Alternatively, Phabricator can delegate the responsibility of
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   107
    authentication to big corporations like Google and Facebook, but these can
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   108
    be ignored. Genuine self-hosting means to manage users directly, without
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   109
    outsourcing of authentication.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   110
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   111
    \<^item> A proper password for the administrator can now be set, e.g.\ by the
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   112
    following command:
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   113
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   114
    @{verbatim [display] \<open>  isabelle phabricator bin/auth recover makarius\<close>}
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   115
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   116
    The printed URL gives access to a login and password dialog in the web
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   117
    interface.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   118
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   119
    Any further users will be able to provide a password directly, because the
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   120
    Auth Provider is already active.
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   121
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   122
    \<^item> The list of Phabricator \<^bold>\<open>Setup Issues\<close> should be studied with some
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   123
    care, to make sure that no serious problems are remaining. The request to
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   124
    lock the configuration can be fulfilled as follows:
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   125
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   126
    @{verbatim [display] \<open>  isabelle phabricator bin/auth lock\<close>}
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   127
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   128
    \<^medskip> A few other Setup Issues might be relevant as well, e.g.\ the timezone
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   129
    of the server. Some more exotic points can be ignored: Phabricator
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   130
    provides careful explanations about what it thinks could be wrong, always
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   131
    leaving some room for interpretation.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   132
\<close>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   133
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   134
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   135
subsection \<open>Mailer configuration\<close>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   136
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   137
text \<open>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   138
  The next important thing is messaging: Phabricator needs to be able to
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   139
  communicate with users on its own account, e.g.\ to reset passwords. The
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   140
  documentation has many variations on \<^emph>\<open>Configuring Outbound
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   141
  Email\<close>\<^footnote>\<open>\<^url>\<open>https://secure.phabricator.com/book/phabricator/article/configuring_outbound_email\<close>\<close>,
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   142
  but a conventional SMTP server with a dedicated \<^verbatim>\<open>phabricator\<close> user is
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   143
  sufficient. There is no need to run a separate mail server on the
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   144
  self-hosted Linux machine: hosting providers often include such a service
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   145
  for free, e.g.\ as part of a web-hosting package. As a last resort it is
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   146
  also possible to use a corporate service like Gmail, but such dependency
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   147
  dilutes the whole effort of self-hosting.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   148
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   149
  \<^medskip>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   150
  Mailer configuration requires a few command-line invocations as follows:
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   151
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   152
  @{verbatim [display] \<open>  isabelle phabricator_setup_mail\<close>}
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   153
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   154
  \<^noindent> This generates a JSON template file for the the mail account details.
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   155
  After editing that, the subsequent command will add and test it with
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   156
  Phabricator:
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   157
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   158
  @{verbatim [display] \<open>  isabelle phabricator_setup_mail -T makarius\<close>}
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   159
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   160
  This tells Phabricator to send a message to the administrator created
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   161
  before; the output informs about success or errors.
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   162
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   163
  The mail configuration process can be refined and repeated until it works
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   164
  properly: host name, port number, protocol etc.\ all need to be correct. The
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   165
  \<^verbatim>\<open>key\<close> field in the JSON file identifies the name of the configuration that
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   166
  will be overwritten each time, when taking over the parameters via
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   167
  \<^verbatim>\<open>isabelle phabricator_setup_mail\<close>.
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   168
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   169
  \<^medskip>
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   170
  This is how to query the current mail configuration:
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   171
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   172
  @{verbatim [display] \<open>  isabelle phabricator bin/config get cluster.mailers\<close>}
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   173
\<close>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   174
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   175
71132
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   176
subsection \<open>SSH configuration\<close>
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   177
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   178
text \<open>
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   179
  SSH configuration is optional, but important to access hosted repositories
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   180
  with public-key authentication.
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   181
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   182
  The subsequent configuration is convenient, but also ambitious: it takes
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   183
  away the standard port 22 from the operating system and assigns it to
71267
wenzelm
parents: 71133
diff changeset
   184
  Isabelle/Phabricator:
71132
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   185
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   186
  @{verbatim [display] \<open>  isabelle phabricator_setup_ssh -p 22 -q 222\<close>}
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   187
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   188
  Afterwards, remote login to the server host needs to use that alternative
71267
wenzelm
parents: 71133
diff changeset
   189
  port 222. If there is a problem with it, the administrator can usually
wenzelm
parents: 71133
diff changeset
   190
  connect to a remote console via some web interface of the virtual server
wenzelm
parents: 71133
diff changeset
   191
  provider.
71132
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   192
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   193
  \<^medskip>
71267
wenzelm
parents: 71133
diff changeset
   194
  The following alternative is more modest: it uses port 2222 for Phabricator,
wenzelm
parents: 71133
diff changeset
   195
  and retains port 22 for the operating system:
71132
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   196
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   197
  @{verbatim [display] \<open>  isabelle phabricator_setup_ssh -p 2222 -q 22\<close>}
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   198
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   199
  \<^medskip>
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   200
  The tool can be invoked multiple times with different parameters; ports are
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   201
  changed back and forth each time and services restarted.
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   202
\<close>
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   203
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   204
71278
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   205
subsection \<open>Public domain name and HTTPS configuration\<close>
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   206
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   207
text \<open>
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   208
  So far the Phabricator server has been accessible only on \<^verbatim>\<open>localhost\<close> (via
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   209
  the alias \<^verbatim>\<open>lvh.me\<close>). Proper configuration of a public Internet domain name
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   210
  (with HTTPS certificate from \<^emph>\<open>Let's Encrypt\<close>) works as follows.
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   211
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   212
    \<^item> Register a subdomain (e.g.\ \<^verbatim>\<open>vcs.example.org\<close>) as an alias for the IP
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   213
    address of the underlying Linux host. This usually works by some web
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   214
    interface of the hosting provider to edit DNS entries; it might require
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   215
    some time for updated DNS records to become publicly available.
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   216
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   217
    \<^item> Edit the Phabricator website configuration file in
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   218
    \<^path>\<open>/etc/apache2/sites-available/\<close> to specify \<^verbatim>\<open>ServerName\<close> and
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   219
    \<^verbatim>\<open>ServerAdmin\<close> like this: @{verbatim [display] \<open>  ServerName vcs.example.org
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   220
  ServerAdmin webmaster@example.org\<close>}
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   221
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   222
    Then reload (or restart) Apache like this:
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   223
    @{verbatim [display] \<open>  systemctl reload apache2\<close>}
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   224
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   225
    \<^item> Install \<^verbatim>\<open>certbot\<close> from \<^url>\<open>https://certbot.eff.org\<close> following the
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   226
    description for Apache and Ubuntu 18.04 on
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   227
    \<^url>\<open>https://certbot.eff.org/lets-encrypt/ubuntubionic-apache\<close>. Run
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   228
    \<^verbatim>\<open>certbot\<close> interactively and let it operate on the domain
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   229
    \<^verbatim>\<open>vcs.example.org\<close>.
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   230
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   231
    \<^item> Inform Phabricator about its new domain name like this:
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   232
    @{verbatim [display] \<open>  isabelle phabricator bin/config set
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   233
    phabricator.base-uri https://vcs.example.org\<close>}
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   234
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   235
    \<^item> Visit the website \<^verbatim>\<open>https://vcs.example.org\<close> and continue Phabricator
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   236
    configuration as described before. The following options are particularly
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   237
    relevant for a public website:
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   238
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   239
      \<^item> \<^emph>\<open>Auth Provider / Username/Password\<close>: disable \<^emph>\<open>Allow Registration\<close> to
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   240
      avoid arbitrary registrants; users can be invited via email instead.
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   241
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   242
      \<^item> Enable \<^verbatim>\<open>policy.allow-public\<close> to allow read-only access to resources,
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   243
      without requiring user registration.
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   244
\<close>
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   245
197aa6b57a83 more documentation;
wenzelm
parents: 71276
diff changeset
   246
71271
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   247
section \<open>Global data storage and backups\<close>
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   248
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   249
text \<open>
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   250
  The global state of a Phabricator installation consists of two main parts:
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   251
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   252
    \<^enum> The \<^emph>\<open>root directory\<close> according to
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   253
    \<^path>\<open>/etc/isabelle-phabricator.conf\<close> or \<^verbatim>\<open>isabelle phabricator -l\<close>: it
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   254
    contains the main PHP program suite with administrative tools, and some
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   255
    configuration files. The default setup also puts hosted repositories here
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   256
    (subdirectory \<^verbatim>\<open>repo\<close>).
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   257
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   258
    \<^enum> Multiple \<^emph>\<open>MySQL databases\<close> with a common prefix derived from the
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   259
    installation name --- the same name is used as database user name.
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   260
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   261
  The Linux root may invoke \<^verbatim>\<open>/usr/local/bin/isabelle-phabricator-dump\<close> to
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   262
  create a complete database dump within the root directory. Afterwards it is
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   263
  sufficient to make a conventional \<^bold>\<open>file-system backup\<close> of everything. To
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   264
  restore the database state, see the explanations on \<^verbatim>\<open>mysqldump\<close> in
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   265
  \<^url>\<open>https://secure.phabricator.com/book/phabricator/article/configuring_backups\<close>.
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   266
\<close>
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   267
58aa62b8c6d3 more documentation;
wenzelm
parents: 71267
diff changeset
   268
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   269
section \<open>Reference of command-line tools\<close>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   270
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   271
text \<open>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   272
  The subsequent command-line tools usually require root user privileges on
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   273
  the underlying Linux system (e.g.\ via \<^verbatim>\<open>sudo bash\<close> to open a subshell, or
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   274
  directly via \<^verbatim>\<open>sudo isabelle phabricator ...\<close>).
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   275
\<close>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   276
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   277
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   278
subsection \<open>\<^verbatim>\<open>isabelle phabricator\<close>\<close>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   279
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   280
text \<open>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   281
  The @{tool_def phabricator} tool invokes a GNU bash command-line within the
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   282
  Phabricator home directory:
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   283
  @{verbatim [display]
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   284
\<open>Usage: isabelle phabricator [OPTIONS] COMMAND [ARGS...]
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   285
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   286
  Options are:
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   287
    -l           list available Phabricator installations
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   288
    -n NAME      Phabricator installation name (default: "vcs")
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   289
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   290
  Invoke a command-line tool within the home directory of the named
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   291
  Phabricator installation.\<close>}
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   292
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   293
  Isabelle/Phabricator installations are registered in the global
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   294
  configuration file \<^path>\<open>/etc/isabelle-phabricator.conf\<close>, with name and
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   295
  root directory separated by colon (no extra whitespace). The home directory
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   296
  is the subdirectory \<^verbatim>\<open>phabricator\<close> within the root.
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   297
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   298
  \<^medskip> Option \<^verbatim>\<open>-l\<close> lists the available Phabricator installations with name and
71276
b4401dfd6544 clarified "isabelle phabricator -l": avoid surprise with non-existent default installation;
wenzelm
parents: 71271
diff changeset
   299
  root directory --- without invoking a command.
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   300
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   301
  Option \<^verbatim>\<open>-n\<close> selects the explicitly named Phabricator installation.
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   302
\<close>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   303
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   304
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   305
subsubsection \<open>Examples\<close>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   306
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   307
text \<open>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   308
  Print the home directory of the Phabricator installation:
71132
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   309
  @{verbatim [display] \<open>  isabelle phabricator pwd\<close>}
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   310
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   311
  Print some Phabricator configuration information:
71132
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   312
  @{verbatim [display] \<open>  isabelle phabricator bin/config get phabricator.base-uri\<close>}
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   313
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   314
  The latter conforms to typical command templates seen in the original
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   315
  Phabricator documentation:
71132
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   316
  @{verbatim [display] \<open>  phabricator/ $ ./bin/config get phabricator.base-uri\<close>}
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   317
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   318
  Here the user is meant to navigate to the Phabricator home manually, in
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   319
  contrast to \<^verbatim>\<open>isabelle phabricator\<close> doing it automatically thanks to the
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   320
  global configuration \<^path>\<open>/etc/isabelle-phabricator.conf\<close>.
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   321
\<close>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   322
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   323
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   324
subsection \<open>\<^verbatim>\<open>isabelle phabricator_setup\<close>\<close>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   325
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   326
text \<open>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   327
  The @{tool_def phabricator_setup} installs a fresh Phabricator instance on
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   328
  Ubuntu 18.04 LTS:
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   329
  @{verbatim [display] \<open>Usage: isabelle phabricator_setup [OPTIONS]
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   330
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   331
  Options are:
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   332
    -R DIR       repository directory (default: "/var/www/phabricator-NAME/repo")
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   333
    -U           full update of system packages before installation
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   334
    -n NAME      Phabricator installation name (default: "vcs")
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   335
    -r DIR       installation root directory (default: "/var/www/phabricator-NAME")
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   336
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   337
  Install Phabricator as LAMP application (Linux, Apache, MySQL, PHP).
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   338
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   339
  The installation name (default: "vcs") is mapped to a regular
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   340
  Unix user; this is relevant for public SSH access.\<close>}
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   341
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   342
  Installation requires Linux root permissions. All required packages are
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   343
  installed automatically beforehand, this includes the Apache web server and
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   344
  the MySQL database engine.
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   345
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   346
  Global configuration in \<^verbatim>\<open>/etc\<close> or a few other directories like \<^verbatim>\<open>/var/www\<close>
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   347
  uses name prefixes like \<^verbatim>\<open>isabelle-phabricator\<close> or \<^verbatim>\<open>phabricator\<close>. Local
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   348
  configuration for a particular installation uses more specific names derived
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   349
  from \<^verbatim>\<open>phabricator-\<close>\<open>NAME\<close>, e.g.\ \<^verbatim>\<open>/var/www/phabricator-vcs\<close> for the
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   350
  default.
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   351
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   352
  Knowing the naming conventions, it is possible to purge a Linux installation
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   353
  from Isabelle/Phabricator with some effort, but there is no automated
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   354
  procedure for de-installation. In the worst case, it might be better to
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   355
  re-install the virtual machine from a clean image.
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   356
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   357
  \<^medskip>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   358
  Option \<^verbatim>\<open>-U\<close> ensures a full update of system packages, before installing
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   359
  further packages required by Phabricator. This might require to reboot.
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   360
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   361
  Option \<^verbatim>\<open>-n\<close> provides an alternative installation name. The default name
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   362
  \<^verbatim>\<open>vcs\<close> means ``version control system''. The name appears in the URL for SSH
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   363
  access, and thus has some relevance to end-users. The initial server URL
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   364
  also uses the same suffix, but that can (and should) be changed later via
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   365
  regular Apache configuration.
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   366
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   367
  Option \<^verbatim>\<open>-r\<close> specifies an alternative installation root directory: it needs
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   368
  to be accessible for the Apache web server.
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   369
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   370
  Option \<^verbatim>\<open>-R\<close> specifies an alternative directory for repositories that are
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   371
  hosted by Phabricator. Provided that it is accessible for the Apache web
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   372
  server, the directory can be reused for the \<^verbatim>\<open>hgweb\<close> view by Mercurial.\<^footnote>\<open>See
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   373
  also the documentation
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   374
  \<^url>\<open>https://www.mercurial-scm.org/wiki/PublishingRepositories\<close> and the
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   375
  example \<^url>\<open>https://isabelle.sketis.net/repos\<close>.\<close>
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   376
\<close>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   377
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   378
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   379
subsection \<open>\<^verbatim>\<open>isabelle phabricator_setup_mail\<close>\<close>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   380
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   381
text \<open>
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   382
  The @{tool_def phabricator_setup_mail} provides mail configuration for an
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   383
  existing Phabricator installation:
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   384
  @{verbatim [display] \<open>Usage: isabelle phabricator_setup_mail [OPTIONS]
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   385
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   386
  Options are:
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   387
    -T USER      send test mail to Phabricator user
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   388
    -f FILE      config file (default: "mailers.json" within
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   389
                 Phabricator root)
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   390
    -n NAME      Phabricator installation name (default: "vcs")
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   391
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   392
  Provide mail configuration for existing Phabricator installation.\<close>}
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   393
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   394
  Proper mail configuration is vital for Phabricator, but the details can be
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   395
  tricky. A common approach is to re-use an existing SMTP mail service, as is
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   396
  often included in regular web hosting packages. It is sufficient to create
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   397
  one mail account for multiple Phabricator installations, but the
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   398
  configuration needs to be set for each installation.
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   399
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   400
  The first invocation of \<^verbatim>\<open>isabelle phabricator_setup_mail\<close> without options
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   401
  creates a JSON template file. Its \<^verbatim>\<open>key\<close> entry should be changed to
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   402
  something sensible to identify the configuration, e.g.\ the Internet Domain
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   403
  Name of the mail address. The \<^verbatim>\<open>options\<close> specify the SMTP server address and
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   404
  account information.
71103
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   405
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   406
  Another invocation of \<^verbatim>\<open>isabelle phabricator_setup_mail\<close> with updated JSON
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   407
  file will change the underlying Phabricator installation. This can be done
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   408
  repeatedly, until everything works as expected.
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   409
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   410
  Option \<^verbatim>\<open>-T\<close> invokes a standard Phabricator test procedure for the mail
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   411
  configuration. The argument needs to be a valid Phabricator user: the mail
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   412
  address is derived from the user profile.
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   413
c073c4e79518 more documentation;
wenzelm
parents: 71099
diff changeset
   414
  Option \<^verbatim>\<open>-f\<close> refers to an existing JSON configuration file, e.g.\ from a
71131
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   415
  previous successful Phabricator installation: sharing mailers setup with the
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   416
  same mail address is fine for outgoing mails; incoming mails are optional
1579a9160c7f misc tuning and clarification;
wenzelm
parents: 71105
diff changeset
   417
  and not configured here.
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   418
\<close>
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   419
71132
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   420
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   421
subsection \<open>\<^verbatim>\<open>isabelle phabricator_setup_ssh\<close>\<close>
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   422
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   423
text \<open>
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   424
  The @{tool_def phabricator_setup_ssh} configures a special SSH service
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   425
  for all Phabricator installations:
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   426
  @{verbatim [display] \<open>Usage: isabelle phabricator_setup_ssh [OPTIONS]
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   427
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   428
  Options are:
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   429
    -p PORT      sshd port for Phabricator servers (default: 2222)
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   430
    -q PORT      sshd port for the operating system (default: 22)
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   431
    -T           test the ssh service for each Phabricator installation
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   432
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   433
  Configure ssh service for all Phabricator installations: a separate sshd
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   434
  is run in addition to the one of the operating system, and ports need to
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   435
  be distinct.
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   436
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   437
  A particular Phabricator installation is addressed by using its
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   438
  name as the ssh user; the actual Phabricator user is determined via
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   439
  stored ssh keys.\<close>}
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   440
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   441
  This is optional, but very useful. It allows to refer to hosted repositories
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   442
  via ssh with the usual public-key authentication. It also allows to
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   443
  communicate with a Phabricator server via the JSON API of
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   444
  \<^emph>\<open>Conduit\<close>\<^footnote>\<open>\<^url>\<open>https://secure.phabricator.com/book/phabricator/article/conduit\<close>\<close>.
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   445
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   446
  \<^medskip> The Phabricator SSH server distinguishes installations by their name,
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   447
  e.g.\ \<^verbatim>\<open>vcs\<close> as SSH user name. The public key that is used for
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   448
  authentication identifies the user within Phabricator: there is a web
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   449
  interface to provide that as part of the user profile.
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   450
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   451
  The operating system already has an SSH server (by default on port 22) that
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   452
  remains important for remote administration of the machine.
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   453
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   454
  \<^medskip>
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   455
  Options \<^verbatim>\<open>-p\<close> and \<^verbatim>\<open>-q\<close> allow to change the port assignment for both servers.
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   456
  A common scheme is \<^verbatim>\<open>-p 22 -q 222\<close> to leave the standard port to
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   457
  Phabricator, to simplify the ssh URL that users will see for remote
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   458
  repository clones.
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   459
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   460
  Redirecting the operating system sshd to port 222 requires some care: it
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   461
  requires to adjust the remote login procedure, e.g.\ in \<^verbatim>\<open>$HOME/.ssh/config\<close>
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   462
  to add a \<^verbatim>\<open>Port\<close> specification for the server machine.
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   463
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   464
  \<^medskip>
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   465
  Option \<^verbatim>\<open>-T\<close> tests the SSH connection by communicating via Conduit. This
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   466
  requires to install the public key of the Linux root in some Phabricator
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   467
  user profile, e.g.\ for the administrator.
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   468
\<close>
e5984c853f77 more documentation;
wenzelm
parents: 71131
diff changeset
   469
71099
20c1b9516d27 documentation on Phabricator server administration;
wenzelm
parents:
diff changeset
   470
end