piku/INSTALL-ubuntu-22.04-jammy....

819 wiersze
22 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="INSTALL-ubuntu-18.04-bionic.html">
<link rel="next" href="INSTALL.html">
<link rel="icon" href="assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.5.17">
<title>Installation on Ubuntu 22.04 LTS (Jammy) - Piku</title>
<link rel="stylesheet" href="assets/stylesheets/main.bcfcd587.min.css">
<script src="assets/external/unpkg.com/iframe-worker/shim.js"></script>
<link rel="stylesheet" href="assets/external/fonts.googleapis.com/css.49ea35f2.css">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#installation-on-ubuntu-2204-lts-jammy" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="." title="Piku" class="md-header__button md-logo" aria-label="Piku" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 15.5A3.5 3.5 0 0 1 8.5 12 3.5 3.5 0 0 1 12 8.5a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5m7.43-2.53c.04-.32.07-.64.07-.97 0-.33-.03-.66-.07-1l2.11-1.63c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.31-.61-.22l-2.49 1c-.52-.39-1.06-.73-1.69-.98l-.37-2.65A.506.506 0 0 0 14 2h-4c-.25 0-.46.18-.5.42l-.37 2.65c-.63.25-1.17.59-1.69.98l-2.49-1c-.22-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64L4.57 11c-.04.34-.07.67-.07 1 0 .33.03.65.07.97l-2.11 1.66c-.19.15-.25.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1.01c.52.4 1.06.74 1.69.99l.37 2.65c.04.24.25.42.5.42h4c.25 0 .46-.18.5-.42l.37-2.65c.63-.26 1.17-.59 1.69-.99l2.49 1.01c.22.08.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.66Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Piku
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Installation on Ubuntu 22.04 LTS (Jammy)
</span>
</div>
</div>
</div>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="." title="Piku" class="md-nav__button md-logo" aria-label="Piku" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 15.5A3.5 3.5 0 0 1 8.5 12 3.5 3.5 0 0 1 12 8.5a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5m7.43-2.53c.04-.32.07-.64.07-.97 0-.33-.03-.66-.07-1l2.11-1.63c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.31-.61-.22l-2.49 1c-.52-.39-1.06-.73-1.69-.98l-.37-2.65A.506.506 0 0 0 14 2h-4c-.25 0-.46.18-.5.42l-.37 2.65c-.63.25-1.17.59-1.69.98l-2.49-1c-.22-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64L4.57 11c-.04.34-.07.67-.07 1 0 .33.03.65.07.97l-2.11 1.66c-.19.15-.25.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1.01c.52.4 1.06.74 1.69.99l.37 2.65c.04.24.25.42.5.42h4c.25 0 .46-.18.5-.42l.37-2.65c.63-.26 1.17-.59 1.69-.99l2.49 1.01c.22.08.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.66Z"/></svg>
</a>
Piku
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="CONTRIBUTING.html" class="md-nav__link">
<span class="md-ellipsis">
CONTRIBUTING
</span>
</a>
</li>
<li class="md-nav__item">
<a href="DESIGN.html" class="md-nav__link">
<span class="md-ellipsis">
Design Notes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="ENV.html" class="md-nav__link">
<span class="md-ellipsis">
Configuring Piku via ENV
</span>
</a>
</li>
<li class="md-nav__item">
<a href="FAQ.html" class="md-nav__link">
<span class="md-ellipsis">
FAQ
</span>
</a>
</li>
<li class="md-nav__item">
<a href="INSTALL-centos-9.html" class="md-nav__link">
<span class="md-ellipsis">
Installation on CentOS 9
</span>
</a>
</li>
<li class="md-nav__item">
<a href="INSTALL-other.html" class="md-nav__link">
<span class="md-ellipsis">
Installation on other platforms
</span>
</a>
</li>
<li class="md-nav__item">
<a href="INSTALL-raspbian-9.4-stretch-10-buster.html" class="md-nav__link">
<span class="md-ellipsis">
Installation on Raspbian Stretch or Buster
</span>
</a>
</li>
<li class="md-nav__item">
<a href="INSTALL-ubuntu-18.04-bionic.html" class="md-nav__link">
<span class="md-ellipsis">
Installation on Ubuntu 18.04 LTS (Bionic)
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Installation on Ubuntu 22.04 LTS (Jammy)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="INSTALL-ubuntu-22.04-jammy.html" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Installation on Ubuntu 22.04 LTS (Jammy)
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#dependencies" class="md-nav__link">
<span class="md-ellipsis">
Dependencies
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-up-the-piku-user-set-up-ssh-access" class="md-nav__link">
<span class="md-ellipsis">
Set up the piku user, Set up SSH access
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#uwsgi-configuration" class="md-nav__link">
<span class="md-ellipsis">
uWSGI Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nginx-configuration" class="md-nav__link">
<span class="md-ellipsis">
nginx Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-up-systemdpath-to-reload-nginx-upon-config-changes" class="md-nav__link">
<span class="md-ellipsis">
Set up systemd.path to reload nginx upon config changes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#notes" class="md-nav__link">
<span class="md-ellipsis">
Notes
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="INSTALL.html" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="PLUGINS.html" class="md-nav__link">
<span class="md-ellipsis">
PLUGINS
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_12" >
<label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0">
<span class="md-ellipsis">
Old
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon"></span>
Old
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="old/RASPBERRY_PI_QUICKSTART.html" class="md-nav__link">
<span class="md-ellipsis">
Setting up a Raspberry Pi Piku Server from Scratch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="old/ROADMAP.html" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="old/SCRIPTS.html" class="md-nav__link">
<span class="md-ellipsis">
Ubuntu 16.04
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#dependencies" class="md-nav__link">
<span class="md-ellipsis">
Dependencies
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-up-the-piku-user-set-up-ssh-access" class="md-nav__link">
<span class="md-ellipsis">
Set up the piku user, Set up SSH access
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#uwsgi-configuration" class="md-nav__link">
<span class="md-ellipsis">
uWSGI Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nginx-configuration" class="md-nav__link">
<span class="md-ellipsis">
nginx Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-up-systemdpath-to-reload-nginx-upon-config-changes" class="md-nav__link">
<span class="md-ellipsis">
Set up systemd.path to reload nginx upon config changes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#notes" class="md-nav__link">
<span class="md-ellipsis">
Notes
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="installation-on-ubuntu-2204-lts-jammy">Installation on Ubuntu 22.04 LTS (Jammy)</h1>
<blockquote>
<p>This is a standalone, distribution-specific version of <code>INSTALL.md</code>. You do not need to read or follow the original file, but can refer to it for generic steps like setting up SSH keys (which are assumed to be common knowledge here)</p>
</blockquote>
<p><code>piku</code> setup is simplified in Jammy, since it can take advantage of some packaging improvements in <a href="https://github.com/unbit/uwsgi">uWSGI</a> and does not require a custom <code>systemd</code> service. Since Jammy also ships with Python 3.10, this is an ideal environment for new deployments on both Intel and ARM devices.</p>
<h2 id="dependencies">Dependencies</h2>
<p>Before installing <code>piku</code>, you need to install the following packages:</p>
<div class="highlight"><pre><span></span><code>sudo<span class="w"> </span>apt-get<span class="w"> </span>update
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>build-essential<span class="w"> </span>certbot<span class="w"> </span>git<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>libjpeg-dev<span class="w"> </span>libxml2-dev<span class="w"> </span>libxslt1-dev<span class="w"> </span>zlib1g-dev<span class="w"> </span>nginx<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>python3-certbot-nginx<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>python3-dev<span class="w"> </span>python3-pip<span class="w"> </span>python3-click<span class="w"> </span>python3-virtualenv<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>uwsgi<span class="w"> </span>uwsgi-plugin-asyncio-python3<span class="w"> </span>uwsgi-plugin-gevent-python3<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>uwsgi-plugin-python3<span class="w"> </span>uwsgi-plugin-tornado-python3
</code></pre></div>
<h2 id="set-up-the-piku-user-set-up-ssh-access">Set up the <code>piku</code> user, Set up SSH access</h2>
<p>See INSTALL.md</p>
<h2 id="uwsgi-configuration">uWSGI Configuration</h2>
<p><a href="https://github.com/unbit/uwsgi">uWSGI</a> requires very little configuration, since it is already properly packaged. All you need to do is place a link to the <code>piku</code> configuration file in <code>/etc/uwsgi/apps-enabled</code>:</p>
<div class="highlight"><pre><span></span><code>sudo<span class="w"> </span>ln<span class="w"> </span>/home/<span class="nv">$PAAS_USERNAME</span>/.piku/uwsgi/uwsgi.ini<span class="w"> </span>/etc/uwsgi/apps-enabled/piku.ini
sudo<span class="w"> </span>systemctl<span class="w"> </span>restart<span class="w"> </span>uwsgi
</code></pre></div>
<h2 id="nginx-configuration"><code>nginx</code> Configuration</h2>
<p><code>piku</code> requires you to edit <code>/etc/nginx/sites-available/default</code> to the following, so it can inject new site configurations into <code>nginx</code>:</p>
<div class="highlight"><pre><span></span><code>server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
# replace `PAAS_USERNAME` with the username you created.
include /home/PAAS_USERNAME/.piku/nginx/*.conf;
</code></pre></div>
<h2 id="set-up-systemdpath-to-reload-nginx-upon-config-changes">Set up systemd.path to reload nginx upon config changes</h2>
<div class="highlight"><pre><span></span><code><span class="c1"># Set up systemd.path to reload nginx upon config changes</span>
sudo<span class="w"> </span>cp<span class="w"> </span>./piku-nginx.<span class="o">{</span>path,<span class="w"> </span>service<span class="o">}</span><span class="w"> </span>/etc/systemd/system/
sudo<span class="w"> </span>systemctl<span class="w"> </span><span class="nb">enable</span><span class="w"> </span>piku-nginx.<span class="o">{</span>path,service<span class="o">}</span>
sudo<span class="w"> </span>systemctl<span class="w"> </span>start<span class="w"> </span>piku-nginx.path
<span class="c1"># Check the status of piku-nginx.service</span>
systemctl<span class="w"> </span>status<span class="w"> </span>piku-nginx.path<span class="w"> </span><span class="c1"># should return `Active: active (waiting)`</span>
<span class="c1"># Restart NGINX</span>
sudo<span class="w"> </span>systemctl<span class="w"> </span>restart<span class="w"> </span>nginx
</code></pre></div>
<h2 id="notes">Notes</h2>
<blockquote>
<p>This file was last updated on November 2018</p>
</blockquote>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<div class="md-progress" data-md-component="progress" role="progressbar"></div>
<script id="__config" type="application/json">{"base": ".", "features": ["navigation.instant", "navigation.instant.progress", "navigation.indexes"], "search": "assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="assets/javascripts/bundle.1e8ae164.min.js"></script>
<script src="assets/external/unpkg.com/mermaid@10.7.0/dist/mermaid.min.js"></script>
</body>
</html>