-
Notifications
You must be signed in to change notification settings - Fork 820
Deployment Scripts Guide
Blue/green deployment and automatic migrations: Use the blue/green deployment tutorial (Chinese) for signed managed installation, enrollment, and planned updates. Check its release prerequisites first. The existing deployment reference is preserved below.
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.
- 首页
- 快速上手
- 常见问题
- 部署指南
- 3.1 升级教程
- 3.0 升级教程
- 蓝绿部署与自动迁移
- 仓库文档中心
- 部署脚本使用指南
- 部署检查清单
- v2.1.0 部署升级说明
- 模板与主题工作流
- 模型接入指南
- AI 知识库教程
- 知识库切片与 RAG
- 分发管理与目标站点
- 数据分析与日志
- 更新日志
- 什么是 GEOFlow
- GEOFlow 方法论
- 使用边界与内容底线
- 适用场景
- 场景部署与使用方式
- 核心能力总览
- 推荐采用路径
- Skill / CLI / API 生态
- 路线图
- 作者与项目
- Home
- Getting Started
- FAQ
- Deployment Guide
- 3.1 Upgrade Guide
- 3.0 Upgrade Tutorial (Chinese)
- Blue/green Deployment and Automatic Migrations
- 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
- Changelog
- 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