Compare commits
291 Commits
master
...
nrdli-v1.3
Author | SHA1 | Date |
---|---|---|
Kegan Myers | 7e398fa712 | |
Kegan Myers | 169806c495 | |
Kegan Myers | d9afddd3ef | |
Eugen Rochko | 7406404fa3 | |
Eduardo Elias | 010e4f2879 | |
unarist | ebbbcfef1c | |
yhirano | 3d776de2cb | |
Yamagishi Kazutoshi | 831ff60698 | |
Yamagishi Kazutoshi | c25426ca47 | |
jeroenpraat | 09b93aaf85 | |
Eugen Rochko | d4fedf84e0 | |
Eugen Rochko | 2af4f3c4e2 | |
jeroenpraat | b8e7eee837 | |
Eugen Rochko | b48c9013aa | |
Matt Jankowski | b48f2cbc8b | |
Ashley | 1736badf28 | |
Eugen Rochko | 88725d6ce8 | |
Yamagishi Kazutoshi | be0a01145b | |
Tomohiro Suwa | 1f805a6377 | |
Evan Minto | e595ccb294 | |
Lindsey Bieda | 43a29a9d0f | |
Kaylee | 0dd71af5fa | |
Matt Jankowski | 0618f09939 | |
Koala Yeung | a23eaf720e | |
Koala Yeung | 9d3fc1281d | |
Matt Jankowski | 8857cabca4 | |
Matt Jankowski | affd75936e | |
Matt Jankowski | 3e78b7cc3a | |
Matthieu Paret | 647a148d4d | |
yhirano | bb777c24ff | |
Benedikt Geißler | 0576daf5f9 | |
Quent-in | c442cade78 | |
Yamagishi Kazutoshi | 6004b143a8 | |
Lindsey Bieda | 25cbb8454c | |
Tomohiro Suwa | 416c9675fc | |
Yamagishi Kazutoshi | 6a1e287053 | |
Koala Yeung | 5bda32e460 | |
anon | 6137268e79 | |
Wonderfall | 234e931db2 | |
Eugen Rochko | fdcb55a0a6 | |
Eugen Rochko | d97a0525aa | |
Francis Chong | 193dddb433 | |
Keiji, Yoshimi | 8fe36654ef | |
Yamagishi Kazutoshi | 8ee1af9530 | |
Michael Deeb | e4c294432f | |
JP DeVries | 3ebaeccec9 | |
Guillaume Lo Re | 7177e37b99 | |
Amelia | fbc5099402 | |
Quent-in | 45b379abac | |
Mingye Wang | 6ae975996e | |
Mingye Wang | 5d26c70a9c | |
esetomo | 322cbf83c8 | |
Mingye Wang | fc99d11703 | |
Ash Furrow | 48652cb41e | |
Ash Furrow | d4f7f11c3c | |
Stephen Burgess | 1ce951d0be | |
Hiroe Jun | 52c119052a | |
alpaca-tc | 9317ec8eb1 | |
STJrInuyasha | 1b9447853b | |
Evan Minto | 122d59ac41 | |
Eugen Rochko | 8b5179d006 | |
Yamagishi Kazutoshi | 3ea5b948a4 | |
Matt Jankowski | 164bad171f | |
Ash Furrow | acc691851d | |
178inaba | d2159deaf2 | |
Eugen | 17c591ffba | |
Masoud Abkenar | bb04a9be52 | |
Eugen | 338df98ddf | |
Eugen | da022e1e4f | |
Stephen Burgess | f098f55cab | |
Shin Adachi | bc955eaf61 | |
Stephen Burgess | 2d99c962df | |
Eugen | e59f5c8e13 | |
Yamagishi Kazutoshi | b073b092c9 | |
Matt Jankowski | 092fdc89fa | |
alpaca-tc | d000a0b58a | |
Akihiko Odaki | cf845fed38 | |
Yamagishi Kazutoshi | 72c984e105 | |
Eduardo Elias | 3d3707a077 | |
Matt Jankowski | a0dd90a397 | |
Nolan Lawson | 1e2a5dded7 | |
Yamagishi Kazutoshi | 549ce78cf5 | |
Effy Elden | 1801a36414 | |
Eugen | 501514960a | |
Ash Furrow | ef5937da1f | |
ymmtmdk | 072c6f1527 | |
Yamagishi Kazutoshi | 55e32fe579 | |
Stephen Burgess | 7ee8e50b9c | |
Stephen Burgess | 995f0ad51c | |
Matt Jankowski | 948dd26931 | |
Matt Jankowski | 55e1e12b7d | |
Yamagishi Kazutoshi | 6e27e08cb4 | |
Yamagishi Kazutoshi | d670f72830 | |
Matt Jankowski | 57cd6546c3 | |
178inaba | 1244630ab4 | |
Effy Elden | a9a4710fe1 | |
Effy Elden | cc83ee60fb | |
ThibG | 89dc29affb | |
Ashley | 85e09518b9 | |
Stephen Burgess | 663f090c45 | |
Joël Quenneville | 1cf9e14a41 | |
Joël Quenneville | 0c2fe22bc1 | |
Koala Yeung | 6f0b3b069f | |
Ashley | 9cd20a7062 | |
Yamagishi Kazutoshi | 219fb317ee | |
Evan Minto | 66fd8e7821 | |
Yamagishi Kazutoshi | 83e3538181 | |
Ash Furrow | 723f25a999 | |
Eugen | 59b1de0bcf | |
Akihiko Odaki | df46864b39 | |
Stephen Burgess | cca41ea544 | |
Matt Jankowski | 532bec6e56 | |
Matt Jankowski | ee82d8a876 | |
mecab | 1646ca75f0 | |
jeroenpraat | f876665264 | |
ばん | 5817bae2da | |
Stephen Burgess | 4cfc155560 | |
Wesley Ellis | a1174a6d7e | |
Akihiko Odaki | 5357329454 | |
Ashley | 7fea36d155 | |
Keiji, Yoshimi | 2bf7e81ed5 | |
Quent-in | ca8ae21b52 | |
masarakki | d0ec4fb828 | |
unarist | 4428cf6f07 | |
ThibG | fe43991d02 | |
codl | 8565ba68f7 | |
Matt Jankowski | 629d35e6f5 | |
Matt Jankowski | 67dea31b0f | |
Ashley | 6af21daac9 | |
Eugen | 9d3be5579a | |
Ashley | 05ac28f3e4 | |
Akihiko Odaki | 0f852c6f74 | |
Joël Quenneville | 974ac467de | |
Naouak | af7d02da5d | |
Rachel H | 5abd543766 | |
Yamagishi Kazutoshi | 1948f9e767 | |
Eduardo Elias | 27ea2a88c1 | |
Akihiko Odaki | 16cd648181 | |
Yamagishi Kazutoshi | 53b21ac1cd | |
Eduardo Elias | e4550811b2 | |
Eduardo Elias | 704846a258 | |
Koala Yeung | 935aecdc32 | |
Koala Yeung | 1714f08d75 | |
Matt Jankowski | 452dc6b5fe | |
Mingye Wang | 5c9aa2b732 | |
Ash Furrow | 78af88e1f4 | |
Sebastian Morr | 74c474a652 | |
Takayoshi Nishida | 5e33ad29d4 | |
Ram Lmn | 27a99b19e8 | |
Matt Jankowski | ee0c897bba | |
Yamagishi Kazutoshi | ceecf96208 | |
ik-fib | 47a3036ea6 | |
jeroenpraat | d2dc31a74a | |
Yamagishi Kazutoshi | 60a9b938b4 | |
178inaba | dd517b9a55 | |
Jérémy Benoist | b3329c362e | |
Mingye Wang | b00f4a0cf3 | |
Ash Furrow | a0ed88a99b | |
May Kittens Devour Your Soul | 25d2853db2 | |
Quent-in | 1930051bde | |
Ash Furrow | 6c34eafe02 | |
jeroenpraat | bbff431e3a | |
Mingye Wang | 3660a321f0 | |
Yeechan Lu | e06f307c2d | |
Mingye Wang | 3b342be2f2 | |
Matt Jankowski | 2dda356e3f | |
Andrey Blinov | 972f6bc861 | |
Shel R | d2514445e1 | |
Alda Marteau-Hardi | daa46f14c4 | |
Matt Jankowski | 1ada494bb2 | |
Keiji, Yoshimi | 4df26b2621 | |
Christoph Witzany | 556f68ab15 | |
Yamagishi Kazutoshi | fdb2689a14 | |
Matt Jankowski | 598d3defd5 | |
Matt Jankowski | 7f8044d913 | |
Ash Furrow | 66b39ccaed | |
Eugen | cae2a26ee3 | |
Miguel Jacq | b79ba3db8a | |
Marcin Cieślak | 59a77923b3 | |
Eugen | 2e4afccd9d | |
evilny0 | 0876a06e45 | |
Darshak Parikh | 43caf1fa5f | |
alpaca-tc | 2c0d756ad9 | |
jeroenpraat | f06cba3f60 | |
György Nádudvari | 09dad88853 | |
Tomohiro Suwa | 7832425fdd | |
fsubal | abe16a7026 | |
Eugen | baabbce672 | |
Eugen | 1d47910d3b | |
Matt Jankowski | 708bdd53f1 | |
Yamagishi Kazutoshi | 2510119f19 | |
matsurai25 | fe1ddc3b96 | |
Matteo Aquila | a3486e0543 | |
matsurai25 | 30183c0a74 | |
geta6 | 15a4fc5dcc | |
Matt Jankowski | a8e1afc30a | |
Eugen | bfbc2ca0d8 | |
alpaca-tc | 5ce8a1811a | |
Yamagishi Kazutoshi | dca0ffa1a1 | |
abcang | 70891a99a9 | |
857b | 3572f4423f | |
Joël Quenneville | 23eea5c5ae | |
Alex Dunn | 35bdacba7a | |
Isabelle Knott | 97012487ed | |
Ash Furrow | 9a7ea7c870 | |
chrolis | 1ac41c873a | |
tmyt | 6c83fec971 | |
Misty De Meo | 2bb54d5c57 | |
Yamagishi Kazutoshi | 8b8e140c71 | |
Matt Jankowski | 8bac0350d1 | |
Kota Ouchi | c0b30c56db | |
Isao Sugimoto | 0a850a8edb | |
Isao Sugimoto | 71f5cf12d2 | |
Michel | 9d8bf4ea42 | |
Eugen | 96268e76e6 | |
Eugen | c6a4ab3b92 | |
Eugen | e09ab2c0bd | |
Eugen | 6bd1019235 | |
Isao Sugimoto | 0d6c1e9cba | |
Eugen | ff5baa5349 | |
Matt Jankowski | 297c11dba2 | |
happycoloredbanana | 0a7588282a | |
Mingye Wang | 3ed219f907 | |
Matt Jankowski | 55e1503522 | |
Matt Jankowski | 66d8f99a30 | |
Tomohiro Suwa | f23281e31e | |
spf | 9783d8b6c0 | |
JP DeVries | 7525971561 | |
Matt Jankowski | 84b5fae8e3 | |
usagi-f | d90b1650d8 | |
ik-fib | 23ecc681c4 | |
Keiji, Yoshimi | 82bbf57e7a | |
kuro5hin | 0790aa9165 | |
839 | e2a1b574ab | |
Andrey Blinov | 880590ad0d | |
Olivier Humbert | ee919bedd6 | |
Koala Yeung | 0a1b024600 | |
Ratmir Karabut | 50ed72767d | |
geta6 | 75910abd8f | |
Eugen Rochko | 93c13fe691 | |
Eugen Rochko | 42d54dc9ea | |
Eugen Rochko | 57d784f1e4 | |
Matt Jankowski | 16d50f60d1 | |
Eugen Rochko | 0e0347ea3c | |
Eugen Rochko | f5cd0b4956 | |
Eugen Rochko | 2fd0473aa1 | |
Eugen | f03fb6c0ae | |
Marcin Cieślak | 8d3412c90c | |
Damien Erambert | 9cefb5731d | |
Mingye Wang | 00a85f31ca | |
Matt Jankowski | 389f8f8249 | |
jeroenpraat | e1e15adf1d | |
Matt Jankowski | f96f8d0176 | |
Sam Hewitt | a05e7582e4 | |
Matt Jankowski | fc122e9d78 | |
Andrey Blinov | 7d1e653ec1 | |
Zac Anger | 7b397b1452 | |
spf | 8fd6552bca | |
Matt Jankowski | 4ed12cd89a | |
Matt Jankowski | cc1361c149 | |
Eugen | 15ec4ae07b | |
Eugen | e43071a2f9 | |
Matt Jankowski | 21a767dcfa | |
Tomohiro Suwa | 3399dd7a66 | |
alpaca-tc | 630de52fdd | |
IWAI, Masaharu | f8546ad5a2 | |
Christophe Gesché | 4082e1ac7f | |
tom | 6b8e95ea00 | |
Brad Urani | e813810e03 | |
Patrick Figel | ffb99325ca | |
Ian Kelling | fd62d4de10 | |
Miguel Jacq | e9eaf9e33c | |
happycoloredbanana | e22f9819bb | |
Dale Price | f3b86c1bda | |
Expenses | 833bfd77f2 | |
Hugo Gameiro | 6685106daa | |
May Kittens Devour Your Soul | 8ad6722eea | |
Yuki Nakagawa | 548ff54714 | |
Matt Jankowski | a67909ec1e | |
Yamagishi Kazutoshi | 6afe70db95 | |
usagi-f | b87a08e160 | |
Toshiyuki Takahashi | be6cabb315 | |
anon | f8ae12909c | |
Ingo Blechschmidt | 78bdfc4589 | |
saturday06 | d87ee1167e | |
geta6 | 64e1d51025 | |
Keiji, Yoshimi | 7a5086729a | |
Yamagishi Kazutoshi | 5e94643058 | |
Toshiyuki Takahashi | dc6fe4e04b | |
Effy Elden | acd33101c5 | |
Keiji Yoshimi | fd81916e86 |
|
@ -35,11 +35,15 @@ OTP_SECRET=
|
|||
|
||||
# E-mail configuration
|
||||
# Note: Mailgun and SparkPost (https://sparkpo.st/smtp) each have good free tiers
|
||||
# If you want to use an SMTP server without authentication (e.g local Postfix relay)
|
||||
# then set SMTP_AUTH_METHOD to 'none' and *comment* SMTP_LOGIN and SMTP_PASSWORD.
|
||||
# Leaving them blank is not enough for authentication method 'none'.
|
||||
SMTP_SERVER=smtp.mailgun.org
|
||||
SMTP_PORT=587
|
||||
SMTP_LOGIN=
|
||||
SMTP_PASSWORD=
|
||||
SMTP_FROM_ADDRESS=notifications@example.com
|
||||
#SMTP_DOMAIN= # defaults to LOCAL_DOMAIN
|
||||
#SMTP_DELIVERY_METHOD=smtp # delivery method can also be sendmail
|
||||
#SMTP_AUTH_METHOD=plain
|
||||
#SMTP_OPENSSL_VERIFY_MODE=peer
|
||||
|
@ -71,6 +75,7 @@ SMTP_FROM_ADDRESS=notifications@example.com
|
|||
# S3_PROTOCOL=https
|
||||
# S3_HOSTNAME=
|
||||
# S3_ENDPOINT=
|
||||
# S3_SIGNATURE_VERSION=
|
||||
|
||||
# Optional alias for S3 if you want to use Cloudfront or Cloudflare in front
|
||||
# S3_CLOUDFRONT_HOST=
|
||||
|
@ -81,3 +86,7 @@ SMTP_FROM_ADDRESS=notifications@example.com
|
|||
# Advanced settings
|
||||
# If you need to use pgBouncer, you need to disable prepared statements:
|
||||
# PREPARED_STATEMENTS=false
|
||||
|
||||
# Cluster number setting for streaming API server.
|
||||
# If you comment out following line, cluster number will be `numOfCpuCores - 1`.
|
||||
STREAMING_CLUSTER_NUM=1
|
||||
|
|
|
@ -4,8 +4,9 @@
|
|||
# or operating system, you probably want to add a global ignore instead:
|
||||
# git config --global core.excludesfile '~/.gitignore_global'
|
||||
|
||||
# Ignore bundler config.
|
||||
# Ignore bundler config and downloaded libraries.
|
||||
/.bundle
|
||||
/vendor/bundle
|
||||
|
||||
# Ignore the default SQLite database.
|
||||
/db/*.sqlite3
|
||||
|
|
19
.travis.yml
|
@ -1,5 +1,11 @@
|
|||
language: ruby
|
||||
cache: bundler
|
||||
cache:
|
||||
bundler: true
|
||||
yarn: true
|
||||
directories:
|
||||
- node_modules
|
||||
dist: trusty
|
||||
sudo: false
|
||||
|
||||
notifications:
|
||||
email: false
|
||||
|
@ -12,6 +18,13 @@ env:
|
|||
- CXX=g++-4.8
|
||||
addons:
|
||||
postgresql: 9.4
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
- trusty-media
|
||||
packages:
|
||||
- g++-4.8
|
||||
- ffmpeg
|
||||
|
||||
rvm:
|
||||
- 2.3.4
|
||||
|
@ -22,10 +35,6 @@ services:
|
|||
|
||||
bundler_args: --without development production --retry=3 --jobs=3
|
||||
|
||||
before_install:
|
||||
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
|
||||
- sudo apt-get -qq update
|
||||
- sudo apt-get -qq install g++-4.8
|
||||
install:
|
||||
- nvm install
|
||||
- npm install -g yarn
|
||||
|
|
|
@ -7,7 +7,7 @@ There are three ways in which you can contribute to this repository:
|
|||
2. By working on the back-end application
|
||||
3. By working on the front-end application
|
||||
|
||||
Choosing what to work on in a large open source project is not easy. The list of GitHub issues may provide some ideas, but not every feature request has been greenlit. Likewise, not every change or feature that resolves a personal itch will be merged into the main repository. Some communication ahead of time may be wise. If your addition creates a new feature or setting, or otherwise changes how things work in some substantial way, please remember to submit a correlating pull request to document your changes in the [documentation](http://github.com/tootsuite/documentation).
|
||||
Choosing what to work on in a large open source project is not easy. The list of [GitHub issues](https://github.com/tootsuite/mastodon/issues) may provide some ideas, but not every feature request has been greenlit. Likewise, not every change or feature that resolves a personal itch will be merged into the main repository. Some communication ahead of time may be wise. If your addition creates a new feature or setting, or otherwise changes how things work in some substantial way, please remember to submit a correlating pull request to document your changes in the [documentation](http://github.com/tootsuite/documentation).
|
||||
|
||||
Below are the guidelines for working on pull requests:
|
||||
|
||||
|
@ -21,9 +21,17 @@ Below are the guidelines for working on pull requests:
|
|||
- No orthographic mistakes
|
||||
- No Markdown syntax errors
|
||||
|
||||
## Requirements
|
||||
|
||||
- Ruby
|
||||
- Node.js
|
||||
- PostgreSQL
|
||||
- Redis
|
||||
- Nginx (optional)
|
||||
|
||||
## Back-end application
|
||||
|
||||
It is expected that you have a working development environment set up. The development environment includes rubocop, which checks your Ruby code for compliance with our style guide and best practices. Sublime Text, likely like other editors, has a Rubocop plugin that runs checks on files as you edit them. The codebase also has a test suite.
|
||||
It is expected that you have a working development environment set up. The development environment includes [rubocop](https://github.com/bbatsov/rubocop), which checks your Ruby code for compliance with our style guide and best practices. Sublime Text, likely like other editors, has a [Rubocop plugin](https://github.com/pderichs/sublime_rubocop) that runs checks on files as you edit them. The codebase also has a test suite.
|
||||
|
||||
* The codebase is not perfect, at the time of writing, but it is expected that you do not introduce new code style violations
|
||||
* The rspec test suite must pass
|
||||
|
@ -41,4 +49,3 @@ It is expected that you have a working development environment set up (see back-
|
|||
* If you are introducing new strings, they must be using localization methods
|
||||
|
||||
If the JavaScript or CSS assets won't compile due to a syntax error, it's a good sign that the pull request isn't ready for submission yet.
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ RUN echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/reposit
|
|||
postgresql-dev \
|
||||
libxml2-dev \
|
||||
libxslt-dev \
|
||||
python \
|
||||
build-base" \
|
||||
&& apk -U upgrade && apk add \
|
||||
$BUILD_DEPS \
|
||||
|
@ -28,11 +29,13 @@ RUN echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/reposit
|
|||
ffmpeg \
|
||||
file \
|
||||
imagemagick@edge \
|
||||
ca-certificates \
|
||||
&& npm install -g npm@3 && npm install -g yarn \
|
||||
&& bundle install --deployment --without test development \
|
||||
&& yarn --ignore-optional \
|
||||
&& yarn cache clean \
|
||||
&& npm -g cache clean \
|
||||
&& update-ca-certificates \
|
||||
&& apk del $BUILD_DEPS \
|
||||
&& rm -rf /tmp/* /var/cache/apk/*
|
||||
|
||||
|
|
3
Gemfile
|
@ -21,6 +21,7 @@ gem 'best_in_place', '~> 3.0.1'
|
|||
gem 'paperclip', '~> 5.1'
|
||||
gem 'paperclip-av-transcoder'
|
||||
gem 'aws-sdk', '>= 2.0'
|
||||
gem 'fog'
|
||||
|
||||
gem 'addressable'
|
||||
gem 'devise'
|
||||
|
@ -35,6 +36,7 @@ gem 'http_accept_language'
|
|||
gem 'httplog'
|
||||
gem 'kaminari'
|
||||
gem 'link_header'
|
||||
gem 'local_time'
|
||||
gem 'nokogiri'
|
||||
gem 'oj'
|
||||
gem 'ostatus2', '~> 1.1'
|
||||
|
@ -48,6 +50,7 @@ gem 'rails-settings-cached'
|
|||
gem 'redis', '~>3.2', require: ['redis', 'redis/connection/hiredis']
|
||||
gem 'rqrcode'
|
||||
gem 'ruby-oembed', require: 'oembed'
|
||||
gem 'sanitize'
|
||||
gem 'sidekiq'
|
||||
gem 'sidekiq-unique-jobs'
|
||||
gem 'simple-navigation'
|
||||
|
|
163
Gemfile.lock
|
@ -1,6 +1,7 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (2.3.5)
|
||||
actioncable (5.0.2)
|
||||
actionpack (= 5.0.2)
|
||||
nio4r (>= 1.2, < 3.0)
|
||||
|
@ -111,11 +112,19 @@ GEM
|
|||
cocaine (0.5.8)
|
||||
climate_control (>= 0.0.3, < 1.0)
|
||||
coderay (1.1.1)
|
||||
coffee-rails (4.2.1)
|
||||
coffee-script (>= 2.2.0)
|
||||
railties (>= 4.0.0, < 5.2.x)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.12.2)
|
||||
colorize (0.8.1)
|
||||
concurrent-ruby (1.0.5)
|
||||
connection_pool (2.2.1)
|
||||
crack (0.4.3)
|
||||
safe_yaml (~> 1.0.0)
|
||||
crass (1.0.2)
|
||||
debug_inspector (0.0.2)
|
||||
devise (4.2.1)
|
||||
bcrypt (~> 3.0)
|
||||
|
@ -145,19 +154,148 @@ GEM
|
|||
thread_safe
|
||||
encryptor (3.0.0)
|
||||
erubis (2.7.0)
|
||||
excon (0.55.0)
|
||||
execjs (2.7.0)
|
||||
fabrication (2.16.1)
|
||||
faker (1.7.3)
|
||||
i18n (~> 0.5)
|
||||
fast_blank (1.0.0)
|
||||
fission (0.5.0)
|
||||
CFPropertyList (~> 2.2)
|
||||
fog (1.38.0)
|
||||
fog-aliyun (>= 0.1.0)
|
||||
fog-atmos
|
||||
fog-aws (>= 0.6.0)
|
||||
fog-brightbox (~> 0.4)
|
||||
fog-cloudatcost (~> 0.1.0)
|
||||
fog-core (~> 1.32)
|
||||
fog-dynect (~> 0.0.2)
|
||||
fog-ecloud (~> 0.1)
|
||||
fog-google (<= 0.1.0)
|
||||
fog-json
|
||||
fog-local
|
||||
fog-openstack
|
||||
fog-powerdns (>= 0.1.1)
|
||||
fog-profitbricks
|
||||
fog-rackspace
|
||||
fog-radosgw (>= 0.0.2)
|
||||
fog-riakcs
|
||||
fog-sakuracloud (>= 0.0.4)
|
||||
fog-serverlove
|
||||
fog-softlayer
|
||||
fog-storm_on_demand
|
||||
fog-terremark
|
||||
fog-vmfusion
|
||||
fog-voxel
|
||||
fog-vsphere (>= 0.4.0)
|
||||
fog-xenserver
|
||||
fog-xml (~> 0.1.1)
|
||||
ipaddress (~> 0.5)
|
||||
fog-aliyun (0.1.0)
|
||||
fog-core (~> 1.27)
|
||||
fog-json (~> 1.0)
|
||||
ipaddress (~> 0.8)
|
||||
xml-simple (~> 1.1)
|
||||
fog-atmos (0.1.0)
|
||||
fog-core
|
||||
fog-xml
|
||||
fog-aws (1.3.0)
|
||||
fog-core (~> 1.38)
|
||||
fog-json (~> 1.0)
|
||||
fog-xml (~> 0.1)
|
||||
ipaddress (~> 0.8)
|
||||
fog-brightbox (0.11.0)
|
||||
fog-core (~> 1.22)
|
||||
fog-json
|
||||
inflecto (~> 0.0.2)
|
||||
fog-cloudatcost (0.1.2)
|
||||
fog-core (~> 1.36)
|
||||
fog-json (~> 1.0)
|
||||
fog-xml (~> 0.1)
|
||||
ipaddress (~> 0.8)
|
||||
fog-core (1.43.0)
|
||||
builder
|
||||
excon (~> 0.49)
|
||||
formatador (~> 0.2)
|
||||
fog-dynect (0.0.3)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-xml
|
||||
fog-ecloud (0.3.0)
|
||||
fog-core
|
||||
fog-xml
|
||||
fog-google (0.1.0)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-xml
|
||||
fog-json (1.0.2)
|
||||
fog-core (~> 1.0)
|
||||
multi_json (~> 1.10)
|
||||
fog-local (0.3.1)
|
||||
fog-core (~> 1.27)
|
||||
fog-openstack (0.1.20)
|
||||
fog-core (>= 1.40)
|
||||
fog-json (>= 1.0)
|
||||
ipaddress (>= 0.8)
|
||||
fog-powerdns (0.1.1)
|
||||
fog-core (~> 1.27)
|
||||
fog-json (~> 1.0)
|
||||
fog-xml (~> 0.1)
|
||||
fog-profitbricks (3.0.0)
|
||||
fog-core (~> 1.42)
|
||||
fog-json (~> 1.0)
|
||||
fog-rackspace (0.1.4)
|
||||
fog-core (>= 1.35)
|
||||
fog-json (>= 1.0)
|
||||
fog-xml (>= 0.1)
|
||||
ipaddress (>= 0.8)
|
||||
fog-radosgw (0.0.5)
|
||||
fog-core (>= 1.21.0)
|
||||
fog-json
|
||||
fog-xml (>= 0.0.1)
|
||||
fog-riakcs (0.1.0)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-xml
|
||||
fog-sakuracloud (1.7.5)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-serverlove (0.1.2)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-softlayer (1.1.4)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-storm_on_demand (0.1.1)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-terremark (0.1.0)
|
||||
fog-core
|
||||
fog-xml
|
||||
fog-vmfusion (0.1.0)
|
||||
fission
|
||||
fog-core
|
||||
fog-voxel (0.1.0)
|
||||
fog-core
|
||||
fog-xml
|
||||
fog-vsphere (1.9.1)
|
||||
fog-core
|
||||
rbvmomi (~> 1.9)
|
||||
fog-xenserver (0.3.0)
|
||||
fog-core
|
||||
fog-xml
|
||||
fog-xml (0.1.3)
|
||||
fog-core
|
||||
nokogiri (>= 1.5.11, < 2.0.0)
|
||||
font-awesome-rails (4.7.0.1)
|
||||
railties (>= 3.2, < 5.1)
|
||||
formatador (0.2.5)
|
||||
fuubar (2.2.0)
|
||||
rspec-core (~> 3.0)
|
||||
ruby-progressbar (~> 1.4)
|
||||
globalid (0.3.7)
|
||||
activesupport (>= 4.1.0)
|
||||
goldfinger (1.1.2)
|
||||
goldfinger (1.2.0)
|
||||
addressable (~> 2.4)
|
||||
http (~> 2.0)
|
||||
nokogiri (~> 1.6)
|
||||
|
@ -197,6 +335,8 @@ GEM
|
|||
parser (>= 2.2.3.0)
|
||||
rainbow (~> 2.2)
|
||||
terminal-table (>= 1.5.1)
|
||||
inflecto (0.0.2)
|
||||
ipaddress (0.8.3)
|
||||
jmespath (1.3.1)
|
||||
jquery-rails (4.3.1)
|
||||
rails-dom-testing (>= 1, < 3)
|
||||
|
@ -224,6 +364,8 @@ GEM
|
|||
letter_opener (~> 1.0)
|
||||
railties (>= 3.2)
|
||||
link_header (0.0.8)
|
||||
local_time (1.0.3)
|
||||
coffee-rails
|
||||
lograge (0.4.1)
|
||||
actionpack (>= 4, < 5.1)
|
||||
activesupport (>= 4, < 5.1)
|
||||
|
@ -243,12 +385,15 @@ GEM
|
|||
mimemagic (0.3.2)
|
||||
mini_portile2 (2.1.0)
|
||||
minitest (5.10.1)
|
||||
multi_json (1.12.1)
|
||||
net-scp (1.2.1)
|
||||
net-ssh (>= 2.6.5)
|
||||
net-ssh (4.1.0)
|
||||
nio4r (2.0.0)
|
||||
nokogiri (1.7.1)
|
||||
mini_portile2 (~> 2.1.0)
|
||||
nokogumbo (1.4.10)
|
||||
nokogiri
|
||||
oj (2.18.5)
|
||||
openssl (2.0.3)
|
||||
orm_adapter (0.5.0)
|
||||
|
@ -332,6 +477,11 @@ GEM
|
|||
thor (>= 0.18.1, < 2.0)
|
||||
rainbow (2.2.1)
|
||||
rake (12.0.0)
|
||||
rbvmomi (1.11.0)
|
||||
builder (~> 3.0)
|
||||
json (>= 1.8)
|
||||
nokogiri (~> 1.5)
|
||||
trollop (~> 2.1)
|
||||
react-rails (1.11.0)
|
||||
babel-transpiler (>= 0.7.0)
|
||||
connection_pool
|
||||
|
@ -389,6 +539,10 @@ GEM
|
|||
ruby-oembed (0.12.0)
|
||||
ruby-progressbar (1.8.1)
|
||||
safe_yaml (1.0.4)
|
||||
sanitize (4.4.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.4.4)
|
||||
nokogumbo (~> 1.4.1)
|
||||
sass (3.4.23)
|
||||
sass-rails (5.0.6)
|
||||
railties (>= 4.0.0, < 6)
|
||||
|
@ -433,6 +587,7 @@ GEM
|
|||
thread (0.2.2)
|
||||
thread_safe (0.3.6)
|
||||
tilt (2.0.7)
|
||||
trollop (2.1.2)
|
||||
twitter-text (1.14.5)
|
||||
unf (~> 0.1.0)
|
||||
tzinfo (1.2.3)
|
||||
|
@ -443,7 +598,7 @@ GEM
|
|||
execjs (>= 0.3.0, < 3)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.7.3)
|
||||
unf_ext (0.0.7.4)
|
||||
unicode-display_width (1.1.3)
|
||||
uniform_notifier (1.10.0)
|
||||
warden (1.2.7)
|
||||
|
@ -456,6 +611,7 @@ GEM
|
|||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.2)
|
||||
whatlanguage (1.0.6)
|
||||
xml-simple (1.1.5)
|
||||
xpath (2.0.0)
|
||||
nokogiri (~> 1.3)
|
||||
|
||||
|
@ -485,6 +641,7 @@ DEPENDENCIES
|
|||
fabrication
|
||||
faker
|
||||
fast_blank
|
||||
fog
|
||||
font-awesome-rails
|
||||
fuubar
|
||||
goldfinger
|
||||
|
@ -500,6 +657,7 @@ DEPENDENCIES
|
|||
letter_opener
|
||||
letter_opener_web
|
||||
link_header
|
||||
local_time
|
||||
lograge
|
||||
microformats2
|
||||
nokogiri
|
||||
|
@ -530,6 +688,7 @@ DEPENDENCIES
|
|||
rspec-sidekiq
|
||||
rubocop
|
||||
ruby-oembed
|
||||
sanitize
|
||||
sass-rails (~> 5.0)
|
||||
sidekiq
|
||||
sidekiq-unique-jobs
|
||||
|
|
123
README.md
|
@ -9,7 +9,7 @@ Mastodon
|
|||
|
||||
Mastodon is a free, open-source social network server. A decentralized solution to commercial platforms, it avoids the risks of a single company monopolizing your communication. Anyone can run Mastodon and participate in the social network seamlessly.
|
||||
|
||||
An alternative implementation of the GNU social project. Based on ActivityStreams, Webfinger, PubsubHubbub and Salmon.
|
||||
An alternative implementation of the GNU social project. Based on [ActivityStreams](https://en.wikipedia.org/wiki/Activity_Streams_(format)), [Webfinger](https://en.wikipedia.org/wiki/WebFinger), [PubsubHubbub](https://en.wikipedia.org/wiki/PubSubHubbub) and [Salmon](https://en.wikipedia.org/wiki/Salmon_(protocol)).
|
||||
|
||||
Click on the screenshot to watch a demo of the UI:
|
||||
|
||||
|
@ -48,126 +48,9 @@ If you would like, you can [support the development of this project on Patreon][
|
|||
- **Deployable via Docker**
|
||||
You don't need to mess with dependencies and configuration if you want to try Mastodon, if you have Docker and Docker Compose the deployment is extremely easy
|
||||
|
||||
## Checking out
|
||||
## Deployment
|
||||
|
||||
If you want a stable release for production use, you should use tagged releases. To checkout the latest available tagged version:
|
||||
|
||||
git clone https://github.com/tootsuite/mastodon.git
|
||||
cd mastodon
|
||||
git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
|
||||
|
||||
## Configuration
|
||||
|
||||
- `LOCAL_DOMAIN` should be the domain/hostname of your instance. This is **absolutely required** as it is used for generating unique IDs for everything federation-related
|
||||
- `LOCAL_HTTPS` set it to `true` if HTTPS works on your website. This is used to generate canonical URLs, which is also important when generating and parsing federation-related IDs
|
||||
|
||||
Consult the example configuration file, `.env.production.sample` for the full list. Among other things you need to set details for the SMTP server you are going to use.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Ruby
|
||||
- Node.js
|
||||
- PostgreSQL
|
||||
- Redis
|
||||
- Nginx
|
||||
|
||||
## Running with Docker and Docker-Compose
|
||||
|
||||
[![](https://images.microbadger.com/badges/version/gargron/mastodon.svg)](https://microbadger.com/images/gargron/mastodon "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/gargron/mastodon.svg)](https://microbadger.com/images/gargron/mastodon "Get your own image badge on microbadger.com")
|
||||
|
||||
The project now includes a `Dockerfile` and a `docker-compose.yml` file (which requires at least docker-compose version `1.10.0`).
|
||||
|
||||
Review the settings in `docker-compose.yml`. Note that it is not default to store the postgresql database and redis databases in a persistent storage location,
|
||||
so you may need or want to adjust the settings there.
|
||||
|
||||
Then, you need to fill in the `.env.production` file:
|
||||
|
||||
cp .env.production.sample .env.production
|
||||
nano .env.production
|
||||
|
||||
Do NOT change the `REDIS_*` or `DB_*` settings when running with the default docker configurations.
|
||||
|
||||
You will need to fill in, at least: `LOCAL_DOMAIN`, `LOCAL_HTTPS`, `PAPERCLIP_SECRET`, `SECRET_KEY_BASE`, `OTP_SECRET`, and the `SMTP_*` settings. To generate the `PAPERCLIP_SECRET`, `SECRET_KEY_BASE`, and `OTP_SECRET`, you may use:
|
||||
|
||||
Before running the first time, you need to build the images:
|
||||
|
||||
docker-compose build
|
||||
|
||||
|
||||
docker-compose run --rm web rake secret
|
||||
|
||||
Do this once for each of those keys, and copy the result into the `.env.production` file in the appropriate field.
|
||||
|
||||
Then you should run the `db:migrate` command to create the database, or migrate it from an older release:
|
||||
|
||||
docker-compose run --rm web rails db:migrate
|
||||
|
||||
Then, you will also need to precompile the assets:
|
||||
|
||||
docker-compose run --rm web rails assets:precompile
|
||||
|
||||
before you can launch the docker image with:
|
||||
|
||||
docker-compose up
|
||||
|
||||
If you wish to run this as a daemon process instead of monitoring it on console, use instead:
|
||||
|
||||
docker-compose up -d
|
||||
|
||||
Then you may login to your new Mastodon instance by browsing to http://localhost:3000/
|
||||
|
||||
Following that, make sure that you read the [production guide](docs/Running-Mastodon/Production-guide.md). You are probably going to want to understand how
|
||||
to configure Nginx to make your Mastodon instance available to the rest of the world.
|
||||
|
||||
The container has two volumes, for the assets and for user uploads, and optionally two more, for the postgresql and redis databases.
|
||||
|
||||
The default docker-compose.yml maps them to the repository's `public/assets` and `public/system` directories, you may wish to put them somewhere else. Likewise, the PostgreSQL and Redis images have data containers that you may wish to map somewhere where you know how to find them and back them up.
|
||||
|
||||
**Note**: The `--rm` option for docker-compose will remove the container that is created to run a one-off command after it completes. As data is stored in volumes it is not affected by that container clean-up.
|
||||
|
||||
### Tasks
|
||||
|
||||
- `rake mastodon:media:clear` removes uploads that have not been attached to any status after a while, you would want to run this from a periodic cronjob
|
||||
- `rake mastodon:push:clear` unsubscribes from PuSH notifications for remote users that have no local followers. You may not want to actually do that, to keep a fuller footprint of the fediverse or in case your users will soon re-follow
|
||||
- `rake mastodon:push:refresh` re-subscribes PuSH for expiring remote users, this should be run periodically from a cronjob and quite often as the expiration time depends on the particular hub of the remote user
|
||||
- `rake mastodon:feeds:clear_all` removes all timelines, which forces them to be re-built on the fly next time a user tries to fetch their home/mentions timeline. Only for troubleshooting
|
||||
- `rake mastodon:feeds:clear` removes timelines of users who haven't signed in lately, which allows to save RAM and improve message distribution. This is required to be run periodically so that when they login again the regeneration process will trigger
|
||||
|
||||
Running any of these tasks via docker-compose would look like this:
|
||||
|
||||
docker-compose run --rm web rake mastodon:media:clear
|
||||
|
||||
### Updating
|
||||
|
||||
This approach makes updating to the latest version a real breeze.
|
||||
|
||||
1. `git pull` to download updates from the repository
|
||||
2. `docker-compose build` to compile the Docker image out of the changed source files
|
||||
3. (optional) `docker-compose run --rm web rails db:migrate` to perform database migrations. Does nothing if your database is up to date
|
||||
4. (optional) `docker-compose run --rm web rails assets:precompile` to compile new JS and CSS assets
|
||||
5. `docker-compose up -d` to re-create (restart) containers and pick up the changes
|
||||
|
||||
## Deployment without Docker
|
||||
|
||||
Docker is great for quickly trying out software, but it has its drawbacks too. If you prefer to run Mastodon without using Docker, refer to the [production guide](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md) for examples, configuration and instructions.
|
||||
|
||||
## Deployment on Scalingo
|
||||
|
||||
[![Deploy on Scalingo](https://cdn.scalingo.com/deploy/button.svg)](https://my.scalingo.com/deploy?source=https://github.com/tootsuite/mastodon#master)
|
||||
|
||||
[You can view a guide for deployment on Scalingo here.](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Scalingo-guide.md)
|
||||
|
||||
## Deployment on Heroku (experimental)
|
||||
|
||||
[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)
|
||||
|
||||
Mastodon can run on [Heroku](https://heroku.com), but it gets expensive and impractical due to how Heroku prices resource usage. [You can view a guide for deployment on Heroku here](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Heroku-guide.md), but you have been warned.
|
||||
|
||||
## Development with Vagrant
|
||||
|
||||
A quick way to get a development environment up and running is with Vagrant. You will need recent versions of [Vagrant](https://www.vagrantup.com/) and [VirtualBox](https://www.virtualbox.org/) installed.
|
||||
|
||||
[You can find the guide for setting up a Vagrant development environment here.](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Vagrant-guide.md)
|
||||
There are guides in the documentation repository for [deploying on various platforms](https://github.com/tootsuite/documentation#running-mastodon).
|
||||
|
||||
## Contributing
|
||||
|
||||
|
|
|
@ -35,22 +35,12 @@ sudo apt-get install \
|
|||
libreadline-dev \
|
||||
-y
|
||||
|
||||
# Install rbenv
|
||||
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
|
||||
cd ~/.rbenv && src/configure && make -C src
|
||||
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
|
||||
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
|
||||
|
||||
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
|
||||
|
||||
export PATH="$HOME/.rbenv/bin:$PATH"
|
||||
eval "$(rbenv init -)"
|
||||
|
||||
# Install rvm
|
||||
cd /vagrant
|
||||
|
||||
echo "Compiling Ruby $(cat .ruby-version): warning, this takes a while!!!"
|
||||
rbenv install $(cat .ruby-version)
|
||||
rbenv global $(cat .ruby-version)
|
||||
read RUBY_VERSION < .ruby-version
|
||||
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
|
||||
curl -sSL https://get.rvm.io | bash -s stable --ruby=$RUBY_VERSION
|
||||
source /home/vagrant/.rvm/scripts/rvm
|
||||
|
||||
# Configure database
|
||||
sudo -u postgres createuser -U postgres vagrant -s
|
||||
|
@ -62,6 +52,7 @@ bundle install
|
|||
yarn install
|
||||
|
||||
# Build Mastodon
|
||||
export $(cat ".env.vagrant" | xargs)
|
||||
bundle exec rails db:setup
|
||||
bundle exec rails assets:precompile
|
||||
|
||||
|
@ -107,7 +98,11 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|||
config.hostsupdater.remove_on_suspend = false
|
||||
end
|
||||
|
||||
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp']
|
||||
if config.vm.networks.any? { |type, options| type == :private_network }
|
||||
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp']
|
||||
else
|
||||
config.vm.synced_folder ".", "/vagrant"
|
||||
end
|
||||
|
||||
# Otherwise, you can access the site at http://localhost:3000
|
||||
config.vm.network :forwarded_port, guest: 80, host: 3000
|
||||
|
|
Before Width: | Height: | Size: 334 KiB |
Before Width: | Height: | Size: 369 KiB |
Before Width: | Height: | Size: 366 KiB |
Before Width: | Height: | Size: 349 KiB |
Before Width: | Height: | Size: 373 KiB |
Before Width: | Height: | Size: 331 KiB |
Before Width: | Height: | Size: 370 KiB |
Before Width: | Height: | Size: 339 KiB After Width: | Height: | Size: 339 KiB |
Before Width: | Height: | Size: 362 KiB |
Before Width: | Height: | Size: 378 KiB |
Before Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |