184 lines
5.0 KiB
Markdown
184 lines
5.0 KiB
Markdown
# Self-Hosted AppFlowy Cloud Setup Guide
|
|
|
|
This guide will help you set up your own instance of AppFlowy Cloud.
|
|
|
|
## Prerequisites
|
|
|
|
- Docker and Docker Compose
|
|
- PostgreSQL 14 or higher
|
|
- Redis
|
|
- Minimum 2GB RAM
|
|
- Git
|
|
|
|
## Quick Start
|
|
|
|
1. Clone the Appflowy-Cloud repository:
|
|
|
|
```bash
|
|
git clone https://github.com/AppFlowy-IO/AppFlowy-Cloud.git
|
|
cd AppFlowy-Cloud
|
|
```
|
|
|
|
2. Configure environment variables:
|
|
|
|
```bash
|
|
cp deploy.env .env
|
|
```
|
|
|
|
Edit the following variables in the `.env` file to reflect your setup:
|
|
|
|
```env
|
|
# Fully qualified domain name for the deployment.
|
|
FQDN=
|
|
# Change this to https if you wish to enable TLS.
|
|
SCHEME=
|
|
|
|
# PostgreSQL Settings
|
|
POSTGRES_PASSWORD=
|
|
|
|
# Postgres credential for supabase_auth_admin
|
|
SUPABASE_PASSWORD=
|
|
|
|
# Minio Host
|
|
AWS_SECRET=
|
|
|
|
## Base Url for the admin frontend. If you use the default Nginx conf provided here, this value should be /console.
|
|
## If you want to keep the previous behaviour where admin frontend is served at the root, don't set this env variable,
|
|
## or set it to empty string.
|
|
ADMIN_FRONTEND_PATH_PREFIX=
|
|
|
|
# authentication key, change this and keep the key safe and secret
|
|
# self defined key, you can use any string
|
|
GOTRUE_JWT_SECRET=
|
|
|
|
# If you want to use AWS SES or your own mail server, set the following variables:
|
|
GOTRUE_MAILER_AUTOCONFIRM=false
|
|
GOTRUE_SMTP_HOST=email-smtp.us-east-1.amazonaws.com
|
|
GOTRUE_SMTP_PORT=465
|
|
GOTRUE_SMTP_USER=
|
|
GOTRUE_SMTP_PASS=
|
|
GOTRUE_SMTP_ADMIN_EMAIL=
|
|
|
|
# This user will be created when GoTrue starts successfully
|
|
# You can use this user to login to the admin panel
|
|
GOTRUE_ADMIN_EMAIL=
|
|
GOTRUE_ADMIN_PASSWORD=
|
|
|
|
# AppFlowy Cloud Mailer Configuration (same credentials as GOTRUE_SMTP_*)
|
|
APPFLOWY_MAILER_SMTP_HOST=email-smtp.us-east-1.amazonaws.com
|
|
APPFLOWY_MAILER_SMTP_PORT=465
|
|
APPFLOWY_MAILER_SMTP_USERNAME=
|
|
APPFLOWY_MAILER_SMTP_EMAIL=
|
|
APPFLOWY_MAILER_SMTP_PASSWORD=
|
|
|
|
# PgAdmin
|
|
# Optional module to manage the postgres database
|
|
# You can access the pgadmin at http://your-host/pgadmin
|
|
# Refer to the APPFLOWY_DATABASE_URL for password when connecting to the database
|
|
PGADMIN_DEFAULT_EMAIL=
|
|
PGADMIN_DEFAULT_PASSWORD=
|
|
|
|
# Portainer (username: admin)
|
|
PORTAINER_PASSWORD=
|
|
|
|
# AppFlowy AI
|
|
AI_OPENAI_API_KEY=
|
|
```
|
|
|
|
3. Edit GoTrue Dockerfile (Not needed on latest version)
|
|
|
|
Modify the base Dockerfile from the Appflowy-Cloud repo to the one in this repo that installs bash, so the healthcheck can run.
|
|
|
|
4. Edit nginx.conf (Not needed on latest version)
|
|
|
|
Modify the base nginx.conf to the version in this repo to resolve a potential websocket DNS resolution issue.
|
|
|
|
5. Start the services:
|
|
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
6. Confirm that your services are running:
|
|
|
|
```bash
|
|
docker ps -a
|
|
```
|
|
|
|
7. To enable SSL, you can use certbot:
|
|
|
|
```bash
|
|
sudo apt update
|
|
sudo apt install certbot
|
|
sudo certbot certonly --standalone -d yourdomain.com
|
|
```
|
|
This will create SSL certificates in /etc/letsencrypt/live/yourdomain.com
|
|
|
|
8. Update your docker-compose.yml file to use these certificates by mounting the certificate and private key locations:
|
|
|
|
```yaml
|
|
services:
|
|
nginx:
|
|
restart: always
|
|
image: nginx
|
|
ports:
|
|
- ${NGINX_PORT:-80}:80
|
|
- ${NGINX_TLS_PORT:-443}:443
|
|
volumes:
|
|
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
|
|
- /etc/letsencrypt/live/yourdomain.com/fullchain.pem:/etc/nginx/ssl/certificate.crt:ro
|
|
- /etc/letsencrypt/live/yourdomain.com/privkey.pem:/etc/nginx/ssl/private_key.key:ro
|
|
```
|
|
|
|
9. Restart your services:
|
|
|
|
```bash
|
|
docker-compose down
|
|
docker-compose up -d
|
|
```
|
|
|
|
10. Set up auto renewal for the certificates with cron job:
|
|
|
|
```bash
|
|
crontab -e
|
|
```
|
|
Add this line to run the renewal every month on the 1st day at 2:00 AM:
|
|
|
|
```bash
|
|
0 2 1 * * /home/moeny/AppFlowy-Cloud/check-and-renew-certs.sh >> /var/log/cert-renewal.log 2>&1
|
|
```
|
|
You will need to add [check-and-renew-certs.sh](check-and-renew-certs.sh) and [renew-certs.sh](renew-certs.sh) in the `AppFlowy-Cloud` directory.
|
|
|
|
## Additional considerations
|
|
|
|
1. If you are getting `redis-1 | WARNING Memory overcommit must be enabled!`, run:
|
|
|
|
```bash
|
|
echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf
|
|
sudo sysctl -p
|
|
```
|
|
|
|
You can verify the current value of the setting by running:
|
|
|
|
```bash
|
|
cat /proc/sys/vm/overcommit_memory
|
|
```
|
|
|
|
It should return 1 if the setting was applied successfully.
|
|
|
|
2. Also, note that the MinIO version in the docker-compose.yml may need to be updated to reflect the latest version. This is more relevant if you've been running Appflowy for a while and want to update your installation. Make sure to backup any MinIO data you may have before upgrading, although the upgrade should preserve existing data since it's using a named volume (minio_data).
|
|
|
|
To backup MinIO, use Docker volumes:
|
|
|
|
```bash
|
|
docker compose stop minio
|
|
docker run --rm -v appflowy-cloud_minio_data:/data -v $(pwd):/backup alpine tar czf /backup/minio-backup.tar.gz /data
|
|
```
|
|
|
|
If you need to restore:
|
|
|
|
```bash
|
|
docker compose stop minio
|
|
docker run --rm -v appflowy-cloud_minio_data:/data -v $(pwd):/backup alpine sh -c "cd /data && tar xzf /backup/minio-backup.tar.gz --strip 1"
|
|
docker compose start minio
|
|
``` |