# # Cookbook Name:: kosmos-mastodon # Recipe:: default # include_recipe "kosmos-nodejs" include_recipe "kosmos-redis" include_recipe "java" elasticsearch_user 'elasticsearch' elasticsearch_install 'elasticsearch' do type 'package' version '6.8.2' end elasticsearch_configure 'elasticsearch' do allocated_memory node["kosmos-mastodon"]["elasticsearch"]["allocated_memory"] end elasticsearch_service 'elasticsearch' postgresql_data_bag_item = data_bag_item('credentials', 'postgresql') mastodon_path = node["kosmos-mastodon"]["directory"] mastodon_user = "mastodon" group mastodon_user do gid 62786 end user mastodon_user do comment "mastodon user" uid 62786 gid 62786 shell "/bin/bash" home mastodon_path end package %w(build-essential imagemagick ffmpeg libxml2-dev libxslt1-dev file git curl pkg-config libprotobuf-dev protobuf-compiler libidn11 libidn11-dev libjemalloc2 libpq-dev) npm_package "yarn" do version "1.22.4" end ruby_version = "2.7.2" execute "systemctl daemon-reload" do command "systemctl daemon-reload" action :nothing end # mastodon-web service # template "/lib/systemd/system/mastodon-web.service" do source "mastodon-web.systemd.service.erb" variables user: mastodon_user, app_dir: mastodon_path, port: node["kosmos-mastodon"]["puma_port"], bundle_path: "/opt/ruby_build/builds/#{ruby_version}/bin/bundle" notifies :run, "execute[systemctl daemon-reload]", :immediately notifies :restart, "service[mastodon-web]", :delayed end # mastodon-sidekiq service # template "/lib/systemd/system/mastodon-sidekiq.service" do source "mastodon-sidekiq.systemd.service.erb" variables user: mastodon_user, app_dir: mastodon_path, bundle_path: "/opt/ruby_build/builds/#{ruby_version}/bin/bundle", sidekiq_threads: node["kosmos-mastodon"]["sidekiq_threads"] notifies :run, "execute[systemctl daemon-reload]", :immediately notifies :restart, "service[mastodon-sidekiq]", :delayed end # mastodon-streaming service # template "/lib/systemd/system/mastodon-streaming.service" do source "mastodon-streaming.systemd.service.erb" variables user: mastodon_user, app_dir: mastodon_path, port: node["kosmos-mastodon"]["streaming_port"] notifies :run, "execute[systemctl daemon-reload]", :immediately notifies :restart, "service[mastodon-streaming]", :delayed end application mastodon_path do owner "mastodon" group "mastodon" # Take care of application restarts manually, in the git resource action_on_update false environment "HOME" => mastodon_path, "PATH" => "/opt/ruby_build/builds/#{ruby_version}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" ruby_runtime ruby_version do provider :ruby_build version ruby_version end git do user mastodon_user group mastodon_user repository node["kosmos-mastodon"]["repo"] revision node["kosmos-mastodon"]["revision"] # Restart services on deployments notifies :restart, "application[#{mastodon_path}]", :delayed end mastodon_credentials = data_bag_item('credentials', 'mastodon') template ".env.production" do source "env.production.erb" mode "0640" owner mastodon_user group mastodon_user variables redis_url: node["kosmos-mastodon"]["redis_url"], domain: node["kosmos-mastodon"]["server_name"], paperclip_secret: mastodon_credentials['paperclip_secret'], secret_key_base: mastodon_credentials['secret_key_base'], otp_secret: mastodon_credentials['otp_secret'], smtp_login: mastodon_credentials['smtp_user_name'], smtp_password: mastodon_credentials['smtp_password'], smtp_from_address: "mail@#{node['kosmos-mastodon']['server_name']}", s3_bucket: "kosmos-social", aws_access_key_id: mastodon_credentials['aws_access_key_id'], aws_secret_access_key: mastodon_credentials['aws_secret_access_key'], s3_region: "eu-west-1", vapid_private_key: mastodon_credentials['vapid_private_key'], vapid_public_key: mastodon_credentials['vapid_public_key'], db_pass: postgresql_data_bag_item['mastodon_user_password'], db_host: "pg.kosmos.local" notifies :restart, "application[#{mastodon_path}]", :delayed end execute "bundle install" do environment "HOME" => mastodon_path user mastodon_user cwd mastodon_path command "/opt/ruby_build/builds/#{ruby_version}/bin/bundle install --without development,test --deployment" end execute "yarn install" do environment "HOME" => mastodon_path, "NODE_ENV" => "production" user mastodon_user cwd mastodon_path command "yarn install --pure-lockfile" end execute 'rake db:migrate' do environment "RAILS_ENV" => "production", "HOME" => mastodon_path#, "SKIP_POST_DEPLOYMENT_MIGRATIONS" => "true" user mastodon_user group mastodon_user cwd mastodon_path command "PATH=\"/opt/ruby_build/builds/#{ruby_version}/bin:$PATH\" bundle exec rake db:migrate" end execute 'rake assets:precompile' do environment "RAILS_ENV" => "production", "HOME" => mastodon_path user mastodon_user group mastodon_user cwd mastodon_path command "PATH=\"/opt/ruby_build/builds/#{ruby_version}/bin:$PATH\" bundle exec rake assets:precompile" end service "mastodon-web" do action [:enable, :start] end service "mastodon-sidekiq" do action [:enable, :start] end service "mastodon-streaming" do action [:enable, :start] end end