Inboxen

Inboxen のインストールに嵌まったので、そのメモ。 といっても、Web 画面に辿り着くのは、簡単で、Postfix の設定に手こずった。 まずインストール/実行用のアカウント inboxen を作成し、pyenv で Python 3.9.0 をインストール。 pyenv install 3.9.0 リポジトリをクローン。 git clone https://github.com/Inboxen/Inboxen.git pip を実行。gunicorn もインストールする。 cd Inboxen pip install -r requirements.txt pip install gunicorn inboxen.config を作成する。 cp -i inboxen/config_defaults.yaml inboxen.config vi inboxen.config inboxen.config の内容は以下のようにした。 secret_key: "secret" admins: - - Koichi MATSUMOTO - mzch@example.com allowed_hosts: ['example.com','www.example.com'] cache: backend: "django.core.cache.backends.filebased.FileBasedCache" location: "inboxen_cache" timeout: 300 database: host: "127.0.0.1" name: "inboxen" password: "password" port: "5432" user: "inboxen" debug: false enable_registration: false inbox_length: 6 language_code: "en-gb" media_root: "media_content" per_user_email_quota: 0 ratelimits: inbox: count: 100 window: 1440 login: count: 5 window: 60 register: count: 5 window: 30 single_email: count: 100 window: 60 server_email: "no-reply@example.
Read more

続: Ptorx

昨日記事にあげた Ptorx だが、Nginx で妥協したのがモヤモヤするので、Apache でも構成してみた。 が、どうしても、Nginx の try_files ディレクティブと同等のことが、サイト設定だけでは完結せず、以下のような内容の .htaccess を web/dist/ accownt/web/dist ccashcow/web/dist yalcs/web/dist に配置せざるをえなかった。知識の乏しさに泣きそうになる。 <Files ".htaccess"> Require all denied </Files> RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.html [L] その上でサイト設定は以下のようにした。 <VirtualHost *:80> ServerName example.com ServerAlias www.example.com RewriteEngine On RewriteCond %{SERVER_NAME} =www.example.com [OR] RewriteCond %{SERVER_NAME} =example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerName example.com ServerAlias www.example.com ServerAdmin webmaster@example.com Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.
Read more

Ptorx

Ptorx は、メール転送サービスを構築できるサーバーアプリ。似たようなソフトに、SimpleLogin や、AnonAddy があるが、モダンなインターフェースが特徴。例によってインストールに手こずった。 最初、ウェブサーバーは、Apache でやろうとしたのだが、全然うまく動いてくれないので、まずはドキュメントに書かれている環境で試すべき、と考えて、Nginx が動いている鯖にインストールし直した。 ところが、ユーザー登録はまではこぎつけたものの、ログインできない。むろん、Issue で質問しまくったが、作者にも不明だった。 そこで、ソースをよく見てみると、なんと server/.env と accownt/server/.env (あと多分、ccashcow/server/.envも) で JWT_KEY の値を同じにしなくてはならないことが判明。そこを修正すれば、するっとログインできてしまった。 あと、production 環境では、メールの送信に sendmail コマンドを使っているが、少なくとも Postfix を入れている環境では、パスが指定されていないのでエラーになる。これは PR を送ってみた。 あと、From: ヘッダと Envelope-From が異なるので、iCloud といったサービスでは、DKIM チェックが unknown になってしまう。これは質問中。

Scoold と Apache

Scoold のインストールに手こずったのでその備忘録。必須モジュールとして、Apache、OpenJDK、Node.js が必要。事前に導入しておく。 まず前提として、Para をインストール。バックエンドのデータベースはいろいろ選べるが、今回は MongoDB をチョイス。MongoDB 用の DAO モジュール も併せてダウンロードしておく。ただし、面倒くさかったら、ホスティングサービス もあるので、それを利用してもよし。 Para 起動用のユーザーを作成して、su する。ホームディレクトリは、仮に /srv/para とする。 Para の jar モジュールをホームディレクトリに配置。plugins ディレクトリを作成し、DAO モジュールをそこに配置する。 設定ファイル application.conf を作成。以下のような感じ。 # the name of the root app para.app_name = "Para" # or set it to 'production' para.env = "production" # Plugins para.plugin_folder = "plugins/" # database para.dao = "MongoDBDAO" para.mongodb.host = "127.0.0.1" para.mongodb.database = "para" para.mongodb.user = "para" para.mongodb.password = "para_mongo_password" # Google para.gp_app_id = "xxxx" para.
Read more

Mastodon と Pleroma 始めました

ひとり Mastodon と ひとり Pleroma 始めました。どっちも SNS なのにひとりでどうすんじゃ、とか、意味ねぇー、とか思ったりもしますが、まあモノは試しと言いますし。 どちらも連携してくれるサーバーを募集中です。 あと、ユーザーも募集中です。Pleroma の方は、公開サーバーですので、随時サインアップしてください。Mastodon の方は、招待制なので、コメントを残していただくか、Twitter でお問い合わせください。

Formspree

例によって例のごとく、ドキュメントが未整備なオープンソースアプリをインストールしたので、そのメモ。 Formspree は、静的サイトなどにメールフォームを設置するためのサーバーアプリケーションである。設置が面倒な方は、ホスティングサービスもあるので、そちらを利用された方がよいかと。 まず、Python をインストールする。Python は、個人的に pyenv を使うので、そのように。 git clone https://github.com/pyenv/pyenv.git ~/.pyenv .profile を編集して、以下を追記。 PYENV_ROOT="$HOME/.pyenv" export PYENV_ROOT if [ -d "$PYENV_ROOT/bin" ] ; then PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" fi 前提ファイルをインストール sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev libmariadb-dev-compat libpq-dev Node.js もインストールしておく。 curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - sudo apt install -y nodejs Python をインストール。その後、pipenv をインストール。
Read more

Read The Docs のインストール

ソースコード開発管理には多種多様なバージョン管理ツールが揃っているが、ドキュメントについては、同じツールを使えばいいやということか、あまり種類がない。その中でもよく使われている、Read The Docs をインストールしてみた。 ドキュメント管理のツールなので、さぞかしドキュメントが充実しているだろう…ということはなく、やっぱり腐っているところがある。 まず第一に、プロダクションユースの設定が公開されているソース自体に含まれていない。つまり、自分で書かないといけない。この時点でまあ論外といえば論外なのだが、開発版の設定はついてくるので、Django のドキュメントを眺めつつ、適宜修正。うちは、以下のようにした。バックエンドに PostgreSQL を使うように指定。ドメイン名は、仮に example.jp としておく。 """Local development settings, including local_settings, if present.""" from __future__ import absolute_import import os from .base import CommunityBaseSettings class CommunityProductionSettings(CommunityBaseSettings): """Settings for personal production use""" SECRET_KEY = '(充分な長さのシークレットキー。とりあえず、ランダムな16進数で50桁もあればいいかも)' PRODUCTION_DOMAIN = 'www.example.jp' WEBSOCKET_HOST = 'www.example.jp' @property def DATABASES(self): # noqa return { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'readthedocs', 'USER' : 'readthedocs', 'PASSWORD' : 'パスワード', 'HOST' : 'localhost', 'PORT' : '5432', } } # Email DEFAULT_FROM_EMAIL = 'no-reply@example.
Read more

Apache で php-fpm を使う

やっぱり、Apache でも http2 を有効にしたい!ということで、慣れ親しんだ、php_module からおさらばして、php-fpm で構成し直した。Debian & php 7.3 での例を示す。 まず、php-fpm をインストール。まあ、php_module を削除すれば、勝手に php-fpm が入るんですが。ダウンタイムを極力避けるなら、この手順で。 sudo apt install php-fpm 次に proxy_fcgi を有効にする。 sudo a2enmod proxy_fcgi そうしたら、php_module を削除する。 sudo apt purge libapache2-mod-php libapache2-mod-php7.3 prefork モジュールが読み込まれているのをやめて、event モジュールに差し替える。ついでに、http2 モジュールを有効にする。 sudo a2dismod mpm_prefork sudo a2enmod mpm_event http2 最後に、Apache の php-fpm 設定を有効にする。 sudo a2enconf php7.3-fpm あとは、Apache を再起動するだけ。 sudo systemctl restart apache2 うむ。簡単だった。

Prismo

Prismo をインストールしてみたが、ドキュメントが腐っているという、オープンソースフリーソフトにありがちなものだったので、インストール手順をまとめておく。 ソースを git clone https://gitlab.com/prismosuite/prismoとかして ダウンロードする。 ruby 2.5.1 が必要なので、rvm なり、rbenv なりで環境を整えておく。おすすめは、rbenv。 Node.JS 10.x と yarn が必要なので、インストールしておく。 bundler をインストール。gem isntall bundler sidekiq をインストール。gem install sidekiq Gemfile を修正する。 --- Gemfile.orig 2019-06-26 09:30:35.440184122 -0700 +++ Gemfile 2019-06-26 06:50:29.313718143 -0700 @@ -77,17 +77,19 @@ gem 'webmention' gem 'webmention-endpoint' gem 'doorkeeper' +gem 'listen', '>= 3.0.5', '< 3.2' +gem 'bullet' group :development, :test do gem 'dotenv-rails' gem 'byebug', platforms: %i[mri mingw x64_mingw] - gem 'bullet' + # gem 'bullet' gem 'rspec-rails', '~> 3.
Read more

Postfix, Dovecot and MySQL

Postfix と Dovecot を使って、メールサーバーを運用しているのだが、うちは構成が少し変則的で、メール送信サーバー (SMTP) とメール受信サーバー (IMAP/POP3) が分離している。最終的なメールの配送は Dovecot の LMTP デーモンに頼っているのだが、エイリアスにメールが配送されないという問題が発覚した。 別にバグでも何でもなく、ただの構成ミスである。Dovecot の仮想メールボックス機能を使ってメールアドレスを管理しているのだが、当初、Postfix の送信サーバーと Dovecot の受信サーバーは同居していたので、ローカルの配送は、Postfix の Virtual Transport に任せていた。この時点では、エイリアスの処理も問題なかった。 最近、サーバーの移転を行ったのにあわせて、送信サーバーと受信サーバーの分離を行ったのだが、これは、ローカル配送に Dovecot の LMTP デーモンが使えることがわかったからである。で、何も考えずに移行して嵌まった、と。 アドレス管理のバックエンドに MySQL を使い、PostfixAdmin で Web から管理していたのだが、それ自体はまあついで。問題は、LMTP に配送を移したことで、Postfix の Virtual Transport が解釈されなくなってしまったことにある。別ソフトなんだから、当たり前ですな。そのため、MySQL で管理していたエイリアス情報が参照されなくなってしまい、__未達__になっていた、と。 多分、色んな解決法があるんでしょうけど、バックエンドに MySQL を使っている私の場合は、Dovecot のユーザー情報取得部分に手を入れることで、部分的に解決した。具体的には、ユーザー情報を MySQL から取得するクエリー文を以下のように修正しただけ。 user_query=SELECTconcat('/var/mail/',maildir)asmail,concat('*:bytes=',quota)asquota_rule,998asuid,8asgidFROMmailboxWHEREactive='1'ANDusername=(SELECTgotoFROMaliasWHERE(address='%u'ANDalias.active='1')OR(address=(SELECTconcat('%n','@',target_domain)FROMalias_domainwherealias_domain='%d'ANDalias_domain.active='1')))PostfixAdmin は、メールボックスの情報もエイリアステーブルに書き込んでくれるので (その場合、エイリアスとメールボックスに同じ値が入る)、通常のメールボックス宛てのメールもこれでちゃんと読み書きできる。ということで。メールアドレスのエイリアスとドメインのエイリアスはこれで解決したが、外部のアドレスに対する転送だけはどうしようもなかった。LMTP にその機能がないので。 [2019/07/20 追記] LMTP 全然関係なかった。なぜか、receive_override_options = no_address_mappings という行が、main.cf に紛れ込んでいて、こいつのせいで、Alias 展開が阻害されていたという…いつこんな記述を加えたのか…恥ずかしいっ。