Skip to content

Commit

Permalink
Merge branch 'main' into configuration-checking
Browse files Browse the repository at this point in the history
  • Loading branch information
jamesread authored Sep 14, 2024
2 parents b7f8fac + 8639cc1 commit fd279c0
Show file tree
Hide file tree
Showing 12 changed files with 180 additions and 70 deletions.
82 changes: 55 additions & 27 deletions .env.example
Original file line number Diff line number Diff line change
@@ -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=""
Expand All @@ -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=""
Expand All @@ -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
24 changes: 15 additions & 9 deletions Dockerfile.dev
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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

Expand All @@ -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
Expand All @@ -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)"
40 changes: 30 additions & 10 deletions apps/docs/installation/development.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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+)
Expand Down Expand Up @@ -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"
Expand All @@ -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"
Expand All @@ -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
Expand Down
16 changes: 13 additions & 3 deletions apps/docs/installation/docker-compose.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
Expand Down
27 changes: 23 additions & 4 deletions apps/docs/installation/docker.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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 />
6 changes: 6 additions & 0 deletions apps/docs/mint.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@
"installation/kubernetes-helm"
]
},
{
"group": "Configuration",
"pages": [
"configuration/reference"
]
},
"howitworks",
"emails",
"github",
Expand Down
6 changes: 0 additions & 6 deletions apps/docs/snippets/docker-database.mdx

This file was deleted.

13 changes: 8 additions & 5 deletions apps/docs/snippets/docker-envvar-apps.mdx
Original file line number Diff line number Diff line change
@@ -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"`
15 changes: 15 additions & 0 deletions apps/docs/snippets/docker-envvar-general.mdx
Original file line number Diff line number Diff line change
@@ -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.

4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
13 changes: 9 additions & 4 deletions var/docker/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Loading

0 comments on commit fd279c0

Please sign in to comment.