{"id":13769411,"url":"https://github.com/weathermen/soundstorm","last_synced_at":"2025-05-11T02:32:28.789Z","repository":{"id":48584270,"uuid":"161676429","full_name":"weathermen/soundstorm","owner":"weathermen","description":"The Federated Social Audio Platform","archived":true,"fork":false,"pushed_at":"2021-07-19T15:08:26.000Z","size":11914,"stargazers_count":31,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-04-13T21:44:34.439Z","etag":null,"topics":["activity-stream","activitypub","audio","decentralized","distributed","docker","federated","gnu-social","mastodon","music","postgresql","redis","ruby-on-rails","social-network","webfinger"],"latest_commit_sha":null,"homepage":"https://docs.soundstorm.social","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weathermen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null}},"created_at":"2018-12-13T18:01:56.000Z","updated_at":"2024-03-28T02:04:05.000Z","dependencies_parsed_at":"2022-09-04T07:30:58.869Z","dependency_job_id":null,"html_url":"https://github.com/weathermen/soundstorm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weathermen%2Fsoundstorm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weathermen%2Fsoundstorm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weathermen%2Fsoundstorm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weathermen%2Fsoundstorm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weathermen","download_url":"https://codeload.github.com/weathermen/soundstorm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224703867,"owners_count":17355710,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["activity-stream","activitypub","audio","decentralized","distributed","docker","federated","gnu-social","mastodon","music","postgresql","redis","ruby-on-rails","social-network","webfinger"],"created_at":"2024-08-03T17:00:24.142Z","updated_at":"2024-11-17T05:30:52.393Z","avatar_url":"https://github.com/weathermen.png","language":"Ruby","funding_links":[],"categories":["Applications","Ruby"],"sub_categories":[],"readme":"# Soundstorm\n\n[![Tests Status](https://github.com/weathermen/soundstorm/workflows/Tests/badge.svg)][ci]\n[![Build Status](https://github.com/weathermen/soundstorm/workflows/Build/badge.svg)][ci]\n[![Release Status](https://github.com/weathermen/soundstorm/workflows/Release/badge.svg)][ci]\n[![Test Coverage](https://api.codeclimate.com/v1/badges/bc1fd5c8bb8b54b1da49/test_coverage)](https://codeclimate.com/github/weathermen/soundstorm/test_coverage)\n[![Maintainability](https://api.codeclimate.com/v1/badges/bc1fd5c8bb8b54b1da49/maintainability)](https://codeclimate.com/github/weathermen/soundstorm/maintainability)\n\nThe Federated Social Music Platform.\n\n**Soundstorm** is an audio-oriented federated social network that speaks\n[ActivityPub][]. Users can upload their own music, comment on others'\ntracks, and like/follow/mention just as in a regular social network.\nSince it speaks the same language as federated platforms like\n[Mastodon][], Soundstorm can send new track upload posts to users'\nfollowers on the fediverse, allowing them to gain a greater reach than a\nconventional social audio service.\n\n## Installation\n\nSoundstorm is distributed as a [Docker image][] for deployment ease. The\nreference instance, https://soundstorm.social, uses Amazon ECS for\ndeployment, but the image is self-contained and can be run on any\ninfrastructure. This image runs in `RAILS_ENV=production` mode by\ndefault, and comes pre-loaded with compiled assets and everything you'll\nneed to run a Soundstorm instance in production.\n\nFirst, pull down the latest production image:\n\n```bash\ndocker pull weathermen/soundstorm\n```\n\nCreate a `.env` file in the local dir for your configuration:\n\n```bash\nSOUNDSTORM_HOST=your.soundstorm.domain\nDATABASE_URL=postgres://url@to.your.database.server:5432\nREDIS_URL=rediss://url@to.your.redis.server:6379\nCDN_URL=https://cdn.soundstorm.domain\nSMTP_USERNAME=your-smtp-server-user\nSMTP_PASSWORD=your-smtp-server-password\nSMTP_HOST=smtp.server.if.not.using.sendgrid.net\nRAILS_SERVE_STATIC_FILES=true\n```\n\nCreate the database, set up its schema, and load in seed data:\n\n```bash\ndocker run --rm -it \\\n           --env-file .env \\\n           --env SOUNDSTORM_ADMIN_USERNAME=your-username \\\n           --env SOUNDSTORM_ADMIN_PASSWORD=your-password \\\n           --env SOUNDSTORM_ADMIN_EMAIL=valid@email.address \\\n           weathermen/soundstorm \\\n           rails db:setup\n```\n\nYou can now start the app server using the default container command.\nMake sure you have a Docker Network created so the container can talk to\nother neighboring containers:\n\n```bash\ndocker network create soundstorm\ndocker create --env-file .env --network soundstorm weathermen/soundstorm\n```\n\nYou'll still need to proxy requests from an HTTP server to the app\nserver in order to process and terminate SSL. The soundstorm image does\nnot come with SSL certificates built in, you'll need to either obtain\none yourself or use the [Caddy][] server to obtain them for you via\nLetsEncrypt.\n\nHere's an example Caddyfile you can use:\n\n```caddy\nyour.soundstorm.host {\n  log stdout\n  errors stderr\n  tls {\n    dns route53\n  }\n  root /srv/public\n\n\n  proxy / http://web:3000 {\n    fail_timeout 300s\n    transparent\n    websocket\n    header_upstream X-Forwarded-Ssl on\n  }\n}\n```\n\nStart the Caddy server like this:\n\n```bash\ndocker pull abiosoft/caddy\ndocker create \\\n  --volume $(pwd)/Caddyfile:/etc/Caddyfile \\\n  --volume $HOME/.caddy:/root/.caddy \\\n  --publish 80:80 \\\n  --publish 443:443 \\\n  --network soundstorm\n  abisoft/caddy\n```\n\n## Development\n\nThe above goes into installing Soundstorm for real-world use, but you\nmay also want to contribute to the project in some way. Developing on\nSoundstorm also requires the use of Docker.\n\nFirst, make sure your `$COMPOSE_FILE` is set, so that development-level\nconfiguration is included whenever `docker-compose` is in use:\n\n```bash\nexport COMPOSE_FILE=\"docker-compose.yml:docker-compose.development.yml\"\n```\n\nNext, set up the database:\n\n```bash\ndocker-compose run --rm web rails db:setup\n```\n\nYou can now start all services:\n\n```bash\ndocker-compose up\n```\n\nOnce the web app loads, browse to \u003chttp://localhost:3000\u003e and log in with\nusername **admin** and password **Password1!**. This is configurable by\nsetting `$SOUNDSTORM_ADMIN_USERNAME` and `$SOUNDSTORM_ADMIN_PASSWORD` as\nenvironment variables when running `db:setup`.\n\nFor more information on making contributions to this project, read the\n[contributing guide][].\n\n## Deployment\n\nSoundstorm can be easily deployed to your **Docker Machine** with the\nprovided production configuration:\n\n```bash\nsource .env # see \"Installation\" above\ndocker-machine create soundstorm\neval \"$(docker-machine env soundstorm)\"\ndocker-compose -f docker-compose.yml -f docker-compose.production.yml up\n```\n\nHowever, https://soundstorm.social, our reference implementation, is\nhosted on [Heroku][]. The `make deploy` task performs the commands\nneeded to deploy the local production images you've already built to the\nHeroku platform. It uses the `docker` CLI to push images to Heroku's container\nregistry, and the `heroku` CLI to start those new containers in the\nproduction environment.\n\n[ActivityPub]: https://www.w3.org/TR/activitypub/\n[Mastodon]: https://joinmastodon.org\n[Docker]: https://www.docker.com/\n[Docker image]: https://cloud.docker.com/u/weathermen/repository/docker/weathermen/soundstorm\n[Caddy]: https://caddyserver.com\n[puma-dev]: https://github.com/puma/puma-dev\n[ci]: https://github.com/weathermen/soundstorm/actions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweathermen%2Fsoundstorm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweathermen%2Fsoundstorm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweathermen%2Fsoundstorm/lists"}