--- /dev/null
+# [Choice] Ruby version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.1, 3.0, 2, 2.7, 2.6, 3-bullseye, 3.1-bullseye, 3.0-bullseye, 2-bullseye, 2.7-bullseye, 2.6-bullseye, 3-buster, 3.1-buster, 3.0-buster, 2-buster, 2.7-buster, 2.6-buster
+ARG VARIANT=3.1-bullseye
+FROM mcr.microsoft.com/vscode/devcontainers/ruby:${VARIANT}
+
+# Install Rails
+# 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"
+
+# [Choice] Node.js version: lts/*, 16, 14, 12, 10
+ARG NODE_VERSION="lts/*"
+RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"
+
+# [Optional] Uncomment this section to install additional OS packages.
+RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
+ && apt-get -y install --no-install-recommends libicu-dev libidn11-dev ffmpeg imagemagick libpam-dev
+
+# [Optional] Uncomment this line to install additional gems.
+RUN gem install foreman
+
+# [Optional] Uncomment this line to install global node packages.
+RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g yarn" 2>&1
--- /dev/null
+{
+ "name": "Mastodon",
+ "dockerComposeFile": "docker-compose.yml",
+ "service": "app",
+ "workspaceFolder": "/workspaces/mastodon",
+
+ // Set *default* container specific settings.json values on container create.
+ "settings": {},
+
+ // Add the IDs of extensions you want installed when the container is created.
+ "extensions": [
+ "EditorConfig.EditorConfig",
+ "dbaeumer.vscode-eslint",
+ "rebornix.Ruby"
+ ],
+
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
+ // This can be used to network with other containers or the host.
+ "forwardPorts": [3000, 4000],
+
+ // Use 'postCreateCommand' to run commands after the container is created.
+ "postCreateCommand": "bundle install --path vendor/bundle && yarn install && ./bin/rails db:setup",
+
+ // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
+ "remoteUser": "vscode"
+}
--- /dev/null
+version: '3'
+
+services:
+ app:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ args:
+ # Update 'VARIANT' to pick a version of Ruby: 3, 3.1, 3.0, 2, 2.7, 2.6
+ # Append -bullseye or -buster to pin to an OS version.
+ # Use -bullseye variants on local arm64/Apple Silicon.
+ VARIANT: "3.0-bullseye"
+ # Optional Node.js version to install
+ NODE_VERSION: "14"
+ volumes:
+ - ..:/workspaces/mastodon:cached
+ environment:
+ RAILS_ENV: development
+ NODE_ENV: development
+
+ REDIS_HOST: redis
+ REDIS_PORT: '6379'
+ DB_HOST: db
+ DB_USER: postgres
+ DB_PASS: postgres
+ DB_PORT: '5432'
+ ES_ENABLED: 'true'
+ ES_HOST: es
+ ES_PORT: '9200'
+ # Overrides default command so things don't shut down after the process ends.
+ command: sleep infinity
+ networks:
+ - external_network
+ - internal_network
+ user: vscode
+
+
+ db:
+ image: postgres:14-alpine
+ restart: unless-stopped
+ volumes:
+ - postgres-data:/var/lib/postgresql/data
+ environment:
+ POSTGRES_USER: postgres
+ POSTGRES_DB: postgres
+ POSTGRES_PASSWORD: postgres
+ POSTGRES_HOST_AUTH_METHOD: trust
+ networks:
+ - internal_network
+
+ redis:
+ image: redis:6-alpine
+ restart: unless-stopped
+ volumes:
+ - redis-data:/data
+ networks:
+ - internal_network
+
+ es:
+ image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
+ restart: unless-stopped
+ environment:
+ ES_JAVA_OPTS: -Xms512m -Xmx512m
+ cluster.name: es-mastodon
+ discovery.type: single-node
+ bootstrap.memory_lock: 'true'
+ volumes:
+ - es-data:/usr/share/elasticsearch/data
+ networks:
+ - internal_network
+ ulimits:
+ memlock:
+ soft: -1
+ hard: -1
+
+volumes:
+ postgres-data:
+ redis-data:
+ es-data:
+
+networks:
+ external_network:
+ internal_network:
+ internal: true