Added support for podman deployment (#11600)
Added files needed to deploy twenty on podman using podman-compose. --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
This commit is contained in:
@ -1,4 +1,7 @@
|
|||||||
# README
|
# README
|
||||||
|
DISCLAIMER: The k8s and podman deployments are not maintained by the core team.
|
||||||
|
These files are provided and maintained by the community. Twenty core team
|
||||||
|
maintains support for docker deployment.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
|
|||||||
48
packages/twenty-docker/podman/README.md
Normal file
48
packages/twenty-docker/podman/README.md
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# How to deploy twenty on podman
|
||||||
|
|
||||||
|
DISCLAIMER: The k8s and podman deployments are not maintained by the core team.
|
||||||
|
These files are provided and maintained by the community. Twenty core team
|
||||||
|
maintains support for docker deployment.
|
||||||
|
|
||||||
|
|
||||||
|
## How to use
|
||||||
|
|
||||||
|
1. Edit `.env` file. At the minimum set `POSTGRES_PASSWORD`, `SERVER_URL`, and `APP_SECRET`.
|
||||||
|
2. Start twenty by running `podman-compose up -d`.
|
||||||
|
|
||||||
|
If you need to stop twenty, you can do so by running `podman-compose down`.
|
||||||
|
|
||||||
|
|
||||||
|
### Install systemd service (optional)
|
||||||
|
|
||||||
|
If you want to install a systemd service to run twenty, you can use the provided systemd service.
|
||||||
|
|
||||||
|
Edit `twentycrm.service` and change these two variables:
|
||||||
|
|
||||||
|
|
||||||
|
WorkingDirectory=/opt/apps/twenty
|
||||||
|
EnvironmentFile=/opt/apps/twenty/.env
|
||||||
|
|
||||||
|
`WorkingDirectory` should be changed to the path in which `podman-compose.yml` is located.
|
||||||
|
|
||||||
|
`EnvironmentFile` should be changed to the path in which your `.env`file is located.
|
||||||
|
|
||||||
|
You can run the script `install-systemd-user-service` to install the systemd service under the current user.
|
||||||
|
|
||||||
|
|
||||||
|
./install-systemd-user-service
|
||||||
|
|
||||||
|
Note: this script will enable the service and also start it. So it will assume that twenty is not currently running.
|
||||||
|
If you started it previously, bring it down using:
|
||||||
|
|
||||||
|
podman-compose down
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Compatibility
|
||||||
|
|
||||||
|
These files should be compatible with podman 4.3+.
|
||||||
|
|
||||||
|
I have tested this on Debian GNU/Linux 12 (bookworm) and with the podman that is distributed with the official Debian stable mirrors (podman v4.3.1+ds1-8+deb12u1, podman-compose v1.0.3-3).
|
||||||
|
|
||||||
|
|
||||||
11
packages/twenty-docker/podman/install-systemd-user-service
Executable file
11
packages/twenty-docker/podman/install-systemd-user-service
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
mkdir -p ~/.config/systemd/user
|
||||||
|
[ -f twentycrm.service ] || { echo "Error: twentycrm.service not found"; exit 1; }
|
||||||
|
cp twentycrm.service ~/.config/systemd/user
|
||||||
|
|
||||||
|
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user enable twentycrm.service
|
||||||
|
systemctl --user start twentycrm.service
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
if [ ! -f "$(dirname "$0")/.env" ]; then
|
||||||
|
echo "Error: .env file not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
source "$(dirname "$0")/.env"
|
||||||
|
|
||||||
|
## steps to cleanup and start over from scratch - useful when testing
|
||||||
|
#podman pod stop twenty-pod
|
||||||
|
#podman pod rm twenty-pod
|
||||||
|
#podman volume rm twenty-db-data twenty-server-data twenty-redis-data
|
||||||
|
# end of cleanup
|
||||||
|
|
||||||
|
podman volume create twenty-db-data
|
||||||
|
podman volume create twenty-server-data
|
||||||
|
podman volume create twenty-redis-data
|
||||||
|
|
||||||
|
podman pod create --name twenty-pod -p 127.0.0.1:8080:3000
|
||||||
|
|
||||||
|
podman run -d --pod twenty-pod --name twenty-db \
|
||||||
|
-e POSTGRES_DB=twenty \
|
||||||
|
-e POSTGRES_USER=twenty \
|
||||||
|
-e POSTGRES_PASSWORD="$POSTGRES_PASSWORD" \
|
||||||
|
-v twenty-db-data:/var/lib/postgresql/data:Z \
|
||||||
|
docker.io/library/postgres:16
|
||||||
|
|
||||||
|
podman run -d --pod twenty-pod --name twenty-redis \
|
||||||
|
-v twenty-redis-data:/data:Z \
|
||||||
|
docker.io/library/redis:latest
|
||||||
|
|
||||||
|
podman run -d --pod twenty-pod --name twenty-server \
|
||||||
|
-e NODE_PORT=3000 \
|
||||||
|
-e SERVER_URL="$SERVER_URL" \
|
||||||
|
-e PG_DATABASE_URL="postgresql://twenty:$POSTGRES_PASSWORD@twenty-db:5432/twenty" \
|
||||||
|
-e REDIS_URL="redis://twenty-redis:6379" \
|
||||||
|
-e APP_SECRET="$APP_SECRET" \
|
||||||
|
-e NODE_ENV=production \
|
||||||
|
-e LOG_LEVEL=info \
|
||||||
|
-v twenty-server-data:/app/docker-data:Z \
|
||||||
|
docker.io/twentycrm/twenty:latest
|
||||||
|
|
||||||
|
podman run -d --pod twenty-pod --name twenty-worker \
|
||||||
|
--init \
|
||||||
|
-e SERVER_URL="$SERVER_URL" \
|
||||||
|
-e PG_DATABASE_URL="postgresql://twenty:$POSTGRES_PASSWORD@twenty-db:5432/twenty" \
|
||||||
|
-e REDIS_URL="redis://twenty-redis:6379" \
|
||||||
|
-e APP_SECRET="$APP_SECRET" \
|
||||||
|
-e DISABLE_DB_MIGRATIONS=true \
|
||||||
|
-e NODE_ENV=production \
|
||||||
|
-e LOG_LEVEL=info \
|
||||||
|
-v twenty-server-data:/app/docker-data:Z \
|
||||||
|
docker.io/twentycrm/twenty:latest \
|
||||||
|
yarn worker:prod
|
||||||
|
|
||||||
|
# wait some time, check status
|
||||||
|
sleep 30
|
||||||
|
podman ps --pod -f name=twenty-pod
|
||||||
|
|
||||||
|
|
||||||
|
mkdir -p ~/.config/systemd/user
|
||||||
|
if [ ! -f "twentycrm.service" ]; then
|
||||||
|
echo "Error: twentycrm.service file not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
cp twentycrm.service ~/.config/systemd/user
|
||||||
|
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user enable twentycrm.service
|
||||||
|
systemctl --user start twentycrm.service
|
||||||
|
|
||||||
55
packages/twenty-docker/podman/podman-compose.yml
Normal file
55
packages/twenty-docker/podman/podman-compose.yml
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
container_name: twenty-db
|
||||||
|
image: postgres:16
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: twenty
|
||||||
|
POSTGRES_USER: twenty
|
||||||
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
|
volumes:
|
||||||
|
- twenty-db-data:/var/lib/postgresql/data:Z
|
||||||
|
|
||||||
|
redis:
|
||||||
|
container_name: twenty-redis
|
||||||
|
image: redis:latest
|
||||||
|
volumes:
|
||||||
|
- twenty-redis-data:/data:Z
|
||||||
|
|
||||||
|
server:
|
||||||
|
container_name: twenty-server
|
||||||
|
image: twentycrm/twenty:latest
|
||||||
|
environment:
|
||||||
|
NODE_PORT: "3000"
|
||||||
|
SERVER_URL: ${SERVER_URL}
|
||||||
|
PG_DATABASE_URL: "postgresql://twenty:${POSTGRES_PASSWORD}@twenty-db:5432/twenty"
|
||||||
|
REDIS_URL: "redis://twenty-redis:6379"
|
||||||
|
APP_SECRET: ${APP_SECRET}
|
||||||
|
NODE_ENV: production
|
||||||
|
LOG_LEVEL: info
|
||||||
|
volumes:
|
||||||
|
- twenty-server-data:/app/docker-data:Z
|
||||||
|
ports:
|
||||||
|
- 127.0.0.1:8080:3000
|
||||||
|
|
||||||
|
worker:
|
||||||
|
container_name: twenty-worker
|
||||||
|
image: twentycrm/twenty:latest
|
||||||
|
command: yarn worker:prod
|
||||||
|
environment:
|
||||||
|
SERVER_URL: ${SERVER_URL}
|
||||||
|
PG_DATABASE_URL: "postgresql://twenty:${POSTGRES_PASSWORD}@twenty-db:5432/twenty"
|
||||||
|
REDIS_URL: "redis://twenty-redis:6379"
|
||||||
|
APP_SECRET: ${APP_SECRET}
|
||||||
|
DISABLE_DB_MIGRATIONS: "true"
|
||||||
|
NODE_ENV: production
|
||||||
|
LOG_LEVEL: info
|
||||||
|
volumes:
|
||||||
|
- twenty-server-data:/app/docker-data:Z
|
||||||
|
init: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
twenty-db-data:
|
||||||
|
twenty-server-data:
|
||||||
|
twenty-redis-data:
|
||||||
15
packages/twenty-docker/podman/twentycrm.service
Normal file
15
packages/twenty-docker/podman/twentycrm.service
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=TwentyCRM Container Stack via Podman-Compose
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/apps/twenty
|
||||||
|
EnvironmentFile=/opt/apps/twenty/.env
|
||||||
|
ExecStart=/usr/bin/podman-compose -f podman-compose.yml up -d
|
||||||
|
ExecStop=/usr/bin/podman-compose -f podman-compose.yml down
|
||||||
|
RemainAfterExit=yes
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
|
|
||||||
Reference in New Issue
Block a user