Merge branch 'main' into configuration-checking

This commit is contained in:
James Read 2024-09-14 22:22:18 +01:00 committed by GitHub
commit b270259565
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 180 additions and 70 deletions

View File

@ -1,15 +1,42 @@
DATABASE_URL=""
REDIS_URL=""
UPLOAD_DIRECTORY=""
NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY=""
STRIPE_PUBLISHABLE_KEY=""
STRIPE_SECRET_KEY=""
STRIPE_SIGNING_KEY=""
JWT_SECRET=""
FRONTEND_URL=""
MAIN_URL=""
NEXT_PUBLIC_BACKEND_URL=""
BACKEND_INTERNAL_URL=""
# Configuration reference: http://docs.postiz.com/configuration/reference
# === Required Settings
DATABASE_URL="postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local"
REDIS_URL="redis://localhost:6379"
JWT_SECRET="random string for your JWT secret, make it long"
FRONTEND_URL="http://localhost:4200"
NEXT_PUBLIC_BACKEND_URL="http://localhost:3000"
BACKEND_INTERNAL_URL="http://localhost:3000"
## These are dummy values, you must create your own from Cloudflare.
## Remember to set your public internet IP address in the allow-list for the API token.
##
## Cloudflare is currently required to save things like social media avatars for accounts.
CLOUDFLARE_ACCOUNT_ID="QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu"
CLOUDFLARE_ACCESS_KEY="dcfCMSuFEeCNfvByUureMZEfxWJmDqZe"
CLOUDFLARE_SECRET_ACCESS_KEY="zTTMXBmtyLPwHEdpACGHgDgzRTNpTJewiNriLnUS"
CLOUDFLARE_BUCKETNAME="postiz"
CLOUDFLARE_BUCKET_URL="https://QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu.r2.cloudflarestorage.com/"
CLOUDFLARE_REGION="auto"
# === Common optional Settings
## This is a dummy key, you must create your own from Resend.
## If this variable exists, user activation is required.
## If it is commented out, users are activated automatically.
#RESEND_API_KEY="RzeTwHijvxvPUerScFcenUZUALuQJzSaGSMJ"
#EMAIL_FROM_ADDRESS=""
#EMAIL_FROM_NAME=""
# Your upload directory path if you host your files locally, otherwise Cloudflare will be used.
#UPLOAD_DIRECTORY="/opt/postiz/uploads/"
# Your upload directory path if you host your files locally, otherwise Cloudflare will be used.
#NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY="/opt/postiz/uploads/"
# Social Media API Settings
X_API_KEY=""
X_API_SECRET=""
X_CLIENT=""
@ -20,19 +47,8 @@ REDDIT_CLIENT_ID=""
REDDIT_CLIENT_SECRET=""
GITHUB_CLIENT_ID=""
GITHUB_CLIENT_SECRET=""
RESEND_API_KEY=""
BEEHIIVE_API_KEY=""
BEEHIIVE_PUBLICATION_ID=""
NX_ADD_PLUGINS=false
CLOUDFLARE_ACCOUNT_ID=""
CLOUDFLARE_ACCESS_KEY=""
CLOUDFLARE_SECRET_ACCESS_KEY=""
CLOUDFLARE_BUCKETNAME=""
CLOUDFLARE_BUCKET_URL=""
CLOUDFLARE_REGION=""
FEE_AMOUNT=0.05
OPENAI_API_KEY=""
NEXT_PUBLIC_DISCORD_SUPPORT=""
THREADS_APP_ID=""
THREADS_APP_SECRET=""
FACEBOOK_APP_ID=""
@ -45,7 +61,19 @@ PINTEREST_CLIENT_ID=""
PINTEREST_CLIENT_SECRET=""
DRIBBBLE_CLIENT_ID=""
DRIBBBLE_CLIENT_SECRET=""
IS_GENERAL="true"
EMAIL_FROM_ADDRESS=""
EMAIL_FROM_NAME=""
NEXT_PUBLIC_POLOTNO="Polotno key for the gallery"
# Misc Settings
OPENAI_API_KEY=""
NEXT_PUBLIC_DISCORD_SUPPORT=""
NEXT_PUBLIC_POLOTNO=""
# Payment settings
FEE_AMOUNT=0.05
STRIPE_PUBLISHABLE_KEY=""
STRIPE_SECRET_KEY=""
STRIPE_SIGNING_KEY=""
STRIPE_SIGNING_KEY_CONNECT=""
# Developer Settings
NX_ADD_PLUGINS=false
IS_GENERAL="true" # required for now

View File

@ -15,14 +15,7 @@ ENV NEXT_TELEMETRY_DISABLED=1
RUN apk add --no-cache \
bash=5.2.21-r0 \
supervisor=4.2.5-r4 \
pkgconfig \
gcc \
pixman-dev \
cairo-dev \
pango-dev \
make \
build-base
supervisor=4.2.5-r4
WORKDIR /app
@ -32,7 +25,7 @@ EXPOSE 3000
COPY var/docker/entrypoint.sh /app/entrypoint.sh
COPY var/docker/supervisord.conf /etc/supervisord.conf
COPY var/docker/supervisord /app/supervisord_available_configs/
COPY .env.example /config/.env
COPY .env.example /config/postiz.env
VOLUME /config
@ -43,12 +36,23 @@ ENTRYPOINT ["/app/entrypoint.sh"]
# Builder image
FROM base AS devcontainer
RUN apk add --no-cache \
pkgconfig \
gcc \
pixman-dev \
cairo-dev \
pango-dev \
make \
build-base
COPY nx.json tsconfig.base.json package.json package-lock.json /app/
COPY apps /app/apps/
COPY libraries /app/libraries/
RUN npm ci --no-fund && npx nx run-many --target=build --projects=frontend,backend,workers,cron
VOLUME /config
LABEL org.opencontainers.image.title="Postiz App (DevContainer)"
# Output image
@ -59,5 +63,7 @@ COPY --from=devcontainer /app/dist/ /app/dist/
COPY package.json nx.json /app/
VOLUME /config
## Labels at the bottom, because CI will eventually add dates, commit hashes, etc.
LABEL org.opencontainers.image.title="Postiz App (Production)"

View File

@ -17,10 +17,13 @@ This guide will ask you to install & configure several services exaplained below
### Prerequisite Cloud Services
- **[Resend account](https://resend.com)** - for user activation and email notifications.
- **[Cloudflare R2](https://cloudfalre.com)** - for uploads (optional, can use local machine), and storing account data.
- **[Cloudflare R2](https://cloudflare.com)** - for uploads (optional, can use local machine).
- **Social Media API details** - various API keys and secrets (more details later) for services you want to use; reddit, X, Instagram, etc..
### Optional Cloud Services
- **[Resend account](https://resend.com)** - for user activation and email notifications.
### Prerequisite Local Services
- **Node.js** - for running the code! (version 18+)
@ -69,6 +72,10 @@ git clone https://github.com/gitroomhq/gitroom
<Step title="Set environment variables">
Copy the `.env.example` file to `.env` and fill in the values
An example file of the most used configuration settings can be found here; [example postiz.env file](https://raw.githubusercontent.com/gitroomhq/postiz-app/main/.env.example)
There is also a [configuration reference](/configuration/reference) page that goes into more detail.
```bash .env
# Required Settings
DATABASE_URL="postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local"
@ -78,6 +85,26 @@ FRONTEND_URL="http://localhost:4200"
NEXT_PUBLIC_BACKEND_URL="http://localhost:3000"
BACKEND_INTERNAL_URL="http://localhost:3000"
# Optional. Your upload directory path if you host your files locally.
UPLOAD_DIRECTORY="/opt/postiz/uploads/"
# Optional: your upload directory slug if you host your files locally.
NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY=""
## This is a dummy key, you must create your own from Resend.
## If this variable exists, user activation is required.
## If it is commented out, users are activated automatically.
#RESEND_API_KEY="RzeTwHijvxvPUerScFcenUZUALuQJzSaGSMJ"
## These are dummy values, you must create your own from Cloudflare.
## Remember to set your public internet IP address in the allow-list for the API token.
CLOUDFLARE_ACCOUNT_ID="QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu"
CLOUDFLARE_ACCESS_KEY="dcfCMSuFEeCNfvByUureMZEfxWJmDqZe"
CLOUDFLARE_SECRET_ACCESS_KEY="zTTMXBmtyLPwHEdpACGHgDgzRTNpTJewiNriLnUS"
CLOUDFLARE_BUCKETNAME="postiz"
CLOUDFLARE_BUCKET_URL="https://QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu.r2.cloudflarestorage.com/"
CLOUDFLARE_REGION="auto"
# Social Media API Settings
X_API_KEY="Twitter API key for normal oAuth not oAuth2"
X_API_SECRET="Twitter API secret for normal oAuth not oAuth2"
@ -87,14 +114,7 @@ REDDIT_CLIENT_ID="Reddit Client ID"
REDDIT_CLIENT_SECRET="Linkedin Client Secret"
GITHUB_CLIENT_ID="GitHub Client ID"
GITHUB_CLIENT_SECRET="GitHub Client Secret"
RESEND_API_KEY="Resend API KEY"
UPLOAD_DIRECTORY="optional: your upload directory path if you host your files locally"
NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY="optional: your upload directory slug if you host your files locally"
CLOUDFLARE_ACCOUNT_ID="Cloudflare R2 Account ID"
CLOUDFLARE_ACCESS_KEY="Cloudflare R2 Access Key"
CLOUDFLARE_SECRET_ACCESS_KEY="Cloudflare R2 Secret Access Key"
CLOUDFLARE_BUCKETNAME="Cloudflare R2 Bucket Name"
CLOUDFLARE_BUCKET_URL="Cloudflare R2 Backet URL"
# Developer Settings
NX_ADD_PLUGINS=false

View File

@ -3,11 +3,14 @@ title: Docker Compose
---
import EarlyDoc from '/snippets/earlydoc.mdx';
import DockerDatabase from '/snippets/docker-database.mdx';
import DockerEnvvarApps from '/snippets/docker-envvar-apps.mdx';
import DockerEnvvarGeneral from '/snippets/docker-envvar-general.mdx';
<EarlyDoc />
<DockerDatabase />
<DockerEnvvarGeneral />
The container images will copy a file called `/config/postiz.env` to `/apps/.env` on startup.
# Example `docker-compose.yml` file
@ -17,8 +20,15 @@ services:
image: ghcr.io/gitroomhq/postiz-app:latest
container_name: postiz
restart: always
environment: # If you want to specify the variables in your compose file.
- DATABASE_URL="postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local"
- REDIS_URL="redis://localhost:6379"
- JWT_SECRET="random string for your JWT secret, make it long"
- FRONTEND_URL="http://localhost:4200"
- NEXT_PUBLIC_BACKEND_URL="http://localhost:3000"
- BACKEND_INTERNAL_URL="http://localhost:3000"
volumes:
- ./config:/config/ # Should contain your .env file
- ./config:/config/ # If you want to specify the variables in your `postiz.env` file.
ports:
- 4200:4200
- 3000:3000

View File

@ -3,18 +3,37 @@ title: Docker
---
import EarlyDoc from '/snippets/earlydoc.mdx';
import DockerDatabase from '/snippets/docker-database.mdx';
import DockerEnvvarApps from '/snippets/docker-envvar-apps.mdx';
import DockerEnvvarGeneral from '/snippets/docker-envvar-general.mdx';
<EarlyDoc />
<DockerDatabase />
<DockerEnvvarGeneral />
The container images will copy a file called `/config/postiz.env` to `/apps/.env` on startup.
# Create the container on command line
```bash
docker create --name postiz -v ./config:/config -p 4200:4200 -p 3000:3000 ghcr.io/postiz/postiz:latest
It is recommended to have a local directory where you save your `postiz.env` file, such as `/myContainers/postiz/config`, which is mounted as a volume.
```bash Using a configuration volume
docker create --name postiz -v /myContainers/postiz/config:/config -p 4200:4200 -p 3000:3000 ghcr.io/gitroomhq/postiz-app:latest
```
Alternatively, you can specify the variables one by one at creation time. This approach is not recommended
simply because it's a pain to manage, and sensitive keys get stored with the container definition, which is bad practice.
```bash At creation-time (not recommended)
docker create --name postiz \
-e DATABASE_URL=postgres://... \
-e REDIS_URL=redis:// \
-e JWT_SECRET \
... \
-p 4200:4200 \
-p 3000:3000 \
ghcr.io/gitroomhq/postiz-app:latest
```
<DockerEnvvarApps />

View File

@ -70,6 +70,12 @@
"installation/kubernetes-helm"
]
},
{
"group": "Configuration",
"pages": [
"configuration/reference"
]
},
"howitworks",
"emails",
"github",

View File

@ -1,6 +0,0 @@
<Warning>
The container images do not yet provide automatic database "installation"
(migrations). This must be done manually outside of the docker containers for now.
This is being worked on with a high priority.
</Warning>

View File

@ -1,7 +1,10 @@
## Controlling container services
The environment variable POSTIZ_APPS defaults to "", which means that all
services will be started in a single container. However, you can only start
specific services within the docker container by changing this environement variable.
When the environment variable `POSTIZ_APPS` is not set, or is set to an empty string, all
services will be started in a single container. This is normally fine for small, personal deployments.
For most deployments, starting all services is fine. To scale out, you might want
to start individual containers for "frontend", "backend", "worker" and "cron".
However, you can only start specific services within the docker container by changing this environement variable.
If you need to scale, you can experiement with having multiple containers defined like;
- Frontend only: `POSTIZ_APPS="frontend"`
- Backend only: `POSTIZ_APPS="backend"`
- Worker and Cron only: `POSTIZ_APPS="worker cron"`

View File

@ -0,0 +1,15 @@
# Set environment variables
Postiz configuration is entirely via environment variables.
When using Postiz container images, you can specify the environment variables when you create the container (`docker create -e DATABASE_URL=...`), but this might be
a bit tedious, as Postiz requires quite a few variables set to startup.
It is recommended to use a `postiz.env` file, which the Postiz containers look for in /config. Docker will automatically create this file for you on a
docker volume the first time you start up Postiz. The default container images will copy the `/config/postiz.env` to `/apps/.env` on startup. Like with
any environment variables, if you change them, you must restart the application for the changes to take effect.
An example file of the most used configuration settings can be found here; [example postiz.env file](https://raw.githubusercontent.com/gitroomhq/postiz-app/main/.env.example)
There is also a [configuration reference](/configuration/reference) page that goes into more detail.

View File

@ -10,6 +10,10 @@
"dev:stripe": "npx concurrently \"stripe listen --forward-to localhost:3000/stripe\" \"npm run dev\"",
"build": "npx nx run-many --target=build --projects=frontend,backend,workers,cron",
"build:frontend": "npx nx run frontend:build:production",
"dev:frontend": "npx nx run frontend:serve:development",
"dev:backend": "npx nx run backend:serve:development",
"dev:workers": "npx nx run workers:serve:development",
"dev:cron": "npx nx run cron:serve:development",
"start:prod": "node dist/apps/backend/main.js",
"start:prod:frontend": "nx run frontend:serve:production",
"start:prod:workers": "node dist/apps/workers/main.js",

View File

@ -1,20 +1,25 @@
#!/bin/bash
set -o xtrace
if [[ "$SKIP_CONFIG_CHECK" != "true" ]]; then
echo "symlinking /config/.env into /app/.env"
echo "Entrypoint: Copying /config/postiz.env into /app/.env"
if [ ! -f /config/.env ]; then
echo "ERROR: No .env file found in /config/.env"
echo "Entrypoint: WARNING: No .env file found in /config/postiz.env"
fi
ln -sf /config/.env /app/.env
cp -vf /config/postiz.env /app/.env
fi
if [[ "$POSTIZ_APPS" -eq "" ]]; then
echo "POSTIZ_APPS is not set, starting everything!"
echo "Entrypoint: POSTIZ_APPS is not set, starting everything!"
POSTIZ_APPS="frontend workers cron backend"
fi
echo "Entrypoint: Running database migrations"
npm run prisma-db-push
mkdir -p /etc/supervisor.d/
if [[ "$POSTIZ_APPS" == *"frontend"* ]]; then

View File

@ -1,6 +1,6 @@
[program:frontend]
directory=/app
command=npm run start:prod:frontend
directory=/app/dist/apps/frontend
command=npx next start
autostart=true
autorestart=false
redirect_stderr=true