<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SOFTWARE on PIGSTY</title><link>https://pigsty.io/module/software/</link><description>Recent content in SOFTWARE on PIGSTY</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 03 May 2026 17:21:02 +0800</lastBuildDate><atom:link href="https://pigsty.io/module/software/index.xml" rel="self" type="application/rss+xml"/><item><title>Enterprise Self-Hosted Supabase</title><link>https://pigsty.io/docs/app/supabase/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/supabase/</guid><description>&lt;p&gt;Supabase is great, but having your own Supabase is even better.
Pigsty can help you deploy enterprise-grade Supabase on your own servers (physical, virtual, or cloud) with a single command — more extensions, better performance, deeper control, and more cost-effective.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pigsty is one of three self-hosting approaches listed on the Supabase official documentation: &lt;a href="https://supabase.com/docs/guides/self-hosting#third-party-guides"&gt;Self-hosting: Third-Party Guides&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This tutorial requires basic Linux knowledge. Otherwise, consider using Supabase cloud or plain Docker Compose self-hosting.&lt;/p&gt;</description></item><item><title>Odoo: Self-Hosted Open Source ERP</title><link>https://pigsty.io/docs/app/odoo/</link><pubDate>Sun, 23 Jun 2024 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/odoo/</guid><description>&lt;p&gt;&lt;a href="https://www.odoo.com/"&gt;Odoo&lt;/a&gt; is an open-source enterprise resource planning (ERP) software that provides a full suite of business applications, including CRM, sales, purchasing, inventory, production, accounting, and other management functions. Odoo is a typical web application that uses PostgreSQL as its underlying database.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;All your business on one platform — Simple, efficient, yet affordable&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Public Demo (may not always be available): &lt;a href="http://odoo.pigsty.io"&gt;http://odoo.pigsty.io&lt;/a&gt;, username: &lt;code&gt;test@pigsty.io&lt;/code&gt;, password: &lt;code&gt;pigsty&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;p&gt;On a fresh Linux x86/ARM server running a compatible operating system:&lt;/p&gt;</description></item><item><title>Dify: AI Workflow Platform</title><link>https://pigsty.io/docs/app/dify/</link><pubDate>Sun, 23 Jun 2024 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/dify/</guid><description>&lt;p&gt;&lt;a href="https://dify.ai/"&gt;&lt;strong&gt;Dify&lt;/strong&gt;&lt;/a&gt; is a Generative AI Application Innovation Engine and open-source LLM application development platform. It provides capabilities from Agent building to AI workflow orchestration, RAG retrieval, and model management, helping users easily build and operate generative AI native applications.&lt;/p&gt;
&lt;p&gt;Pigsty provides support for self-hosted Dify, allowing you to deploy Dify with a single command while storing critical state in externally managed PostgreSQL. You can use pgvector as a vector database in the same PostgreSQL instance, further simplifying deployment.&lt;/p&gt;</description></item><item><title>Teable: AI No-Code Database</title><link>https://pigsty.io/docs/app/teable/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/teable/</guid><description>&lt;p&gt;&lt;a href="https://teable.io/"&gt;&lt;strong&gt;Teable&lt;/strong&gt;&lt;/a&gt; is a no-code database platform for team collaboration.&lt;/p&gt;
&lt;p&gt;Pigsty v4.3 provides the &lt;code&gt;app/teable&lt;/code&gt; template (&lt;code&gt;conf/app/teable.yml&lt;/code&gt;) and depends on &lt;strong&gt;PostgreSQL + MinIO + Docker&lt;/strong&gt; by default (no Redis dependency).&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.io/get &lt;span class="p"&gt;|&lt;/span&gt; bash&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./bootstrap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c app/teable
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi pigsty.yml &lt;span class="c1"&gt;# update passwords, domain, and mail settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml &lt;span class="c1"&gt;# deploy infra, PostgreSQL, and MinIO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./docker.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./app.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Default endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://&amp;lt;IP&amp;gt;:8890&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://tea.pigsty&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="key-settings"&gt;Key Settings&lt;/h2&gt;
&lt;p&gt;The template writes the following into &lt;code&gt;/opt/teable/.env&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;POSTGRES_HOST/POSTGRES_PORT/POSTGRES_DB/POSTGRES_USER/POSTGRES_PASSWORD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PRISMA_DATABASE_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PUBLIC_ORIGIN&lt;/code&gt; (public URL)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PUBLIC_DATABASE_PROXY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TEABLE_PORT&lt;/code&gt; (default &lt;code&gt;8890&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operations"&gt;Operations&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /opt/teable
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make up
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make log
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make down
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Teable docs: &lt;a href="https://help.teable.io/"&gt;https://help.teable.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Pigsty template: &lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/app/teable.yml"&gt;https://github.com/pgsty/pigsty/blob/main/conf/app/teable.yml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Gitea: Self-Hosted Git Service</title><link>https://pigsty.io/docs/app/gitea/</link><pubDate>Wed, 25 May 2022 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/gitea/</guid><description>&lt;p&gt;&lt;a href="https://gitea.io/"&gt;Gitea&lt;/a&gt; is a lightweight open-source Git hosting platform.&lt;/p&gt;
&lt;p&gt;Pigsty&amp;rsquo;s &lt;code&gt;app/gitea&lt;/code&gt; template uses &lt;strong&gt;external PostgreSQL mode&lt;/strong&gt; by default, configured via &lt;code&gt;GITEA_DB_*&lt;/code&gt; values in &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty/app/gitea
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi .env &lt;span class="c1"&gt;# check domain, ports, database settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Default endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web: &lt;code&gt;http://git.pigsty&lt;/code&gt; or &lt;code&gt;http://&amp;lt;IP&amp;gt;:8889&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;SSH: &lt;code&gt;&amp;lt;IP&amp;gt;:2222&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="database-preparation"&gt;Database Preparation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-user pg-meta dbuser_gitea
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-db pg-meta gitea
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Connection string example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;postgres://dbuser_gitea:DBUser.Gitea@10.10.10.10:5432/gitea
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="common-commands"&gt;Common Commands&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make up
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make log
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make stop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make clean
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Gitea docs: &lt;a href="https://docs.gitea.com/"&gt;https://docs.gitea.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Pigsty template: &lt;a href="https://github.com/pgsty/pigsty/tree/main/app/gitea"&gt;https://github.com/pgsty/pigsty/tree/main/app/gitea&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>NocoDB: Open-Source Airtable</title><link>https://pigsty.io/docs/app/nocodb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/nocodb/</guid><description>&lt;p&gt;&lt;a href="https://nocodb.com/"&gt;&lt;strong&gt;NocoDB&lt;/strong&gt;&lt;/a&gt; is an open-source Airtable alternative that turns any database into a smart spreadsheet.&lt;/p&gt;
&lt;p&gt;It provides a rich user interface that allows you to create powerful database applications without writing code. NocoDB supports PostgreSQL, MySQL, SQL Server, and more, making it ideal for building internal tools and data management systems.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;p&gt;Pigsty provides a Docker Compose configuration file for NocoDB in the software template directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty/app/nocodb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Review and modify the &lt;code&gt;.env&lt;/code&gt; configuration file (adjust database connections as needed).&lt;/p&gt;</description></item><item><title>Mattermost: Open-Source Team Collaboration</title><link>https://pigsty.io/docs/app/mattermost/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/mattermost/</guid><description>&lt;p&gt;&lt;a href="https://mattermost.com/"&gt;&lt;strong&gt;Mattermost&lt;/strong&gt;&lt;/a&gt; is an open-source team collaboration platform and a private alternative to Slack.&lt;/p&gt;
&lt;p&gt;Pigsty v4.3 provides &lt;code&gt;app/mattermost&lt;/code&gt; (&lt;code&gt;conf/app/mattermost.yml&lt;/code&gt;), which stores app state in external PostgreSQL and persists file directories on host paths.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.io/get &lt;span class="p"&gt;|&lt;/span&gt; bash&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./bootstrap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c app/mattermost
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi pigsty.yml &lt;span class="c1"&gt;# update passwords and domain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./docker.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./app.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Default endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://&amp;lt;IP&amp;gt;:8065&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://mm.pigsty&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On first access, initialize the admin account in the web UI.&lt;/p&gt;
&lt;h2 id="default-storage-and-connections"&gt;Default Storage and Connections&lt;/h2&gt;
&lt;p&gt;Default template settings include:&lt;/p&gt;</description></item><item><title>Wiki.js: OSS Wiki Software</title><link>https://pigsty.io/docs/app/wiki/</link><pubDate>Wed, 25 May 2022 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/wiki/</guid><description>&lt;p&gt;Public Demo: &lt;a href="http://wiki.pigsty.cc"&gt;http://wiki.pigsty.cc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://pigsty.io/img/docs/app/wiki.jpg" alt=""&gt;&lt;/p&gt;
&lt;h2 id="tl-dr"&gt;TL; DR&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; app/wiki &lt;span class="p"&gt;;&lt;/span&gt; docker-compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="postgres-preparation"&gt;Postgres Preparation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# postgres://dbuser_wiki:DBUser.Wiki@10.10.10.10:5432/wiki&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: wiki, owner: dbuser_wiki, revokeconn: true , comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;wiki the api gateway database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_wiki, password: DBUser.Wiki , pgbouncer: true , roles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dbrole_admin ] }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-user pg-meta dbuser_wiki
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-db pg-meta wiki
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;3&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wiki&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;container_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;wiki&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;requarks/wiki:2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DB_TYPE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgres&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DB_HOST&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10.10.10.10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DB_PORT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5432&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DB_USER&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dbuser_wiki&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DB_PASS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;DBUser.Wiki&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DB_NAME&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;wiki&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;unless-stopped&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;9002:3000&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="access"&gt;Access&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Default Port for wiki: 9002&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# add to nginx_upstream&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: wiki , domain: wiki.pigsty.cc , endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;127.0.0.1:9002&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./infra.yml -t nginx_config
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ansible all -b -a &lt;span class="s1"&gt;&amp;#39;nginx -s reload&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Maybe: Personal Finance</title><link>https://pigsty.io/docs/app/maybe/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/maybe/</guid><description>&lt;p&gt;&lt;a href="https://github.com/maybe-finance/maybe"&gt;&lt;strong&gt;Maybe&lt;/strong&gt;&lt;/a&gt; is an open-source personal finance manager.&lt;/p&gt;
&lt;p&gt;Pigsty v4.3 provides the &lt;code&gt;app/maybe&lt;/code&gt; template (&lt;code&gt;conf/app/maybe.yml&lt;/code&gt;) to run Maybe as stateless containers while storing business data in external PostgreSQL.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.io/get &lt;span class="p"&gt;|&lt;/span&gt; bash&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./bootstrap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c app/maybe
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi pigsty.yml &lt;span class="c1"&gt;# must update SECRET_KEY_BASE, DB password, domain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./docker.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./app.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Default endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://&amp;lt;IP&amp;gt;:5002&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://maybe.pigsty&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="key-settings"&gt;Key Settings&lt;/h2&gt;
&lt;p&gt;In &lt;code&gt;apps.maybe.conf&lt;/code&gt;, pay attention to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SECRET_KEY_BASE&lt;/code&gt;: must be replaced with a random secret (e.g. &lt;code&gt;openssl rand -hex 64&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DB_HOST/DB_PORT/DB_USERNAME/DB_PASSWORD/DB_DATABASE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;APP_DOMAIN&lt;/code&gt; and &lt;code&gt;MAYBE_PORT&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operations"&gt;Operations&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;app/maybe/Makefile&lt;/code&gt; runs in &lt;code&gt;/opt/maybe&lt;/code&gt; by default:&lt;/p&gt;</description></item><item><title>Kong: API Gateway</title><link>https://pigsty.io/docs/app/kong/</link><pubDate>Sat, 21 May 2022 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/kong/</guid><description>&lt;p&gt;&lt;a href="https://konghq.com/"&gt;Kong&lt;/a&gt; is an open-source API gateway.&lt;/p&gt;
&lt;p&gt;Pigsty&amp;rsquo;s &lt;code&gt;app/kong&lt;/code&gt; template stores configuration in PostgreSQL and runs a one-time migration job (&lt;code&gt;kong-migration&lt;/code&gt;) automatically.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty/app/kong
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi .env &lt;span class="c1"&gt;# check KONG_PG_* and port settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Default ports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proxy HTTP: &lt;code&gt;8000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Proxy HTTPS: &lt;code&gt;8443&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Admin API: &lt;code&gt;8001&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="database-preparation"&gt;Database Preparation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-user pg-meta dbuser_kong
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-db pg-meta kong
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Connection string example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;postgres://dbuser_kong:DBUser.Kong@10.10.10.10:5432/kong
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="common-commands"&gt;Common Commands&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make log
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make stop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make clean
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make pull
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Kong docs: &lt;a href="https://docs.konghq.com/"&gt;https://docs.konghq.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Pigsty template: &lt;a href="https://github.com/pgsty/pigsty/tree/main/app/kong"&gt;https://github.com/pgsty/pigsty/tree/main/app/kong&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Metabase: BI Analytics Tool</title><link>https://pigsty.io/docs/app/metabase/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/metabase/</guid><description>&lt;p&gt;&lt;a href="https://metabase.com/"&gt;&lt;strong&gt;Metabase&lt;/strong&gt;&lt;/a&gt; is a fast, easy-to-use open-source business intelligence tool that lets your team explore and visualize data without SQL knowledge.&lt;/p&gt;
&lt;p&gt;Metabase provides a friendly user interface with rich chart types and supports connecting to various databases, making it an ideal choice for enterprise data analysis.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;p&gt;Pigsty provides a Docker Compose configuration file for Metabase in the software template directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty/app/metabase
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Review and modify the &lt;code&gt;.env&lt;/code&gt; configuration file:&lt;/p&gt;</description></item><item><title>Registry: Container Image Cache</title><link>https://pigsty.io/docs/app/registry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/registry/</guid><description>&lt;p&gt;Pigsty v4.3 provides the &lt;code&gt;app/registry&lt;/code&gt; template (&lt;code&gt;conf/app/registry.yml&lt;/code&gt;) for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Docker Registry cache service (default &lt;code&gt;5000&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Optional management UI (default &lt;code&gt;5080&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.io/get &lt;span class="p"&gt;|&lt;/span&gt; bash&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./bootstrap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c app/registry
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi pigsty.yml &lt;span class="c1"&gt;# update domains, certs, and ports if needed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./docker.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./app.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Default endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registry API: &lt;code&gt;http://&amp;lt;IP&amp;gt;:5000&lt;/code&gt; or &lt;code&gt;http://d.pigsty&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Registry UI: &lt;code&gt;http://&amp;lt;IP&amp;gt;:5080&lt;/code&gt; or &lt;code&gt;http://dui.pigsty&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Image data is stored in &lt;code&gt;/data/registry&lt;/code&gt; by default.&lt;/p&gt;
&lt;h2 id="docker-client-configuration"&gt;Docker Client Configuration&lt;/h2&gt;
&lt;p&gt;If you run HTTP without TLS, Docker must trust the registry explicitly:&lt;/p&gt;</description></item><item><title>ByteBase: Schema Migration</title><link>https://pigsty.io/docs/app/bytebase/</link><pubDate>Fri, 20 May 2022 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/bytebase/</guid><description>&lt;p&gt;&lt;a href="https://bytebase.com/"&gt;Bytebase&lt;/a&gt; is a database schema change and version management tool.&lt;/p&gt;
&lt;p&gt;Pigsty provides a ready-to-use Compose template in &lt;code&gt;app/bytebase&lt;/code&gt;. It listens on &lt;code&gt;8887&lt;/code&gt; by default and connects to external PostgreSQL via &lt;code&gt;BB_PGURL&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty/app/bytebase
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi .env &lt;span class="c1"&gt;# check BB_PORT / BB_DOMAIN / BB_PGURL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Access:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://ddl.pigsty&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://&amp;lt;IP&amp;gt;:8887&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After first startup, initialize the admin account using the Bytebase setup wizard.&lt;/p&gt;
&lt;h2 id="external-postgresql"&gt;External PostgreSQL&lt;/h2&gt;
&lt;p&gt;Default connection string example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;postgresql://dbuser_bytebase:DBUser.Bytebase@10.10.10.10:5432/bytebase?sslmode&lt;span class="o"&gt;=&lt;/span&gt;prefer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can create the database user and database in Pigsty first:&lt;/p&gt;</description></item><item><title>PostgREST: Auto-Generated API</title><link>https://pigsty.io/docs/app/postgrest/</link><pubDate>Sat, 21 May 2022 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/postgrest/</guid><description>&lt;p&gt;&lt;a href="https://postgrest.org/"&gt;PostgREST&lt;/a&gt; exposes PostgreSQL schemas directly as REST APIs.&lt;/p&gt;
&lt;p&gt;Pigsty provides the &lt;code&gt;app/postgrest&lt;/code&gt; template, with default port &lt;code&gt;8884&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty/app/postgrest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi .env &lt;span class="c1"&gt;# check DB_URI / DB_SCHEMA / JWT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Default endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://&amp;lt;IP&amp;gt;:8884&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://api.pigsty&lt;/code&gt; (if ingress domain is configured)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="key-settings"&gt;Key Settings&lt;/h2&gt;
&lt;p&gt;Common &lt;code&gt;.env&lt;/code&gt; parameters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;POSTGREST_DB_URI&lt;/code&gt;: database connection string&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POSTGREST_DB_SCHEMA&lt;/code&gt;: exposed schema (default &lt;code&gt;pigsty&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POSTGREST_DB_ANON_ROLE&lt;/code&gt;: anonymous role&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POSTGREST_JWT_SECRET&lt;/code&gt;: JWT secret&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="swagger-ui-optional"&gt;Swagger UI (Optional)&lt;/h2&gt;
&lt;p&gt;You can run Swagger UI separately to preview APIs:&lt;/p&gt;</description></item><item><title>PGAdmin4: PG Admin GUI Tool</title><link>https://pigsty.io/docs/app/pgadmin/</link><pubDate>Mon, 25 Apr 2022 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/pgadmin/</guid><description>&lt;p&gt;pgAdmin4 is a useful PostgreSQL management tool. Execute the following command to launch the pgadmin service on the admin node:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty/app/pgadmin &lt;span class="p"&gt;;&lt;/span&gt; docker-compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The default port for pgadmin is &lt;code&gt;8885&lt;/code&gt;, and you can access it through the following address:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://adm.pigsty"&gt;http://adm.pigsty&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="demo"&gt;Demo&lt;/h2&gt;
&lt;p&gt;Public Demo: &lt;a href="http://adm.pigsty.cc"&gt;http://adm.pigsty.cc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Credentials: &lt;code&gt;admin@pigsty.cc&lt;/code&gt; / &lt;code&gt;pigsty&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://pigsty.io/img/docs/app/pgadmin.jpeg" alt=""&gt;&lt;/p&gt;
&lt;h2 id="tl-dr"&gt;TL; DR&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty/app/pgadmin &lt;span class="c1"&gt;# enter docker compose dir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make up &lt;span class="c1"&gt;# launch pgadmin container&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make conf view &lt;span class="c1"&gt;# load pigsty server list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Shortcuts:&lt;/p&gt;</description></item><item><title>PGWeb: Browser-based PG Client</title><link>https://pigsty.io/docs/app/pgweb/</link><pubDate>Fri, 18 Mar 2022 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/pgweb/</guid><description>&lt;p&gt;PGWEB: &lt;a href="https://github.com/sosedoff/pgweb"&gt;https://github.com/sosedoff/pgweb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Simple web-based and cross-platform PostgreSQL database explorer.&lt;/p&gt;
&lt;p&gt;Public Demo: &lt;a href="http://cli.pigsty.cc"&gt;http://cli.pigsty.cc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://pigsty.io/img/docs/app/pgweb.jpeg" alt=""&gt;&lt;/p&gt;
&lt;h2 id="tl-dr"&gt;TL; DR&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty/app/pgweb &lt;span class="p"&gt;;&lt;/span&gt; make up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Visit &lt;a href="http://cli.pigsty"&gt;http://cli.pigsty&lt;/a&gt; or http://10.10.10.10:8886&lt;/p&gt;
&lt;p&gt;Try connecting with example URLs:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/meta?sslmode&lt;span class="o"&gt;=&lt;/span&gt;disable
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;postgres://test:test@10.10.10.11:5432/test?sslmode&lt;span class="o"&gt;=&lt;/span&gt;disable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make up &lt;span class="c1"&gt;# pull up pgweb with docker compose&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make run &lt;span class="c1"&gt;# launch pgweb with docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make view &lt;span class="c1"&gt;# print pgweb access point&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make log &lt;span class="c1"&gt;# tail -f pgweb logs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make info &lt;span class="c1"&gt;# introspect pgweb with jq&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make stop &lt;span class="c1"&gt;# stop pgweb container&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make clean &lt;span class="c1"&gt;# remove pgweb container&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make pull &lt;span class="c1"&gt;# pull latest pgweb image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make rmi &lt;span class="c1"&gt;# remove pgweb image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make save &lt;span class="c1"&gt;# save pgweb image to /tmp/docker/pgweb.tgz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make load &lt;span class="c1"&gt;# load pgweb image from /tmp/docker/pgweb.tgz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Electric: PostgreSQL Sync Engine</title><link>https://pigsty.io/docs/app/electric/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/electric/</guid><description>&lt;p&gt;&lt;a href="https://electric-sql.com/"&gt;&lt;strong&gt;Electric&lt;/strong&gt;&lt;/a&gt; is a PostgreSQL sync engine focused on efficiently delivering database changes to frontend and edge applications.&lt;/p&gt;
&lt;p&gt;Pigsty v4.3 provides the &lt;code&gt;app/electric&lt;/code&gt; template (&lt;code&gt;conf/app/electric.yml&lt;/code&gt;) to bootstrap database, container, and ingress settings in one flow.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.io/get &lt;span class="p"&gt;|&lt;/span&gt; bash&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./bootstrap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c app/electric
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi pigsty.yml &lt;span class="c1"&gt;# update domain, passwords, secrets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./docker.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./app.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Default endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://&amp;lt;IP&amp;gt;:8002&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://elec.pigsty&lt;/code&gt; (default domain in the template)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Metrics port defaults to &lt;code&gt;8003&lt;/code&gt; (&lt;code&gt;ELECTRIC_PROMETHEUS_PORT&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id="key-settings"&gt;Key Settings&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;conf/app/electric.yml&lt;/code&gt; writes &lt;code&gt;apps.electric.conf&lt;/code&gt; into &lt;code&gt;/opt/electric/.env&lt;/code&gt;. Common parameters:&lt;/p&gt;</description></item><item><title>Jupyter: AI Notebook &amp; IDE</title><link>https://pigsty.io/docs/app/jupyter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/app/jupyter/</guid><description>&lt;p&gt;Run jupyter notebook with docker, you have to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;change the default password in &lt;code&gt;.env&lt;/code&gt;: &lt;code&gt;JUPYTER_TOKEN&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start="2"&gt;
&lt;li&gt;create data dir with proper permission: &lt;code&gt;make dir&lt;/code&gt;, owned by &lt;code&gt;1000:100&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;code&gt;make up&lt;/code&gt; to pull up jupyter with docker compose&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty/app/jupyter &lt;span class="p"&gt;;&lt;/span&gt; make dir up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Visit &lt;a href="http://lab.pigsty"&gt;http://lab.pigsty&lt;/a&gt; or http://10.10.10.10:8888, the default password is &lt;code&gt;pigsty&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://lab.pigsty?token=pigsty"&gt;&lt;code&gt;http://lab.pigsty?token=pigsty&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prepare"&gt;Prepare&lt;/h2&gt;
&lt;p&gt;Create a data directory &lt;code&gt;/data/jupyter&lt;/code&gt;, with the default uid &amp;amp; gid &lt;code&gt;1000:100&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make dir &lt;span class="c1"&gt;# mkdir -p /data/jupyter; chown -R 1000:100 /data/jupyter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="connect-to-postgres"&gt;Connect to Postgres&lt;/h2&gt;
&lt;p&gt;Use the jupyter terminal to install &lt;code&gt;psycopg2-binary&lt;/code&gt; &amp;amp; &lt;code&gt;psycopg2&lt;/code&gt; package.&lt;/p&gt;</description></item><item><title>Supabase</title><link>https://pigsty.io/docs/pgsql/kernel/supabase/</link><pubDate>Sun, 23 Jun 2024 00:00:00 +0000</pubDate><guid>https://pigsty.io/docs/pgsql/kernel/supabase/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://supabase.com/"&gt;Supabase&lt;/a&gt; — Build in a weekend, Scale to millions&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Supabase is an open-source Firebase alternative that wraps PostgreSQL and provides authentication, out-of-the-box APIs, edge functions, real-time subscriptions, object storage, and vector embedding capabilities.
This is a low-code all-in-one backend platform that lets you skip most backend development work, requiring only database design and frontend knowledge to quickly ship products!&lt;/p&gt;
&lt;p&gt;Supabase&amp;rsquo;s motto is: &amp;ldquo;&lt;strong&gt;Build in a weekend, Scale to millions&lt;/strong&gt;&amp;rdquo;. Indeed, Supabase is &lt;a href="https://supabase.com/pricing"&gt;extremely cost-effective&lt;/a&gt; at small to micro scales (4c8g), like a cyber bodhisattva.
— But when you really scale to millions of users — you should seriously consider self-hosting Supabase — whether for functionality, performance, or cost considerations.&lt;/p&gt;</description></item></channel></rss>