手动部署一个ror7 on ubuntu22的服务器+posggresql+puma+nginx
写在前面:
一、bundle install 有点慢, aliyun和ruby china的源似乎都不给力。清华的Rubygem还挺快。
一、bundle install 有点慢, aliyun和ruby china的源似乎都不给力。清华的Rubygem还挺快。
使用以下命令替换 gems 默认源 # 添加 TUNA 源并移除默认源 gem sources --add https://mirrors.tuna.tsinghua.edu.cn/rubygems/ --remove https://rubygems.org/ # 列出已有源 gem sources -l # 应该只有 TUNA 一个 或者,编辑 ~/.gemrc,将 https://mirrors.tuna.tsinghua.edu.cn/rubygems/ 加到 sources 字段。
bundler 使用以下命令替换 bundler 默认源 bash 在 bundle install / bundle update 前运行。
bundle config mirror.https://rubygems.org https://mirrors.tuna.tsinghua.edu.cn/rubygems
或者
bundle config mirror.https://rubygems.org "https://mirrors.cloud.tencent.com/rubygems/"
bundle config mirror.https://rubygems.org "https://mirrors.cloud.tencent.com/rubygems/"
rvm 安装ruby,也可以更换源。 echo "ruby_url=https://cache.ruby-china.com/pub/ruby" > ~/.rvm/user/db
二、服务器用到htmlToPdf
gem wicked_pdf gem wkhtmltopdf-binary
/data/www/ji/shared/bundle/ruby/3.3.0/gems/wkhtmltopdf-binary-0.12.6.7/bin/wkhtmltopdf_ubuntu_22.04_amd64: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory
sudo apt-get install libxrender1
正文:
下面是一个大概的流程。
1. adduser hw
2. usermod -aG sudo hw
sudo usermod -aG sudo username
2. usermod -aG sudo hw
sudo usermod -aG sudo username
3.install rvm
sudo apt update sudo apt install curl gcc make libssl-dev libreadline-dev zlib1g-dev libsqlite3-dev sudo apt install gnupg2 gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB \curl -sSL https://get.rvm.io | bash -s stablesource ~/.rvm/scripts/rvm
4. rvm install 3.3.4 # 3.3.4是当前最新版本。3.3.3 有个bug, gem install net-pop 失败的问题。
5.config/deploy.rb 里面的一些不相关设置删除比如,rvm版本,puma的pid等,设置用户等信息。
6.cap staging deploy # 尝试运行,发现错误,修复问题,比如 复制master.key 和database.yml到服务器共享目录等。staging的环境文件,database.yml里面的配置文件等。
7.cap staging deploy # 运行到bundle:install ,时候出错。安装 gem install pg 出错。
8. sudo apt install libpq-dev
这里提示 currently running kernel version is 5.15.0-113-generic is not the expected kernel version 5.15.0-117-generic. restarting the system to load the new kernel will not be handled automatically , so you should consider rebooting.
9. deploy:assets:precomplie error: ExecJS::RuntimeUnavailable: Could not find a JavsScript runtime.
install node.js 安装服务器的js运行环境:https://deb.nodesource.com/
curl -fsSL https://deb.nodesource.com/setup_21.x | sudo bash - sudo apt-get install -y nodejs
10. deploy:migrating
01 ~/.rvm/bin/rvm default do bundle exec rake db:migrate
数据库还没有安装,所以那啥,这一步肯定出错了。
11 安装pg
https://www.postgresql.org/download/linux/ubuntu/
# Import the repository signing key: sudo apt install curl ca-certificates sudo install -d /usr/share/postgresql-common/pgdg sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc # Create the repository configuration file: sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' # Update the package lists: sudo apt update # Install the latest version of PostgreSQL: # If you want a specific version, use 'postgresql-16' or similar instead of 'postgresql' sudo apt -y install postgresql
12 根据database.yml里面的信息,配置pg的账号和密码。
sudo systemctl start postgresql
这里安装的是pg 16 ,默认的端口已经改成了 5433
需要通过命令加端口号才能进入:
sudo -u postgres psql -p 5433
create user deploy with password '888888'; postgres=# alter user deploy with createdb; ALTER ROLE postgres=# \du List of roles Role name | Attributes -----------+------------------------------------------------------------ deploy | Create DB postgres | Superuser, Create role, Create DB, Replication, Bypass RLS
这里还有个问题,因为用cap staging deploy 是不会帮你创建数据库的,因为cap认为,创建数据库是数据库管理员的职责,那么我们就需要手动创建数据库了。
create database lehazi_staging owner deploy;
因为 pg_hba.conf 里面哟个 local all all peer 的配置,也就是说,系统用户和数据库用户名 相同,就可以通过 peer进入系统,不需要验证密码。
这里我系统账号用的是 hw, 然后我可以这样修改以下。
postgres=# create user hw with createdb; postgres=# grant all privileges on database lehazi_staging to hw; postgres=#alter database lehazi_staging owner hw;
本地测试环境下,也可以通过类似下列这种方式创建数据库, 尤其注意这里的 指定环境放在最后。
~/.rvm/bin/rvm default do bundle exec rake db:create RAILS_ENV=staging
14上面的问题 也是可以修改postgresql的配置文件,修改后要重启服务。
sudo systemctl restart postgresql.service
14 puma:restart
01 sudo /bin/systemctl restart puma_ijitieca_staging
01 sudo
01 :
01 a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
01
01 sudo
01 :
01 a password is required
可以尝试使用sudo命令来启动服务,或者将当前用户添加到sudoers文件中。 sudo vim /etc/sudoers
在文件的末尾,加上下面这一行 ,hw是你的sudo的用户名。
hw ALL=(ALL:ALL) NOPASSWD: ALL
这里都还没有配置puma 服务。。。,下面来配置puma服务。 将 puma.service 放到 /etc/systemed / .
# for puma 6.4.2
cap puma:install # Install Puma systemd service
15. 最后安装和配置nginx。
https://nginx.org/en/linux_packages.html#Ubuntu
配置好 你的nginx.conf ,这里是通过sock 通信的,可以通过命令查看你的sock文件放在哪里。
ps auxf|grep puma
hw 44761 0.0 0.2 6480 2388 pts/0 S+ 09:02 0:00 | \_ grep --color=auto puma
hw 44538 40.0 4.0 492364 40064 ? Rsl 09:02 0:00 puma 6.4.2 (unix:///data/www/ijitieca_staging/shared/tmp/sockets/puma.sock)
到此基本结束
如果发现错误,比如
curl -i ip
HTTP/1.1 502 Bad Gateway Server: nginx/1.26.1 Date: Fri, 26 Jul 2024 09:23:02 GMT Content-Type: text/html Content-Length: 157 Connection: keep-alive <html> <head><title>502 Bad Gateway</title></head> <body> <center><h1>502 Bad Gateway</h1></center> <hr><center>nginx/1.26.1</center> </body> </html>
各个服务都起来之后,如果发现错误,先从 nginx 错误日志-再看puma的错误日志。顺藤莫瓜,找到问题。
阅读量: 455
发布于:
修改于:
发布于:
修改于: