Commit Graph

53 Commits

Author SHA1 Message Date
hjhornbeck d7e2a5c6e7
Dockerfile update (#1270)
While Docker isn't officially supported by Hometown, leaving the
Mastodon 3.5.5 Docker configuration in place with the new 4.0.2 code is
a bad idea. At minimum, you'll have a stale Node install that's months
behind on security updates. There are some minor tweaks to the default
configuration, but they're flagged by comments so they're easy to revert
or modify as necessary.

#  Running Hometown on Docker

I'll by typing up my own longer blog post in due time, but there's no
harm dropping a cheat sheet here. By following this outline, I was able
to upgrade a Hometown 1.0.8 install to 1.1.0 with nothing worse than a
minute or two of downtime.

My configuration uses the GitHub repository as its source, rather than
images drawn from DockerHub. I like to tweak and fiddle with my setup,
especially the themes, and I'm happy to sacrifice some disk space for
the privilege.

## Installing from Scratch

This is by far the easiest approach, you just follow [one
of](https://gist.github.com/TrillCyborg/84939cd4013ace9960031b803a0590c4)
the [existing
guides](https://sleeplessbeastie.eu/2022/05/02/how-to-take-advantage-of-docker-to-install-mastodon/)
for running Mastodon via Docker, pause after you've set up
`.env.production`, add any Hometown-specific features to it [as per the
Wiki](https://github.com/hometown-fork/hometown/wiki), then resume what
the guide says to do.

If you're enabling ElastiSearch, the second of the two guides has some
additional actions you'll need to do, plus be aware of [this
bug](https://github.com/mastodon/mastodon/issues/18625) in Mastodon
which can quietly block ES from working at all.

## Upgrading from Hometown 1.0.8

Here's how I accomplished this. I committed any leftover changes, then
ran these commands from the non-Docker instructions in the root of my
local Hometown repository:

```
git remote update
git checkout v4.0.2+hometown-1.1.0
```

This "wiped out" my customizations, but as I committed them all to a
branch I can reconstruct them later via diffs. I then ran:

```
sudo docker-compose build
```

to build the new image. The old image will continue running in the
background, as per usual. I like adding `2>&1 | less` to the end and
mashing `PgDn`, as if a compilation error happens it almost invariably
requires scrolling back a few screens to find the issue.

If the build succeeded, we're almost clear to start the dangerous
portion. If you're running on the cloud, now would be a great time to
take a snapshot. Whatever the case, you should back up the existing
database. If you haven't changed the defaults from the Dockerfile, then

```
sudo docker exec -it hometown_db_1 pg_dump -U postgres -Fc postgres > hometown.db.dump
```

should do the trick. If you have changed the defaults, you may need to
use `sudo docker ps` to figure out the name of the PostgreSQL image to
swap in place of "hometown_db_1", then browse through `.env.production`
to extract the username to place after `-U` and the database name to
place after `-Fc`. The Hometown docs don't say how to restore the
database should the process go South, but after reading a manpage or two
I think the magic words are roughly

```
sudo docker exec -it hometown_db_1 pg_restore -U postgres --clean --if-exists -d postgres < hometown.db.dump
```

Now we're ready for the scary "you could destroy everything" part. All
the earlier commands are trivial to roll back, but after this point any
delay could cause data corruption. As per the Hometown docs, run the
pre-deployment database migrations.

```
sudo docker-compose run -e SKIP_POST_DEPLOYMENT_MIGRATIONS=true -e RAILS_ENV=production --rm web bundle exec rails db:migrate
```

where `web` is the name of the webserver image in `docker-compose.yml`.
The docs state you should precompile all assets next, but I'm 95% sure
they were already built when you ran `sudo docker-compose build`. If
you're paranoid and want to be absolutely sure precompilation is done,
then at this stage run:

```
sudo docker-compose run -e RAILS_ENV=production --rm web bundle exec rails assets:precompile
```

Here, the Hometown docs say you should run the post-deployment
migrations. In Docker-ese:

```
sudo docker-compose run -e RAILS_ENV=production --rm web bundle exec rails db:migrate
```

Finally, we need to stop the old images and spin up the new ones. Run:

```
sudo docker-compose up -d
```

and give Docker some time to finish rotating. A quick `sudo docker ps`
should confirm the new images are booting up, and in a short while
(10-15 seconds for the teeny-tiny instance I manage) you should be back
to fully functional.
2023-01-17 14:39:09 -08:00
Darius Kazemi 840688318f Merge tag 'v4.0.0' into hometown-4.0-merge 2022-11-16 20:54:49 -08:00
Claire 696f7b3608 Bump version to 3.5.5 2022-11-14 22:26:24 +01:00
Shlee 159b4edeef
Update docker-compose.yml (#19063) 2022-08-27 17:40:46 +02:00
Shlee cc7cebb79a
Fix for #18637 - Migrate from elasticsearch-oss to elasticsearch basic (#18643)
* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml
2022-06-15 16:35:36 +02:00
Markus Petzsch e3cebfa457
chore: bump elasticsearch version in docker-compose.yml file; closes #18189 (#18637) 2022-06-11 15:34:58 +02:00
Yamagishi Kazutoshi 584d8b977b
Format JSON and YAML using Prettier (#17823)
* Format JSON and YAML using Prettier

* Add prettier to devDep
2022-03-21 04:46:11 +01:00
Su Yang 10188c7db7
Add healthcheck for sidekiq (#17365) 2022-01-26 18:08:49 +01:00
Shlee ac8ad78e91
[Docker-Compose] [Breaking] Postgres 9.6 is EOL (11th Nov 2021) - Migrate to 14 Stable (#16947)
* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml
2021-11-18 22:00:27 +01:00
Shlee bc348dbe94
[Dockerfile] Upgrade ElasticSearch-OSS 6.8.10 to 7.10.2 (#16956)
* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml
2021-11-18 21:59:34 +01:00
Shlee a2ce7508c9
Update docker-compose.yml (#16489) 2021-07-11 12:57:31 +02:00
Shlee 91055f497f
Update Elasticsearch from 6.1 to 6.8 in docker-compose.yml (Fix glitch-soc#1348) (#14016)
* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml
2020-06-10 13:57:30 +02:00
Shlee 328c5a21d7
Update docker-compose.yml (#13756) 2020-05-15 11:38:30 +02:00
Matej Ľach 490ff09c5a
increase the postgres container shm_size from 64mb to 256mb (#13451) 2020-04-12 16:41:54 +02:00
Yamagishi Kazutoshi d7268befa8 Add healthcheck endpoint for web (#11770) 2019-09-07 02:47:51 +02:00
Eugen Rochko 15c7478c55
Change Dockerfile to bind to 0.0.0.0 instead of docker-compose.yml (#11351) 2019-07-18 20:28:05 +02:00
Eugen Rochko e7353c47db
Change default interface of web and streaming from 0.0.0.0 to 127.0.0.1 (#11302) 2019-07-15 05:56:35 +02:00
Shlee ab829d4aa8 Upgrade redis in docker-compose.yml from 4 to 5 (#9063) 2019-05-19 11:29:26 +02:00
Fabian Schlenz 50b36ef59d Fixed Healthchecks in docker-compose.yml (#10553) 2019-04-23 00:54:26 +02:00
Sir-Boops 90398b9d00 Remove uneeded command and switch to images for TOR (#9438) 2019-01-04 16:15:09 +01:00
Ben Lubar 9b475a4838 Add healthcheck commands to docker-compose.yml (#9143)
This will allow Docker to be automatically check the health of services.

Docker won't do anything other than showing the state in the output of
"docker-compose ps" by default, but some management tools may watch for
container health events.

Here's what my local instance looks like right now:

          Name                        Command                  State                     Ports
-------------------------------------------------------------------------------------------------------------
mastodon_db_1              docker-entrypoint.sh postgres    Up (healthy)
mastodon_es_1              /usr/local/bin/docker-entr ...   Up (healthy)
mastodon_redis_1           docker-entrypoint.sh redis ...   Up (healthy)
mastodon_redis_cache_1     docker-entrypoint.sh redis ...   Up (healthy)
mastodon_sidekiq_1         /sbin/tini -- bundle exec  ...   Up             3000/tcp, 4000/tcp
mastodon_streaming_1       /sbin/tini -- yarn start         Up (healthy)   3000/tcp, 127.0.0.1:4000->4000/tcp
mastodon_web_1             /sbin/tini -- bash -c rm - ...   Up (healthy)   127.0.0.1:3000->3000/tcp, 4000/tcp
2018-12-29 00:43:41 +01:00
Eugen Rochko 969a10a5d1
Persist volumes by default in docker-compose (#9055)
Too many databases were lost to this
2018-10-23 00:08:25 +02:00
luzpaz 40dd19be37 Misc. typos (#8694)
Found via `codespell -q 3 --skip="./app/javascript/mastodon/locales,./config/locales"`
2018-09-14 00:53:09 +02:00
ThibG fdda332e4d Update docker config and move some workers to different queues (#8345)
* Reorder docker-compose's sidekiq queues to match config/sidekiq.yml

* Make the ̀“mailers” queue higher priority than “pull”
2018-09-02 16:13:06 +02:00
Aaron Brady 8c279b1648 Update docker-compose to cope with build-time assets (#8156)
#7780 means that asset compilation happens as a build step.

Having the assets and packs volumes defined in `docker-compose.yml` breaks this. For people who run under Docker Compose, I believe this will fix their CSS (which even running the asset recompilation separately did not).
2018-08-09 22:37:48 +02:00
MIYAGI Hikaru ddd0bb69e1 Merge `HIDDEN_SERVICE_VIA_TRANSPARENT_PROXY` into `ALLOW_ACCESS_TO_HIDDEN_SERVICE` (#7901)
If Mastodon accesses to the hidden service via transparent proxy, it's needed to avoid checking whether it's a private address, since `.onion` is resolved to a private address.
I was previously using the `HIDDEN_SERVICE_VIA_TRANSPARENT_PROXY` to provide that function. However, I realized that using `HIDDEN_SERVICE_VIA_TRANSPARENT_PROXY` is redundant, since this specification is always used with `ALLOW_ACCESS_TO_HIDDEN_SERVICE`. Therefore, I decided to integrate the setting of `HIDDEN_SERVICE_VIA_TRANSPARENT_PROXY` into` ALLOW_ACCESS_TO_HIDDEN_SERVICE`.
2018-06-29 15:36:02 +02:00
J Yeary 905bd24788 TOR federation (#7875) 2018-06-26 20:34:12 +02:00
Isatis c7ac039697 Remove Puma pidfile before boot if container receives SIGTERM (#7052) 2018-05-25 18:50:31 +02:00
Valentin Lorentz 1e87ed44d5 docker-compose: Only bind ports 3000 and 4000 on localhost. (#7138) 2018-04-15 13:57:58 +02:00
Eugen Rochko d7573fe584
Separate chown command in Dockerfile. Use tootsuite/mastodon image (#6662)
Fix #6605
2018-03-07 01:57:31 +01:00
Akihiko Odaki 81cefc1913 Do not use npm (#6656)
Both of yarn and npm are used in Mastodon, but the combined usage requires
a redundant dependency and may lead to data inconsistency.

Considering that yarn has autoclean feature which npm does not have,
this change replaces all npm usage with yarn.

This change requires documentation update. Most notably, the following
command must be executed before assets precompilation if any system
dependency of node-sass has changed:

yarn install --force --pure-lockfile
2018-03-06 21:36:46 +01:00
Eugen Rochko 3ebc0ad4d3
Full-text search for authorized statuses (#6423)
* Add full-text search for authorized statuses

- Search API will return statuses that match the query
- Only for logged in users
- Only if you are author of the status,
- Or you were mentioned in it
- Or you favourited or reblogged it
- Configuration over `ES_ENABLED`, `ES_HOST`, `ES_PORT`, `ES_PREFIX`
- Run `rails chewy:deploy` to create & populate index

Fix #5880
Fix #4293
Fix #1152

* Add commented out docker-compose configuration for ES container

* Optimize index import, filter search results

* Add basic normalization to the index

* Add better stemming and normalization to the index

* Skip webfinger request if search query includes both @ and a space

* Fix code style

* Visually separate search result sections

* Fix code style issues
2018-02-09 23:04:47 +01:00
Akihiko Odaki 9da81a1639 Isolate internal services from external networks in Docker configuration (#6369)
The database and Redis do not need external connections, so isolate them
and prevent unauthorized access.
2018-02-03 18:44:22 +01:00
Yamagishi Kazutoshi 3d881eed27 Add packs volume to docker-compose.yml (#6348) 2018-01-24 13:29:32 +01:00
unarist c75ca0525b Specify middleware versions in docker-compose.yml (#5247)
PostgreSQL10 has been released, but upgrading from older versions needs dump/restore. If you pull new version without those handling, db service will fail to launch.

To prevent accidentally upgrading, and as a recommended version, this patch specifies PostgreSQL and Redis version.
2017-10-06 20:37:17 +02:00
Valentin Ouvrard 75bd141e22 Switch docker-compose to version 3. (#2747)
* Switch docker-compose to version 3.

It allow possibility to Deploy Mastodon in a Swarm cluster directly from the compose file.

* switch to compose v3 without depend.
2017-05-04 15:56:05 +02:00
Eugen Rochko f5bf5ebb82 Replace sprockets/browserify with Webpack (#2617)
* Replace browserify with webpack

* Add react-intl-translations-manager

* Do not minify in development, add offline-plugin for ServiceWorker background cache updates

* Adjust tests and dependencies

* Fix production deployments

* Fix tests

* More optimizations

* Improve travis cache for npm stuff

* Re-run travis

* Add back support for custom.scss as before

* Remove offline-plugin and babili

* Fix issue with Immutable.List().unshift(...values) not working as expected

* Make travis load schema instead of running all migrations in sequence

* Fix missing React import in WarningContainer. Optimize rendering performance by using ImmutablePureComponent instead of
React.PureComponent. ImmutablePureComponent uses Immutable.is() to compare props. Replace dynamic callback bindings in
<UI />

* Add react definitions to places that use JSX

* Add Procfile.dev for running rails, webpack and streaming API at the same time
2017-05-03 02:04:16 +02:00
Pierre Ozoux 0d2910478a Use image too in docker-compose (#1109)
* Use image too in docker-compose

It is possible with version 2 of compose to use both `build` and `image`

* Update docker-compose.yml
2017-04-15 02:07:59 +02:00
Valentin Ouvrard b723ee73fc Add (commented) volume in docker-compose && Mitigating the HTTPoxy Vulnerability (#1253)
* enable commented volume in docker-compose.yml

* Disable unworking Nginx root directory && Mitigating the HTTPoxy Vulnerability

* add my instance to the list

* enable GZIP on nginx.conf

* readd root /home/mastodon/live/public;
2017-04-11 16:04:56 +02:00
Eugen 211920b622 Revert "add persistance to Postresql container" (#1251) 2017-04-08 12:25:23 +02:00
Valentin_NC b73cee9774 add volume for redis container 2017-04-05 14:13:22 +11:00
Valentin_NC 4512fde181 add persistance to Postresql container 2017-04-05 09:06:08 +11:00
Eugen Rochko f722bd2387 Separate background jobs into different queues. ATTENTION: new queue "pull"
must be added to the Sidekiq invokation in your systemd file

The pull queue will handle link crawling, thread resolving, and OStatus
processing. Such tasks are more likely to hang for a longer time (due to
network requests) so it is more sensible to not make the "in-house" tasks
wait for them.
2017-04-04 00:53:20 +02:00
Wonderfall b7beb4368c
use alpine-based official images 2017-04-03 03:09:56 +02:00
Eugen Rochko ccb8ac8573 Make the streaming API also handle websockets (because trying to get the browser EventSource interface to
work flawlessly was a nightmare). WARNING: This commit makes the web UI connect to the streaming API instead
of ActionCable like before. This means that if you are upgrading, you should set that up beforehand.
2017-02-04 00:34:31 +01:00
Eugen Rochko cc70f28f19 Adding rack timeout of 30sec, PuSH jobs moved to push queue so they
can be processed separately
2016-11-29 02:07:14 +01:00
Eugen Rochko 8efa081f21 Remove Neo4J 2016-11-24 23:46:27 +01:00
Eugen Rochko 19615a2c37 Add restart policy to docker compose 2016-10-25 13:21:48 +02:00
Eugen Rochko 492a682e34 Add custom neo4j dockerfile with graphaware and noderank plugins 2016-10-15 16:13:16 +02:00
Eugen Rochko 4d336cefac Add sync command for neo4j, fix configuration, add neo4j to docker-compose, fix seed 2016-10-15 12:37:43 +02:00