Back

rails - homeland 论坛的部署过程和注意事项

发布时间: 2022-08-14 11:31:00

refer to: https://github.com/ruby-china/homeland

部署过程非常简单,安装好对应的依赖,环境,git clone code 即可。

修改 HomeController , 那里的404 要注释掉

  3 class HomeController < ApplicationController
  4   def uploads
  5 #    return render_404 if Rails.env.production?

ENV中要有 domain

[env]
  PORT = "8080"
  SERVER_COMMAND = "bundle exec puma -C config/puma.rb"
  DATABASE_URL = "postgres://postgres:[email protected]:5432/xxx-com-db"
  REDIS_URL = "redis://default:xxxxxal:6379"
  domain = 'xxxi.com'

安装 imagemagick 修改 Dockerfile

ARG PROD_PACKAGES="postgresql-client file vim curl gzip libsqlite3-0 imagemagick"
ENV PROD_PACKAGES=${PROD_PACKAGES}

用户上传的头像位置(public/files )要保存

fly volumes create files --size 1 

然后修改fly.toml

[mounts]
  destination = "/app/public/uploads"
  source = "files"

对于user, 设置它的state = admin ( 99 ) 就是管理员了

irb(main):005:0> User.states
=> {"deleted"=>-1, "member"=>1, "blocked"=>2, "vip"=>3, "hr"=>4, "maintainer"=>90, "admin"=>99}

对于手动的Nginx 部署需要注意:

1. nginx 的站点配置看起来如下.

 server {
      listen 80;
      return 301 https://$host$request_uri;
      server_name forum.yangqigong.cn;
  }

  server {
      listen 443 ssl;
      server_name forum.yangqigong.cn;

      ssl_certificate   /opt/ssl/8311517_forum.yangqigong.cn.pem;
      ssl_certificate_key  /opt/ssl/8311517_forum.yangqigong.cn.key;
      ssl_session_timeout 5m;
      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      ssl_prefer_server_ciphers on;

      location / {
          proxy_pass          http://forum_yangqigong_cn_servers;
          proxy_redirect      default;
          proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header    X-Real-IP $remote_addr;
          proxy_set_header    Host $http_host;
          proxy_next_upstream http_502 http_504 error timeout invalid_header;
          proxy_set_header    X-Forwarded-Proto https;    # 这里最最重要 
      }
      location ~ ^/assets|packs|system/ {
        root /opt/app/homeland/public;
        expires 1y;
        add_header Cache-Control public;
        add_header ETag "";
        break;
      }

  }

  upstream forum_yangqigong_cn_servers{
         server localhost:3000;
  }

2. 设置  config/environments/production.rb     

config.force_ssl = true

3. 回复日志 ,修改文件同上

+  #给他隐藏掉
+  #if ENV["RAILS_LOG_TO_STDOUT"].present?
+  #  logger = ActiveSupport::Logger.new($stdout)
+  #  logger.formatter = config.log_formatter
+  #  config.logger = ActiveSupport::TaggedLogging.new(logger)
+  #end

4. 设置 静态asset 路径

      location ~ ^/assets|packs|system/ {
        root /opt/app/homeland/public;
        expires 1y;
        add_header Cache-Control public;
        add_header ETag "";
        break;
      }

5. 要启动sidekiq

homeland 没有使用activejob, 而是sidekiq, 所以这就要求, 需要额外的启动脚本来运行它。

bundle exec sidekiq -e production

Back