feat(deploy): add vps deployment assets
This commit is contained in:
26
deploy/vps/.env.example
Normal file
26
deploy/vps/.env.example
Normal file
@@ -0,0 +1,26 @@
|
||||
APP_DOMAIN=demo.example.com
|
||||
PUBLIC_BASE_DOMAIN=example.com
|
||||
|
||||
TENANT_ID=11111111-1111-1111-1111-111111111111
|
||||
TENANT_SUBDOMAIN=demo
|
||||
MASTER_DATABASE_NAME=classeo_master
|
||||
TENANT_DATABASE_NAME=classeo_tenant_demo
|
||||
POSTGRES_USER=classeo
|
||||
POSTGRES_PASSWORD=change-this-db-password
|
||||
|
||||
APP_SECRET=change-this-app-secret
|
||||
JWT_PASSPHRASE=change-this-jwt-passphrase
|
||||
|
||||
TRUSTED_PROXIES='127.0.0.1/32,172.16.0.0/12'
|
||||
TRUSTED_HOSTS='^(.+\.)?example\.com$'
|
||||
CORS_ALLOW_ORIGIN='^https://([\w-]+\.)?example\.com$'
|
||||
|
||||
MAILER_DSN=null://null
|
||||
ADMIN_ALERT_EMAIL=admin@example.com
|
||||
|
||||
TURNSTILE_SECRET_KEY=1x0000000000000000000000000000000AA
|
||||
TURNSTILE_FAIL_OPEN=true
|
||||
PUBLIC_TURNSTILE_SITE_KEY=1x00000000000000000000AA
|
||||
|
||||
SENTRY_DSN=
|
||||
SENTRY_ENVIRONMENT=production
|
||||
15
deploy/vps/Caddyfile
Normal file
15
deploy/vps/Caddyfile
Normal file
@@ -0,0 +1,15 @@
|
||||
{$APP_DOMAIN} {
|
||||
encode zstd gzip
|
||||
|
||||
handle /api/* {
|
||||
reverse_proxy php:8000
|
||||
}
|
||||
|
||||
handle /uploads/* {
|
||||
reverse_proxy php:8000
|
||||
}
|
||||
|
||||
handle {
|
||||
reverse_proxy frontend:3000
|
||||
}
|
||||
}
|
||||
24
deploy/vps/generate-jwt.sh
Normal file
24
deploy/vps/generate-jwt.sh
Normal file
@@ -0,0 +1,24 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
if [ ! -f deploy/vps/.env ]; then
|
||||
echo "Missing deploy/vps/.env"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
JWT_PASSPHRASE=$(grep '^JWT_PASSPHRASE=' deploy/vps/.env | cut -d= -f2-)
|
||||
|
||||
if [ -z "$JWT_PASSPHRASE" ]; then
|
||||
echo "JWT_PASSPHRASE is empty in deploy/vps/.env"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p backend/config/jwt
|
||||
|
||||
openssl genrsa -aes256 -passout "pass:${JWT_PASSPHRASE}" -out backend/config/jwt/private.pem 4096
|
||||
openssl rsa -pubout -passin "pass:${JWT_PASSPHRASE}" -in backend/config/jwt/private.pem -out backend/config/jwt/public.pem
|
||||
|
||||
chmod 600 backend/config/jwt/private.pem
|
||||
chmod 644 backend/config/jwt/public.pem
|
||||
|
||||
echo "JWT keypair generated in backend/config/jwt"
|
||||
15
deploy/vps/postgres/01-create-tenant-db.sh
Normal file
15
deploy/vps/postgres/01-create-tenant-db.sh
Normal file
@@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
if [ -z "${TENANT_DATABASE_NAME:-}" ] || [ "${TENANT_DATABASE_NAME}" = "${POSTGRES_DB}" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname postgres <<-EOSQL
|
||||
SELECT format('CREATE DATABASE %I', '${TENANT_DATABASE_NAME}')
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_database
|
||||
WHERE datname = '${TENANT_DATABASE_NAME}'
|
||||
) \gexec
|
||||
EOSQL
|
||||
Reference in New Issue
Block a user