Commit Graph

66 Commits

Author SHA1 Message Date
Shrikant Sharat Kandula
444492b38b
fix: Add nginx-extras and remove Sever header (#26634)
Removes this `Server` header in all responses from Appsmith.

```
curl -sSI http://localhost | grep 'server:'
```

It currently shows this:

```
server: nginx
```
2023-08-25 09:46:01 +05:30
Shrikant Sharat Kandula
a44ea34902
chore: Refactor NGINX config templates, merge them, to reduce duplicate code (#26066)
Majority of the NGINX config is the same, for both HTTP and HTTPS.
Having two separate templates for them is making configuration changes
error-prone, where we often risk forgetting making the same change in
the other file.

This PR merges the two files into one, so the above risk isn't there. It
also makes it easier to experiment with the file while developing, since
we have to make every single change twice during development.

Note: This _will_ cause conflicts in sync, after being merged.

Why are we doing this? This will be a step towards simplifying our
`Dockerfile` with reduced layers and improved caching performance. The
image build time in CI should be faster once this is done.
2023-08-09 21:48:58 +05:30
Shrikant Sharat Kandula
49a973381e
chore: Add X-Content-Type-Options to all downstream responses (#26128)
So far, only calls that go to the Java backend, had the
`X-Content-Type-Options` header in the responses. This PR adds them to
all responses by

1. adding it to NGINX configuration.
2. removing it from Spring security's configuration, so we don't end up
with _two_ `X-Content-Type-Options` headers in the response.

---------

Co-authored-by: Nidhi <nidhi@appsmith.com>
2023-08-08 20:26:00 +05:30
Shrikant Sharat Kandula
98193b30a7
fix: Fix leaking NGINX version (#26046)
When Appsmith is deployed with HTTPS, all HTTP requests are redirected
to HTTP. But this redirection response, is leaking the NGINX version in
the `Server` header. This PR fixes that.
2023-08-07 15:24:22 +05:30
Shrikant Sharat Kandula
50a18c325f
fix: Extend Forwarded header, if present (#25827)
This is to fix OAuth redirect URI not being computed correctly, when
deployed to CloudRun.

More details at
http://sharats.me/drafts/story-of-a-forwarded-header.html.
2023-07-31 10:18:32 +05:30
Shrikant Sharat Kandula
3129e88e95
chore: Move Maps API Key to database (#20771)
1. Changing the Maps API Key doesn't need restart anymore.
2. The `isRestartRequired` field in the response of updating env
settings, was being ignored. The client owns the decision of when to
restart (which is correct), so removed this from the server.
3. Write Maps API Key to the database, in the tenant configuration.
4. The Settings page for Maps Ke gets the current value from
`/tenant/current` response, and not `/admin/env`.
5. Removed `APPSMITH_GOOGLE_MAPS_API_KEY` from `/admin/env` response.
6. Tests.

DO NOT MERGE. Please only review/approve. This is expected to break EE
once it goes there, which I intend to solve alongside merging this.

Changing the Maps API Key will update it both in the tenant config in
the database, as well as in the `docker.env` file. This is predominantly
for backwards compatibility, and phased rollout. As part of a separate
PR, we'll have a migration that proactively copies the env variable
value to the database, and comment out the value in the `docker.env`
file. Then we can stop updating the `docker.env` file as well.


## New
![Screenshot 2023-02-25 at 7 30 14
AM](https://user-images.githubusercontent.com/120119/221330216-03800c5b-c775-4584-a39f-cd6374ba049b.png)



## Old
![Screenshot 2023-02-25 at 7 23 05
AM](https://user-images.githubusercontent.com/120119/221329747-5431d668-736d-4b08-b504-f64e4edd436b.png)

---------

Co-authored-by: Ankita Kinger <ankita@appsmith.com>
2023-07-24 13:33:53 +05:30
Sumesh Pradhan
16d21ed1a3
feat: Configurable api server timeout on embedded nginx (#24471)
## Description
- The default request timeout on nginx is set to 60s. This feat allows
users to configure custom nginx timeout value specified via the
Environment variable `APPSMITH_SERVER_TIMEOUT`
- Solves https://github.com/appsmithorg/appsmith/issues/14535
## Testing
#### How Has This Been Tested?
- [x] Manual
- [ ] Jest
- [ ] Cypress

---------

Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com>
2023-07-06 18:01:26 +05:30
Ivan Akulov
bc0426dad2
perf: prioritize the main bundle over preloads (v2) (#24374) 2023-06-22 10:58:10 +05:30
Sumesh Pradhan
a359444556
fix: improve starting page removal script with error handling (#23392)
- Removed event listener python script, removed supervisor conf for the
same.
- Added new python script to handle the starting page init.
- Python script will be called via a shell script with a failsafe
removal of the loading page.
- The above shell script will be run as a child of the run java script

Tests:
The child script exits after execution, and does not create zombie
process even when the run java script is called multiple times with
restarts.
Verified exceptions and failsafe manually by introducing syntax errors
and uninstalling requests module.

---------

Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com>
2023-06-06 18:32:40 +05:30
Sumesh Pradhan
198c0ff1b0
feat: Perf disable Nginx access logs for static resources (#23834)
- Disable Nginx access logs for static resource requests
2023-06-06 13:51:26 +05:30
Sumesh Pradhan
6b55e888d9
feat: Auto cleanup application logs (#23084)
- Added cron task to cleanup log files older than 7 days to run weekly.
- Updated supervisor log rotation config to store only 2 backups for all
processes.
2023-05-11 20:10:37 +05:30
Satish Gandham
83538ad74d
feat: Bundle optimization and first load improvements (#21667)
Co-authored-by: Ivan Akulov <mail@iamakulov.com>
Co-authored-by: Satish Gandham <hello@satishgandham.com>
Co-authored-by: Ivan Akulov <iamakulov@outlook.com>
Co-authored-by: Aishwarya UR <aishwarya@appsmith.com>
Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com>
Co-authored-by: somangshu <somangshu.goswami1508@gmail.com>
2023-05-11 10:56:03 +05:30
Sumesh Pradhan
f1bf7b17dc
feat: Display loading message in browser when Appsmith is starting (#22215)
## Description
Added Appsmith Initializing and Starting pages to inform the users that
Appsmith is starting up and they will need to wait for a few minutes
before their Appsmith deployment is up and running, instead of
displaying the 503 error like it earlier.


## Type of change
- New feature (non-breaking change which adds functionality)

# Media
Initialization page

![image](https://user-images.githubusercontent.com/20785806/230869925-a342e327-c714-4cfa-8283-cf6f5bd225b5.png)

Starting page

![image](https://user-images.githubusercontent.com/20785806/230869770-67654c0a-e4de-4d18-83dd-9f68230648e9.png)

[Demo
Video](https://drive.google.com/file/d/1sjvfbtbWHRqVfg0Vvf2JM6W3y61-KrWm/view?usp=share_link)
## How Has This Been Tested?
- Manual

---------

Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com>
Co-authored-by: Arpit Mohan <mohanarpit@users.noreply.github.com>
2023-04-19 18:20:59 +05:30
Shrikant Sharat Kandula
97a2338d4b
chore: Add Cache-Control header for static assets (#22175)
Fix https://github.com/appsmithorg/appsmith/issues/10503

Continuing discussion from
https://github.com/appsmithorg/appsmith/pull/21951.
2023-04-19 06:42:01 +05:30
Shrikant Sharat Kandula
9ae13042a2
Revert "chore: Add Cache-Control header for static assets" (#22174)
Reverts appsmithorg/appsmith#21951

Merged by accident.
2023-04-07 12:40:17 +05:30
Shrikant Sharat Kandula
7b6a46d08d
chore: Add Cache-Control header for static assets (#21951)
Fix #10503
2023-04-07 12:39:35 +05:30
Shrikant Sharat Kandula
43656a3714
fix: Revert container-internal communication when using IPv6 (#21260)
This reverts commit b3dbd85dbe.

This causes NGINX to fail to start if IPv6 is not available on the
system.
2023-03-08 21:03:46 +05:30
Sumesh Pradhan
c3c6218c0f
feat: Embeded PostgreSQL with mockdb data for self-hosted (#21084)
## Description
This PR includes changes for self-hosted instances to utilize an
embedded postgres database for the Template's mockdb.
After this change, by default Appsmith will always run the embedded
Postgres, and connect to it instead of the mockdb cloud instance.

**Solves:**
Issue[#20107](https://github.com/appsmithorg/appsmith/issues/20107)

**Changes:**
- [x] Install Postgresql in the Docker container using Dockerfile :-
_Updated Docker file to install PostgreSQL v13_

- [x] Add provision to stop/disable Postgresql from booting based on an
environment variable :- _To disable embedded postgres, set the **ENV**
var `APPSMITH_ENABLE_EMBEDDED_DB` to `0`; Configured supervisord to
control the lifecycle of the postgres server ( Supervisor uses user
postgres to start the server since root is not allowed)_

- [x] Seed data into the Postgresql DB during first container startup.
This ensures that we don't have to ship the Docker
container with data & bloat it unnecessarily. :- _Curretly, the SQL dump
is baked into the image._
      
- [x] Persist the Postgresql data in /appsmith-stacks. This ensures that
the data is persisted across version upgrades. :- _The postgres uses the
file system at` /stacks/data/postgres/main` ; note: The file system
owner is user/group postgres_

- [x] Update the mock db endpoint in the product to use the local DB by
default instead of the hosted DB for self-hosted instances. The cloud
instance should still use the hosted DB :- _The embedded postgres
authentication is set to the type `trust`, allowing the existing
template mockdb meta data to be used without any update to the existing
templates mockdb endpoint and credentials_

**Note: There is an additional table `mydb` added to the mockdb for
quickly verifying the db source is the embedded postgres, since the
cloud mockdb does not have that table.**

---------

Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com>
2023-03-07 15:22:41 +05:30
Shrikant Sharat Kandula
b3dbd85dbe
fix: Fix container-internal communication when using IPv6 (#20981)
When services within the fat container try to communicate with each
other, like backend to RTS etc., if they use the loopback address of
IPv4, `127.0.0.1`, it works. But if they use the loopback address of
IPv6, `::1`, it fails because the NGINX inside the fat container isn't
set to bind to IPv6.

This PR fixes this.

In EE, we attempt to make connections to Keycloak without setting the
hostname on the `WebClient`. This picks up the hostname of `::1` on
systems with IPv6 as default, and so the communication between backend
and Keycloak fails.

This is affecting users on ECS Fargate, for example.
2023-02-27 19:51:54 +05:30
Nidhi
412179d1fc
fix: Increased Nginx limit to 150 MB to allow 100 MB Base 64 encoded files (#20617)
## Description

We're increasing the default limit of request payload on cloud so that
100 MB files that are base 64 encoded can also be uploaded via Appsmith.

Fixes #20424

## Type of change
- Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?
- Manual

### Test Plan
> Add Testsmith test cases links that relate to this PR

### Issues raised during DP testing
> Link issues raised during DP testing for better visiblity and tracking
(copy link from comments dropped on this PR)


## Checklist:
### Dev activity
- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] PR is being merged under a feature flag


### QA activity:
- [ ] Test plan has been approved by relevant developers
- [ ] Test plan has been peer reviewed by QA
- [ ] Cypress test cases have been added and approved by either SDET or
manual QA
- [ ] Organized project review call with relevant stakeholders after
Round 1/2 of QA
- [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-02-20 20:34:02 +05:30
Sumesh Pradhan
a846bd4952
fix: renamed rts port env to APPSMITH_RTS_PORT (#20121)
Issue: Nginx and RTS used the same env PORT for binding it's service,
while the backend server had the rts port hardcoded on its rts uri.
- Renamed env PORT to APPSMITH_RTS_PORT for starting the rts server.
- Updated nginx config templates to use env `APPSMITH_RTS_PORT`
- Added appsmith.rts.port property in server to use env
APPSMITH_RTS_PORT
- Updated CommonConfig.java rtsBaseDomain to use appsmith.rts.port

---------

Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com>
2023-02-15 07:06:02 +05:30
Shrikant Sharat Kandula
f65986c351
fix: Use mongosh instead of mongo in entrypoint (#20055)
Fixes #19969.

The previous PR that fixed this was failing with the way we were
creating the initial user on MongoDB. This PR addresses that.

Co-authored-by: Aishwarya UR <aishwarya@appsmith.com>
2023-01-27 16:05:00 +05:30
Goutham Pratapa
349ed41e49
chore: refactor backend startup script (#19420)
Fixes: [19300](https://github.com/appsmithorg/appsmith/issues/19300)
2023-01-02 15:25:23 +05:30
Goutham Pratapa
1de045d9d8
chore: Add dependency to start backend only if rts is ready (#19218)
Fixes: [19207](https://github.com/appsmithorg/appsmith/issues/19207)

**By default on start-up**

```
root@ab348246fff8:/appsmith-stacks/logs# head backend/backend-ab348246fff8.log
Waiting for RTS to start ...
RTS started.
Starting Backend server...
Load environment configuration
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/appsmith/backend/server.jar!/BOOT-INF/lib/logback-classic-1.2.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/appsmith/backend/server.jar!/BOOT-INF/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
[2022-12-26 11:39:34,962]  - Starting ServerApplication vv1.8.14.1 using Java 11.0.17 on ab348246fff8 with PID 1543 (/opt/appsmith/backend/server.jar started by root in /opt/appsmith/backend)
```
**Upon stopping RTS manually** 

```
root@ab348246fff8:/appsmith-stacks/logs# supervisorctl stop rts
rts: stopped
root@ab348246fff8:/appsmith-stacks/logs# supervisorctl status
backend                          RUNNING   pid 1497, uptime 0:01:21
cron                             RUNNING   pid 1505, uptime 0:01:21
editor                           RUNNING   pid 1502, uptime 0:01:21
mongodb                          RUNNING   pid 1491, uptime 0:01:21
redis                            RUNNING   pid 1490, uptime 0:01:21
rts                              STOPPED   Dec 26 11:40 AM
stdout                           RUNNING   pid 1489, uptime 0:01:21
```

**Restart Backend service to check if backend service starts** 

```
root@ab348246fff8:/appsmith-stacks/logs# supervisorctl restart backend
backend: stopped
backend: started
root@ab348246fff8:/appsmith-stacks/logs# supervisorctl status
backend                          RUNNING   pid 1802, uptime 0:00:12
cron                             RUNNING   pid 1505, uptime 0:01:43
editor                           RUNNING   pid 1502, uptime 0:01:43
mongodb                          RUNNING   pid 1491, uptime 0:01:43
redis                            RUNNING   pid 1490, uptime 0:01:43
rts                              STOPPED   Dec 26 11:40 AM
stdout                           RUNNING   pid 1489, uptime 0:01:43
root@ab348246fff8:/appsmith-stacks/logs# supervisorctl ^C
root@ab348246fff8:/appsmith-stacks/logs# tail -f backend/backend-ab348246fff8.log
Waiting for RTS to start ...
Waiting for RTS to start ...
Waiting for RTS to start ...
Waiting for RTS to start ...
Waiting for RTS to start ...
Waiting for RTS to start ...
Waiting for RTS to start ...
Waiting for RTS to start ...
Waiting for RTS to start ...
Waiting for RTS to start ...
^C
```

**Upon starting RTS the behaviour of backend immediately**
 
```
root@ab348246fff8:/appsmith-stacks/logs# supervisorctl start rts
rts: started
root@ab348246fff8:/appsmith-stacks/logs# tail -f backend/backend-ab348246fff8.log
Starting Backend server...
Load environment configuration
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/appsmith/backend/server.jar!/BOOT-INF/lib/logback-classic-1.2.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/appsmith/backend/server.jar!/BOOT-INF/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
[2022-12-26 11:41:33,796]  - Starting ServerApplication vv1.8.14.1 using Java 11.0.17 on ab348246fff8 with PID 1968 (/opt/appsmith/backend/server.jar started by root in /opt/appsmith/backend)
[2022-12-26 11:41:33,799]  - Running with Spring Boot v2.6.5, Spring v5.3.17
[2022-12-26 11:41:33,803]  - No active profile set, falling back to 1 default profile: "default"
[2022-12-26 11:41:34,615]  - Multiple Spring Data modules found, entering strict repository configuration mode!
[2022-12-26 11:41:34,616]  - Bootstrapping Spring Data Reactive MongoDB repositories in DEFAULT mode.
[2022-12-26 11:41:34,859]  - Finished Spring Data repository scanning in 239 ms. Found 55 Reactive MongoDB repository interfaces.
[2022-12-26 11:41:35,220]  - Multiple Spring Data modules found, entering strict repository configuration mode!
[2022-12-26 11:41:35,221]  - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
```
2022-12-29 14:22:41 +05:30
Shrikant Sharat Kandula
71293dec82
Fix sandbox iframe default setting (#17618) 2022-10-17 16:12:56 +05:30
Shrikant Sharat Kandula
b6657771a1
Fix assets not loading in supervisor UI (#17543)
Signed-off-by: Shrikant Sharat Kandula <shrikant@appsmith.com>
2022-10-14 13:23:09 +05:30
Shrikant Sharat Kandula
d6b4cb5f19
Fix X-Forwarded-Host with multiple rev-proxies (#16951) 2022-10-14 06:30:27 +05:30
Shrikant Sharat Kandula
24655f6ceb
For paths with an extension, give 404 if missing (#17035) 2022-09-26 09:41:38 +05:30
Shrikant Sharat Kandula
6fc2b1680e
Fix key file permissions error on Windows (#16862) 2022-09-19 13:49:27 +05:30
Sumesh Pradhan
9cf132f23e
Disable nginx server tokens, set gzip_type to * (#15767) 2022-08-05 16:40:38 +05:30
Shrikant Sharat Kandula
868b385e7b
Change to allow all domains to embed Appsmith apps (#15619)
The control to configure what domains are allowed to embed Appsmith apps is still available, but the default of not allowing anything except for 'self' is changed to allow everything.

While this is convenient, we encourage our users to configure their frame ancestors to limit what domains can embed their Appsmith apps.

Signed-off-by: Shrikant Sharat Kandula <shrikant@appsmith.com>
2022-08-02 15:41:52 +05:30
Shrikant Sharat Kandula
874b9945f8
Control where embedding of Appsmith is allowed (#15348)
Signed-off-by: Shrikant Sharat Kandula <shrikant@appsmith.com>
2022-07-21 13:03:35 +05:30
Goutham Pratapa
b4eddfe61e
feat: add hostname to log file (#15005) 2022-07-21 12:20:15 +05:30
Shrikant Sharat Kandula
f344688b2f
Fix log file location for MongoDB (#13744) 2022-05-11 19:13:30 +02:00
Sumesh Pradhan
9f2c5dc5f7
Renamed temporary encryption variables in docker entry-point script (#12187) 2022-04-15 17:44:08 +05:30
Shrikant Sharat Kandula
9cfb7b38ee
Fix basic auth password index 2022-03-25 12:15:05 +05:30
geekup-legodevops
3fcdcddb04
Capture nginx access and error logs in fat container (#12205) 2022-03-24 13:47:25 +05:30
geekup-legodevops
382ea53ab3
Refactor to deploy Heroku using new Docker image (#9127) 2022-03-24 13:17:36 +05:30
geekup-legodevops
70096450d8
Redirect Redis log to supervisord log (#11994) 2022-03-21 11:59:40 +05:30
Sumesh Pradhan
4a19b6789b
Java arguments tuning using env (#11581) 2022-03-17 18:40:51 +05:30
Trisha Anand
407d963aa5 Updating it to 10s which was the initial configuration 2022-03-17 17:18:45 +05:30
Trisha Anand
7d35f4b2b0 Update : On CE not waiting for backend to be marked as running 2022-03-17 17:00:47 +05:30
Trisha Anand
42b4a2849e hotfix: Check if the backend is up within 30s to reduce the time it takes for editor to come up on restart 2022-03-17 16:52:24 +05:30
Trisha Anand
78e562cbb3
chore: Increasing the start time check for backend process to stay up to 3.5 minutes to ensure that all the checks have run and some grace time before marking the process to be running. (#11876) 2022-03-15 17:43:02 +05:30
Shrikant Sharat Kandula
993c91e31b
Apply env variables in NGINX config before startup (#11531)
Instead of doing env substitutions at request processing time, do it
before NGINX even starts.
2022-03-09 12:38:48 +05:30
geekup-legodevops
db7a046116
Refactor entrypoint script to support migrate slim to fat container (#11519) 2022-03-03 08:40:29 +05:30
Ankita Kinger
13fe125a0c
feat: Add disconnect button on auth config pages and form login callout banner (#11389)
* added form login callout banner

* form login config page changes

* form login config page changes

* added redirecturl and uneditable field components

* added disconnect button on auth pages

* Added env variables for form login auth page

* added disconnect button on auth pages

* updated docs link for dform login callout doc

* added condition for disconnect button

* added ce changes done on ee

* updated css

* suggested changes in PR review

* suggested changes in PR review

* suggested changes in PR review

* reverted gitignore files changes

* reverted gitignore files changes

* updated logic for saving admin settings

* removed unused imports

* added changes for taginput field

* removed console

* removed warning

* removed unwanted changes
2022-03-02 23:48:50 +05:30
Abhinav Jha
938edd5284
chore: Remove old way of adding feature flags (#11213)
* Remove optimizely, as it isn't being used anymore from the frontend codebase

* Remove optimizely references form netlify config, vercel config, index.html, docker script, nginx templates and example .env file
2022-02-16 19:57:58 +05:30
geekup-legodevops
2d8e7fee0d
Enable replicaset on local MongoDB only (#10010) 2022-02-09 14:32:46 +05:30
geekup-legodevops
e85b34d66e
Add Helm configMap to update application configuration (#10157) 2022-01-31 13:27:01 +05:30