From feb597a567e1986a003aa7484d65049a94d294f6 Mon Sep 17 00:00:00 2001 From: amass <168062547@qq.com> Date: Sun, 9 Mar 2025 13:26:38 +0800 Subject: [PATCH] update appflowy. --- resources/appflowy.sh | 381 ++++++++++++++++++++++-------------------- 1 file changed, 200 insertions(+), 181 deletions(-) diff --git a/resources/appflowy.sh b/resources/appflowy.sh index ea66423..c0e0f1a 100644 --- a/resources/appflowy.sh +++ b/resources/appflowy.sh @@ -1,208 +1,227 @@ #!/bin/bash if [ -f "appflowy.env" ]; then - set -a - source appflowy.env - set +a + set -a + source appflowy.env + set +a else - echo "cannot find appflowy.env" - exit 1 + echo "cannot find appflowy.env" + exit 1 fi images=( - "appflowyinc/appflowy_web:latest" - "appflowyinc/appflowy_worker:latest" - "appflowyinc/appflowy_ai:latest" - "appflowyinc/admin_frontend:latest" - "appflowyinc/appflowy_cloud:latest" - "appflowyinc/gotrue:latest" - "redis" # 等价于 redis:latest - "pgvector/pgvector:pg16" - "minio/minio:latest" + "appflowyinc/appflowy_web:latest" + "appflowyinc/appflowy_worker:latest" + "appflowyinc/appflowy_ai:latest" + "appflowyinc/admin_frontend:latest" + "appflowyinc/appflowy_cloud:latest" + "appflowyinc/gotrue:latest" + "redis" # 等价于 redis:latest + "pgvector/pgvector:pg16" + "minio/minio:latest" ) CONTAINERS=( - frpc - minio - postgres - redis - appflowy_gotrue - appflowy_cloud - appflowy_admin_frontend - appflowy_ai - appflowy_worker - appflowy_web + frpc + minio + postgres + redis + appflowy_gotrue + appflowy_cloud + appflowy_admin_frontend + appflowy_ai + appflowy_worker + appflowy_web ) -for container in "${CONTAINERS[@]}"; do +# for image in "${images[@]}"; do +# echo -e "\n\033[34m pulling image: ${image}\033[0m" +# if docker pull "${image}"; then +# echo -e "\033[32m pull successed: ${image}\033[0m" +# else +# echo -e "\033[31m pull failed: ${image}\033[0m" >&2 +# fi +# done + +# echo -e "\n\033[36m all images pull finished \033[0m" + +function stop_containers() { + for container in "${CONTAINERS[@]}"; do if docker ps -a --format '{{.Names}}' | grep -q "^${container}\$"; then - echo "delete $container" - docker rm --force "$container" 2>/dev/null && echo "$container delete successed" || echo "$container delete failed" + echo "delete $container" + docker rm --force "$container" 2>/dev/null && echo "$container delete successed" || echo "$container delete failed" else - echo "$container not existed" + echo "$container not existed" fi -done + done +} -for image in "${images[@]}"; do - echo -e "\n\033[34m pulling image: ${image}\033[0m" - if docker pull "${image}"; then - echo -e "\033[32m pull successed: ${image}\033[0m" - else - echo -e "\033[31m pull failed: ${image}\033[0m" >&2 - fi -done +function start_containers() { + stop_containers + docker run --restart=always --network host -d --name frpc \ + -e TZ="Asia/Shanghai" \ + -v /mnt/user/appdata/frpc/frpc.toml:/etc/frp/frpc.toml \ + -v /mnt/user/appdata/frpc:/app \ + registry.cn-shenzhen.aliyuncs.com/amass_toolset/frpc:0.61.2 -echo -e "\n\033[36m all images pull finished \033[0m" + docker run -d --name minio --restart=on-failure \ + -p 9000:9000 \ + -p 9001:9001 \ + -e MINIO_BROWSER_REDIRECT_URL="${APPFLOWY_BASE_URL}/minio" \ + -e MINIO_ROOT_USER="${APPFLOWY_S3_ACCESS_KEY}" \ + -e MINIO_ROOT_PASSWORD="${APPFLOWY_S3_SECRET_KEY}" \ + -v /mnt/user/appdata/minio:/data \ + minio/minio:latest server /data --console-address ":9001" -docker run --restart=always --network host -d --name frpc \ - -e TZ="Asia/Shanghai" \ - -v /mnt/user/appdata/frpc/frpc.toml:/etc/frp/frpc.toml \ - -v /mnt/user/appdata/frpc:/app \ - registry.cn-shenzhen.aliyuncs.com/amass_toolset/frpc:0.61.1 + docker run -d --name postgres --restart=on-failure \ + -p 5432:5432 \ + -e POSTGRES_USER=${POSTGRES_USER} \ + -e POSTGRES_DB=${POSTGRES_DB} \ + -e POSTGRES_PASSWORD=${POSTGRES_PASSWORD} \ + -e POSTGRES_HOST=${POSTGRES_HOST} \ + -e SUPABASE_PASSWORD=${SUPABASE_PASSWORD} \ + -v /mnt/user/appdata/postgres/migrations/before:/docker-entrypoint-initdb.d \ + -v /mnt/user/appdata/postgres/data:/var/lib/postgresql/data \ + pgvector/pgvector:pg16 -docker run -d --name minio --restart=on-failure \ - -p 9000:9000 \ - -p 9001:9001 \ - -e MINIO_BROWSER_REDIRECT_URL="${APPFLOWY_BASE_URL}/minio" \ - -e MINIO_ROOT_USER="${APPFLOWY_S3_ACCESS_KEY}" \ - -e MINIO_ROOT_PASSWORD="${APPFLOWY_S3_SECRET_KEY}" \ - -v /mnt/user/appdata/minio:/data \ - minio/minio:latest server /data --console-address ":9001" + docker run -d --name redis --restart=on-failure -p 6379:6379 redis -docker run -d --name postgres --restart=on-failure \ - -p 5432:5432 \ - -e POSTGRES_USER=${POSTGRES_USER} \ - -e POSTGRES_DB=${POSTGRES_DB} \ - -e POSTGRES_PASSWORD=${POSTGRES_PASSWORD} \ - -e POSTGRES_HOST=${POSTGRES_HOST} \ - -e SUPABASE_PASSWORD=${SUPABASE_PASSWORD} \ - -v /mnt/user/appdata/postgres/migrations/before:/docker-entrypoint-initdb.d \ - -v /mnt/user/appdata/postgres/data:/var/lib/postgresql/data \ - pgvector/pgvector:pg16 + docker run -d --name appflowy_gotrue --restart=on-failure \ + -p 9999:9999 \ + -e GOTRUE_ADMIN_EMAIL=${GOTRUE_ADMIN_EMAIL} \ + -e GOTRUE_ADMIN_PASSWORD=${GOTRUE_ADMIN_PASSWORD} \ + -e GOTRUE_DISABLE_SIGNUP=${GOTRUE_DISABLE_SIGNUP} \ + -e GOTRUE_SITE_URL='appflowy-flutter://' \ + -e GOTRUE_URI_ALLOW_LIST='**' \ + -e GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} \ + -e GOTRUE_JWT_EXP=${GOTRUE_JWT_EXP} \ + -e GOTRUE_JWT_ADMIN_GROUP_NAME=supabase_admin \ + -e GOTRUE_DB_DRIVER=postgres \ + -e API_EXTERNAL_URL=${API_EXTERNAL_URL} \ + -e DATABASE_URL=${GOTRUE_DATABASE_URL} \ + -e PORT=9999 \ + -e GOTRUE_SMTP_HOST=${GOTRUE_SMTP_HOST} \ + -e GOTRUE_SMTP_PORT=${GOTRUE_SMTP_PORT} \ + -e GOTRUE_SMTP_USER=${GOTRUE_SMTP_USER} \ + -e GOTRUE_SMTP_PASS=${GOTRUE_SMTP_PASS} \ + -e GOTRUE_MAILER_URLPATHS_CONFIRMATION='/gotrue/verify' \ + -e GOTRUE_MAILER_URLPATHS_INVITE='/gotrue/verify' \ + -e GOTRUE_MAILER_URLPATHS_RECOVERY='/gotrue/verify' \ + -e GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE='/gotrue/verify' \ + -e GOTRUE_SMTP_ADMIN_EMAIL=${GOTRUE_SMTP_ADMIN_EMAIL} \ + -e GOTRUE_SMTP_MAX_FREQUENCY=${GOTRUE_SMTP_MAX_FREQUENCY:-1ns} \ + -e GOTRUE_RATE_LIMIT_EMAIL_SENT=${GOTRUE_RATE_LIMIT_EMAIL_SENT:-100} \ + -e GOTRUE_MAILER_AUTOCONFIRM=${GOTRUE_MAILER_AUTOCONFIRM:-false} \ + -e GOTRUE_EXTERNAL_GOOGLE_ENABLED=${GOTRUE_EXTERNAL_GOOGLE_ENABLED} \ + -e GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID=${GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID} \ + -e GOTRUE_EXTERNAL_GOOGLE_SECRET=${GOTRUE_EXTERNAL_GOOGLE_SECRET} \ + -e GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=${GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI} \ + -e GOTRUE_EXTERNAL_GITHUB_ENABLED=${GOTRUE_EXTERNAL_GITHUB_ENABLED} \ + -e GOTRUE_EXTERNAL_GITHUB_CLIENT_ID=${GOTRUE_EXTERNAL_GITHUB_CLIENT_ID} \ + -e GOTRUE_EXTERNAL_GITHUB_SECRET=${GOTRUE_EXTERNAL_GITHUB_SECRET} \ + -e GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI=${GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI} \ + -e GOTRUE_EXTERNAL_DISCORD_ENABLED=${GOTRUE_EXTERNAL_DISCORD_ENABLED} \ + -e GOTRUE_EXTERNAL_DISCORD_CLIENT_ID=${GOTRUE_EXTERNAL_DISCORD_CLIENT_ID} \ + -e GOTRUE_EXTERNAL_DISCORD_SECRET=${GOTRUE_EXTERNAL_DISCORD_SECRET} \ + -e GOTRUE_EXTERNAL_DISCORD_REDIRECT_URI=${GOTRUE_EXTERNAL_DISCORD_REDIRECT_URI} \ + appflowyinc/gotrue:latest -docker run -d --name redis --restart=on-failure -p 6379:6379 redis + docker run -d --name appflowy_cloud --restart=on-failure \ + -p 8000:8000 \ + -e RUST_LOG=${RUST_LOG:-info} \ + -e APPFLOWY_ENVIRONMENT=production \ + -e APPFLOWY_DATABASE_URL=${APPFLOWY_DATABASE_URL} \ + -e APPFLOWY_REDIS_URI=${APPFLOWY_REDIS_URI} \ + -e APPFLOWY_GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} \ + -e APPFLOWY_GOTRUE_JWT_EXP=${GOTRUE_JWT_EXP} \ + -e APPFLOWY_GOTRUE_BASE_URL=${APPFLOWY_GOTRUE_BASE_URL} \ + -e APPFLOWY_GOTRUE_EXT_URL=${API_EXTERNAL_URL} \ + -e APPFLOWY_GOTRUE_ADMIN_EMAIL=${GOTRUE_ADMIN_EMAIL} \ + -e APPFLOWY_GOTRUE_ADMIN_PASSWORD=${GOTRUE_ADMIN_PASSWORD} \ + -e APPFLOWY_S3_CREATE_BUCKET=${APPFLOWY_S3_CREATE_BUCKET} \ + -e APPFLOWY_S3_USE_MINIO=${APPFLOWY_S3_USE_MINIO} \ + -e APPFLOWY_S3_MINIO_URL=${APPFLOWY_S3_MINIO_URL} \ + -e APPFLOWY_S3_ACCESS_KEY=${APPFLOWY_S3_ACCESS_KEY} \ + -e APPFLOWY_S3_SECRET_KEY=${APPFLOWY_S3_SECRET_KEY} \ + -e APPFLOWY_S3_BUCKET=${APPFLOWY_S3_BUCKET} \ + -e APPFLOWY_S3_REGION=${APPFLOWY_S3_REGION} \ + -e APPFLOWY_S3_PRESIGNED_URL_ENDPOINT=${APPFLOWY_S3_PRESIGNED_URL_ENDPOINT} \ + -e APPFLOWY_MAILER_SMTP_HOST=${APPFLOWY_MAILER_SMTP_HOST} \ + -e APPFLOWY_MAILER_SMTP_PORT=${APPFLOWY_MAILER_SMTP_PORT} \ + -e APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME} \ + -e APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL} \ + -e APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD} \ + -e APPFLOWY_MAILER_SMTP_TLS_KIND=${APPFLOWY_MAILER_SMTP_TLS_KIND} \ + -e APPFLOWY_ACCESS_CONTROL=${APPFLOWY_ACCESS_CONTROL} \ + -e APPFLOWY_DATABASE_MAX_CONNECTIONS=${APPFLOWY_DATABASE_MAX_CONNECTIONS} \ + -e AI_SERVER_HOST=${AI_SERVER_HOST} \ + -e AI_SERVER_PORT=${AI_SERVER_PORT} \ + -e AI_OPENAI_API_KEY=${AI_OPENAI_API_KEY} \ + -e APPFLOWY_ADMIN_FRONTEND_PATH_PREFIX=${ADMIN_FRONTEND_PATH_PREFIX} \ + -e APPFLOWY_WEB_URL=${APPFLOWY_WEB_URL} \ + appflowyinc/appflowy_cloud:latest -docker run -d --name appflowy_gotrue --restart=on-failure \ - -p 9999:9999 \ - -e GOTRUE_ADMIN_EMAIL=${GOTRUE_ADMIN_EMAIL} \ - -e GOTRUE_ADMIN_PASSWORD=${GOTRUE_ADMIN_PASSWORD} \ - -e GOTRUE_DISABLE_SIGNUP=${GOTRUE_DISABLE_SIGNUP} \ - -e GOTRUE_SITE_URL='appflowy-flutter://' \ - -e GOTRUE_URI_ALLOW_LIST='**' \ - -e GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} \ - -e GOTRUE_JWT_EXP=${GOTRUE_JWT_EXP} \ - -e GOTRUE_JWT_ADMIN_GROUP_NAME=supabase_admin \ - -e GOTRUE_DB_DRIVER=postgres \ - -e API_EXTERNAL_URL=${API_EXTERNAL_URL} \ - -e DATABASE_URL=${GOTRUE_DATABASE_URL} \ - -e PORT=9999 \ - -e GOTRUE_SMTP_HOST=${GOTRUE_SMTP_HOST}\ - -e GOTRUE_SMTP_PORT=${GOTRUE_SMTP_PORT} \ - -e GOTRUE_SMTP_USER=${GOTRUE_SMTP_USER} \ - -e GOTRUE_SMTP_PASS=${GOTRUE_SMTP_PASS} \ - -e GOTRUE_MAILER_URLPATHS_CONFIRMATION='/gotrue/verify' \ - -e GOTRUE_MAILER_URLPATHS_INVITE='/gotrue/verify' \ - -e GOTRUE_MAILER_URLPATHS_RECOVERY='/gotrue/verify' \ - -e GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE='/gotrue/verify' \ - -e GOTRUE_SMTP_ADMIN_EMAIL=${GOTRUE_SMTP_ADMIN_EMAIL} \ - -e GOTRUE_SMTP_MAX_FREQUENCY=${GOTRUE_SMTP_MAX_FREQUENCY:-1ns} \ - -e GOTRUE_RATE_LIMIT_EMAIL_SENT=${GOTRUE_RATE_LIMIT_EMAIL_SENT:-100} \ - -e GOTRUE_MAILER_AUTOCONFIRM=${GOTRUE_MAILER_AUTOCONFIRM:-false} \ - -e GOTRUE_EXTERNAL_GOOGLE_ENABLED=${GOTRUE_EXTERNAL_GOOGLE_ENABLED} \ - -e GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID=${GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID} \ - -e GOTRUE_EXTERNAL_GOOGLE_SECRET=${GOTRUE_EXTERNAL_GOOGLE_SECRET} \ - -e GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=${GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI} \ - -e GOTRUE_EXTERNAL_GITHUB_ENABLED=${GOTRUE_EXTERNAL_GITHUB_ENABLED} \ - -e GOTRUE_EXTERNAL_GITHUB_CLIENT_ID=${GOTRUE_EXTERNAL_GITHUB_CLIENT_ID} \ - -e GOTRUE_EXTERNAL_GITHUB_SECRET=${GOTRUE_EXTERNAL_GITHUB_SECRET} \ - -e GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI=${GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI} \ - -e GOTRUE_EXTERNAL_DISCORD_ENABLED=${GOTRUE_EXTERNAL_DISCORD_ENABLED} \ - -e GOTRUE_EXTERNAL_DISCORD_CLIENT_ID=${GOTRUE_EXTERNAL_DISCORD_CLIENT_ID} \ - -e GOTRUE_EXTERNAL_DISCORD_SECRET=${GOTRUE_EXTERNAL_DISCORD_SECRET} \ - -e GOTRUE_EXTERNAL_DISCORD_REDIRECT_URI=${GOTRUE_EXTERNAL_DISCORD_REDIRECT_URI} \ - appflowyinc/gotrue:latest + docker run -d --name appflowy_admin_frontend \ + --restart on-failure \ + -p 3001:3000 \ + -e RUST_LOG=${RUST_LOG:-info} \ + -e ADMIN_FRONTEND_REDIS_URL=${ADMIN_FRONTEND_REDIS_URL} \ + -e ADMIN_FRONTEND_GOTRUE_URL=${ADMIN_FRONTEND_GOTRUE_URL} \ + -e ADMIN_FRONTEND_APPFLOWY_CLOUD_URL=${ADMIN_FRONTEND_APPFLOWY_CLOUD_URL} \ + -e ADMIN_FRONTEND_PATH_PREFIX=${ADMIN_FRONTEND_PATH_PREFIX:-} \ + appflowyinc/admin_frontend:latest + docker run -d --name appflowy_ai \ + --restart on-failure \ + -p 5001:5001 \ + -e OPENAI_API_KEY=${AI_OPENAI_API_KEY} \ + -e APPFLOWY_AI_SERVER_PORT=${AI_SERVER_PORT} \ + -e APPFLOWY_AI_DATABASE_URL=${AI_DATABASE_URL} \ + -e APPFLOWY_AI_REDIS_URL=${AI_REDIS_URL} \ + appflowyinc/appflowy_ai:latest -docker run -d --name appflowy_cloud --restart=on-failure \ - -p 8000:8000 \ - -e RUST_LOG=${RUST_LOG:-info} \ - -e APPFLOWY_ENVIRONMENT=production \ - -e APPFLOWY_DATABASE_URL=${APPFLOWY_DATABASE_URL} \ - -e APPFLOWY_REDIS_URI=${APPFLOWY_REDIS_URI} \ - -e APPFLOWY_GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} \ - -e APPFLOWY_GOTRUE_JWT_EXP=${GOTRUE_JWT_EXP} \ - -e APPFLOWY_GOTRUE_BASE_URL=${APPFLOWY_GOTRUE_BASE_URL} \ - -e APPFLOWY_GOTRUE_EXT_URL=${API_EXTERNAL_URL} \ - -e APPFLOWY_GOTRUE_ADMIN_EMAIL=${GOTRUE_ADMIN_EMAIL} \ - -e APPFLOWY_GOTRUE_ADMIN_PASSWORD=${GOTRUE_ADMIN_PASSWORD} \ - -e APPFLOWY_S3_CREATE_BUCKET=${APPFLOWY_S3_CREATE_BUCKET} \ - -e APPFLOWY_S3_USE_MINIO=${APPFLOWY_S3_USE_MINIO} \ - -e APPFLOWY_S3_MINIO_URL=${APPFLOWY_S3_MINIO_URL} \ - -e APPFLOWY_S3_ACCESS_KEY=${APPFLOWY_S3_ACCESS_KEY} \ - -e APPFLOWY_S3_SECRET_KEY=${APPFLOWY_S3_SECRET_KEY} \ - -e APPFLOWY_S3_BUCKET=${APPFLOWY_S3_BUCKET} \ - -e APPFLOWY_S3_REGION=${APPFLOWY_S3_REGION} \ - -e APPFLOWY_S3_PRESIGNED_URL_ENDPOINT=${APPFLOWY_S3_PRESIGNED_URL_ENDPOINT} \ - -e APPFLOWY_MAILER_SMTP_HOST=${APPFLOWY_MAILER_SMTP_HOST} \ - -e APPFLOWY_MAILER_SMTP_PORT=${APPFLOWY_MAILER_SMTP_PORT} \ - -e APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME} \ - -e APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL} \ - -e APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD} \ - -e APPFLOWY_MAILER_SMTP_TLS_KIND=${APPFLOWY_MAILER_SMTP_TLS_KIND} \ - -e APPFLOWY_ACCESS_CONTROL=${APPFLOWY_ACCESS_CONTROL} \ - -e APPFLOWY_DATABASE_MAX_CONNECTIONS=${APPFLOWY_DATABASE_MAX_CONNECTIONS} \ - -e AI_SERVER_HOST=${AI_SERVER_HOST} \ - -e AI_SERVER_PORT=${AI_SERVER_PORT} \ - -e AI_OPENAI_API_KEY=${AI_OPENAI_API_KEY} \ - -e APPFLOWY_ADMIN_FRONTEND_PATH_PREFIX=${ADMIN_FRONTEND_PATH_PREFIX} \ - -e APPFLOWY_WEB_URL=${APPFLOWY_WEB_URL} \ - appflowyinc/appflowy_cloud:latest + docker run -d --name appflowy_worker \ + --restart on-failure \ + -e RUST_LOG=${RUST_LOG:-info} \ + -e APPFLOWY_ENVIRONMENT=production \ + -e APPFLOWY_WORKER_REDIS_URL=${APPFLOWY_WORKER_REDIS_URL} \ + -e APPFLOWY_WORKER_ENVIRONMENT=production \ + -e APPFLOWY_WORKER_DATABASE_URL=${APPFLOWY_WORKER_DATABASE_URL} \ + -e APPFLOWY_WORKER_DATABASE_NAME=${APPFLOWY_WORKER_DATABASE_NAME} \ + -e APPFLOWY_WORKER_IMPORT_TICK_INTERVAL=30 \ + -e APPFLOWY_S3_USE_MINIO=${APPFLOWY_S3_USE_MINIO} \ + -e APPFLOWY_S3_MINIO_URL=${APPFLOWY_S3_MINIO_URL} \ + -e APPFLOWY_S3_ACCESS_KEY=${APPFLOWY_S3_ACCESS_KEY} \ + -e APPFLOWY_S3_SECRET_KEY=${APPFLOWY_S3_SECRET_KEY} \ + -e APPFLOWY_S3_BUCKET=${APPFLOWY_S3_BUCKET} \ + -e APPFLOWY_S3_REGION=${APPFLOWY_S3_REGION} \ + -e APPFLOWY_MAILER_SMTP_HOST=${APPFLOWY_MAILER_SMTP_HOST} \ + -e APPFLOWY_MAILER_SMTP_PORT=${APPFLOWY_MAILER_SMTP_PORT} \ + -e APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME} \ + -e APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL} \ + -e APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD} \ + -e APPFLOWY_MAILER_SMTP_TLS_KIND=${APPFLOWY_MAILER_SMTP_TLS_KIND} \ + appflowyinc/appflowy_worker:latest -docker run -d --name appflowy_admin_frontend \ - --restart on-failure \ - -p 3001:3000 \ - -e RUST_LOG=${RUST_LOG:-info} \ - -e ADMIN_FRONTEND_REDIS_URL=${ADMIN_FRONTEND_REDIS_URL} \ - -e ADMIN_FRONTEND_GOTRUE_URL=${ADMIN_FRONTEND_GOTRUE_URL} \ - -e ADMIN_FRONTEND_APPFLOWY_CLOUD_URL=${ADMIN_FRONTEND_APPFLOWY_CLOUD_URL} \ - -e ADMIN_FRONTEND_PATH_PREFIX=${ADMIN_FRONTEND_PATH_PREFIX:-} \ - appflowyinc/admin_frontend:latest + docker run -d --name appflowy_web \ + --restart on-failure \ + -p 8090:80 \ + -e AF_BASE_URL="${APPFLOWY_BASE_URL}" \ + -e AF_GOTRUE_URL="${API_EXTERNAL_URL}" \ + appflowyinc/appflowy_web:latest +} -docker run -d --name appflowy_ai \ - --restart on-failure \ - -p 5001:5001 \ - -e OPENAI_API_KEY=${AI_OPENAI_API_KEY} \ - -e APPFLOWY_AI_SERVER_PORT=${AI_SERVER_PORT} \ - -e APPFLOWY_AI_DATABASE_URL=${AI_DATABASE_URL} \ - -e APPFLOWY_AI_REDIS_URL=${AI_REDIS_URL} \ - appflowyinc/appflowy_ai:latest +function main() { + local cmd=$1 + shift 1 + case $cmd in + stop) + stop_containers + ;; + *) + start_containers + ;; + esac +} -docker run -d --name appflowy_worker \ - --restart on-failure \ - -e RUST_LOG=${RUST_LOG:-info} \ - -e APPFLOWY_ENVIRONMENT=production \ - -e APPFLOWY_WORKER_REDIS_URL=${APPFLOWY_WORKER_REDIS_URL} \ - -e APPFLOWY_WORKER_ENVIRONMENT=production \ - -e APPFLOWY_WORKER_DATABASE_URL=${APPFLOWY_WORKER_DATABASE_URL} \ - -e APPFLOWY_WORKER_DATABASE_NAME=${APPFLOWY_WORKER_DATABASE_NAME} \ - -e APPFLOWY_WORKER_IMPORT_TICK_INTERVAL=30 \ - -e APPFLOWY_S3_USE_MINIO=${APPFLOWY_S3_USE_MINIO} \ - -e APPFLOWY_S3_MINIO_URL=${APPFLOWY_S3_MINIO_URL} \ - -e APPFLOWY_S3_ACCESS_KEY=${APPFLOWY_S3_ACCESS_KEY} \ - -e APPFLOWY_S3_SECRET_KEY=${APPFLOWY_S3_SECRET_KEY} \ - -e APPFLOWY_S3_BUCKET=${APPFLOWY_S3_BUCKET} \ - -e APPFLOWY_S3_REGION=${APPFLOWY_S3_REGION} \ - -e APPFLOWY_MAILER_SMTP_HOST=${APPFLOWY_MAILER_SMTP_HOST} \ - -e APPFLOWY_MAILER_SMTP_PORT=${APPFLOWY_MAILER_SMTP_PORT} \ - -e APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME} \ - -e APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL} \ - -e APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD} \ - -e APPFLOWY_MAILER_SMTP_TLS_KIND=${APPFLOWY_MAILER_SMTP_TLS_KIND} \ - appflowyinc/appflowy_worker:latest - -docker run -d --name appflowy_web \ - --restart on-failure \ - -p 8090:80 \ - -e AF_BASE_URL="${APPFLOWY_BASE_URL}" \ - -e AF_GOTRUE_URL="${API_EXTERNAL_URL}" \ - appflowyinc/appflowy_web:latest \ No newline at end of file +main $@