changes for deployment on amazon

This commit is contained in:
Christian Kauer 2025-01-23 07:50:33 +01:00
parent b7e08687b4
commit d6511b4864
4 changed files with 83 additions and 112 deletions

View File

@ -13,16 +13,19 @@ services:
- ./nginx/ssl/private_key.key:/etc/nginx/ssl/private_key.key - ./nginx/ssl/private_key.key:/etc/nginx/ssl/private_key.key
# You do not need this if you have configured to use your own s3 file storage # You do not need this if you have configured to use your own s3 file storage
minio: # minio:
restart: on-failure # restart: on-failure
image: minio/minio # image: minio/minio
environment: # ports:
- MINIO_BROWSER_REDIRECT_URL=${FQDN?:err}/minio # - 9000:9000
- MINIO_ROOT_USER=${APPFLOWY_S3_ACCESS_KEY:-minioadmin} # environment:
- MINIO_ROOT_PASSWORD=${APPFLOWY_S3_SECRET_KEY:-minioadmin} # - MINIO_BROWSER_REDIRECT_URL=${FQDN?:err}/minio
command: server /data --console-address ":9001" # - MINIO_ROOT_USER=${APPFLOWY_S3_ACCESS_KEY:-minioadmin}
volumes: # - MINIO_ROOT_PASSWORD=${APPFLOWY_S3_SECRET_KEY:-minioadmin}
- minio_data:/data # command: server /data --console-address ":9001"
# volumes:
# - minio_data:/data
postgres: postgres:
restart: on-failure restart: on-failure
@ -37,7 +40,7 @@ services:
test: [ "CMD", "pg_isready", "-U", "${POSTGRES_USER}" ] test: [ "CMD", "pg_isready", "-U", "${POSTGRES_USER}" ]
interval: 5s interval: 5s
timeout: 5s timeout: 5s
retries: 12 retries: 6
volumes: volumes:
- ./migrations/before:/docker-entrypoint-initdb.d - ./migrations/before:/docker-entrypoint-initdb.d
- postgres_data:/var/lib/postgresql/data - postgres_data:/var/lib/postgresql/data
@ -55,10 +58,10 @@ services:
postgres: postgres:
condition: service_healthy condition: service_healthy
healthcheck: healthcheck:
test: "curl --fail http://127.0.0.1:9999/health || exit 1" test: [ "CMD", "nc", "-z", "localhost", "9999" ]
interval: 5s interval: 5s
timeout: 5s timeout: 5s
retries: 12 retries: 6
image: appflowyinc/gotrue:${GOTRUE_VERSION:-latest} image: appflowyinc/gotrue:${GOTRUE_VERSION:-latest}
environment: environment:
# There are a lot of options to configure GoTrue. You can reference the example config: # There are a lot of options to configure GoTrue. You can reference the example config:
@ -144,9 +147,6 @@ services:
args: args:
FEATURES: "" FEATURES: ""
image: appflowyinc/appflowy_cloud:${APPFLOWY_CLOUD_VERSION:-latest} image: appflowyinc/appflowy_cloud:${APPFLOWY_CLOUD_VERSION:-latest}
depends_on:
gotrue:
condition: service_healthy
admin_frontend: admin_frontend:
restart: on-failure restart: on-failure
@ -159,9 +159,6 @@ services:
- ADMIN_FRONTEND_REDIS_URL=${ADMIN_FRONTEND_REDIS_URL:-redis://redis:6379} - ADMIN_FRONTEND_REDIS_URL=${ADMIN_FRONTEND_REDIS_URL:-redis://redis:6379}
- ADMIN_FRONTEND_GOTRUE_URL=${ADMIN_FRONTEND_GOTRUE_URL:-http://gotrue:9999} - ADMIN_FRONTEND_GOTRUE_URL=${ADMIN_FRONTEND_GOTRUE_URL:-http://gotrue:9999}
- ADMIN_FRONTEND_APPFLOWY_CLOUD_URL=${ADMIN_FRONTEND_APPFLOWY_CLOUD_URL:-http://appflowy_cloud:8000} - ADMIN_FRONTEND_APPFLOWY_CLOUD_URL=${ADMIN_FRONTEND_APPFLOWY_CLOUD_URL:-http://appflowy_cloud:8000}
depends_on:
appflowy_cloud:
condition: service_started
ai: ai:
restart: on-failure restart: on-failure
@ -171,9 +168,6 @@ services:
- APPFLOWY_AI_SERVER_PORT=${AI_SERVER_PORT} - APPFLOWY_AI_SERVER_PORT=${AI_SERVER_PORT}
- APPFLOWY_AI_DATABASE_URL=${AI_DATABASE_URL} - APPFLOWY_AI_DATABASE_URL=${AI_DATABASE_URL}
- APPFLOWY_AI_REDIS_URL=${AI_REDIS_URL} - APPFLOWY_AI_REDIS_URL=${AI_REDIS_URL}
depends_on:
postgres:
condition: service_healthy
appflowy_worker: appflowy_worker:
restart: on-failure restart: on-failure
@ -199,9 +193,7 @@ services:
- APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME} - APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME}
- APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL} - APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL}
- APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD} - APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD}
depends_on:
postgres:
condition: service_healthy
volumes: volumes:
postgres_data: postgres_data:
minio_data: # minio_data:

View File

@ -17,6 +17,7 @@ http {
map $http_origin $cors_origin { map $http_origin $cors_origin {
# AppFlowy Web origin # AppFlowy Web origin
~^https?://(.*\.)?straso.com(:\d+)?$ $http_origin;
"~^http://localhost:3000$" $http_origin; "~^http://localhost:3000$" $http_origin;
default "null"; default "null";
} }
@ -91,14 +92,14 @@ http {
if ($request_method = 'OPTIONS') { if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' $cors_origin always; add_header 'Access-Control-Allow-Origin' $cors_origin always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Accept, Client-Version, Device-Id' always; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Accept, Client-Version' always;
add_header 'Access-Control-Max-Age' 3600 always; add_header 'Access-Control-Max-Age' 3600 always;
return 204; return 204;
} }
add_header 'Access-Control-Allow-Origin' $cors_origin always; add_header 'Access-Control-Allow-Origin' $cors_origin always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Accept, Client-Version, Device-Id' always; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Accept, Client-Version' always;
add_header 'Access-Control-Max-Age' 3600 always; add_header 'Access-Control-Max-Age' 3600 always;
location ~* ^/api/workspace/([a-zA-Z0-9_-]+)/publish$ { location ~* ^/api/workspace/([a-zA-Z0-9_-]+)/publish$ {
@ -108,14 +109,14 @@ http {
if ($request_method = 'OPTIONS') { if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' $cors_origin always; add_header 'Access-Control-Allow-Origin' $cors_origin always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Accept, Client-Version, Device-Id' always; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Accept, Client-Version' always;
add_header 'Access-Control-Max-Age' 3600 always; add_header 'Access-Control-Max-Age' 3600 always;
return 204; return 204;
} }
add_header 'Access-Control-Allow-Origin' $cors_origin always; add_header 'Access-Control-Allow-Origin' $cors_origin always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Accept, Client-Version, Device-Id' always; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Accept, Client-Version' always;
add_header 'Access-Control-Max-Age' 3600 always; add_header 'Access-Control-Max-Age' 3600 always;
} }
@ -144,7 +145,7 @@ http {
# Handle CORS # Handle CORS
add_header 'Access-Control-Allow-Origin' $cors_origin always; add_header 'Access-Control-Allow-Origin' $cors_origin always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Accept, Device-Id' always; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Accept' always;
add_header 'Access-Control-Max-Age' 3600 always; add_header 'Access-Control-Max-Age' 3600 always;
# Timeouts # Timeouts

View File

@ -1,31 +1,34 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIFRDCCAywCCQDXwkFioxoJ2TANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQGEwJV MIIF+zCCBOOgAwIBAgIQB8+yKzeKcQUn2JyUn1cROjANBgkqhkiG9w0BAQsFADBu
UzETMBEGA1UECAwKQ2FsaWZvcm5pYTESMBAGA1UEBwwJU3Vubnl2YWxlMRYwFAYD MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
VQQKDA1BcHBGbG93eSxJbmMuMRQwEgYDVQQDDAthcHBmbG93eS5pbzAeFw0yMzAz d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
MTUwMDUxNDVaFw0yNDAzMTQwMDUxNDVaMGQxCzAJBgNVBAYTAlVTMRMwEQYDVQQI RFYgVExTIENBIC0gRzIwHhcNMjQxMjE4MDAwMDAwWhcNMjUwNDEyMjM1OTU5WjAX
DApDYWxpZm9ybmlhMRIwEAYDVQQHDAlTdW5ueXZhbGUxFjAUBgNVBAoMDUFwcEZs MRUwEwYDVQQDDAwqLnN0cmFzby5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
b3d5LEluYy4xFDASBgNVBAMMC2FwcGZsb3d5LmlvMIICIjANBgkqhkiG9w0BAQEF ggEKAoIBAQDizhKf8P0Cb0q9dRFO1Uv+4B7BgLFA3dJcHaWKI+sAxuv3GuEZi2wC
AAOCAg8AMIICCgKCAgEA09v/ouq4r7+oLOWqVscYpW5QRLR5O6OYZprocIARAtWA 6yeBacMzuRVKBkWpCpa6f8zUrLntUOAnG5cgzZ6taoon02cw/fJVll943gKaKSOb
qBkywhPku/SZq27dtPD7Pi3soSPkMhYDFALai4idgELCFxxkTuHWNm3J+Y8PcMq2 S9NAka1ZD2NL0MMARWDNuhU1Zm8cYAKT6Bj9dQTOA6y/i/00Enq9NX5ebrmDeBqs
RX325/pQVpOMTkChqaUzh93ynYqv89x3lT9z4saknBde/WO2yOJ6sfED9w+ezYgm hDL2x3IEbbKu7itoFfHX/W0PqCpThSWewloeukcktBoM3GI8jTZSB/1K78pvGY5v
34LV5Z0cofQTDEiTX58KV3MmG5hRMdBwCaDg1jUb3jKr5lBrF4+EHbAN5PWH282V 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
yqGwLIqHYos= JcICxsUep9ci8hJEJv3fq5jL0sPTqy6tGQcJXwneCa+nRF9IvLl794UOe2oNwgtq
5pJZ4f6KrertGYeB+lzx/sKGGbOvSHTjHbWFke6N6z8Pe5Yv81EtsY+dsqprfqFV
O8Pp9qITZNDHVvO0tYGl/UYhiVkmWq+zZHX+/80JUu4hYiwrmIqyNA+jZO2CddPA
S/zF7SNafe7kje/N5j3zK8Uzi+M8SrG8kn3lrp0ZBPrbNHPO2tMIIsHbcEA3OPg=
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,52 +1,27 @@
-----BEGIN PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
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 -----END RSA PRIVATE KEY-----
+Xuqmlvccx3+ZWhksf4uOfzEluruYlv8AgczxtKB4tWsoYJbU71zdYHAtPaYua8w
6x9urD7vLNQ7TpagCD8q8V5jX+XG53HPBMJ5hRwy35bW0SJLEwKCAQEA2rfgByLa
00ghuyrF99ynwt5lZGk+WYR74xLn21PfP4vwWsdEnUNCDzBaZsKFOMsx5nctYVKk
ZfGCYRaLho4GNifkf6yy2QIMCq1bayYJlISDQXgjgVpZXjsnOotYjPDglGSIOhij
XaLSqGbvDt/VtIPwTeNHfSnsRQzzd0XxclbP96mIxLrcjvOUlWyavUVh58dkv/pi
R+7dE9b46zyCxc9OuTdZ9RAc6Op3DsHXk+Yuwrwh5r2rBEQxkqQ4//gQJKjGtfFS
YwI9bmsZnTYoalTtVjaDZ1mDlYbGgHzecplw59lQluuNJMFTEjpkK1E67oAFbkry
wRxnUkSYRq6+jQKCAQEA1BGI98ARVA2OE1+RG3sDXppdRJHMoX6RWVBhVpVZleTY
tcT/J94GzIIOr7T+45LxJlYg1WEupPTA7ytEL4mxdhhk9CVhOZh71iND82VPmFQO
reKhdRivWOq4dqagKPJSdRbKijqLZGwezzLw77pI9I43O3ODUzEl3k2/8LOvuGgh
3mp49zqH0fBGTHem3Eca7LXiRiCq9eAd2QuVsAOjlTwmcK2+o6yxhbyBjVul270U
G59bIX7WHyMyhYUW27qvhI8GRvXB4hfF3SjAKqBBWqx7QdNl612535NkUrDfBZAN
HFmlHuDSnDrpjuMaOblZEjbSxU9MffpPx8hIjzK04QKCAQEAtX2LCqDjkBr00okF
yU1ycAN3g0DJmiKTYrPXbWpFgEew5MMhrpWXBV+MRGT5g00pVSJjp7SZ8nXbSJEa
qkbD5MBpnYBC0EwgjeOYTms729+xwuvcGoRMUCMpxCzJB/sBgGGDoSG8vgBUaaUw
jdkzTh2FlDwaoEPfaNT8WmbRmZ1r6QjnEsg0KPL6wptiM9iVC22rrpooX6RYExR5
bUnDAj2qB4tkvDPoqWWV8crsBjAlcTYHs56DgIDN2e8n1U+UpbbfXS6ovLupGi0J
DilYlBNw9e86TtI6nCNAKHJ1bAbjZ6AufW1sq6k4M5H8eO1ox2u4FfNfSNs26U8+
RLjQKQKCAQAfd+u6/EEA4bMzVuE7SWpYD87eQ4edttjda4tlJBO48KFtqZ2bhIKd
sAEdw3txbcHiPazFQlNgKBfxq9JhGX8Dga/Wx/s/d5eTafqXfQk4hfHHqoYY4D+H
agDdP3QPVnfBueTcdKnGuD5Ex1pK4pnmnRkKQd1XOlV2w49PeoA1HG2PvsvSyfoa
yxfTIRsX78I4wClQywEnyGWKvsOGSP/zHHfKaCoic/KwDx5SVgeZCLgSoDHWdpuh
Vu5JGnIFQel7Y6+Zd92ubZ1vFUW7hW0JPHszSGqg2aE1m5RXsIanhTUCQusR3Pj+
Oi+igzFlcelWDZ/eQ8CpDkSpAqtwwx97
-----END PRIVATE KEY-----