← Back to Skills Marketplace
bamboo-art

FastapiAdmin WSL 自动部署

by bamboo-art · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
87
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install faa-wsl
Description
将 FastapiAdmin 在 Windows WSL2 Ubuntu 环境下自动部署。包括环境检查、依赖安装(pip/pnpm/MySQL/Redis/Nginx)、前后端代码克隆与构建、Nginx SPA 路由修复(alias+try_files 循环问题)、WSL2 网络访问(宿主机浏览器访问)、SSL...
README (SKILL.md)

FastapiAdmin WSL2 部署

环境要求

组件 版本 说明
Python ≥ 3.10 WSL2 Ubuntu 默认 3.12
Node.js ≥ 20.0 WSL2 已装 v22
pnpm ≥ 9.0 需单独安装
MySQL ≥ 8.0 需单独安装
Redis ≥ 7.0 需单独安装
Nginx 任意 需单独安装

工作目录

统一使用 ~/workdir(即 /home/\x3Cuser>/workdir)作为部署根目录。


Step 1:安装系统依赖(pip/pnpm/MySQL/Redis/Nginx)

# 安装 pip(Ubuntu 强制模式)
curl -sS https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py
python3 /tmp/get-pip.py --break-system-packages

# 安装 pnpm
npm install -g pnpm

# 安装 MySQL + Redis + Nginx
sudo apt-get update
sudo apt-get install -y mysql-server redis-server nginx

# 安装 python3-venv(venv 创建必需)
sudo apt-get install -y python3.12-venv

# 启动服务
sudo service mysql start
sudo service redis-server start

Step 2:配置 MySQL 数据库

sudo mysql -e "CREATE DATABASE IF NOT EXISTS fastapiadmin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mysql -e "CREATE USER IF NOT EXISTS 'fastapiadmin'@'localhost' IDENTIFIED BY 'fastapiadmin123';"
sudo mysql -e "GRANT ALL PRIVILEGES ON fastapiadmin.* TO 'fastapiadmin'@'localhost'; FLUSH PRIVILEGES;"

Step 3:克隆代码

mkdir -p ~/workdir && cd ~/workdir
git clone https://gitee.com/fastapiadmin/FastapiAdmin.git
git clone https://gitee.com/fastapiadmin/FastDocs.git

Step 4:后端初始化

cd ~/workdir/FastapiAdmin/backend

# 创建虚拟环境
python3 -m venv venv
./venv/bin/pip install -r requirements.txt

# 配置环境变量
cp env/.env.dev.example env/.env.dev
# 编辑 env/.env.dev,修改:
#   DATABASE_USER = "fastapiadmin"
#   DATABASE_PASSWORD = "fastapiadmin123"
#   REDIS_PASSWORD = ""(无密码则留空)

# 生成并执行迁移
./venv/bin/python main.py revision --env=dev
./venv/bin/python main.py upgrade --env=dev

Step 5:前端构建

cd ~/workdir/FastapiAdmin/frontend

# 安装依赖
pnpm install

# 创建生产环境配置
cat > .env.production \x3C\x3C 'EOF'
VITE_APP_ENV=production
VITE_APP_TITLE=FastapiAdmin
VITE_API_BASE_URL=http://\x3CWSL2_IP>
VITE_APP_BASE_API=/api/v1
VITE_TIMEOUT=10000
VITE_APP_WS_ENDPOINT=ws://\x3CWSL2_IP>
EOF

# 构建
pnpm run build

Step 6:Nginx 配置(关键)

Nginx 配置源码位于 ~/workdir/FastapiAdmin/devops/nginx/nginx.conf,部署时复制到 /etc/nginx/nginx.conf

6.1 生成自签名 SSL 证书

sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.pem \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=FastapiAdmin/OU=Dev/CN=localhost"
sudo chmod 600 /etc/nginx/ssl/server.key

6.2 Nginx 配置模板

⚠️ 关键修复:原配置中 alias + try_files 组合会导致重定向循环。必须用精确匹配 location = /web/index.html 作为内部 fallback,而非 named location 或路径重写。

编辑 ~/workdir/FastapiAdmin/devops/nginx/nginx.conf,替换 location /web 部分:

# HTTP server块
server {
    listen 80;
    server_name service.fastapiadmin.com;

    location = /web {
        return 301 /web/;
    }
    location /web/ {
        alias /usr/share/nginx/html/frontend/;
        index index.html;
        try_files $uri $uri/ /web_fallback.html;
    }
    location = /web_fallback.html {
        internal;
        alias /usr/share/nginx/html/frontend/index.html;
    }

    location /api/v1 {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://127.0.0.1:8001;
    }
}

6.3 部署 Nginx 配置

sudo cp ~/workdir/FastapiAdmin/devops/nginx/nginx.conf /etc/nginx/nginx.conf
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo nginx

Step 7:启动后端服务

cd ~/workdir/FastapiAdmin/backend
./venv/bin/python main.py run --env=dev &

宿主机访问

WSL2 IP 不固定,每次重启后可能变化。获取方式:

hostname -I | awk '{print $1}'

宿主机 Windows 浏览器访问:

  • 前端:http://\x3CWSL2_IP>/web/
  • API 文档:http://\x3CWSL2_IP>/api/v1/docs

💡 部署后如果 WSL2 IP 变化,只需更新 Nginx 中 .env.productionVITE_API_BASE_URL 并重建前端即可。

故障排查

详见 references/troubleshooting.md

快速命令汇总

# 一键启动
cd ~/workdir/FastapiAdmin/backend && ./venv/bin/python main.py run --env=dev

# 查看 WSL2 IP
hostname -I | awk '{print $1}'

# Nginx 配置测试与重载
sudo nginx -t && sudo nginx -s reload

# 查看 Nginx 错误日志
sudo tail /var/log/nginx/error.log
Usage Guidance
This SKILL.md is coherent with deploying FastapiAdmin on WSL2 but contains high-impact, privileged commands and some unsafe defaults. Before running anything: 1) Review every shell command line-by-line and run them manually (don’t run the whole script as-is). 2) Replace the hardcoded DB password with a strong unique password and store it securely. 3) Back up existing /etc/nginx/nginx.conf before overwriting. 4) Consider using proper TLS (Let’s Encrypt) or generate certs with correct CN/server_name instead of the provided self-signed CN=localhost. 5) Avoid mapping a remote IP to 'localhost' on Windows — prefer using a custom host name and update server_name accordingly. 6) Verify the git repositories (confirm authors and commit history on gitee) before cloning and building. 7) Run package installs and service starts interactively so you can observe and revert changes. If you want, I can: produce a reviewed, safer step-by-step script with prompts for secrets, or highlight exact lines you should change before running.
Capability Analysis
Type: OpenClaw Skill Name: faa-wsl Version: 1.0.0 The skill bundle provides a comprehensive set of instructions for automating the deployment of the FastapiAdmin project on WSL2 Ubuntu. It covers environment preparation (pip, pnpm, MySQL, Redis, Nginx), database initialization, code cloning from Gitee, and Nginx configuration including SSL setup. While the script performs high-privilege actions such as using sudo and modifying system-level Nginx configurations, these behaviors are entirely consistent with the stated goal of automated service deployment and show no signs of malicious intent or data exfiltration.
Capability Assessment
Purpose & Capability
Name/description (WSL2 FastapiAdmin deployment) match the instructions: they install system packages, clone repo, build frontend/backend, configure Nginx and SSL, and enable host access. Required items declared (none) are consistent with an instruction-only skill.
Instruction Scope
The SKILL.md instructs the agent/operator to run many privileged system changes: apt installs, start system services, run sudo cp to /etc/nginx/nginx.conf, generate and place private keys under /etc/nginx/ssl, create a MySQL user and grant privileges, and modify frontend env files. Those are within deployment scope, but they are high-impact operations and include risky guidance (hardcoded DB password 'fastapiadmin123', suggestion to edit Windows hosts to map WSL2 IP to localhost). There are minor inconsistencies (Nginx server_name service.fastapiadmin.com vs self-signed cert CN=localhost and the hosts mapping guidance).
Install Mechanism
Instruction-only skill — no install spec. Commands download get-pip.py from bootstrap.pypa.io and clone from gitee.com; these are standard but will write files and install packages when run. No opaque external binary downloads or archive extractions beyond git/apt/npm/openssl usage.
Credentials
The skill does not request environment variables, but it instructs creating credentials and files on-disk: it creates a MySQL user with a hardcoded weak password and writes a private key to /etc/nginx/ssl. Those secret-handling choices are disproportionate/unprotected by default. The instructions do not recommend using unique strong passwords, secret storage, or verifying remote repo integrity before cloning.
Persistence & Privilege
Although the skill itself is not persistent (always:false), the runtime actions it prescribes require root privileges and modify system-wide configuration (installing services, overwriting /etc/nginx/nginx.conf, placing SSL keys). That gives the procedure a high blast radius if executed blindly; this is appropriate for deployment but risky without review and backups.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install faa-wsl
  3. After installation, invoke the skill by name or use /faa-wsl
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Initial release: Automates FastapiAdmin deployment in WSL2 Ubuntu, covering environment setup, service installation, and cross-platform access. - Supports automated installation of pip, pnpm, MySQL, Redis, and Nginx within WSL2. - Guides cloning, configuring, and initializing both backend and frontend of FastapiAdmin. - Provides Nginx configuration with SPA routing fix (alias + try_files loop issue workaround). - Includes instructions for setting up SSL certificates and configuring network for host access. - Summarizes troubleshooting steps and essential operational commands.
Metadata
Slug faa-wsl
Version 1.0.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is FastapiAdmin WSL 自动部署?

将 FastapiAdmin 在 Windows WSL2 Ubuntu 环境下自动部署。包括环境检查、依赖安装(pip/pnpm/MySQL/Redis/Nginx)、前后端代码克隆与构建、Nginx SPA 路由修复(alias+try_files 循环问题)、WSL2 网络访问(宿主机浏览器访问)、SSL... It is an AI Agent Skill for Claude Code / OpenClaw, with 87 downloads so far.

How do I install FastapiAdmin WSL 自动部署?

Run "/install faa-wsl" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is FastapiAdmin WSL 自动部署 free?

Yes, FastapiAdmin WSL 自动部署 is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does FastapiAdmin WSL 自动部署 support?

FastapiAdmin WSL 自动部署 is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created FastapiAdmin WSL 自动部署?

It is built and maintained by bamboo-art (@bamboo-art); the current version is v1.0.0.

💬 Comments