-
Notifications
You must be signed in to change notification settings - Fork 596
Deployment Scripts Guide
This page explains how to use the reference deployment scripts in the GEOFlow deploy-scripts/ directory, what server environments they fit, what to prepare before execution, how to verify the deployment, and how to troubleshoot common failures.
The scripts are not a replacement for production operations, but they automate the repeated deployment path: host preflight checks, source download, production environment generation, Docker Compose production stack startup, default admin initialization, and post-deployment health checks.
| Script | Purpose | Recommended Use |
|---|---|---|
geoflow-docker-deploy.sh |
Production Docker one-click deployment | Fresh cloud servers, VPS, Docker hosts, panel servers such as BT Panel or 1Panel |
geoflow-healthcheck.sh |
Post-deployment health check | After deployment, domain/HTTPS/proxy changes, and upgrades |
Script directory:
https://github.com/yaojingang/GEOFlow/tree/main/deploy-scripts
- CPU: 2 cores
- Memory: 2 GB RAM plus 2 GB swap
- Disk: 20 GB free
- OS: Ubuntu 22.04+, Debian 12+, Rocky Linux 9+, Alibaba Cloud Linux 3+
- Network: outbound access to GitHub, Docker registry, and your AI provider APIs
- CPU: 2-4 cores
- Memory: 4-8 GB
- Disk: 40-80 GB SSD
- Network: 5 Mbps+ public bandwidth
- Recommended: Nginx, Caddy, BT Panel, 1Panel, cloud load balancer, or CDN for HTTPS reverse proxy
- CPU: 4-8 cores or higher
- Memory: 8-16 GB or higher
- Disk: 100 GB+ SSD; use object storage or a separate disk for uploads when needed
- Database: dedicated PostgreSQL or managed cloud PostgreSQL is recommended
- Redis: dedicated Redis or managed cloud Redis is recommended
Check that:
- The server can access
https://github.com/yaojingang/GEOFlow - The server can pull Docker images
- Port
18080is available, or you plan to customize it - DNS is already pointed to the server if using a domain
- HTTPS reverse proxy can forward traffic to the Web port exposed by Docker
- PostgreSQL port
5432and Redis port6379are not exposed publicly
If Docker image pulling is unstable in your region, configure a stable Docker registry mirror before running the script.
Run on a fresh server:
curl -fsSL https://raw.githubusercontent.com/yaojingang/GEOFlow/main/deploy-scripts/geoflow-docker-deploy.sh -o geoflow-docker-deploy.sh
bash geoflow-docker-deploy.shThe script will:
- Check basic commands:
git,curl,openssl - Check CPU, memory, and disk
- Check Docker and Docker Compose v2
- Offer to install Docker when missing
- Clone or update GEOFlow source code
- Generate and update
.env.prod - Build production Docker images
- Start PostgreSQL and Redis
- Run Laravel initialization and migrations
- Start Web, App, Queue, Scheduler, and Reverb
- Seed the default admin
- Clear and rebuild Laravel caches
- Run post-deployment health checks
The script asks for:
| Parameter | Default | Description |
|---|---|---|
APP_URL |
http://server-ip:18080 |
Public URL, must include http:// or https://
|
| Web port | 18080 |
Host port mapped to the Web container |
| Reverb port | 18081 |
Realtime service port |
| Admin base path | geo_admin |
Admin login path, for example /geo_admin/login
|
If you have a domain, use:
https://example.com
If deploying under a first-level subdirectory:
https://example.com/wiki
Set APP_URL to:
https://example.com/wiki
Keep the admin base path as:
geo_admin
Do not set it to:
wiki/geo_admin
For cloud-init, server templates, or CI:
GEOFLOW_NONINTERACTIVE=1 \
GEOFLOW_APP_URL=https://example.com \
GEOFLOW_APP_DIR=/opt/geoflow \
GEOFLOW_WEB_PORT=18080 \
GEOFLOW_REVERB_PORT=18081 \
GEOFLOW_ADMIN_BASE_PATH=geo_admin \
bash geoflow-docker-deploy.shCommon variables:
| Variable | Default | Description |
|---|---|---|
GEOFLOW_REPO_URL |
https://github.com/yaojingang/GEOFlow.git |
Source repository URL |
GEOFLOW_BRANCH |
main |
Branch to deploy |
GEOFLOW_APP_DIR |
/opt/geoflow |
Installation directory |
GEOFLOW_APP_URL |
detected IP | Public URL |
GEOFLOW_WEB_PORT |
18080 |
Web port |
GEOFLOW_REVERB_PORT |
18081 |
Reverb port |
GEOFLOW_ADMIN_BASE_PATH |
geo_admin |
Admin base path |
GEOFLOW_INSTALL_DOCKER |
auto |
1 to auto-install Docker; 0 to fail if Docker is missing |
GEOFLOW_DB_DATABASE |
geo_flow |
PostgreSQL database name |
GEOFLOW_DB_USERNAME |
geo_user |
PostgreSQL username |
GEOFLOW_DB_PASSWORD |
random | PostgreSQL password |
GEOFLOW_REDIS_PASSWORD |
random | Redis password |
GEOFLOW_TRUSTED_PROXIES |
* |
Recommended for reverse proxy, CDN, and subdirectory deployments |
GEOFLOW_SELF_DELETE |
0 |
1 removes the executed deployment script after success |
To remove the downloaded deployment script after a successful deployment:
GEOFLOW_SELF_DELETE=1 bash geoflow-docker-deploy.shThis only removes the executed script file. It does not remove:
- Deployed GEOFlow source code
- Repository
deploy-scripts/directory - Database data
- Uploads
- Containers
Default access:
Frontend: http://server-ip:18080
Admin: http://server-ip:18080/geo_admin/login
Default admin:
| Item | Value |
|---|---|
| Username | admin |
| Password | password |
Change the default password immediately after the first login.
After logging in:
- Open the user menu in the top-right corner.
- Open account or user management.
- Change the current admin password.
If the admin account is locked:
cd /opt/geoflow
docker compose --env-file .env.prod -f docker-compose.prod.yml run --rm app php artisan geoflow:admin-unlock adminThe deployment script runs a health check automatically. You can also run it manually:
cd /opt/geoflow
bash deploy-scripts/geoflow-healthcheck.shIt checks:
- Docker Compose service status
- PostgreSQL, Redis, App, Web, Queue, Scheduler, and Reverb
http://127.0.0.1:WEB_PORT/up- Laravel database migration status
- Recent App, Queue, Scheduler, and Web logs
Use the one-command deployment script directly, then reverse proxy ports 80/443 to 127.0.0.1:18080.
Use Docker deployment for GEOFlow. Let the panel manage:
- Domain binding
- HTTPS certificates
- Reverse proxy
- Firewall ingress
Avoid using the panel to run GEOFlow as a native PHP site, because that may conflict with the Docker production stack.
If the server cannot access GitHub or Docker Hub, prepare:
- Internal Git mirror or uploaded source package
- Available Docker image mirror
- Network egress to AI provider APIs
Use a custom source repository:
GEOFLOW_REPO_URL=https://your-git-mirror/GEOFlow.git bash geoflow-docker-deploy.shGEOFlow exposes its Web port, usually 18080. Proxy external traffic to it:
location / {
proxy_pass http://127.0.0.1:18080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}If the external URL is:
https://example.com/wiki
Use:
APP_URL=https://example.com/wiki
TRUSTED_PROXIES=*
ADMIN_BASE_PATH=geo_adminThe reverse proxy should pass:
proxy_set_header X-Forwarded-Prefix /wiki;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;The admin URL should be:
https://example.com/wiki/geo_admin/login
Not:
https://example.com/geo_admin/login
cd /opt/geoflow
git pull
docker compose --env-file .env.prod -f docker-compose.prod.yml build
docker compose --env-file .env.prod -f docker-compose.prod.yml up -d
docker compose --env-file .env.prod -f docker-compose.prod.yml run --rm app php artisan migrate --force
docker compose --env-file .env.prod -f docker-compose.prod.yml run --rm app php artisan optimize:clear
docker compose --env-file .env.prod -f docker-compose.prod.yml run --rm app php artisan optimizeBack up before upgrading:
.env.prodstorage/- PostgreSQL data directory or database dump
The script can offer to install Docker. For controlled production environments, install Docker and Docker Compose v2 manually first.
Use custom ports:
GEOFLOW_WEB_PORT=28080 GEOFLOW_REVERB_PORT=28081 bash geoflow-docker-deploy.shUsually caused by unstable registry access. Try:
- Retry
- Configure a stable registry mirror
- Check outbound network
- Test
docker pull php:8.4-fpm-bookworm
Check:
APP_URLADMIN_BASE_PATH- Reverse proxy target port
-
X-Forwarded-Prefixfor subdirectory deployments BOOST_BROWSER_LOGS_WATCHER=false
Run:
cd /opt/geoflow
bash deploy-scripts/geoflow-healthcheck.shFocus on:
queuescheduler- Redis
- AI model API configuration
- Change the default admin password immediately.
- Use a custom admin path.
- Do not expose PostgreSQL or Redis publicly.
- Use HTTPS.
- Keep
APP_DEBUG=falsein production. - Keep
BOOST_BROWSER_LOGS_WATCHER=falsein production. - Back up database and uploads regularly.
- Delete temporary deployment scripts after use, or use
GEOFLOW_SELF_DELETE=1.
- 首页
- 快速上手
- 常见问题
- 部署指南
- 部署脚本使用指南
- 部署检查清单
- 模板与主题工作流
- 模型接入指南
- AI 知识库教程
- 知识库切片与 RAG
- 分发管理与目标站点
- 数据分析与日志
- 什么是 GEOFlow
- GEOFlow 方法论
- 使用边界与内容底线
- 适用场景
- 场景部署与使用方式
- 核心能力总览
- 推荐采用路径
- Skill / CLI / API 生态
- 路线图
- 作者与项目
- Home
- Getting Started
- FAQ
- Deployment Guide
- Deployment Scripts Guide
- Deployment Checklist
- Theme and Template Workflow
- Model Setup Guide
- AI Knowledge Base Tutorial
- Knowledge Chunking and RAG
- Distribution Management and Target Sites
- Analytics and Logs
- What Is GEOFlow
- GEOFlow Methodology
- Principles and Content Boundaries
- Use Cases
- Deployment Patterns by Scenario
- Core Capabilities
- Recommended Adoption Path
- Skill / CLI / API Ecosystem
- Roadmap
- Author and Project