Closed15

CloudRunとPostgreSQL in GCEとの接続を確立

いなむらいなむら

PostgreSQL in GCEは外部から接続できることを確認

以下のコマンドを同じVPC内の別GCEからアクセスできることを確認した

psql -U db_user -h 10.138.0.4 -p 5432 -d db_name
いなむらいなむら

Django in CloudRun側からの設定がダメっぽいので、それをみていく

いなむらいなむら

localのdockerとPostgreSQL in GCEで通信ができるかを試す

GCEの/etc/postgresql/15/main/pg_hba.confにて以下を追加
ローカルとの接続をできるようにするため

host all cooking_recipe 000.000.000.000/32 md5
```

その後再起動

sudo systemctl status postgresql

いなむらいなむら

sslmodeを追加

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
...
        'OPTIONS': {
            'sslmode': 'require',
        }
    }
}
いなむらいなむら

データベースの所有者を確認して、返信する

postgres=# SELECT datname, pg_catalog.pg_get_userbyid(datdba) AS owner
FROM pg_database
WHERE datname = 'cooking_recipe';
    datname     |  owner   
----------------+----------
 cooking_recipe | postgres

postgres=# ALTER DATABASE cooking_recipe OWNER TO cooking_recipe;
ALTER DATABASE
postgres=# SELECT datname, pg_catalog.pg_get_userbyid(datdba) AS owner
FROM pg_database
WHERE datname = 'cooking_recipe';
    datname     |     owner      
----------------+----------------
 cooking_recipe | cooking_recipe
```
いなむらいなむら

スキーマの所有者も確認

postgres=# SELECT nspname, pg_catalog.pg_get_userbyid(nspowner) AS owner
FROM pg_namespace
WHERE nspname = 'public';
 nspname |       owner       
---------+-------------------
 public  | pg_database_owner
(1 row)

postgres=# ALTER SCHEMA public OWNER TO cooking_recipe;
ALTER SCHEMA
postgres=# SELECT nspname, pg_catalog.pg_get_userbyid(nspowner) AS owner
FROM pg_namespace
WHERE nspname = 'public';
 nspname |     owner      
---------+----------------
 public  | cooking_recipe
いなむらいなむら

今はpostgreが起動できない状態

atusibba1014@instance-20240827-105436:~$ sudo journalctl -xeu postgresql.service
....
Oct 09 11:55:39 instance-20240827-105436 pg_ctl[89019]: pg_ctl: another server might be running; trying to start server anyway
いなむらいなむら

/lib/systemd/system/postgresql.serviceの設定変更

sudo su -
passwd
## ctrl + D

sudo vi /lib/systemd/system/postgresql.service  # typeをforkingに変更する
sudo systemctl daemon-reload
sudo service postgresql restart

できず

いなむらいなむら

こっちはできた

atusibba1014@instance-20241013-005824:~$ sudo systemctl status postgresql@15-main
● postgresql@15-main.service - PostgreSQL Cluster 15-main
     Loaded: loaded (/lib/systemd/system/postgresql@.service; enabled-runtime; preset: enabled)
     Active: active (running) since Sun 2024-10-13 01:18:58 UTC; 4s ago
    Process: 4178 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 15-main start (code=exited, status=0/SUCCESS)
   Main PID: 4184 (postgres)
      Tasks: 6 (limit: 4682)
     Memory: 18.1M
        CPU: 198ms
     CGroup: /system.slice/system-postgresql.slice/postgresql@15-main.service
             ├─4184 /usr/lib/postgresql/15/bin/postgres -D /var/lib/postgresql/15/main -c config_file=/etc/postgresql/15/main/postgresql.conf
             ├─4185 "postgres: 15/main: checkpointer "
             ├─4186 "postgres: 15/main: background writer "
             ├─4188 "postgres: 15/main: walwriter "
             ├─4189 "postgres: 15/main: autovacuum launcher "
             └─4190 "postgres: 15/main: logical replication launcher "

Oct 13 01:18:56 instance-20241013-005824 systemd[1]: Starting postgresql@15-main.service - PostgreSQL Cluster 15-main...
Oct 13 01:18:58 instance-20241013-005824 systemd[1]: Started postgresql@15-main.service - PostgreSQL Cluster 15-main.
いなむらいなむら

DBクラスタがまだ初期化されていなかった・・?
それをpostgresql@15-mainのクラスタを作って起動したから良かった?

postgresql.service自体はメタユニットであるため、それをどのバージョンでどう使うかを定義してあげたことが良かった?serviceと@15-mainは継承の関係にある感じ?

いなむらいなむら

cloudrunからgceに接続ができなく、localのdockerからgceにアクセスしにいくと
以下の通りのエラーが出ていた。

Error: '' is not a valid port number.

shだと変数が正しく取得できないみたい

x
CMD ["sh", "-c", "python manage.py migrate && gunicorn app.wsgi:application --bind 0.0.0.0:$PORT"]

o
CMD python manage.py migrate
CMD gunicorn app.wsgi:application --bind 0.0.0.0:$PORT
いなむらいなむら

GCEへの内部IPを設定した

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'xxzx',
        'USER': 'xxx',
        'PASSWORD': 'xxx',
        'HOST': '10.138.0.4',
        'PORT': '5432',
        'OPTIONS': {
            'sslmode': 'require',
        }
    }
このスクラップは1ヶ月前にクローズされました