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