Improve Codespaces port forwarding (#26400)
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							286a21afdc
						
					
				
				
					commit
					075cc8e8a6
				
			@@ -4,10 +4,6 @@ FROM mcr.microsoft.com/devcontainers/ruby:1-3.2-bullseye
 | 
				
			|||||||
# Install Rails
 | 
					# Install Rails
 | 
				
			||||||
# RUN gem install rails webdrivers
 | 
					# RUN gem install rails webdrivers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Default value to allow debug server to serve content over GitHub Codespace's port forwarding service
 | 
					 | 
				
			||||||
# The value is a comma-separated list of allowed domains
 | 
					 | 
				
			||||||
ENV RAILS_DEVELOPMENT_HOSTS=".githubpreview.dev,.preview.app.github.dev,.app.github.dev"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ARG NODE_VERSION="16"
 | 
					ARG NODE_VERSION="16"
 | 
				
			||||||
RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"
 | 
					RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										49
									
								
								.devcontainer/codespaces/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								.devcontainer/codespaces/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "Mastodon on GitHub Codespaces",
 | 
				
			||||||
 | 
					  "dockerComposeFile": "../docker-compose.yml",
 | 
				
			||||||
 | 
					  "service": "app",
 | 
				
			||||||
 | 
					  "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "features": {
 | 
				
			||||||
 | 
					    "ghcr.io/devcontainers/features/sshd:1": {}
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "runServices": ["app", "db", "redis"],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "forwardPorts": [3000, 4000],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "portsAttributes": {
 | 
				
			||||||
 | 
					    "3000": {
 | 
				
			||||||
 | 
					      "label": "web",
 | 
				
			||||||
 | 
					      "onAutoForward": "notify"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "4000": {
 | 
				
			||||||
 | 
					      "label": "stream",
 | 
				
			||||||
 | 
					      "onAutoForward": "silent"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "otherPortsAttributes": {
 | 
				
			||||||
 | 
					    "onAutoForward": "silent"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "remoteEnv": {
 | 
				
			||||||
 | 
					    "LOCAL_DOMAIN": "${localEnv:CODESPACE_NAME}-3000.app.github.dev",
 | 
				
			||||||
 | 
					    "LOCAL_HTTPS": "true",
 | 
				
			||||||
 | 
					    "STREAMING_API_BASE_URL": "https://${localEnv:CODESPACE_NAME}-4000.app.github.dev",
 | 
				
			||||||
 | 
					    "DISABLE_FORGERY_REQUEST_PROTECTION": "true",
 | 
				
			||||||
 | 
					    "ES_ENABLED": "",
 | 
				
			||||||
 | 
					    "LIBRE_TRANSLATE_ENDPOINT": ""
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
 | 
				
			||||||
 | 
					  "postCreateCommand": ".devcontainer/post-create.sh",
 | 
				
			||||||
 | 
					  "waitFor": "postCreateCommand",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "customizations": {
 | 
				
			||||||
 | 
					    "vscode": {
 | 
				
			||||||
 | 
					      "settings": {},
 | 
				
			||||||
 | 
					      "extensions": ["EditorConfig.EditorConfig", "webben.browserslist"]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "Mastodon",
 | 
					  "name": "Mastodon on local machine",
 | 
				
			||||||
  "dockerComposeFile": "docker-compose.yml",
 | 
					  "dockerComposeFile": "docker-compose.yml",
 | 
				
			||||||
  "service": "app",
 | 
					  "service": "app",
 | 
				
			||||||
  "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
 | 
					  "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
 | 
				
			||||||
@@ -8,13 +8,23 @@
 | 
				
			|||||||
    "ghcr.io/devcontainers/features/sshd:1": {}
 | 
					    "ghcr.io/devcontainers/features/sshd:1": {}
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  "runServices": ["app", "db", "redis"],
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  "forwardPorts": [3000, 4000],
 | 
					  "forwardPorts": [3000, 4000],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  "containerEnv": {
 | 
					  "portsAttributes": {
 | 
				
			||||||
    "ES_ENABLED": "",
 | 
					    "3000": {
 | 
				
			||||||
    "LIBRE_TRANSLATE_ENDPOINT": ""
 | 
					      "label": "web",
 | 
				
			||||||
 | 
					      "onAutoForward": "notify",
 | 
				
			||||||
 | 
					      "requireLocalPort": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "4000": {
 | 
				
			||||||
 | 
					      "label": "stream",
 | 
				
			||||||
 | 
					      "onAutoForward": "silent",
 | 
				
			||||||
 | 
					      "requireLocalPort": true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "otherPortsAttributes": {
 | 
				
			||||||
 | 
					    "onAutoForward": "silent"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  "onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
 | 
					  "onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										34
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								README.md
									
									
									
									
									
								
							@@ -59,13 +59,13 @@ Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Stre
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Deployment
 | 
					## Deployment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Tech stack:
 | 
					### Tech stack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- **Ruby on Rails** powers the REST API and other web pages
 | 
					- **Ruby on Rails** powers the REST API and other web pages
 | 
				
			||||||
- **React.js** and Redux are used for the dynamic parts of the interface
 | 
					- **React.js** and Redux are used for the dynamic parts of the interface
 | 
				
			||||||
- **Node.js** powers the streaming API
 | 
					- **Node.js** powers the streaming API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Requirements:
 | 
					### Requirements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- **PostgreSQL** 9.5+
 | 
					- **PostgreSQL** 9.5+
 | 
				
			||||||
- **Redis** 4+
 | 
					- **Redis** 4+
 | 
				
			||||||
@@ -74,6 +74,10 @@ Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Stre
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
The repository includes deployment configurations for **Docker and docker-compose** as well as specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). The [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation.
 | 
					The repository includes deployment configurations for **Docker and docker-compose** as well as specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). The [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Development
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Vagrant
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A **Vagrant** configuration is included for development purposes. To use it, complete the following steps:
 | 
					A **Vagrant** configuration is included for development purposes. To use it, complete the following steps:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Install Vagrant and Virtualbox
 | 
					- Install Vagrant and Virtualbox
 | 
				
			||||||
@@ -82,9 +86,11 @@ A **Vagrant** configuration is included for development purposes. To use it, com
 | 
				
			|||||||
- Run `vagrant ssh -c "cd /vagrant && foreman start"`
 | 
					- Run `vagrant ssh -c "cd /vagrant && foreman start"`
 | 
				
			||||||
- Open `http://mastodon.local` in your browser
 | 
					- Open `http://mastodon.local` in your browser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### MacOS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To set up **MacOS** for native development, complete the following steps:
 | 
					To set up **MacOS** for native development, complete the following steps:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Install the latest stable Ruby version (use a ruby version manager for easy installation and management of ruby versions)
 | 
					- Install the latest stable Ruby version (use a Ruby version manager for easy installation and management of Ruby versions)
 | 
				
			||||||
- Run `brew install postgresql@14`
 | 
					- Run `brew install postgresql@14`
 | 
				
			||||||
- Run `brew install redis`
 | 
					- Run `brew install redis`
 | 
				
			||||||
- Run `brew install imagemagick`
 | 
					- Run `brew install imagemagick`
 | 
				
			||||||
@@ -94,15 +100,27 @@ To set up **MacOS** for native development, complete the following steps:
 | 
				
			|||||||
- Run `bundle exec rails db:setup` (optionally prepend `RAILS_ENV=development` to target the dev environment)
 | 
					- Run `bundle exec rails db:setup` (optionally prepend `RAILS_ENV=development` to target the dev environment)
 | 
				
			||||||
- Finally, run `overmind start -f Procfile.dev`
 | 
					- Finally, run `overmind start -f Procfile.dev`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Getting Started with GitHub Codespaces
 | 
					### Docker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To get started, create a codespace for this repository by clicking this 👇
 | 
					For development with **Docker**, complete the following steps:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=52281283)
 | 
					- Install Docker Desktop
 | 
				
			||||||
 | 
					- Run `docker compose -f .devcontainer/docker-compose.yml up -d`
 | 
				
			||||||
 | 
					- Run `docker compose -f .devcontainer/docker-compose.yml exec app .devcontainer/post-create.sh`
 | 
				
			||||||
 | 
					- Finally, run `docker compose -f .devcontainer/docker-compose.yml exec app foreman start -f Procfile.dev`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A codespace will open in a web-based version of Visual Studio Code. The [dev container](.devcontainer/devcontainer.json) is fully configured with the software needed for this project.
 | 
					If you are using an IDE with [support for the Development Container specification](https://containers.dev/supporting), it will run the above `docker compose` commands automatically. For **Visual Studio Code** this requires the [Dev Container extension](https://containers.dev/supporting#dev-containers).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Note**: Dev containers are an open spec that is supported by [GitHub Codespaces](https://github.com/codespaces) and [other tools](https://containers.dev/supporting).
 | 
					### GitHub Codespaces
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To get you coding in just a few minutes, GitHub Codespaces provides a web-based version of Visual Studio Code and a cloud-hosted development environment fully configured with the software needed for this project..
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Click this button to create a new codespace:<br>
 | 
				
			||||||
 | 
					  [](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=52281283&devcontainer_path=.devcontainer%2Fcodespaces%2Fdevcontainer.json)
 | 
				
			||||||
 | 
					- Wait for the environment to build. This will take a few minutes.
 | 
				
			||||||
 | 
					- When the editor is ready, run `foreman start -f Procfile.dev` in the terminal.
 | 
				
			||||||
 | 
					- After a few seconds, a popup will appear with a button labeled _Open in Browser_. This will open Mastodon.
 | 
				
			||||||
 | 
					- On the _Ports_ tab, right click on the “stream” row and select _Port visibility_ → _Public_.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Contributing
 | 
					## Contributing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,8 @@ Rails.application.configure do
 | 
				
			|||||||
    config.cache_store = :null_store
 | 
					    config.cache_store = :null_store
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  config.action_controller.forgery_protection_origin_check = ENV['DISABLE_FORGERY_REQUEST_PROTECTION'].nil?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ActiveSupport::Logger.new(STDOUT).tap do |logger|
 | 
					  ActiveSupport::Logger.new(STDOUT).tap do |logger|
 | 
				
			||||||
    logger.formatter = config.log_formatter
 | 
					    logger.formatter = config.log_formatter
 | 
				
			||||||
    config.logger = ActiveSupport::TaggedLogging.new(logger)
 | 
					    config.logger = ActiveSupport::TaggedLogging.new(logger)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user