Automated FastGPT deployment using Ansible and Docker Compose.
- name: Deploy FastGPT
hosts: fastgpt
become: true
vars:
fastgpt_version: "v4.14.7.2"
app_root: /opt/fastgpt
fastgpt_port: 3000
# Security keys (CHANGE THESE!)
root_key: "{{ lookup('password', '/dev/null chars=ascii_letters,digits length=32') }}"
token_key: "{{ lookup('password', '/dev/null chars=ascii_letters,digits length=32') }}"
# Database credentials
postgres_password: "{{ lookup('password', '/dev/null chars=ascii_letters,digits length=16') }}"
# Optional: LLM API keys
openai_api_key: ""
anthropic_api_key: ""
tasks:
- name: Install Docker on Debian/Ubuntu
apt:
name:
- docker.io
- docker-compose-plugin
- curl
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Install Docker on RHEL family
dnf:
name:
- docker
- docker-compose-plugin
- curl
state: present
when: ansible_os_family == "RedHat"
- name: Enable and start Docker
service:
name: docker
state: started
enabled: true
- name: Create app directory
file:
path: "{{ app_root }}"
state: directory
mode: "0755"
- name: Create data directories
file:
path: "{{ item }}"
state: directory
mode: "0755"
loop:
- "{{ app_root }}/mongodb-data"
- "{{ app_root }}/postgresql-data"
- "{{ app_root }}/fastgpt-config"
- name: Download docker-compose.yml
get_url:
url: "https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/docker-compose.yml"
dest: "{{ app_root }}/docker-compose.yml"
mode: "0644"
- name: Configure environment variables
lineinfile:
path: "{{ app_root }}/docker-compose.yml"
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
loop:
- { regexp: '^ - ROOT_KEY=', line: ' - ROOT_KEY={{ root_key }}' }
- { regexp: '^ - TOKEN_KEY=', line: ' - TOKEN_KEY={{ token_key }}' }
- { regexp: '^ - POSTGRES_PASSWORD=', line: ' - POSTGRES_PASSWORD={{ postgres_password }}' }
- { regexp: '^ - OPENAI_API_KEY=', line: ' - OPENAI_API_KEY={{ openai_api_key }}' }
- { regexp: '^ - ANTHROPIC_API_KEY=', line: ' - ANTHROPIC_API_KEY={{ anthropic_api_key }}' }
- name: Start FastGPT stack
command: docker compose up -d
args:
chdir: "{{ app_root }}"
- name: Wait for FastGPT to be ready
wait_for:
port: "{{ fastgpt_port }}"
delay: 5
timeout: 300
- name: Display setup information
debug:
msg: |
FastGPT has been deployed!
ACCESS:
- URL: http://{{ ansible_host | default(inventory_hostname) }}:{{ fastgpt_port }}
- Username: root
- Password: 1234
⚠️ IMPORTANT: Change default password immediately!
SECURITY KEYS (SAVE THESE):
- ROOT_KEY: {{ root_key }}
- TOKEN_KEY: {{ token_key }}
- POSTGRES_PASSWORD: {{ postgres_password }}
DATA LOCATION:
- {{ app_root }}/mongodb-data
- {{ app_root }}/postgresql-data
- {{ app_root }}/fastgpt-config
COMMANDS:
- View logs: cd {{ app_root }} && docker compose logs -f
- Stop: cd {{ app_root }} && docker compose down
- Restart: cd {{ app_root }} && docker compose restart
ansible-playbook -i inventory.ini fastgpt.yml
ansible-playbook -i inventory.ini fastgpt.yml \
-e "fastgpt_version=v4.14.7.2" \
-e "fastgpt_port=3001" \
-e "openai_api_key=sk-..."
Create fastgpt_vars.yml:
fastgpt_version: "v4.14.7.2"
fastgpt_port: 3000
openai_api_key: "sk-..."
anthropic_api_key: "sk-ant-..."
Run:
ansible-playbook -i inventory.ini fastgpt.yml -e "@fastgpt_vars.yml"
Access FastGPT:
Change Password:
Configure Models:
- name: Backup FastGPT
hosts: fastgpt
become: true
vars:
app_root: /opt/fastgpt
backup_dir: /backup/fastgpt
tasks:
- name: Create backup directory
file:
path: "{{ backup_dir }}"
state: directory
mode: "0700"
- name: Backup MongoDB
command: docker compose exec -T mongodb mongodump --archive
args:
chdir: "{{ app_root }}"
register: mongodb_backup
- name: Save MongoDB backup
copy:
content: "{{ mongodb_backup.stdout }}"
dest: "{{ backup_dir }}/mongodb-{{ ansible_date_time.date }}.archive"
no_log: true
- name: Backup PostgreSQL
command: docker compose exec -T postgresql pg_dump -U postgres fastgpt
args:
chdir: "{{ app_root }}"
register: postgres_backup
- name: Save PostgreSQL backup
copy:
content: "{{ postgres_backup.stdout }}"
dest: "{{ backup_dir }}/postgres-{{ ansible_date_time.date }}.sql"
no_log: true
- name: Backup configuration
archive:
path:
- "{{ app_root }}/docker-compose.yml"
- "{{ app_root }}/.env"
dest: "{{ backup_dir }}/config-{{ ansible_date_time.date }}.tar.gz"
- name: Upgrade FastGPT
hosts: fastgpt
become: true
vars:
app_root: /opt/fastgpt
fastgpt_version: "v4.14.7.2"
tasks:
- name: Backup before upgrade
include_tasks: backup.yml
- name: Pull latest image
command: docker compose pull fastgpt
args:
chdir: "{{ app_root }}"
- name: Restart FastGPT
command: docker compose up -d fastgpt
args:
chdir: "{{ app_root }}"
- name: Wait for FastGPT to be ready
wait_for:
port: 3000
delay: 5
timeout: 300
Any questions?
Feel free to contact us. Find all contact information on our contact page.