mostly refactor mail-setup, more self contained
[distro-setup] / distro-end
index a1d9389e801fa6e1618efaa57c104785b48091d4..e0bf4f66fc936785a3fb7f50b2e716d79d949d54 100755 (executable)
@@ -65,12 +65,14 @@ case $HOSTNAME in
             apache2
             apache2-doc
             apt-doc
+            apt-listchanges
             aptitude-doc-en
             bash-doc
             binutils-doc
             bwm-ng
             chromium
             cpio-doc
+            cloc
             cron
             debconf-doc
             duplicity
@@ -421,6 +423,112 @@ EOF
         sgo pump
         ########## end pump.io setup ############
 
+
+        ############# begin setup mastodon ##############
+
+        # https://store.docker.com/editions/community/docker-ce-server-debian?tab=description
+        pi  software-properties-common
+        curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
+        sudo add-apt-repository \
+             "deb [arch=amd64] https://download.docker.com/linux/debian \
+         $(lsb_release -cs) \
+         stable"
+        p update
+        pi docker-ce
+        sgo docker
+        # this may not be needed
+        ser start docker
+
+        curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` | s dd of=/usr/local/bin/docker-compose
+        s chmod +x /usr/local/bin/docker-compose
+
+        # i subscrubed to https://github.com/docker/compose/releases.atom
+        # to deal with updates manually.
+
+        cd ~
+        i clone https://github.com/tootsuite/mastodon
+        cd mastodon
+        # https://github.com/tootsuite/mastodon/tree/v1.1.2
+        # subbed to atom feed to deal with updates
+        i co v1.1.2
+
+        # per instructions, uncomment redis/postgres persistence in docker-compose.yml
+        sed -i 's/^#//' docker-compose.yml
+
+        cat >.env.production <<'EOF'
+REDIS_HOST=redis
+REDIS_PORT=6379
+DB_HOST=db
+DB_USER=postgres
+DB_NAME=postgres
+DB_PASS=
+DB_PORT=5432
+
+LOCAL_DOMAIN=mast.iankelling.org
+LOCAL_HTTPS=true
+
+SINGLE_USER_MODE=true
+
+SMTP_SERVER=10.8.0.4
+SMTP_PORT=25
+SMTP_LOGIN=li
+SMTP_FROM_ADDRESS=notifications@mast.iankelling.org
+SMTP_DOMAIN=mast.iankelling.org
+SMTP_DELIVERY_METHOD=smtp
+EOF
+
+        for key in PAPERCLIP_SECRET SECRET_KEY_BASE OTP_SECRET; do
+            printf "%s=%s" $key "$(docker-compose run --rm web rake secret)" >>.env.production
+        done
+        s cat /etc/mailpass| while read -r domain port pass; do
+            if [[ $domain == mail.iankelling.org ]]; then
+                printf "SMTP_PASSWORD=%s" "$pass" >>.env.production
+                break
+            fi
+        done
+
+
+
+        docker-compose run --rm web rails assets:precompile
+
+        # docker daemon takes care of starting on boot.
+        docker-compose up -d
+
+        acme-tiny-wrapper mast.iankelling.org
+        s a2enmod proxy_wstunnel headers
+        apache-site -f 3000 - mast.iankelling.org <<'EOF'
+   ProxyPreserveHost On
+   RequestHeader set X-Forwarded-Proto "https"
+   ProxyPass /500.html !
+   ProxyPass /oops.png !
+   ProxyPass /api/v1/streaming/ ws://localhost:4000/
+   ProxyPassReverse /api/v1/streaming/ ws://localhost:4000/
+   ErrorDocument 500 /500.html
+   ErrorDocument 501 /500.html
+   ErrorDocument 502 /500.html
+   ErrorDocument 503 /500.html
+   ErrorDocument 504 /500.html
+EOF
+
+
+        ############### !!!!!!!!!!!!!!!!!
+        ############### manual steps:
+
+        # only following 2 people atm, so not bothering to figure out backups
+        # when mastodon has not documented it at all.
+        #
+        # fsf@status.fsf.org
+        # cwebber@toot.cat
+        # dbd@status.fsf.org
+        # johns@status.fsf.org
+
+        # sign in page is at https://mast.iankelling.org/auth/sign_in
+        # register as iank, then
+        # https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Administration-guide.md
+        # docker-compose run --rm web bundle exec rails mastodon:make_admin USERNAME=iank
+
+        ############# end setup mastodon ##############
+
         echo "$0: $(date): ending now)"
         exit 0
         ;;
@@ -429,7 +537,38 @@ esac
 
 ########### end section including li/lj ###############
 
-# pump.io periodic backup
+if [[ $HOSTNAME == treetowl ]]; then
+    # note, see bashrc for more documentation.
+    pi rss2email
+    s dd of=/etc/systemd/system/rss2email.service <<'EOF'
+[Unit]
+Description=rss2email
+After=multi-user.target
+
+[Service]
+User=ian
+Type=oneshot
+# about 24 hours of failures
+ExecStart=/a/bin/log-quiet/sysd-mail-once -288 rss2email r2e run
+EOF
+    s dd of=/etc/systemd/system/rss2email.timer <<'EOF'
+[Unit]
+Description=rss2email
+
+[Timer]
+# for initial run. required.
+OnActiveSec=30
+# for subsequent runs.
+OnUnitInactiveSec=300
+
+[Install]
+WantedBy=timers.target
+EOF
+    s systemctl daemon-reload
+    sgo rss2email.timer
+fi
+
+######### begin  pump.io periodic backup #############
 if [[ $HOSTNAME == treetowl ]]; then
     s dd of=/etc/systemd/system/pumpbackup.service <<'EOF'
 [Unit]
@@ -441,7 +580,6 @@ User=ian
 Type=oneshot
 ExecStart=/a/bin/log-quiet/sysd-mail-once pump-backup /a/bin/distro-setup/pump-backup
 EOF
-
     s dd of=/etc/systemd/system/pumpbackup.timer <<'EOF'
 [Unit]
 Description=pump li backup hourly
@@ -455,6 +593,7 @@ EOF
     s systemctl daemon-reload
     sgo pumpbackup.timer
 fi
+#########  end  pump.io periodic backup #############
 
 case $distro in
     debian|ubuntu)
@@ -495,6 +634,8 @@ spa lib32stdc++6 default-jdk
 
 
 if [[ $HOSTNAME == treetowl ]]; then
+    ############# begin syncthing setup ###########
+
     # It\'s simpler to just worry about running it in one place for now.
     # I assume it would work to clone it\'s config to another non-phone
     # and just run it in one place instead of the normal having a
@@ -563,6 +704,8 @@ if [[ $HOSTNAME == treetowl ]]; then
     #
     # Note, the other thing i did was port forward port 22000,
     # per https://docs.syncthing.net/users/firewall.html
+
+    #############  end syncthing setup ###########
 fi