はじめに

  • 別用に動かしていた Google Compute Engine の e2-micro に同居させました
  • ちゃんとした手順は書かれていません
    • Claudeに聞きながらどうにかした感じなので……
  • ストレージ (画像のアップロード先関連) は現在時点、上手くいっていません
    • Google Cloud Storage … そもそもアップロードの段階で死んでいる
    • ファイルシステム … アップロードした画像が表示されない
      • おそらく権限設定の不備
  • たぶんDocker使った方が早いと思います

手順

  • 下記を上から実行する

手動インストール | Hollo

バージョン (Ubuntu 20.04 で apt 実行後に手を入れたもの)

  • Node.js (v22.12.0)
  • PostgreSQL (v17)

記載外の手順

証明書の発行 (Let’s Encript)

  • nginx とDNSの設定を実施後に対応
sudo certbot --nginx -d hollo.rettuce.page

# 更新可否の確認
sudo certbot renew --dry-run

migration時のエラー

You might need to add explicit type casts

sudo vi /etc/postgresql/17/main/postgresql.conf
# 下記設定を追加
transform_null_equals = on
sudo systemctl restart postgresql

function gen_random_uuid() does not exist

sudo -i -u postgres

# user postgres
psql
\c your_hollo_db

CREATE EXTENSION IF NOT EXISTS "pgcrypto";

function any_value(text) does not exist

sudo -i -u postgres

# user postgres
psql
CREATE OR REPLACE AGGREGATE any_value(anyelement) (
    SFUNC = first_agg,
    STYPE = anyelement
);

CREATE OR REPLACE AGGREGATE any_value(text) (
    SFUNC = first_agg,
    STYPE = text
);

function first_agg(anyelement, anyelement) does not exist

sudo -i -u postgres

# user postgres
psql
CREATE OR REPLACE FUNCTION first_agg_sfunc(anyelement, anyelement)
RETURNS anyelement AS $$
    SELECT $1;
$$ LANGUAGE SQL IMMUTABLE;

CREATE OR REPLACE AGGREGATE any_value(anyelement) (
    SFUNC = first_agg_sfunc,
    STYPE = anyelement
);

CREATE OR REPLACE AGGREGATE any_value(text) (
    SFUNC = first_agg_sfunc,
    STYPE = text
);

nginx 設定

# Let's Encrypt がよしなに生成する設定は省略

server {
    server_name your.domain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        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 $scheme;
    }
}

duplicate listen options for [::]:443

  • Let’s Encrypt が .conf 生成時に追加する default_server を消しておく
  • nginx上で別アプリケーションを動かしている場合のみ発生する話のはずなので、そうでないならばスルーでよいはず
listen 443 ssl;
listen [::]:443 ssl;