From d6511b48646a7f066a03df21ef9be4b43fcd725c Mon Sep 17 00:00:00 2001 From: Christian Kauer Date: Thu, 23 Jan 2025 07:50:33 +0100 Subject: [PATCH] changes for deployment on amazon --- docker-compose.yml | 44 +++++++++------------- nginx/nginx.conf | 11 +++--- nginx/ssl/certificate.crt | 61 ++++++++++++++++-------------- nginx/ssl/private_key.key | 79 +++++++++++++-------------------------- 4 files changed, 83 insertions(+), 112 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9c897fbb..4c484d19 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,16 +13,19 @@ services: - ./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 - minio: - restart: on-failure - image: minio/minio - environment: - - MINIO_BROWSER_REDIRECT_URL=${FQDN?:err}/minio - - MINIO_ROOT_USER=${APPFLOWY_S3_ACCESS_KEY:-minioadmin} - - MINIO_ROOT_PASSWORD=${APPFLOWY_S3_SECRET_KEY:-minioadmin} - command: server /data --console-address ":9001" - volumes: - - minio_data:/data + # minio: + # restart: on-failure + # image: minio/minio + # ports: + # - 9000:9000 + # environment: + # - MINIO_BROWSER_REDIRECT_URL=${FQDN?:err}/minio + # - MINIO_ROOT_USER=${APPFLOWY_S3_ACCESS_KEY:-minioadmin} + # - MINIO_ROOT_PASSWORD=${APPFLOWY_S3_SECRET_KEY:-minioadmin} + # command: server /data --console-address ":9001" + # volumes: + # - minio_data:/data + postgres: restart: on-failure @@ -37,7 +40,7 @@ services: test: [ "CMD", "pg_isready", "-U", "${POSTGRES_USER}" ] interval: 5s timeout: 5s - retries: 12 + retries: 6 volumes: - ./migrations/before:/docker-entrypoint-initdb.d - postgres_data:/var/lib/postgresql/data @@ -55,10 +58,10 @@ services: postgres: condition: service_healthy healthcheck: - test: "curl --fail http://127.0.0.1:9999/health || exit 1" + test: [ "CMD", "nc", "-z", "localhost", "9999" ] interval: 5s timeout: 5s - retries: 12 + retries: 6 image: appflowyinc/gotrue:${GOTRUE_VERSION:-latest} environment: # There are a lot of options to configure GoTrue. You can reference the example config: @@ -144,9 +147,6 @@ services: args: FEATURES: "" image: appflowyinc/appflowy_cloud:${APPFLOWY_CLOUD_VERSION:-latest} - depends_on: - gotrue: - condition: service_healthy admin_frontend: restart: on-failure @@ -159,9 +159,6 @@ services: - ADMIN_FRONTEND_REDIS_URL=${ADMIN_FRONTEND_REDIS_URL:-redis://redis:6379} - 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} - depends_on: - appflowy_cloud: - condition: service_started ai: restart: on-failure @@ -171,9 +168,6 @@ services: - APPFLOWY_AI_SERVER_PORT=${AI_SERVER_PORT} - APPFLOWY_AI_DATABASE_URL=${AI_DATABASE_URL} - APPFLOWY_AI_REDIS_URL=${AI_REDIS_URL} - depends_on: - postgres: - condition: service_healthy appflowy_worker: restart: on-failure @@ -199,9 +193,7 @@ services: - APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME} - APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL} - APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD} - depends_on: - postgres: - condition: service_healthy + volumes: postgres_data: - minio_data: + # minio_data: diff --git a/nginx/nginx.conf b/nginx/nginx.conf index 640898af..31737294 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -17,6 +17,7 @@ http { map $http_origin $cors_origin { # AppFlowy Web origin + ~^https?://(.*\.)?straso.com(:\d+)?$ $http_origin; "~^http://localhost:3000$" $http_origin; default "null"; } @@ -91,14 +92,14 @@ http { if ($request_method = 'OPTIONS') { 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-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; return 204; } 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-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; location ~* ^/api/workspace/([a-zA-Z0-9_-]+)/publish$ { @@ -108,14 +109,14 @@ http { if ($request_method = 'OPTIONS') { 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-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; return 204; } 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-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; } @@ -144,7 +145,7 @@ http { # Handle CORS 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-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; # Timeouts diff --git a/nginx/ssl/certificate.crt b/nginx/ssl/certificate.crt index 10514d9d..459f426b 100755 --- a/nginx/ssl/certificate.crt +++ b/nginx/ssl/certificate.crt @@ -1,31 +1,34 @@ -----BEGIN CERTIFICATE----- -MIIFRDCCAywCCQDXwkFioxoJ2TANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQGEwJV -UzETMBEGA1UECAwKQ2FsaWZvcm5pYTESMBAGA1UEBwwJU3Vubnl2YWxlMRYwFAYD -VQQKDA1BcHBGbG93eSxJbmMuMRQwEgYDVQQDDAthcHBmbG93eS5pbzAeFw0yMzAz -MTUwMDUxNDVaFw0yNDAzMTQwMDUxNDVaMGQxCzAJBgNVBAYTAlVTMRMwEQYDVQQI -DApDYWxpZm9ybmlhMRIwEAYDVQQHDAlTdW5ueXZhbGUxFjAUBgNVBAoMDUFwcEZs -b3d5LEluYy4xFDASBgNVBAMMC2FwcGZsb3d5LmlvMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA09v/ouq4r7+oLOWqVscYpW5QRLR5O6OYZprocIARAtWA -qBkywhPku/SZq27dtPD7Pi3soSPkMhYDFALai4idgELCFxxkTuHWNm3J+Y8PcMq2 -RX325/pQVpOMTkChqaUzh93ynYqv89x3lT9z4saknBde/WO2yOJ6sfED9w+ezYgm -34LV5Z0cofQTDEiTX58KV3MmG5hRMdBwCaDg1jUb3jKr5lBrF4+EHbAN5PWH282V -JdyOTvZp/CF5TcnAMONkYENjURpnSXJes34ufYHkmr0eDa+2pfc3TI5wlB3tPQyN -p+B5TsDCDofv0Zme5Ur42TWcwsG0WRvtDw2KZ98wBtGaIv8UEQjXipNQVzeCv5Yv -zeykjdDhOJ/OZFzsm2vtl55t52M43xYMo3QPmjHMiVYz9KVvPqrVo+O5PI7B7uwY -JxWQIJosUa6AeKfkCAQd8mlNqYylqV8Utqs8b4zee8Vf7hzaCYNKxyDvqsd3yDwE -umh5zVuxJitLchDFT4mv1v3yLHocusV2lwjfEk66R/o5BBDdviycxeAM5Q1lyi7M -RywHAt/eVQNaBq0HSa2vbIm5yTZNQYwuhnNgv035hf8vpu+tFOGepTqgy/CrYpPm -VnsClJVrmxd4LfUZ0aZODiKCVx6psfeBvTXu1r7/SjsmbvYE4ubfM66optyFc3cC -AwEAATANBgkqhkiG9w0BAQsFAAOCAgEAfhSUTP91rBP+8zvsoxomKdeClVFURczr -HO/VuXVmBoKLASFqFcT84usRhb5T6XB7o2GcCYSo0VFJw99UM6nLsZ7c0MKaAjT6 -/9VeyLtDfhCDkffGGxpeYhme+0PY8TXIU5aO0ZhQwzXUOiC7t3Ac3AzHTPGrGqOK -aAGhMo7V2bQXcNR6NFhsUlJOtVE59MxL1K5Ug1oMn/H+NUF6/st+KzohruQJSSWG -GcbqVor0zZbFJSvRJ5P3ngw2cg2SIj9w6RwUWMp+a5kOx10fOYrQEHGyTHFlVDy0 -yOCU4eVO3EVTm7Se1XVwmG3kNKQaLFJf1voMuYD2sFbZ0nhGJDSZOcGUrchUXPQB -C9MwU52OeNm5VwE/41wLoFvOkJ/I/Ak7vccl1YJXpefa6qjNOFm5X0jA7D4egDfC -IVs5m30qa6Birx0xS6RUuuvxLJyNzgLSzsC1eFwjR2uwIUrGpYo3YI4+bMxp2Wnk -6qtm5G8D1giWg6z0RLw+GSj4QfcJEBP+zyiH/MdB5te9kXVYLKyS+DGgTTatLi1l -MBBK5b7dvfwo08J/sksK+mPHHBsV9TPAkqMp9vuZw25pRAEnvjEOUPfi3X9EZDw7 -A3LElN9KDks3IioioAOm0vPvHrlfziSljt5IMkuZLT3lUe6B3cs69caLO0S/ZDTz -yqGwLIqHYos= +MIIF+zCCBOOgAwIBAgIQB8+yKzeKcQUn2JyUn1cROjANBgkqhkiG9w0BAQsFADBu +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg +RFYgVExTIENBIC0gRzIwHhcNMjQxMjE4MDAwMDAwWhcNMjUwNDEyMjM1OTU5WjAX +MRUwEwYDVQQDDAwqLnN0cmFzby5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDizhKf8P0Cb0q9dRFO1Uv+4B7BgLFA3dJcHaWKI+sAxuv3GuEZi2wC +6yeBacMzuRVKBkWpCpa6f8zUrLntUOAnG5cgzZ6taoon02cw/fJVll943gKaKSOb +S9NAka1ZD2NL0MMARWDNuhU1Zm8cYAKT6Bj9dQTOA6y/i/00Enq9NX5ebrmDeBqs +hDL2x3IEbbKu7itoFfHX/W0PqCpThSWewloeukcktBoM3GI8jTZSB/1K78pvGY5v +pnMrgWHdzv3ynmZ2SM4XfHJ3piXkJpP5zN8HinMNouUlH8OhpftZQNz/BTXEYi2d +tMJa/ylVHGLdKZOqqcBvpipwUGYFTd2rAgMBAAGjggLqMIIC5jAfBgNVHSMEGDAW +gBR435GQX+7erPbFdevVTFVT7yRKtjAdBgNVHQ4EFgQUFCF/4CUhqVaOkQXDaO0Y +Wl+2rkcwIwYDVR0RBBwwGoIMKi5zdHJhc28uY29tggpzdHJhc28uY29tMD4GA1Ud +IAQ3MDUwMwYGZ4EMAQIBMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNl +cnQuY29tL0NQUzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG +CCsGAQUFBwMCMIGABggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0dHA6Ly9v +Y3NwLmRpZ2ljZXJ0LmNvbTBKBggrBgEFBQcwAoY+aHR0cDovL2NhY2VydHMuZGln +aWNlcnQuY29tL0VuY3J5cHRpb25FdmVyeXdoZXJlRFZUTFNDQS1HMi5jcnQwDAYD +VR0TAQH/BAIwADCCAX0GCisGAQQB1nkCBAIEggFtBIIBaQFnAHYATnWjJ1yaEMM4 +W2zU3z9S6x3w4I4bjWnAsfpksWKaOd8AAAGT221LOgAABAMARzBFAiAQG23hZBWR +AWIjb12dywrJGfh6f7uO2SHrC6cKPLElBQIhALJVc0r1qf/Cpss+CEWIVYyIr5gr +okCUv23lvITjffgYAHYAcyAiDwgWivnzxKaLCrJqmkoA7vV3hYoITQUA1KVCRFkA +AAGT221LdAAABAMARzBFAiEA3bR3CerhXHeIqGxs6YT4tcloP4ZauU2D1z8B8zjB +mVUCIATRcw9gLNu4C0LzmkpVwJu395vaR318/DZe+w9PvZNRAHUA5tIxY0B3jMEQ +QQbXcbnOwdJA9paEhvu6hzId/R43jlAAAAGT221LhQAABAMARjBEAiAiKpVNGn0B +qWsq6axCsr0byqD3ZQPA/USjkSYpfzbQowIgFyn6MDVg/SE80XMZBXSB2etw3Rq0 +D8vOg9fvn7pmVN8wDQYJKoZIhvcNAQELBQADggEBAKoYTgJXQcsbkUWZGxgmQ7Wq +8bzwPz8RJAmkqj4BMBZYcGYTgHZRHc1tOfxCXbv10DI5IOwlFrCw1JRQrm8vphc1 +JcICxsUep9ci8hJEJv3fq5jL0sPTqy6tGQcJXwneCa+nRF9IvLl794UOe2oNwgtq +5pJZ4f6KrertGYeB+lzx/sKGGbOvSHTjHbWFke6N6z8Pe5Yv81EtsY+dsqprfqFV +O8Pp9qITZNDHVvO0tYGl/UYhiVkmWq+zZHX+/80JUu4hYiwrmIqyNA+jZO2CddPA +S/zF7SNafe7kje/N5j3zK8Uzi+M8SrG8kn3lrp0ZBPrbNHPO2tMIIsHbcEA3OPg= -----END CERTIFICATE----- diff --git a/nginx/ssl/private_key.key b/nginx/ssl/private_key.key index d403fc71..50e472ca 100755 --- a/nginx/ssl/private_key.key +++ b/nginx/ssl/private_key.key @@ -1,52 +1,27 @@ ------BEGIN PRIVATE KEY----- -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 -Oi+igzFlcelWDZ/eQ8CpDkSpAqtwwx97 ------END PRIVATE KEY----- +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEA4s4Sn/D9Am9KvXURTtVL/uAewYCxQN3SXB2liiPrAMbr9xrh +GYtsAusngWnDM7kVSgZFqQqWun/M1Ky57VDgJxuXIM2erWqKJ9NnMP3yVZZfeN4C +mikjm0vTQJGtWQ9jS9DDAEVgzboVNWZvHGACk+gY/XUEzgOsv4v9NBJ6vTV+Xm65 +g3garIQy9sdyBG2yru4raBXx1/1tD6gqU4UlnsJaHrpHJLQaDNxiPI02Ugf9Su/K +bxmOb6ZzK4Fh3c798p5mdkjOF3xyd6Yl5CaT+czfB4pzDaLlJR/DoaX7WUDc/wU1 +xGItnbTCWv8pVRxi3SmTqqnAb6YqcFBmBU3dqwIDAQABAoIBAAQh0QEM+O8Ua/4r +pdcT18CbALRxzcjqwaxf9eYgZWWsOhxUZwl6Gsuq0Rtwe9fzZUnl91rvEHPxZB/z +zadfM9ZCkGxOkreCG2ZCWbzww3t/s9mV4eJBIZ7wsLaacNgQibSV5xeYK/1TiJNi +fF+9+A4NynbDrQS72Gfc+w350DamPBFq8oUdDZX27x0RzuxEc0PbV3gedE08EZEa +sWG425+0SSwSeeA0ANZbHnKZplmU49WlO12CI1xf21DWv7OIYfQ3xMg0DSBX5LsO +9eg9o4JDEwtnSNfHrYanzTfPgru2NQ1goO5mBZJ9H2IGu9M6w1JiIPwf2vIU3H/H +UnGsE4ECgYEA8itjFb+Sp1Vf4G5tWH1OPznzTs02KhalARWkkMigpHV8f/fqvs8r +KWbwdf7TZDYBTvqqAjccXxieK3JuxckfyEWrG52XsOYCheraJATE+84an1u3itAu +lSgA9YFOEqv3kmKo5LfbhPsppZwAfNBgpyJzIk+opK9zQbKiq/XbQQsCgYEA78IM +8IJhOhcjO84M6leoxUtBVMmhgzZU0cg3YbVLIWp4sVZ77PWB2yFtrh+wLuW66BaV +Uv6ihP4B6hfTdW1uI/cxrzG0sDDULD0as5JK689gfpqZ0pI/Sen3z370TuaLl+LB +BVum02gTgGmi8LUQFz/DA4aQGgyRjURdEAnC+eECgYEAti+d44a0Nd8suhNZf/EF +JNvcB7Sqww82I5K8s4+8Cv24JC3HFLWWqxceYCbNsd5PLbO2ouQDHCfRFq6IV5Pv +rSN8jtIIhLUFwOnmIqLT7vwnWywM8QmdgekOj6QvsCxfnGlM1oTbSTgLJOQwGbZK +gHKSW4XCQeMcuphBeU0FHfECgYBsKNFnipnL9/YoG5tN+H+liX6OfmuDYvY+sSDy +zjN3fq216rr7OgH71gfBvn/fmDmKS+3PRBoS/vfkIB1/4v8F8JUUYMsPlOeSkXpD +OiLcYHA6jQoJqXotoQPvMmmKUoz01xGWljMbOd9aVc1w422/3z7dj03gwnzDCu0k +uBKiYQKBgBa0ruDkfDA3OzlIAIY51eODhJ73ReXf9CONU52RQ2nk2Oj6oXGFf1qy +l5x0SBZs16tzTBUYSQwC/pm1iyrOgQfOsoaYl7C5/uDxDZ2KH8f3DlWG+g3wKhZ0 +Olo1U63Id2TH08jhGWVh9fB9h+Q/y9Z4dI0H6eU5eMQ5uhMLDkzZ +-----END RSA PRIVATE KEY----- \ No newline at end of file