ror+psql+puma+nginx部署專案

飛翔的大象發表於2019-03-08

前言

這個過程基本上我花了三個星期,才弄好,其中的有些部署檔案還是我直接從專案複製貼上過來的。現在一整理,發現並沒有那麼難,那為什麼會花費三個星期呢?大部分可能是因為我的無知和對centos的不瞭解。

例如,我在啟動資料庫的時候,它告訴我不能以root身份啟動,等我切換到普通賬戶,又告訴我,對資料夾沒有寫入許可權,看得我真的很矛盾。

例如,我在安裝pg這個gem的時候,告訴我缺乏依賴,我找到答案yum install libs-devel,又告訴我ruby的版本太低了,很納悶,我明明裝的是最新的ruby版本,之後就一直在缺乏依賴著轉圈,等到現在才知道是因為找不到pg_configpg_config這個檔案一般是在/usr/bin資料夾下,但是我安裝完沒有在這....

安裝ruby

如果使用yum安裝ruby,版本太低,為了管理ruby版本,我使用rbenv來管理 安裝參考連結

安裝postgresql

修改/etc/yum.repos.d/CentOS-Base.repo檔案

sudo vi /etc/yum.repos.d/CentOS-Base.repo
exclude=postgresql*    // 在[base]和[updates]塊中加上這一行
複製程式碼

安裝postgresql

sudo rpm -Uvh http://yum.postgresql.org/9.5/redhat/rhel-6-x86_64/pgdg-centos95-9.5-1.noarch.rpm
sudo yum install postgresql95 postgresql95-devel postgresql95-server postgresql95-libs postgresql95-contrib
複製程式碼

初始化資料庫 找到psql的安裝目錄(xxxx)的bin資料夾,

xxxx/bin/pg_ctl -D xxxx/data initdb //初始化資料庫
xxxx/bin/pg_ctl -D xxxx/data start  // 啟動資料庫
複製程式碼

在initdb,可能會出現許可權不夠的情況,這個時候,檢視一下data的許可權,發現你應該將使用者切換成postgres

sudo su postgres
複製程式碼

在這一步,會提示你輸入密碼,如果你不知道密碼,就使用以下命令去修改密碼

passwd postgres
複製程式碼

將使用者切換成postgres就可以初始化和啟動資料庫,也可以使用以下命令

sudo service postgresql-9.5 start               // 啟動資料庫
sudo chkconfig --levels 235 postgresql-9.5 on   // psql開機自啟動
複製程式碼

建立psql的連結使用者名稱和密碼

sudo su postgres
psql
alter user username with password 'password';
create database testdb owner=username;
複製程式碼

為puma增加代理

cap production puma:restar
複製程式碼

這個時候訪問埠,發現無法訪問,查一下puma的log,發現pumaproduction環境下是使用socket連結,只能使用nginx做代理了,編輯/etc/nginx/conf.d/default.conf檔案,替換下面程式碼中的usernamedeploy_path

upstream app {
    # Path to Puma SOCK file, as defined previously
    server unix:///home/username/deploy_path/shared/sockets/puma.sock fail_timeout=0;
}

server {
    listen 80;
    server_name localhost;

    root /home/username/deploy_path/current/public;

    try_files $uri/index.html $uri @app;

    location @app {
        proxy_pass http://app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}
複製程式碼

關於pumasock的地址,你查一下pumalog確認一下

你可能遇到的問題

  1. 在安裝pg這個gem的時候,可能會報缺少依賴,或者找不到pg_config檔案 答:gem install pg --with-pg-config=psql的安裝目錄/bin/pg_config

  2. 報錯:ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: 錯誤: 建立擴充套件 "uuid-ossp" 許可權不夠 答:需要為psql中的新建username設定super許可權

  3. 即使你新增了nginx代理,你發現,網站還是無法訪問 答:可以查一下/var/log/nginx/nginx_error.log,我遇到的原因是許可權不夠,修改nginx的config,將usernginx改成root

相關文章