Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

modified docker compose #6685

Open
wants to merge 27 commits into
base: preview
Choose a base branch
from
Open

Conversation

ibartsindia
Copy link

@ibartsindia ibartsindia commented Feb 27, 2025

Description

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • Feature (non-breaking change which adds functionality)
  • Improvement (change that would cause existing functionality to not work as expected)
  • Code refactoring
  • Performance improvements
  • Documentation update

Screenshots and Media (if applicable)

Test Scenarios

References

Summary by CodeRabbit

  • Chores

    • Updated key services to run in production mode with revised environment settings.
    • Refined service dependencies for improved coordination.
    • Adjusted data storage configurations to use explicit host directories.
    • Enhanced startup security for caching operations with password protection.
    • Standardized service restart policies.
    • Improved Nginx configuration for better routing and upstream definitions.
    • Added support for SSL certificate installation in Nginx setup.
    • Introduced a new rewrite rule for ACME challenge requests in the application.
    • Updated various metadata fields across the application to reflect the rebranding from "Plane" to "ReyFlow".
  • Bug Fixes

    • Commented out several UI components in the SidebarHelpSection and WorkspaceDashboardHeader, improving clarity without affecting functionality.
    • Deactivated the project_others feature in the feature list, streamlining the user experience.
    • Removed rendering of the TermsAndConditions component in the authentication forms for a cleaner UI.
    • Updated various alt texts and labels across components to reflect the rebranding from "Plane" to "ReyFlow".

Copy link
Contributor

coderabbitai bot commented Feb 27, 2025

Walkthrough

This pull request updates the docker-compose.yml file to enhance production readiness. Changes include adding the NODE_ENV=production environment variable to the web, admin, space, and live services; updating the api service to depend on plane-mq and plane-minio; modifying volume paths from named volumes to explicit host directories for several services; and adjusting the plane-redis service to enforce a Redis password. Additionally, the restart policy for the migrator service is changed to a string format.

Changes

File Summary
docker-compose.yml - Added NODE_ENV=production to web, admin, space, and live services.
- Updated api service to depend on plane-mq and plane-minio services.
- Changed volume paths for plane-db, plane-redis, plane-mq, and plane-minio to host directories.
- Modified plane-redis with a password-enforcing command and environment variable.
- Updated the restart policy for migrator to a string format.
web/core/components/workspace/sidebar/help-section.tsx - Commented out <WorkspaceEditionBadge /> in SidebarHelpSection component without deleting the code.
web/app/[workspaceSlug]/(projects)/header.tsx - Commented out Header.RightItem section in WorkspaceDashboardHeader component, including GitHub link and associated event tracking.
web/ce/constants/project/settings/features.tsx - Commented out project_others feature block in PROJECT_FEATURES_LIST constant, including properties related to time tracking.
nginx/nginx-single-docker-image.conf - Added upstreams for api, space, and live; modified plane upstream to point to web:3000; and updated server blocks for HTTP and HTTPS traffic handling.
nginx/Dockerfile - Added installation of certbot and certbot-nginx for SSL certificate support.
web/next.config.js - Added new rewrite rule for ACME challenge requests to support SSL certificate issuance.
packages/i18n/src/locales/en/core.json - Updated key "new_to_plane" from "New to Plane?" to "New to ReyFlow?".
packages/i18n/src/locales/en/translations.json - Replaced occurrences of "Plane" with "ReyFlow" across various keys and descriptions.
space/core/components/account/auth-forms/auth-root.tsx - Commented out TermsAndConditions component within AuthHeader of AuthRoot.
web/core/components/account/auth-forms/auth-root.tsx - Commented out TermsAndConditions component within AuthHeader of AuthRoot.
admin/app/page.tsx - Updated metadata title from "Plane" to "ReyFlow" in admin/app/page.tsx.
packages/constants/src/metadata.ts - Updated constants to replace "Plane" with "ReyFlow" across multiple metadata fields.
packages/ui/src/hooks/use-page-title.tsx - Changed default document title from "Plane" to "ReyFlow" in useHead function.
web/app/layout.tsx - Updated metadata title and application name from "Plane" to "ReyFlow" in layout.tsx.
web/manifest.json - Updated name, short_name, and description fields from "Plane" to "ReyFlow" in manifest.json.

Suggested labels

🏠self-hosted, 🐳docker

Suggested reviewers

  • sriramveeraghanta
  • SatishGandham

Poem

I'm a code bunny with hops so light,
Watching volumes shift from day to night.
With env variables shining like a carrot's glow,
I bounce through Docker, setting production in flow.
Happy commits and bouncy beats, ready to go!
🥕🐰


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@CLAassistant
Copy link

CLAassistant commented Feb 27, 2025

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
0 out of 2 committers have signed the CLA.

❌ root
❌ ibartsindia


root seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
docker-compose.yml (1)

196-196: Add a newline character at the end of the file.
YAMLlint has flagged that there is no newline at the end of the file. Adding a newline will ensure compliance with YAML best practices.

🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 196-196: no new line character at the end of file

(new-line-at-end-of-file)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 59a0925 and d21070d.

📒 Files selected for processing (1)
  • docker-compose.yml (9 hunks)
🧰 Additional context used
🪛 YAMLlint (1.35.1)
docker-compose.yml

[error] 196-196: no new line character at the end of file

(new-line-at-end-of-file)

🔇 Additional comments (11)
docker-compose.yml (11)

13-14: Set NODE_ENV to production for the "web" service.
Adding the production environment variable here ensures that the web service runs with production configurations. Please verify that any Dockerfile or application logic relying on NODE_ENV behaves as expected.


28-29: Set NODE_ENV to production for the "admin" service.
This change aligns the admin service with production-grade settings. Ensure this configuration is in harmony with any environment-specific logic within the admin container.


43-44: Set NODE_ENV to production for the "space" service.
This addition guarantees that the "space" service also operates under production settings. Confirm that any service-specific settings are adjusted accordingly.


119-120: Set NODE_ENV to production for the "live" service.
Ensuring the live service uses production configurations helps avoid any debugging or development leftovers. Verify that dependent configurations respect this environment setting.


60-61: Add additional dependencies for the API service.
By adding plane-mq and plane-minio to the API service’s dependencies, the configuration ensures that both the message queue and object storage services are available on startup. Please verify that these services are correctly set up and that their host mappings are correct.


102-102: Standardize migrator service’s restart policy.
Changing the restart policy to the string "no" may improve consistency with other service definitions. Confirm that this alteration meets your intended service lifecycle management.


128-128: Update the volume mapping for the plane-db service.
Switching from a named volume to an explicit host directory (/opt/docker-volumes/postgres) enhances transparency about where the database data is stored. Please ensure that the host directory has the proper permissions.


141-145: Enhance plane-redis security and volume mapping.
The updated command now enforces a password requirement by using ["redis-server", "--requirepass", "${REDIS_PASSWORD}"], and the volume mapping points to a specific host directory (/opt/docker-volumes/redis). This strengthens security and clarifies data persistence. Verify that the REDIS_PASSWORD is managed securely in your environment.


158-158: Update the volume mapping for the plane-mq service.
Changing the volume path to a specific host directory (/opt/docker-volumes/rabbitmq) clarifies where RabbitMQ data is stored, which is useful for data management and backup processes.


166-166: Update the volume mapping for the plane-minio service.
Mapping the volume to /opt/docker-volumes/minio provides a clear, explicit path for Minio's data, aiding in maintenance and potential troubleshooting.


189-196: Define explicit volume declarations for persistence.
Replacing previously referenced named volumes with explicit volume declarations using driver: local for plane-db, plane-redis, plane-mq, and plane-minio improves transparency in data storage configurations. Verify that these definitions are consistent with your deployment environment’s storage policies.

🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 196-196: no new line character at the end of file

(new-line-at-end-of-file)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
nginx/nginx-single-docker-image.conf (1)

1-42: Consider adding WebSocket support.

Since this appears to be a modern web application that might include real-time features, consider adding WebSocket support to your Nginx configuration.

location / {
    proxy_pass http://plane/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+   # WebSocket support
+   proxy_http_version 1.1;
+   proxy_set_header Upgrade $http_upgrade;
+   proxy_set_header Connection "upgrade";
}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 79c2e31 and d6e098d.

📒 Files selected for processing (1)
  • nginx/nginx-single-docker-image.conf (1 hunks)
🔇 Additional comments (8)
nginx/nginx-single-docker-image.conf (8)

1-3: Update to use Docker container for frontend service.

The upstream definition now correctly points to the web container on port 3000 instead of localhost, which aligns with a containerized architecture. This change is essential for proper service discovery in a Docker environment.


5-7: New upstream block added for API service.

Good addition of a dedicated upstream for the backend API service, which enables proper routing of API requests to the appropriate container.


9-11: New upstream block added for Spaces service.

Appropriate addition of a dedicated upstream for the Spaces service, allowing for clean separation of concerns in the routing configuration.


14-15: Domain configuration added.

The addition of server_name directives with domain names is a good practice. However, be aware that this is currently set to "reyflow.com" - ensure this is the intended domain name for this deployment.

Are you sure "reyflow.com" is the correct domain for this configuration? This appears to be different from the project name "plane".


17-22: Updated proxy configuration for main application.

The proxy_pass now correctly references the plane upstream. The addition of X-Forwarded-For header is a good security practice that preserves the client's original IP address in the request chain.


24-29: Updated proxy configuration for API endpoints.

The proxy_pass now correctly references the api upstream. The addition of X-Forwarded-For header improves request tracing and logging capabilities.


31-36: Updated proxy configuration for Spaces service.

The proxy_pass now correctly references the space upstream. The addition of X-Forwarded-For header ensures proper client IP tracking.


38-41: Improved error page configuration.

The error page configuration is now properly formatted and includes a clear path to the error page template.

Comment on lines 1 to 42
upstream plane {
server localhost:80;
server web:3000; # Next.js frontend
}

error_log /var/log/nginx/error.log;
upstream api {
server api:8000; # Backend API
}

upstream space {
server space:3000; # Spaces service
}

server {
listen 80;
root /www/data/;
access_log /var/log/nginx/access.log;
listen 80;
server_name reyflow.com www.reyflow.com; # Your domain

location / {
proxy_pass http://localhost:3000/;
proxy_pass http://plane/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location /api/ {
proxy_pass http://localhost:8000/api/;
proxy_pass http://api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location /spaces/ {
proxy_pass http://localhost:4000/;
proxy_pass http://space/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
root /usr/share/nginx/html;
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Consider adding SSL configuration.

For production environments, SSL/TLS should be configured to secure traffic. Consider adding SSL configuration or integrating with a solution like Let's Encrypt.

server {
    listen 80;
+   listen 443 ssl;
    server_name reyflow.com www.reyflow.com; # Your domain
+   
+   # SSL configuration
+   ssl_certificate /etc/nginx/ssl/fullchain.pem;
+   ssl_certificate_key /etc/nginx/ssl/privkey.pem;
+   ssl_protocols TLSv1.2 TLSv1.3;
+   ssl_prefer_server_ciphers on;
+   
+   # Redirect HTTP to HTTPS
+   if ($scheme != "https") {
+       return 301 https://$host$request_uri;
+   }

    # ... rest of the configuration
}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
upstream plane {
server localhost:80;
server web:3000; # Next.js frontend
}
error_log /var/log/nginx/error.log;
upstream api {
server api:8000; # Backend API
}
upstream space {
server space:3000; # Spaces service
}
server {
listen 80;
root /www/data/;
access_log /var/log/nginx/access.log;
listen 80;
server_name reyflow.com www.reyflow.com; # Your domain
location / {
proxy_pass http://localhost:3000/;
proxy_pass http://plane/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api/ {
proxy_pass http://localhost:8000/api/;
proxy_pass http://api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /spaces/ {
proxy_pass http://localhost:4000/;
proxy_pass http://space/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
root /usr/share/nginx/html;
}
}
upstream plane {
server web:3000; # Next.js frontend
}
upstream api {
server api:8000; # Backend API
}
upstream space {
server space:3000; # Spaces service
}
server {
listen 80;
listen 443 ssl;
server_name reyflow.com www.reyflow.com; # Your domain
# SSL configuration
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# Redirect HTTP to HTTPS
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
location / {
proxy_pass http://plane/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api/ {
proxy_pass http://api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /spaces/ {
proxy_pass http://space/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
nginx/Dockerfile (2)

3-4: New Package Installation for Certbot & Certbot-Nginx
The addition of RUN apk add --no-cache certbot certbot-nginx correctly installs the necessary packages to enable HTTPS support. Please ensure that these packages are required at runtime, as they could increase your container’s size and attack surface. If these packages are only needed during certificate renewal or for specific management tasks, consider using a multi-stage build or a separate container to handle certificate management.


12-12: Extraneous Change at End of File
Line 12 is marked with a tilde, but no content is shown. If this represents an intentional addition (e.g., a newline for POSIX compliance), please confirm its intent. Otherwise, if it’s accidental, consider removing it to keep the file tidy.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d6e098d and d4d1cf7.

📒 Files selected for processing (1)
  • nginx/Dockerfile (1 hunks)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🔭 Outside diff range comments (1)
docker-compose.yml (1)

1-203: 💡 Verification agent

🧩 Analysis chain

Verify environment variable definitions before deployment.

This configuration relies on several environment variables that need to be properly defined in .env files. Ensure all required variables are set.


🏁 Script executed:

#!/bin/bash
# Check what environment variables are referenced but might not be defined
echo "Environment variables used in docker-compose.yml:"
rg "\${([A-Z_]+)}" docker-compose.yml -r '$1' | sort | uniq

echo "Checking which environment variables are defined in .env files:"
# Don't print actual values for security, just check if they exist
find . -name ".env*" -type f -print | xargs grep -o "^[A-Z_]*=" | sort | uniq | sed 's/=$//'

# Specifically check for the new NGINX_SSL_PORT
echo "Checking if NGINX_SSL_PORT is defined:"
find . -name ".env*" -type f -print | xargs grep "NGINX_SSL_PORT"

Length of output: 3232


Action: Verify and Define All Required Environment Variables
After running the verification script, it appears that while most environment variables referenced in the Docker Compose file are defined in the *.env.example files (e.g., POSTGRES_USER, NGINX_PORT, etc.), the variable NGINX_SSL_PORT is missing. Additionally, a regex error was encountered during the automated extraction—please double-check manually as well.

  • NGINX_SSL_PORT: Ensure this variable is defined in your production environment or in the corresponding .env file if it’s required by the proxy service.

Please update the .env configuration files accordingly to avoid any deployment issues.

🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 203-203: no new line character at the end of file

(new-line-at-end-of-file)

🧹 Nitpick comments (4)
nginx/nginx-single-docker-image.conf (1)

25-60: Consider adding WebSocket support for real-time features.

For applications that might use WebSockets (like the "live" service), additional proxy configuration might be needed.

    location /api/ {
        proxy_pass http://api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+       # WebSocket support
+       proxy_http_version 1.1;
+       proxy_set_header Upgrade $http_upgrade;
+       proxy_set_header Connection "upgrade";
+       proxy_read_timeout 86400;
    }
docker-compose.yml (3)

194-203: Volume declaration is properly structured.

The volume declarations with local driver are appropriate for production use.

Add a newline at end of file.

The static analysis tool detected a missing newline at the end of the file.

  ssl_certs:
    driver: local
+
🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 203-203: no new line character at the end of file

(new-line-at-end-of-file)


1-203: Consider adding health checks for critical services.

The configuration doesn't include health checks, which are important for robust container orchestration in production.

  api:
    container_name: api
    build:
      context: ./apiserver
      dockerfile: Dockerfile.api
      args:
        DOCKER_BUILDKIT: 1
    restart: always
    command: ./bin/docker-entrypoint-api.sh
    env_file:
      - ./apiserver/.env
+   healthcheck:
+     test: ["CMD", "curl", "-f", "http://localhost:8000/api/health/"]
+     interval: 30s
+     timeout: 10s
+     retries: 3
+     start_period: 40s
    depends_on:
      - plane-db
      - plane-redis
      - plane-mq
      - plane-minio

  plane-db:
    container_name: plane-db
    image: postgres:15.7-alpine
    restart: always
    command: postgres -c 'max_connections=1000'
+   healthcheck:
+     test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
+     interval: 10s
+     timeout: 5s
+     retries: 5
+     start_period: 10s
    volumes:
      - /opt/docker-volumes/postgres:/var/lib/postgresql/data
🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 203-203: no new line character at the end of file

(new-line-at-end-of-file)


122-170: Consider adding backup configurations for data volumes.

The configuration specifies persistent storage for databases and other stateful services but doesn't address backup strategies.

Consider adding a backup service or documenting backup procedures for the persistent volumes, especially for critical data in PostgreSQL and MinIO.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d4d1cf7 and 23d41aa.

📒 Files selected for processing (2)
  • docker-compose.yml (10 hunks)
  • nginx/nginx-single-docker-image.conf (1 hunks)
🧰 Additional context used
🪛 YAMLlint (1.35.1)
docker-compose.yml

[error] 203-203: no new line character at the end of file

(new-line-at-end-of-file)

🔇 Additional comments (13)
nginx/nginx-single-docker-image.conf (6)

1-3: Good update for Docker service integration.

The upstream server has been correctly updated to use the Docker service name and port instead of localhost.


5-11: Good separation of concerns with dedicated upstream blocks.

Adding separate upstream blocks for API and Space services follows best practices for maintainability and allows for easier scaling and configuration changes in the future.


13-23: Good HTTPS redirection implementation.

The HTTP to HTTPS redirection is properly configured with permanent redirect (301) and includes proper handling for Let's Encrypt certificate verification.


35-40: Good proxy configuration with proper headers.

The proxy configuration for each service is well-structured with appropriate headers. The addition of X-Forwarded-For headers is important for preserving client IP information.

Also applies to: 42-47, 49-54


56-59: Properly configured error pages.

Error page configuration is correctly structured with appropriate status codes and locations.


27-34:

❓ Verification inconclusive

Verify domain name and SSL certificate paths.

The configuration uses hardcoded domain names and certificate paths. Ensure that:

  1. "reyflow.com" is the correct domain name for your deployment
  2. The SSL certificate paths exist and are accessible to the container

🏁 Script executed:

#!/bin/bash
# Check if domain name appears in other configuration files
echo "Checking for domain name references in configuration files:"
rg "reyflow.com" --type yaml --type conf

# Check for environment variables that might be used for domain configuration
echo "Checking for environment variables in docker-compose.yml:"
rg "DOMAIN|domain|NGINX_HOST" docker-compose.yml

Length of output: 374


Below is a revised review comment that reflects our findings and next steps:


Action Required: Verify Domain and SSL Certificate Configuration

The file nginx/nginx-single-docker-image.conf (lines 27–34) still hardcodes the domain reyflow.com and absolute paths for the SSL certificate and key. Please address the following:

  • Domain Confirmation:
    Verify that reyflow.com is indeed the domain intended for your deployment. If another domain is used in production, update the configuration accordingly.

  • Certificate Path Verification:
    Ensure that the certificate paths (/etc/letsencrypt/live/reyflow.com/fullchain.pem and /etc/letsencrypt/live/reyflow.com/privkey.pem) exist on the target system and are accessible to the container.

  • Configuration Flexibility:
    Consider parameterizing these values (e.g., using environment variables) to prevent hardcoded values from causing issues in different deployment scenarios.

Note: The initial verification script did not yield conclusive results due to a file type error (using --type conf with ripgrep). To assist further, please run the following updated shell script to search for references to the domain and certificate paths:

#!/bin/bash
echo "Searching for domain name and SSL certificate path references in *.conf and *.yaml files:"
# Add custom file type for *.conf files in your search
rg --type-add 'conf:*.conf' --type conf "reyflow.com"
rg "reyflow.com" --glob "*.yaml"

echo "Searching for SSL certificate paths in *.conf files:"
rg --type-add 'conf:*.conf' --type conf "/etc/letsencrypt/live/reyflow.com"

echo "Checking docker-compose.yml for environment variables related to domain configuration:"
rg "DOMAIN|domain|NGINX_HOST" docker-compose.yml

Please manually confirm the results from this script or any relevant settings in your deployment environment.

docker-compose.yml (7)

13-14: Good addition of NODE_ENV for production.

Setting NODE_ENV=production for all Node.js services is essential for optimized performance in a production environment. This improves application performance by enabling caching and other production optimizations.

Also applies to: 28-29, 43-44, 119-120


60-61: Good dependency management.

Adding explicit dependencies on plane-mq and plane-minio ensures that the API service starts only after these required services are available.


102-102: Proper fix for restart policy format.

Changing restart policy to string format "no" follows Docker Compose specification correctly.


141-145: Good security practice with Redis password.

Requiring a password for Redis is a good security practice for production environments.


179-179: Good SSL port configuration.

Adding the SSL port mapping is necessary for HTTPS support.


128-128:

❓ Verification inconclusive

Verify host volume paths before deployment.

The change from named volumes to explicit host paths requires that these directories exist on the host system with appropriate permissions.

Also applies to: 143-143, 158-158, 166-166


🏁 Script executed:

#!/bin/bash
# Check if these are standard paths used in other projects or documentation
echo "Checking if these volume paths are referenced elsewhere:"
rg -A 2 -B 2 "/opt/docker-volumes" --type yaml --type md

# Check for environment variables that might be used to configure these paths
echo "Checking for environment variables that might configure volume paths:"
rg "VOLUME_PATH|STORAGE_PATH" .env* docker-compose*

Length of output: 1750


ACTION: Verify Explicit Host Paths and Permissions on the Host

The explicit host paths used in the Docker Compose file (e.g., /opt/docker-volumes/postgres, /opt/docker-volumes/redis, /opt/docker-volumes/rabbitmq, /opt/docker-volumes/minio, /opt/docker-volumes/nginx) are hardcoded (referenced on lines 128, 143, 158, and 166 in docker-compose.yml). No environment variables (like VOLUME_PATH or STORAGE_PATH) were found to parameterize these paths.

  • Ensure the following before deployment:
    • The directories for each service under /opt/docker-volumes/ exist on the host.
    • Appropriate permissions are set so that the services (e.g., PostgreSQL, Redis, RabbitMQ, Minio, and Nginx) can read and write to these directories.

This manual verification is crucial to prevent deployment issues resulting from missing directories or incorrect permission settings.


188-191:

❓ Verification inconclusive

Verify that SSL volume configuration is complete.

The SSL certificates volume is mounted, but ensure it's properly populated with certificates.


🏁 Script executed:

#!/bin/bash
# Check how certbot might be configured or used in the project
echo "Checking for certbot usage:"
rg -A 5 "certbot" --type Dockerfile --type sh

# Check if there are any scripts that might handle certificate generation
echo "Checking for certificate management scripts:"
fd -e sh -e bash | xargs grep -l "letsencrypt\|certbot\|ssl"

Length of output: 307


Attention: Validate SSL Certificate Population

It appears that the Docker volume for SSL certificates (ssl_certs mounted to /etc/nginx/ssl) is correctly declared in the docker-compose.yml file. However, our initial verification—aimed at detecting references to certificate management (e.g., certbot or letsencrypt usage) in the repository—returned no output, partly due to a file type recognition issue with Dockerfiles and possibly due to the absence of such scripts.

To ensure proper certificate handling, please manually verify one or more of the following:

  • Confirm that the ssl_certs volume is populated with the required certificate files at runtime.
  • Check if certificate generation and renewal are managed externally or by another part of your deployment process.
  • Reassess whether additional configuration or scripts (possibly omitted from the current search scope) are responsible for certificate provisioning.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
nginx/nginx-single-docker-image.conf (2)

28-35: Consider making domain names configurable via environment variables.

The hardcoded domain name (reyflow.com) might cause issues when deploying to different environments or domains.

- server_name reyflow.com www.reyflow.com;
+ server_name ${NGINX_SERVER_NAME};

- ssl_certificate /etc/letsencrypt/live/reyflow.com/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/reyflow.com/privkey.pem;
+ ssl_certificate /etc/letsencrypt/live/${NGINX_SERVER_NAME}/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/${NGINX_SERVER_NAME}/privkey.pem;

You'll need to ensure your Docker Compose file sets this environment variable and that Nginx can access it. This typically requires an entrypoint script that generates the final config based on environment variables.


28-35: Consider adding HSTS and SSL session improvements.

For enhanced security and performance:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
+ ssl_prefer_server_ciphers on;
+ ssl_session_cache shared:SSL:10m;
+ ssl_session_timeout 10m;
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

These additions will:

  1. Enforce browser HTTPS usage with HSTS (HTTP Strict Transport Security)
  2. Improve SSL performance with session caching
  3. Set server cipher preference for better security control
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 23d41aa and 5e3e278.

📒 Files selected for processing (2)
  • nginx/nginx-single-docker-image.conf (1 hunks)
  • web/next.config.js (1 hunks)
🔇 Additional comments (5)
web/next.config.js (1)

62-65: Well-implemented ACME challenge handling for SSL.

The addition of this rewrite rule properly supports domain validation for SSL certificate issuance (typically used by Let's Encrypt), working in conjunction with the Nginx HTTPS configuration changes.

nginx/nginx-single-docker-image.conf (4)

1-2: Good improvement using Docker service names.

Changing from localhost:80 to web:3000 makes this configuration properly work in a Docker Compose environment by referencing the service name.


5-11: Well-structured upstream definitions for microservices.

Adding separate upstream blocks for API and Space services creates a clean, modular configuration that makes routing more maintainable.


13-24: Excellent implementation of HTTP to HTTPS redirection.

This server block correctly:

  1. Handles Let's Encrypt certificate validation via the ACME challenge path
  2. Redirects all other HTTP traffic to HTTPS with a 301 (permanent) redirect
  3. Aligns with the changes in the Next.js config

36-41: Good addition of X-Forwarded-For header.

Adding this header ensures the backend services receive the original client IP address, which is important for logging and security.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (5)
nginx/nginx-single-docker-image.conf (5)

13-26: HTTP to HTTPS redirect is properly implemented

The implementation of HTTP to HTTPS redirection with a 301 status code is a security best practice. The ACME challenge location is correctly configured for Let's Encrypt certificate renewal.

Consider making the domain name configurable through environment variables to support different deployment environments:

server {
    listen 80;
-    server_name reyflow.com www.reyflow.com;
+    server_name ${DOMAIN_NAME} www.${DOMAIN_NAME};

44-49: Add WebSocket support and timeouts

The proxy configuration looks good with the addition of the X-Forwarded-For header. However, it's missing WebSocket support and timeout settings which are important for web applications.

Consider adding WebSocket support and timeout settings:

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    proxy_set_header Upgrade $http_upgrade;
+    proxy_set_header Connection "upgrade";
+    proxy_read_timeout 90s;
+    proxy_connect_timeout 90s;
+    proxy_send_timeout 90s;

51-56: Add buffer size configuration for API requests

The proxy configuration for the API is good, but consider adding buffer configuration for handling large API requests.

Consider adding buffer configuration:

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    proxy_buffering on;
+    proxy_buffer_size 16k;
+    proxy_busy_buffers_size 24k;
+    proxy_buffers 64 4k;

58-63: Configure the same proxy enhancements for spaces service

For consistency, the spaces service should have the same proxy enhancements as recommended for the main location.

Add WebSocket support and appropriate timeouts to match other locations.


65-68: Consider enhancing error handling

While the basic error handling is in place, consider implementing custom error pages for a better user experience.

You might want to add custom error pages with branded styling that match your application's design:

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
+    # Custom 404 page
+    error_page 404 /404.html;
+    location = /404.html {
+        root /usr/share/nginx/html;
+    }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5e3e278 and 59729e2.

📒 Files selected for processing (1)
  • nginx/nginx-single-docker-image.conf (1 hunks)
🔇 Additional comments (3)
nginx/nginx-single-docker-image.conf (3)

1-3: Good update to use Docker service name

The change from localhost to the Docker service name web:3000 is appropriate for containerized environments. The comment clarifying this as the Next.js frontend is helpful.


5-11: Well-structured upstream definitions for microservices

The addition of dedicated upstream blocks for API and Space services establishes a clean separation of concerns. This approach facilitates easier maintenance and scaling of individual services.


1-69: Consider adding SSL configuration in standalone file

This is a well-structured Nginx configuration that correctly implements HTTPS with proper redirects and service routing. For better maintainability, consider extracting SSL-specific configurations to a separate include file.

Separating SSL configuration allows easier management across multiple server blocks:

server {
    listen 443 ssl;
    server_name reyflow.com www.reyflow.com;

-    ssl_certificate /etc/letsencrypt/live/reyflow.com/fullchain.pem;
-    ssl_certificate_key /etc/letsencrypt/live/reyflow.com/privkey.pem;
-    ssl_protocols TLSv1.2 TLSv1.3;
-    ssl_ciphers HIGH:!aNULL:!MD5;
+    include /etc/nginx/conf.d/ssl-params.conf;

Then create a file named ssl-params.conf with all SSL-related directives.

Comment on lines 28 to 42
# HTTPS Configuration
server {
listen 443 ssl;
server_name reyflow.com www.reyflow.com;

ssl_certificate /etc/letsencrypt/live/reyflow.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/reyflow.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;

# Serve Let's Encrypt challenge files over HTTPS too
location /.well-known/acme-challenge/ {
root /var/www/certbot;
allow all;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Add security headers and optimize SSL configuration

The SSL configuration is good with modern protocols and secure ciphers. However, it's missing some important security headers and performance optimizations.

Add the following security enhancements:

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
+    ssl_session_cache shared:SSL:10m;
+    ssl_session_timeout 10m;
+    
+    # Security headers
+    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
+    add_header X-Content-Type-Options nosniff;
+    add_header X-Frame-Options SAMEORIGIN;
+    add_header X-XSS-Protection "1; mode=block";
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# HTTPS Configuration
server {
listen 443 ssl;
server_name reyflow.com www.reyflow.com;
ssl_certificate /etc/letsencrypt/live/reyflow.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/reyflow.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Serve Let's Encrypt challenge files over HTTPS too
location /.well-known/acme-challenge/ {
root /var/www/certbot;
allow all;
}
# HTTPS Configuration
server {
listen 443 ssl;
server_name reyflow.com www.reyflow.com;
ssl_certificate /etc/letsencrypt/live/reyflow.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/reyflow.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Security headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
# Serve Let's Encrypt challenge files over HTTPS too
location /.well-known/acme-challenge/ {
root /var/www/certbot;
allow all;
}
}

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (6)
nginx/nginx-single-docker-image.conf (1)

17-82: Consider adding WebSocket support for the Live service.

For real-time functionality, the Live service likely requires WebSocket support.

    location /live/ {
        proxy_pass http://live/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        # WebSocket support
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection "upgrade";
+        proxy_read_timeout 86400;
    }
docker-compose.yml (5)

128-128: Consider making volume paths configurable.

Using hardcoded paths might limit deployment flexibility. Consider using environment variables.

    volumes:
-      - /opt/docker-volumes/postgres:/var/lib/postgresql/data
+      - ${POSTGRES_DATA_PATH:-/opt/docker-volumes/postgres}:/var/lib/postgresql/data

158-158: Consider making RabbitMQ volume path configurable.

Similar to the database volume, consider using environment variables for flexibility.

    volumes:
-      - /opt/docker-volumes/rabbitmq:/var/lib/rabbitmq
+      - ${RABBITMQ_DATA_PATH:-/opt/docker-volumes/rabbitmq}:/var/lib/rabbitmq

166-166: Consider making MinIO volume path configurable.

Using environment variables would make the deployment more flexible.

    volumes:
-      - /opt/docker-volumes/minio:/export
+      - ${MINIO_DATA_PATH:-/opt/docker-volumes/minio}:/export

193-203: Fixed volume configuration, but missing newline.

The volume definitions using the local driver are correct, but there should be a newline at the end of the file.

  ssl_certs:
    driver: local
+
🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 203-203: no new line character at the end of file

(new-line-at-end-of-file)


1-203: Consider adding resource limits to containers.

For production environments, it's recommended to add resource limits to prevent resource contention.

For example:

  web:
    container_name: web
    build:
      context: .
      dockerfile: ./web/Dockerfile.web
      args:
        DOCKER_BUILDKIT: 1
    restart: always
    command: node web/server.js web
    depends_on:
      - api
    environment:
      - NODE_ENV=production
+    deploy:
+      resources:
+        limits:
+          cpus: '0.5'
+          memory: 512M

You should add similar configurations to other services based on their resource needs.

🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 203-203: no new line character at the end of file

(new-line-at-end-of-file)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 59729e2 and 6ecaeb6.

📒 Files selected for processing (2)
  • docker-compose.yml (10 hunks)
  • nginx/nginx-single-docker-image.conf (1 hunks)
🧰 Additional context used
🪛 YAMLlint (1.35.1)
docker-compose.yml

[error] 203-203: no new line character at the end of file

(new-line-at-end-of-file)

🔇 Additional comments (22)
nginx/nginx-single-docker-image.conf (12)

2-2: Docker service integration looks good.

The upstream configuration has been properly updated to point to the web service in your Docker environment.


5-7: Appropriate API upstream configuration.

Well-structured upstream definition for the API service.


9-11: Correct Space service upstream configuration.

The upstream for the Space service has been properly defined.


13-15: Live service upstream properly configured.

The upstream configuration for the Live service is correctly set up.


17-32: HTTPS redirect configuration is solid.

Good implementation of HTTP to HTTPS redirection with proper Let's Encrypt ACME challenge support.


34-43: Consider enhancing the SSL configuration.

While the SSL setup is good, you could improve it further with security headers and performance optimizations.

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
+    ssl_session_cache shared:SSL:10m;
+    ssl_session_timeout 10m;
+    
+    # Security headers
+    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
+    add_header X-Content-Type-Options nosniff;
+    add_header X-Frame-Options SAMEORIGIN;
+    add_header X-XSS-Protection "1; mode=block";

45-48: ACME challenge configuration for HTTPS is good.

The Let's Encrypt challenge configuration for HTTPS is properly set up.


50-55: Frontend proxy configuration looks good.

The configuration correctly passes requests to the frontend service with proper headers.


57-62: API proxy configuration is properly updated.

The API proxy configuration has been correctly updated with proper forwarding headers.


64-69: Space service proxy configuration is well structured.

The configuration correctly forwards space requests to the appropriate service.


71-76: Live service proxy configuration looks good.

The Live service proxy is properly configured with appropriate headers.


78-81: Error page setup is correct.

The error page configuration is properly defined.

docker-compose.yml (10)

13-14: Good production environment setting.

Setting NODE_ENV to production is appropriate for the web service in a production environment.


28-29: Proper production environment for admin service.

Setting NODE_ENV to production for the admin service is correct.


43-44: Production environment for space service is correct.

Setting NODE_ENV to production is appropriate for the space service.


60-61: Important dependencies correctly added.

Adding explicit dependencies on plane-mq and plane-minio ensures the API starts after all required services.


102-102: Restart policy syntax corrected.

The restart policy has been updated to use the correct string format.


119-120: Production environment for live service looks good.

Setting NODE_ENV to production for the live service is appropriate.


141-145: Good Redis security configuration.

Adding password protection to Redis is an important security improvement.


179-179: SSL port mapping correctly added.

Adding the SSL port mapping is essential for the HTTPS configuration.


188-191: Volume mounts for SSL correctly configured.

The volume mounts for Nginx configuration, SSL certificates, and Let's Encrypt validation are properly set up.


166-169:

❓ Verification inconclusive

Consider adding MinIO security configuration.

While Redis has password protection, consider adding similar security for MinIO access.


🏁 Script executed:

#!/bin/bash
# Check if MinIO is accessible without authentication from inside the Docker network

# Create a temporary container to test access
docker run --rm --network=$(docker inspect -f '{{.HostConfig.NetworkMode}}' plane-minio) \
  appropriate/curl -s -o /dev/null -w "%{http_code}" http://plane-minio:9000/

# Check if we get a 403 (which would indicate auth is required) or 200 (which might indicate open access)

Length of output: 361


MinIO Security: Manual Verification Needed

The test script failed to run due to a missing Docker command, so we couldn’t confirm whether MinIO enforces authentication like Redis. Please verify manually whether MinIO is accessible without authentication within the Docker network. If it is, consider adding security measures (e.g., requiring credentials or restricting network access) to align with Redis’ password protection.

  • File: docker-compose.yml
  • Lines: 166–169
  • Snippet:
        - /opt/docker-volumes/minio:/export
      environment:
        MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID}
        MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY}

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
nginx/nginx-single-docker-image.conf (1)

17-53: 🛠️ Refactor suggestion

Consider adding SSL configuration for production environment.

For production deployments, SSL/TLS should be configured to secure traffic. Consider adding SSL configuration or integrating with Let's Encrypt.

server {
    listen 80;
+   listen 443 ssl;
    server_name reyflow.com www.reyflow.com;
+   
+   # SSL configuration
+   ssl_certificate /etc/nginx/ssl/fullchain.pem;
+   ssl_certificate_key /etc/nginx/ssl/privkey.pem;
+   ssl_protocols TLSv1.2 TLSv1.3;
+   ssl_prefer_server_ciphers on;
+   
+   # Redirect HTTP to HTTPS
+   if ($scheme != "https") {
+       return 301 https://$host$request_uri;
+   }

    # ... rest of the configuration
}
🧹 Nitpick comments (3)
nginx/nginx-single-docker-image.conf (3)

17-53: Add WebSocket support for live service.

Since you've added a live service which typically handles real-time communications, consider adding WebSocket support in the Nginx configuration.

    location /live/ {
        proxy_pass http://live/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+       proxy_http_version 1.1;
+       proxy_set_header Upgrade $http_upgrade;
+       proxy_set_header Connection "upgrade";
+       proxy_read_timeout 86400;
    }

17-53: Consider adding rate limiting for API endpoints.

To protect your API from abuse and potential DDoS attacks, consider implementing rate limiting for API endpoints.

+   # Rate limiting zone
+   limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

    location /api/ {
        proxy_pass http://api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+       limit_req zone=api_limit burst=20 nodelay;
    }

1-53: Add upstream health checks for service reliability.

Consider adding health checks to your upstream server configurations to improve reliability and automatic failover capabilities.

upstream plane {
    server web:3000; # Next.js frontend
+   health_check interval=10 fails=3 passes=2;
}

upstream api {
    server api:8000; # Backend API
+   health_check interval=10 fails=3 passes=2;
}

upstream space {
    server space:3000; # Spaces service
+   health_check interval=10 fails=3 passes=2;
}

upstream live {
    server live:3000;  # Live service
+   health_check interval=10 fails=3 passes=2;
}

Note: Health checks require Nginx Plus or a compatible open-source alternative like OpenResty.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6ecaeb6 and 82721c3.

📒 Files selected for processing (1)
  • nginx/nginx-single-docker-image.conf (1 hunks)
🔇 Additional comments (10)
nginx/nginx-single-docker-image.conf (10)

1-3: Updated upstream block to use Docker service name.

The change from localhost:80 to web:3000 properly aligns this configuration with Docker container networking. This enables proper communication between the Nginx proxy and the Next.js frontend container.


5-7: Added API service upstream block.

Good addition of the API upstream block pointing to the API container on port 8000. This separation of concerns allows for better scaling and maintenance.


9-11: Added Space service upstream block.

The Space service upstream configuration is correctly defined to route traffic to the appropriate container.


13-15: Added Live service upstream block.

The Live service upstream configuration is properly set up to handle WebSocket connections or real-time features.


18-19: Added server_name directive for domain binding.

Adding the server_name directive properly identifies which domains this server block should respond to. This is essential for hosting in production environments.


21-26: Updated root location to use plane upstream.

The proxy_pass has been properly updated to use the plane upstream block. The addition of X-Forwarded-For header is important for preserving client IP information through the proxy.


28-33: Updated API location to use api upstream.

The API location block now correctly routes requests to the api upstream service. This ensures proper separation of frontend and backend services.


35-40: Updated spaces location to use space upstream.

The spaces location block has been properly configured to route to the space upstream service with appropriate headers.


42-47: Added live service location block.

The addition of the live location block allows for proper routing to the live service, which is essential for real-time functionality.


49-52: Cleaned up error page configuration.

The error page configuration has been formatted properly with consistent spacing.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (2)
nginx/nginx-single-docker-image.conf (2)

28-38: ⚠️ Potential issue

SSL configuration is incomplete.

The HTTPS server block is missing essential SSL configuration parameters. Without specifying certificate paths and protocols, the server won't be able to handle HTTPS traffic correctly.

Add the following SSL configuration:

server {
    listen 443 ssl;
    server_name reyflow.com www.reyflow.com;
+   
+   # SSL configuration
+   ssl_certificate /etc/nginx/ssl/fullchain.pem;
+   ssl_certificate_key /etc/nginx/ssl/privkey.pem;
+   ssl_protocols TLSv1.2 TLSv1.3;
+   ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://plane/;

29-65: 🛠️ Refactor suggestion

Add security headers for enhanced protection.

The configuration is missing important security headers that should be included in a production environment.

Add the following security headers:

server {
    listen 443 ssl;
    server_name reyflow.com www.reyflow.com;
    
+   # Security headers
+   add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
+   add_header X-Content-Type-Options nosniff;
+   add_header X-Frame-Options SAMEORIGIN;
+   add_header X-XSS-Protection "1; mode=block";
+   add_header Referrer-Policy strict-origin-when-cross-origin;

    location / {
🧹 Nitpick comments (5)
nginx/nginx-single-docker-image.conf (4)

40-59: Consider adding WebSocket support for real-time features.

The current configuration handles basic HTTP requests but may not properly support WebSocket connections needed for real-time features. This is particularly important for the /live/ endpoint, which likely uses WebSockets.

Add WebSocket support to the live service configuration:

location /live/ {
    proxy_pass http://live/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+   proxy_http_version 1.1;
+   proxy_set_header Upgrade $http_upgrade;
+   proxy_set_header Connection "upgrade";
+   proxy_read_timeout 86400;
}

61-64: Consider customizing error pages for better user experience.

The configuration uses default error pages. For a production environment, consider adding custom error pages that match your application's branding and provide useful information to users.

error_page 500 502 503 504 /50x.html;
location = /50x.html {
    root /usr/share/nginx/html;
+   # Consider creating custom error pages
+   # and placing them in a dedicated directory
}

1-65: Add performance optimization for production readiness.

The configuration lacks performance optimizations that are important for production environments.

Consider adding the following performance enhancements:

# At the http context level or server block
+# Buffer size for POST submissions
+client_body_buffer_size 10K;
+client_max_body_size 8m;
+
+# Buffer size for Headers
+client_header_buffer_size 1k;
+
+# Max time to receive client headers/body
+client_body_timeout 12;
+client_header_timeout 12;
+
+# Max time to keep a connection open
+keepalive_timeout 15;
+
+# Max time for the client to accept/receive a response
+send_timeout 10;
+
+# Enable gzip compression
+gzip on;
+gzip_comp_level 5;
+gzip_min_length 256;
+gzip_proxied any;
+gzip_vary on;
+gzip_types
+  application/javascript
+  application/json
+  application/x-javascript
+  application/xml
+  text/css
+  text/javascript
+  text/plain
+  text/xml;

29-65: Configure request rate limiting to prevent abuse.

To protect your application from abuse and DoS attacks, consider implementing rate limiting.

Add the following rate limiting configuration:

server {
    listen 443 ssl;
    server_name reyflow.com www.reyflow.com;
    
+   # Rate limiting zone definitions
+   limit_req_zone $binary_remote_addr zone=app_limit:10m rate=10r/s;
+   
    location / {
        proxy_pass http://plane/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+       # Apply rate limiting with a small burst
+       limit_req zone=app_limit burst=20 nodelay;
    }
space/core/components/account/auth-forms/auth-root.tsx (1)

17-17: Remove unused import if component is no longer needed.

This import is now unused since the TermsAndConditions component has been commented out. If the component is truly no longer needed, this import should be removed as well to avoid dead code.

-  TermsAndConditions,
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 82721c3 and 8f540f9.

⛔ Files ignored due to path filters (5)
  • web/public/plane-logos/black-horizontal-with-blue-logo.png is excluded by !**/*.png
  • web/public/plane-logos/blue-without-text.png is excluded by !**/*.png
  • web/public/plane-logos/plane-mobile-pwa.png is excluded by !**/*.png
  • web/public/plane-logos/white-horizontal-with-blue-logo.png is excluded by !**/*.png
  • web/public/plane-logos/white-horizontal.svg is excluded by !**/*.svg
📒 Files selected for processing (5)
  • nginx/nginx-single-docker-image.conf (1 hunks)
  • packages/i18n/src/locales/en/core.json (1 hunks)
  • packages/i18n/src/locales/en/translations.json (15 hunks)
  • space/core/components/account/auth-forms/auth-root.tsx (1 hunks)
  • web/core/components/account/auth-forms/auth-root.tsx (1 hunks)
✅ Files skipped from review due to trivial changes (3)
  • packages/i18n/src/locales/en/core.json
  • web/core/components/account/auth-forms/auth-root.tsx
  • packages/i18n/src/locales/en/translations.json
🔇 Additional comments (3)
nginx/nginx-single-docker-image.conf (3)

1-3: Good update using Docker service name for upstream.

Switching from localhost:80 to web:3000 for the plane upstream is appropriate for a containerized environment. This change improves service discovery within the Docker network.


5-15: Well-structured upstream definitions for microservices.

Good addition of separate upstream blocks for different services (api, space, live). This modular approach improves maintainability and makes the routing structure clear.


17-26: HTTP to HTTPS redirect is correctly implemented.

The HTTP to HTTPS redirect is properly configured. This is essential for security in production environments.

@@ -183,7 +183,7 @@ export const AuthRoot: FC = observer(() => {
/>
)}
{isOAuthEnabled && <OAuthOptions />}
<TermsAndConditions isSignUp={authMode === EAuthModes.SIGN_UP ? true : false} />
{/* <TermsAndConditions isSignUp={authMode === EAuthModes.SIGN_UP ? true : false} /> */}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Verify legal implications of removing the Terms and Conditions component.

The Terms and Conditions component has been commented out rather than properly removed. This could have legal implications since users will no longer be prompted to agree to terms during authentication, which may be required for legal compliance in many jurisdictions.

Also, note that this UI change doesn't seem to align with the PR title "modified docker compose" which suggests this might be an unintentional inclusion.

Consider one of these approaches:

  1. If Terms and Conditions are required: Revert this change to ensure users acknowledge terms during signup
  2. If Terms and Conditions are truly not needed: Remove both the component usage and the unused import on line 17
-{/* <TermsAndConditions isSignUp={authMode === EAuthModes.SIGN_UP ? true : false} /> */}
+<TermsAndConditions isSignUp={authMode === EAuthModes.SIGN_UP ? true : false} />
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{/* <TermsAndConditions isSignUp={authMode === EAuthModes.SIGN_UP ? true : false} /> */}
<TermsAndConditions isSignUp={authMode === EAuthModes.SIGN_UP ? true : false} />

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🔭 Outside diff range comments (1)
admin/core/components/instance/setup-form.tsx (1)

339-339: 💡 Verification agent

🧩 Analysis chain

Consider updating the documentation URL

The URL still points to "developers.plane.so" domain. If the rebranding includes domain changes, this should be updated to match the new brand.


🏁 Script executed:

#!/bin/bash
# Check if there are other references to plane.so domains in the codebase that might need updating
rg "plane\.so" --type-not git -g "!node_modules"

Length of output: 78


Revisit Documentation URL Domain Update

The URL in admin/core/components/instance/setup-form.tsx (line 339) still references developers.plane.so. However, the initial automated search command failed due to an unrecognized file type error. To verify whether there are additional references that need updating as part of the rebranding, please run the following script to re-check the codebase:

If this search reveals other occurrences of developers.plane.so, update them accordingly to match the new domain. Otherwise, confirm that the rebranding effort is complete by updating this URL if necessary.


🏁 Script executed:

#!/bin/bash
# Search for references to the old domain (developers.plane.so), while excluding node_modules
rg "developers\.plane\.so" -g '!node_modules'

Length of output: 1243


Action Required: Update Documentation URLs for Rebranding

The URL in admin/core/components/instance/setup-form.tsx (line 339) currently points to https://developers.plane.so/self-hosting/telemetry. Our search also revealed similar references in:

  • admin/app/general/form.tsx (telemetry link)
  • README.md (multiple self-hosting and documentation URLs)

If the rebranding initiative includes updating the domain, please update all relevant links (including those in the README) to match the new brand. Otherwise, confirm whether the current references are intended to remain.

🧹 Nitpick comments (2)
admin/core/components/instance/instance-failure-view.tsx (1)

23-23: Ensure alt text accurately describes the image content

The alt text has been changed from "Plane instance failure image" to "ReyFlow Logo" as part of the rebranding. However, based on the variable name instanceImage and the imported assets (InstanceFailureDarkImage/InstanceFailureImage), this image appears to represent an instance failure state rather than just a logo.

For better accessibility, consider using a more descriptive alt text that accurately reflects the image content, such as "ReyFlow instance failure image".

- <Image src={instanceImage} alt="ReyFlow Logo" />
+ <Image src={instanceImage} alt="ReyFlow instance failure image" />
web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx (1)

21-22: Inconsistency in comment styling

There's an inconsistency in the comment styling between this comment "// plane-web" (lowercase) and the updated comment "// ReyFlow-web" (mixed case) on line 23. For better maintainability, comment styles should be consistent throughout the codebase.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f25912b and d7d3db8.

📒 Files selected for processing (96)
  • admin/app/ai/layout.tsx (1 hunks)
  • admin/app/ai/page.tsx (1 hunks)
  • admin/app/authentication/github/form.tsx (2 hunks)
  • admin/app/authentication/github/page.tsx (1 hunks)
  • admin/app/authentication/gitlab/form.tsx (2 hunks)
  • admin/app/authentication/gitlab/page.tsx (1 hunks)
  • admin/app/authentication/google/form.tsx (2 hunks)
  • admin/app/authentication/google/page.tsx (1 hunks)
  • admin/app/authentication/layout.tsx (1 hunks)
  • admin/app/email/layout.tsx (1 hunks)
  • admin/app/email/page.tsx (1 hunks)
  • admin/app/general/form.tsx (1 hunks)
  • admin/app/general/layout.tsx (1 hunks)
  • admin/app/image/layout.tsx (1 hunks)
  • admin/app/page.tsx (1 hunks)
  • admin/app/workspace/layout.tsx (1 hunks)
  • admin/core/components/admin-sidebar/help-section.tsx (1 hunks)
  • admin/core/components/admin-sidebar/sidebar-menu.tsx (1 hunks)
  • admin/core/components/common/page-header.tsx (1 hunks)
  • admin/core/components/instance/instance-failure-view.tsx (1 hunks)
  • admin/core/components/instance/instance-not-ready.tsx (1 hunks)
  • admin/core/components/instance/setup-form.tsx (2 hunks)
  • admin/core/components/login/sign-in-form.tsx (1 hunks)
  • admin/core/components/new-user-popup.tsx (2 hunks)
  • admin/core/layouts/default-layout.tsx (1 hunks)
  • admin/core/lib/auth-helpers.tsx (2 hunks)
  • packages/ui/src/hooks/use-page-title.tsx (1 hunks)
  • space/app/error.tsx (1 hunks)
  • space/app/issues/[anchor]/layout.tsx (1 hunks)
  • space/app/layout.tsx (1 hunks)
  • space/app/views/[anchor]/layout.tsx (1 hunks)
  • space/core/components/account/auth-forms/auth-header.tsx (1 hunks)
  • space/core/components/account/user-logged-in.tsx (1 hunks)
  • space/core/components/common/powered-by.tsx (1 hunks)
  • space/core/components/instance/instance-failure-view.tsx (1 hunks)
  • space/core/components/views/auth.tsx (1 hunks)
  • space/core/lib/instance-provider.tsx (1 hunks)
  • web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/inbox/page.tsx (1 hunks)
  • web/app/accounts/forgot-password/layout.tsx (1 hunks)
  • web/app/accounts/forgot-password/page.tsx (1 hunks)
  • web/app/accounts/reset-password/layout.tsx (1 hunks)
  • web/app/accounts/reset-password/page.tsx (1 hunks)
  • web/app/accounts/set-password/layout.tsx (1 hunks)
  • web/app/accounts/set-password/page.tsx (1 hunks)
  • web/app/create-workspace/page.tsx (1 hunks)
  • web/app/error.tsx (1 hunks)
  • web/app/invitations/page.tsx (1 hunks)
  • web/app/layout.tsx (2 hunks)
  • web/app/page.tsx (1 hunks)
  • web/app/provider.tsx (1 hunks)
  • web/app/sign-up/layout.tsx (1 hunks)
  • web/app/sign-up/page.tsx (1 hunks)
  • web/app/workspace-invitations/page.tsx (2 hunks)
  • web/ce/components/global/product-updates-header.tsx (1 hunks)
  • web/ce/components/instance/maintenance-message.tsx (1 hunks)
  • web/ce/components/pages/editor/embed/issue-embed-upgrade-card.tsx (1 hunks)
  • web/ce/components/workspace/upgrade/one-plan-upgrade.tsx (1 hunks)
  • web/ce/components/workspace/upgrade/paid-plans-upgrade-modal.tsx (1 hunks)
  • web/ce/components/workspace/upgrade/pro-plan-upgrade.tsx (1 hunks)
  • web/core/components/command-palette/actions/help-actions.tsx (1 hunks)
  • web/core/components/common/activity/helper.tsx (1 hunks)
  • web/core/components/common/activity/user.tsx (1 hunks)
  • web/core/components/common/latest-feature-block.tsx (1 hunks)
  • web/core/components/dashboard/project-empty-state.tsx (1 hunks)
  • web/core/components/dropdowns/state.tsx (1 hunks)
  • web/core/components/gantt-chart/helpers/draggable.tsx (1 hunks)
  • web/core/components/gantt-chart/sidebar/modules/block.tsx (1 hunks)
  • web/core/components/global/product-updates/footer.tsx (1 hunks)
  • web/core/components/inbox/sidebar/inbox-list-item.tsx (1 hunks)
  • web/core/components/instance/not-ready-view.tsx (1 hunks)
  • web/core/components/integration/guide.tsx (1 hunks)
  • web/core/components/integration/single-integration-card.tsx (1 hunks)
  • web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx (1 hunks)
  • web/core/components/issues/issue-detail-widgets/relations/content.tsx (1 hunks)
  • web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx (1 hunks)
  • web/core/components/issues/issue-detail-widgets/relations/title.tsx (1 hunks)
  • web/core/components/issues/issue-detail/issue-activity/activity/actions/archived-at.tsx (1 hunks)
  • web/core/components/issues/issue-detail/issue-activity/activity/actions/relation.tsx (1 hunks)
  • web/core/components/issues/issue-detail/relation-select.tsx (2 hunks)
  • web/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx (1 hunks)
  • web/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx (1 hunks)
  • web/core/components/issues/issue-layouts/kanban/kanban-group.tsx (1 hunks)
  • web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx (1 hunks)
  • web/core/components/issues/issue-layouts/list/list-group.tsx (1 hunks)
  • web/core/components/issues/peek-overview/properties.tsx (1 hunks)
  • web/core/components/issues/relations/issue-list-item.tsx (1 hunks)
  • web/core/components/issues/relations/issue-list.tsx (1 hunks)
  • web/core/components/onboarding/header.tsx (1 hunks)
  • web/core/components/onboarding/invite-members.tsx (1 hunks)
  • web/core/components/onboarding/profile-setup.tsx (1 hunks)
  • web/core/components/onboarding/tour/root.tsx (2 hunks)
  • web/core/components/onboarding/tour/sidebar.tsx (1 hunks)
  • web/core/components/profile/activity/activity-list.tsx (1 hunks)
  • web/core/components/profile/activity/profile-activity-list.tsx (1 hunks)
  • web/core/components/project-states/state-item.tsx (1 hunks)
  • web/core/layouts/auth-layout/workspace-wrapper.tsx (2 hunks)
✅ Files skipped from review due to trivial changes (81)
  • admin/core/components/common/page-header.tsx
  • admin/app/authentication/gitlab/form.tsx
  • web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx
  • web/core/components/issues/relations/issue-list-item.tsx
  • web/ce/components/global/product-updates-header.tsx
  • web/app/create-workspace/page.tsx
  • web/app/accounts/reset-password/layout.tsx
  • admin/core/components/login/sign-in-form.tsx
  • web/ce/components/workspace/upgrade/paid-plans-upgrade-modal.tsx
  • web/core/components/common/latest-feature-block.tsx
  • web/core/components/gantt-chart/sidebar/modules/block.tsx
  • web/core/components/inbox/sidebar/inbox-list-item.tsx
  • web/ce/components/instance/maintenance-message.tsx
  • web/ce/components/workspace/upgrade/one-plan-upgrade.tsx
  • admin/app/authentication/github/page.tsx
  • admin/app/authentication/google/form.tsx
  • web/core/components/issues/relations/issue-list.tsx
  • web/core/components/issues/issue-detail-widgets/relations/title.tsx
  • admin/app/workspace/layout.tsx
  • space/core/components/account/user-logged-in.tsx
  • space/core/components/instance/instance-failure-view.tsx
  • space/core/lib/instance-provider.tsx
  • web/app/accounts/forgot-password/layout.tsx
  • admin/core/components/admin-sidebar/sidebar-menu.tsx
  • web/core/components/issues/issue-detail-widgets/relations/content.tsx
  • admin/app/ai/layout.tsx
  • web/app/accounts/reset-password/page.tsx
  • web/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx
  • admin/app/image/layout.tsx
  • web/app/accounts/set-password/layout.tsx
  • web/app/workspace-invitations/page.tsx
  • web/core/components/integration/single-integration-card.tsx
  • web/app/provider.tsx
  • web/core/components/onboarding/invite-members.tsx
  • admin/app/email/page.tsx
  • web/core/components/integration/guide.tsx
  • web/core/components/onboarding/profile-setup.tsx
  • web/core/components/onboarding/header.tsx
  • web/core/components/issues/issue-detail/relation-select.tsx
  • web/core/components/issues/issue-detail/issue-activity/activity/actions/archived-at.tsx
  • web/app/sign-up/layout.tsx
  • web/core/layouts/auth-layout/workspace-wrapper.tsx
  • admin/core/layouts/default-layout.tsx
  • space/core/components/account/auth-forms/auth-header.tsx
  • space/core/components/views/auth.tsx
  • admin/core/components/instance/instance-not-ready.tsx
  • space/app/views/[anchor]/layout.tsx
  • admin/app/general/form.tsx
  • admin/app/authentication/gitlab/page.tsx
  • web/app/page.tsx
  • web/core/components/onboarding/tour/sidebar.tsx
  • web/ce/components/pages/editor/embed/issue-embed-upgrade-card.tsx
  • web/core/components/dropdowns/state.tsx
  • web/ce/components/workspace/upgrade/pro-plan-upgrade.tsx
  • web/core/components/instance/not-ready-view.tsx
  • admin/app/authentication/github/form.tsx
  • web/app/accounts/set-password/page.tsx
  • web/app/invitations/page.tsx
  • admin/core/components/new-user-popup.tsx
  • web/core/components/global/product-updates/footer.tsx
  • web/core/components/issues/issue-layouts/list/list-group.tsx
  • web/app/sign-up/page.tsx
  • web/app/accounts/forgot-password/page.tsx
  • admin/app/email/layout.tsx
  • web/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx
  • web/core/components/gantt-chart/helpers/draggable.tsx
  • space/core/components/common/powered-by.tsx
  • web/core/components/issues/issue-layouts/kanban/kanban-group.tsx
  • admin/core/lib/auth-helpers.tsx
  • space/app/layout.tsx
  • space/app/error.tsx
  • web/app/error.tsx
  • admin/app/ai/page.tsx
  • web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx
  • admin/app/general/layout.tsx
  • admin/app/authentication/layout.tsx
  • web/core/components/command-palette/actions/help-actions.tsx
  • web/core/components/issues/issue-detail/issue-activity/activity/actions/relation.tsx
  • web/core/components/project-states/state-item.tsx
  • web/core/components/onboarding/tour/root.tsx
  • web/core/components/dashboard/project-empty-state.tsx
🚧 Files skipped from review as they are similar to previous changes (3)
  • packages/ui/src/hooks/use-page-title.tsx
  • admin/app/page.tsx
  • web/app/layout.tsx
🔇 Additional comments (13)
admin/app/authentication/google/page.tsx (1)

60-60: Rebranding from Plane to ReyFlow observed in page title.

The title has been changed from "Google Authentication - Plane Web" to "Google Authentication - ReyFlow Web", which appears to be part of a broader application rebranding effort. This is a straightforward UI text change that doesn't impact functionality.

This change seems inconsistent with the PR title "modified docker compose". Please verify if this rebranding change was intended to be part of this PR or if it belongs to a different set of changes.

space/app/issues/[anchor]/layout.tsx (1)

14-15: Rebranding from "Plane" to "ReyFlow" looks good.

The change of product name in the default title and description constants is consistent with the rebranding effort mentioned in the PR summary. The replacements have been made correctly while preserving the overall metadata structure and functionality.

web/core/components/profile/activity/activity-list.tsx (1)

145-145: Branding update from "Plane" to "ReyFlow".

This change is part of a broader rebranding effort across the codebase, replacing "Plane" with "ReyFlow" in the user interface. The modification only affects the displayed text and maintains the same functionality.

web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/inbox/page.tsx (1)

58-60: Branding update from "Plane" to "ReyFlow"

The changed line updates the fallback workspace name in the page title translation from "Plane" to "ReyFlow", which appears to be part of a broader rebranding effort across the application.

This change seems unrelated to the PR title "modified docker compose" - please verify that this branding change is intended to be included in this PR or if it should be submitted as a separate PR focused on rebranding.

web/core/components/issues/peek-overview/properties.tsx (1)

139-139: Rebranding from "Plane" to "ReyFlow"

This change updates the display text for issues created with a "-intake" identifier from "Plane" to "ReyFlow", which appears to be part of a broader rebranding effort.

web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx (1)

23-24: Inconsistent rebranding between comment and import path

The comment has been updated to "// ReyFlow-web" but the import path on the next line still uses "@/plane-web/components/workflow". If this is part of a rebranding effort, both should be updated for consistency.

Additionally, this change seems unrelated to the PR title "modified docker compose". Please clarify how this frontend comment change relates to Docker Compose modifications mentioned in the PR.

web/core/components/common/activity/helper.tsx (1)

94-94: Rebranding update from "Plane" to "ReyFlow"

Updated the customUserName to "ReyFlow" when a project is archived, which aligns with the application rebranding effort.

web/core/components/profile/activity/profile-activity-list.tsx (1)

164-164: Rebranding update from "Plane" to "ReyFlow"

Updated the display name from "Plane" to "ReyFlow" for archived activities in the profile activity list.

web/core/components/common/activity/user.tsx (1)

26-26: Rebranding update from "Plane" to "ReyFlow"

Updated the fallback display name from "Plane" to "ReyFlow" when no custom username is provided.

admin/core/components/admin-sidebar/help-section.tsx (3)

56-56: Branding update looks good.

The changes correctly update the references from "Plane" to "ReyFlow" in both the tooltip content and visible text, which aligns with the broader rebranding effort.

Also applies to: 62-62


21-21: Consider updating remaining "Plane" references.

While the UI text has been updated, there are still references to "Plane" in URLs (docs.plane.so, github.com/makeplane/plane). This might be intentional for now, but should be tracked for future updates if the rebranding extends to these resources as well.

Also applies to: 31-31


9-11:

❓ Verification inconclusive

Package imports still reference "@plane" namespace.

The imports from "@plane" packages haven't been updated. This could be intentional if package renaming is planned for a later phase of the rebranding effort.


🏁 Script executed:

#!/bin/bash
# Check if there are any plans to update package names
grep -r "ReyFlow" --include="*.md" --include="*.json" .

Length of output: 3587


Review: Confirm Package Import Namespace Amid Rebranding Effort

The file at admin/core/components/admin-sidebar/help-section.tsx (lines 9–11) still imports packages using the @plane namespace:

import { WEB_BASE_URL } from "@plane/constants";
import { DiscordIcon, GithubIcon, Tooltip } from "@plane/ui";
import { cn } from "@plane/utils";

Based on recent findings, various user-facing assets (e.g., ./web/manifest.json and translation files) reference the new "ReyFlow" branding. Please verify whether retaining the @plane namespace in code is an intentional decision as part of a phased rebranding rollout. If the plan is to eventually update these package imports, a clarifying note or an issue reference would be helpful. Otherwise, consider updating the imports to ensure consistency with the new brand.

admin/core/components/instance/setup-form.tsx (1)

138-138: LGTM: Branding updated consistently to "ReyFlow"

The rebranding from "Plane" to "ReyFlow" has been properly implemented in the user interface text.

Also applies to: 141-141, 335-335

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
docker-compose.yml (2)

137-137: Trailing whitespace detected.
A trailing space exists at the end of this line. Removing it will help keep the file clean and avoid YAML lint warnings.

-      - "5432:5432" 
+      - "5432:5432"
🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 137-137: trailing spaces

(trailing-spaces)


196-205: Volumes section review for consistency.
The volumes section now declares entries for plane-db, plane-redis, plane-mq, plane-minio, and ssl_certs. Note that for the first four services, explicit host paths are used in the service definitions rather than referencing these declared volumes. If bind mounts are intended, consider removing these redundant volume declarations to avoid confusion.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d7d3db8 and 2e23c3b.

📒 Files selected for processing (1)
  • docker-compose.yml (9 hunks)
🧰 Additional context used
🪛 YAMLlint (1.35.1)
docker-compose.yml

[error] 137-137: trailing spaces

(trailing-spaces)

🔇 Additional comments (13)
docker-compose.yml (13)

13-14: Production environment set for web service.
Including NODE_ENV=production ensures that the web service runs in production mode.


28-29: Production environment variable for admin service.
Setting NODE_ENV=production for the admin service aligns the environment with production best practices.


43-44: Production environment variable for space service.
Enforcing NODE_ENV=production here supports production readiness.


60-61: Updated API service dependencies.
The addition of both plane-mq and plane-minio as dependencies ensures these services start before the API service. Please verify that these services are correctly configured and available during startup.


102-102: Migrator restart policy updated.
Changing the restart policy to the string "no" is acceptable if this is the desired behavior for migrator jobs. Confirm that this aligns with your overall container restart strategy.


119-120: Production environment set for live service.
Applying NODE_ENV=production for the live service is a good practice for a production-ready configuration.


128-128: Host directory specified for plane-db volume.
Using the explicit host path (/opt/docker-volumes/postgres) can enhance clarity over data storage. Ensure that the directory exists and has the correct permissions on the host system.


143-143: Redis command updated for password requirement.
The updated command enforces a password via --requirepass ${REDIS_PASSWORD}. Ensure that the REDIS_PASSWORD environment variable is securely set.


145-147: Plane-redis volume and environment configuration.
The specified volume path and environment variable for the Redis container promote secure and explicit data handling.


160-160: Plane-MQ volume updated.
Specifying the explicit host path (/opt/docker-volumes/rabbitmq) clarifies where RabbitMQ data is stored.


168-168: Plane-Minio volume updated.
Using an explicit host directory for Minio enhances transparency in data management.


181-181: Proxy service SSL port mapping added.
The addition of ${NGINX_SSL_PORT}:443 is essential for proper HTTPS configuration on the proxy service.


190-193: Updated proxy service volume mounts for Nginx.
New mounts for Nginx configuration and SSL certificates ensure that custom configurations and certificates are correctly applied. Please verify that the host paths and the named volume ssl_certs are properly set up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants