<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>mastodon &amp;mdash; MoonBlog</title>
    <link>https://moonblog.laca.dev/tag:mastodon</link>
    <description>Egy régivágású blog</description>
    <pubDate>Fri, 21 Aug 2026 13:42:36 +0200</pubDate>
    <item>
      <title>Privát Mastodon instance telepítése</title>
      <link>https://moonblog.laca.dev/privat-mastodon-instance-telepitese</link>
      <description>&lt;![CDATA[Alapvetően ez alapján a leírás alapján csináltam:&#xA;https://github.com/felx/mastodon-documentation/blob/master/Running-Mastodon/Docker-Guide.md&#xA;&#xA;OS: Ubuntu 22.04.2 LTS&#xA;&#xA;Szükséges csomagok telepítése&#xA;&#xA;OS:&#xA;&#xA;apt install docker.io build-essential nginx&#xA;&#xA;install docker compose&#xA;&#xA;mkdir -p ~/.docker/cli-plugins/&#xA;curl -SL https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x8664 -o ~/.docker/cli-plugins/docker-compose&#xA;chmod +x ~/.docker/cli-plugins/docker-compose&#xA;export DOCKERBUILDKIT=1&#xA;&#xA;Mastodon telepítése&#xA;&#xA;git clone https://github.com/tootsuite/mastodon&#xA;&#xA;cd mastodon&#xA;cp .env.production.sample .env.production&#xA;docker compose build&#xA;sudo chown -R 991:991 public&#xA;docker compose run --rm web rake mastodon:setup&#xA;docker compose down&#xA; &#xA;&#xA;A mastodon:setup lépés végén kiírja a konzolra a kulcs-érték párokat, azt ki kell másolni és betenni az .env.productions fájlba.&#xA;&#xA;Az .env.production fájl tartalma ilyesmi lesz:&#xA;&#xA;LOCALDOMAIN=mastodon.example.com&#xA;SINGLEUSERMODE=false&#xA;SECRETKEYBASE=ljkljkljlakjdlkjaaks&#xA;VAPIDPRIVATEKEY=ihlhlhlkjhljk=&#xA;VAPIDPUBLICKEY=kjhkhjhkjhkjhkjhkjhkjhkjhkjhkj=&#xA;DBHOST=db&#xA;DBPORT=5432&#xA;DBNAME=postgres&#xA;DBUSER=postgres&#xA;DBPASS=&#xA;REDISHOST=redis&#xA;REDISPORT=6379&#xA;REDISPASSWORD=&#xA;SMTPSERVER=smtp.example.com&#xA;SMTPPORT=587&#xA;SMTPLOGIN=smtptuser@smtp.example.com&#xA;SMTPPASSWORD=MySmTpP4ssw0rd&#xA;SMTPAUTHMETHOD=plain&#xA;SMTPOPENSSLVERIFYMODE=none&#xA;SMTPENABLESTARTTLS=auto&#xA;SMTPFROMADDRESS=Mastodon notifications@mastodon.example.com&#x9;&#x9;&#xA;&#xA;Mastodon instance indítása&#xA;&#xA;docker compose up -d&#xA;&#xA;Reverse proxy config&#xA;&#xA;map $httpupgrade $connectionupgrade {&#xA;  default upgrade;&#xA;  &#39;&#39;      close;&#xA;}&#xA;&#xA;server {&#xA;  listen 80;&#xA;  listen [::]:80;&#xA;  servername mastodon.example.com;&#xA;  root /home/ubuntu/mastodon/public;&#xA;  # Useful for Let&#39;s Encrypt&#xA;  location /.well-known/acme-challenge/ { allow all; }&#xA;  location / { return 301 https://$host$requesturi; }&#xA;}&#xA;&#xA;server {&#xA;  listen 443 ssl http2;&#xA;  listen [::]:443 ssl http2;&#xA;  servername mastodon.example.com;&#xA;&#xA;  #sslprotocols TLSv1.2;&#xA;  #sslciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;&#xA;  #sslpreferserverciphers on;&#xA;  sslsessioncache shared:SSL:10m;&#xA;  sslprotocols TLSv1.2 TLSv1.3;&#xA;  sslpreferserverciphers off;&#xA;&#xA;  sslciphers &#34;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&#34;;&#xA;&#xA;  sslcertificate     /etc/letsencrypt/live/mastodon.example.com/fullchain.pem;&#xA;  sslcertificatekey /etc/letsencrypt/live/mastodon.example.com/privkey.pem;&#xA;  ssldhparam /etc/letsencrypt/ssl-dhparams.pem;&#xA;&#xA;  keepalivetimeout    70;&#xA;  sendfile             on;&#xA;  clientmaxbodysize 80m;&#xA;&#xA;  root /home/ubuntu/live/public;&#xA;&#xA;  gzip on;&#xA;  gzipdisable &#34;msie6&#34;;&#xA;  gzipvary on;&#xA;  gzipproxied any;&#xA;  gzipcomplevel 6;&#xA;  gzipbuffers 16 8k;&#xA;  gziphttpversion 1.1;&#xA;  gziptypes text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;&#xA;&#xA;  addheader Strict-Transport-Security &#34;max-age=31536000&#34;;&#xA;&#xA;  location / {&#xA;    tryfiles $uri @proxy;&#xA;  }&#xA;&#xA;  location ~ ^/(emoji|packs|system/accounts/avatars|system/mediaattachments/files) {&#xA;    addheader Cache-Control &#34;public, max-age=31536000, immutable&#34;;&#xA;    tryfiles $uri @proxy;&#xA;  }&#xA;  &#xA;  location /sw.js {&#xA;    addheader Cache-Control &#34;public, max-age=0&#34;;&#xA;    tryfiles $uri @proxy;&#xA;  }&#xA;&#xA;  location @proxy {&#xA;    proxysetheader Host $host;&#xA;    proxysetheader X-Real-IP $remoteaddr;&#xA;    proxysetheader X-Forwarded-For $proxyaddxforwardedfor;&#xA;    proxysetheader X-Forwarded-Proto https;&#xA;    proxysetheader Proxy &#34;&#34;;&#xA;    proxypassheader Server;&#xA;&#xA;    proxypass http://127.0.0.1:3000;&#xA;    proxybuffering off;&#xA;    proxyredirect off;&#xA;    proxyhttpversion 1.1;&#xA;    proxysetheader Upgrade $httpupgrade;&#xA;    proxysetheader Connection $connectionupgrade;&#xA;&#xA;    tcpnodelay on;&#xA;  }&#xA;&#xA;  location /api/v1/streaming {&#xA;    proxysetheader Host $host;&#xA;    proxysetheader X-Real-IP $remoteaddr;&#xA;    proxysetheader X-Forwarded-For $proxyaddxforwardedfor;&#xA;    proxysetheader X-Forwarded-Proto https;&#xA;    proxysetheader Proxy &#34;&#34;;&#xA;&#xA;    proxypass http://127.0.0.1:4000;&#xA;    proxybuffering off;&#xA;    proxyredirect off;&#xA;    proxyhttpversion 1.1;&#xA;    proxysetheader Upgrade $httpupgrade;&#xA;    proxysetheader Connection $connectionupgrade;&#xA;&#xA;    tcpnodelay on;&#xA;  }&#xA;&#xA;  errorpage 500 501 502 503 504 /500.html;&#xA;}&#xA;&#xA;tech&#xA;mastodon]]&gt;</description>
      <content:encoded><![CDATA[<p>Alapvetően ez alapján a leírás alapján csináltam:
<a href="https://github.com/felx/mastodon-documentation/blob/master/Running-Mastodon/Docker-Guide.md">https://github.com/felx/mastodon-documentation/blob/master/Running-Mastodon/Docker-Guide.md</a></p>

<p>OS: Ubuntu 22.04.2 LTS</p>

<h2 id="szükséges-csomagok-telepítése">Szükséges csomagok telepítése</h2>

<h3 id="os">OS:</h3>

<p><code>apt install docker.io build-essential nginx</code></p>

<h3 id="install-docker-compose">install docker compose</h3>

<pre><code class="language-bash">mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose
export DOCKER_BUILDKIT=1
</code></pre>

<h2 id="mastodon-telepítése">Mastodon telepítése</h2>

<pre><code class="language-bash">git clone https://github.com/tootsuite/mastodon

cd mastodon
cp .env.production.sample .env.production
docker compose build
sudo chown -R 991:991 public
docker compose run --rm web rake mastodon:setup
docker compose down
 
</code></pre>

<p>A <code>mastodon:setup</code> lépés végén kiírja a konzolra a kulcs-érték párokat, azt ki kell másolni és betenni az <code>.env.productions</code> fájlba.</p>

<p>Az <code>.env.production</code> fájl tartalma ilyesmi lesz:</p>

<pre><code class="language-ini">LOCAL_DOMAIN=mastodon.example.com
SINGLE_USER_MODE=false
SECRET_KEY_BASE=ljkljkljlakjdlkjaaks
VAPID_PRIVATE_KEY=ihlhlhlkjhljk=
VAPID_PUBLIC_KEY=kjhkhjhkjhkjhkjhkjhkjhkjhkjhkj=
DB_HOST=db
DB_PORT=5432
DB_NAME=postgres
DB_USER=postgres
DB_PASS=
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
SMTP_SERVER=smtp.example.com
SMTP_PORT=587
SMTP_LOGIN=smtptuser@smtp.example.com
SMTP_PASSWORD=MySmTpP4ssw0rd
SMTP_AUTH_METHOD=plain
SMTP_OPENSSL_VERIFY_MODE=none
SMTP_ENABLE_STARTTLS=auto
SMTP_FROM_ADDRESS=Mastodon &lt;notifications@mastodon.example.com&gt;		
</code></pre>

<h3 id="mastodon-instance-indítása">Mastodon instance indítása</h3>

<pre><code>docker compose up -d
</code></pre>

<h2 id="reverse-proxy-config">Reverse proxy config</h2>

<pre><code class="language-nginx">map $http_upgrade $connection_upgrade {
  default upgrade;
  &#39;&#39;      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name mastodon.example.com;
  root /home/ubuntu/mastodon/public;
  # Useful for Let&#39;s Encrypt
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name mastodon.example.com;

  #ssl_protocols TLSv1.2;
  #ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  #ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers off;

  ssl_ciphers &#34;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&#34;;


  ssl_certificate     /etc/letsencrypt/live/mastodon.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/mastodon.example.com/privkey.pem;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 80m;

  root /home/ubuntu/live/public;

  gzip on;
  gzip_disable &#34;msie6&#34;;
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  add_header Strict-Transport-Security &#34;max-age=31536000&#34;;

  location / {
    try_files $uri @proxy;
  }

  location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
    add_header Cache-Control &#34;public, max-age=31536000, immutable&#34;;
    try_files $uri @proxy;
  }
  
  location /sw.js {
    add_header Cache-Control &#34;public, max-age=0&#34;;
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy &#34;&#34;;
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy &#34;&#34;;

    proxy_pass http://127.0.0.1:4000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 503 504 /500.html;
}

</code></pre>

<p><a href="https://moonblog.laca.dev/tag:tech" class="hashtag"><span>#</span><span class="p-category">tech</span></a>
<a href="https://moonblog.laca.dev/tag:mastodon" class="hashtag"><span>#</span><span class="p-category">mastodon</span></a></p>
]]></content:encoded>
      <guid>https://moonblog.laca.dev/privat-mastodon-instance-telepitese</guid>
      <pubDate>Sat, 15 Jul 2023 18:50:42 +0200</pubDate>
    </item>
  </channel>
</rss>