]>
Commit | Line | Data |
---|---|---|
f27f4c9d | 1 | { env, ruby_2_5, bundlerEnv, defaultGemConfig, fetchedGithub, stdenv, writeText, pkgs }: |
35a397cd IB |
2 | let |
3 | varDir = "/var/lib/mastodon_immae"; | |
4 | socketsDir = "/run/mastodon"; | |
2ff7e086 IB |
5 | gems = bundlerEnv { |
6 | name = "mastodon-env"; | |
7 | ruby = ruby_2_5; | |
8 | gemset = ./gemset.nix; | |
9 | gemdir = (fetchedGithub ./mastodon.json).src; | |
10 | groups = [ "default" "production" "test" "development" ]; | |
11 | gemConfig = defaultGemConfig // { | |
12 | cld3 = attrs: { | |
13 | buildInputs = with pkgs; [ protobuf protobufc pkgconfig ]; | |
14 | }; | |
15 | idn-ruby = attrs: { | |
16 | buildInputs = with pkgs; [ libidn ]; | |
17 | }; | |
18 | rpam2 = attrs: { | |
19 | buildInputs = with pkgs; [ pam ]; | |
20 | }; | |
21 | }; | |
22 | }; | |
f27f4c9d IB |
23 | yarnModules = let |
24 | info = fetchedGithub ./mastodon.json; | |
25 | in | |
26 | pkgs.yarn2nix.mkYarnModules { | |
27 | name = "mastodon-yarn-modules"; | |
28 | packageJSON = "${info.src}/package.json"; | |
29 | yarnLock = "${info.src}/yarn.lock"; | |
30 | yarnNix = ./yarn-packages.nix; | |
31 | pkgConfig = { | |
32 | uws = { | |
33 | postInstall = '' | |
34 | node-gyp rebuild > build_log.txt 2>&1 || true | |
35 | ''; | |
36 | buildInputs = with pkgs; [ nodePackages.node-gyp ]; | |
37 | }; | |
38 | node-zopfli = { | |
39 | postInstall = '' | |
40 | node-pre-gyp install --fallback-to-build | |
41 | ''; | |
42 | buildInputs = with pkgs; [ nodePackages.node-pre-gyp ]; | |
43 | }; | |
44 | node-sass = { | |
24a7da33 | 45 | buildInputs = with pkgs; [ libsass python ]; |
f27f4c9d IB |
46 | postInstall = let |
47 | nodeHeaders = pkgs.fetchurl { | |
48 | url = "https://nodejs.org/download/release/v${pkgs.nodejs.version}/node-v${pkgs.nodejs.version}-headers.tar.gz"; | |
49 | sha256 = "12zzsf8my43b8qnlacp871ih5vqafl2vlpqp51xp6h3gckn2frwy"; | |
50 | }; | |
51 | in | |
52 | '' | |
f27f4c9d IB |
53 | node scripts/build.js --tarball=${nodeHeaders} |
54 | ''; | |
55 | }; | |
56 | }; | |
57 | }; | |
35a397cd | 58 | mastodon = stdenv.mkDerivation (fetchedGithub ./mastodon.json // rec { |
35a397cd IB |
59 | installPhase = '' |
60 | cp -a . $out | |
f27f4c9d | 61 | cp -a ${yarnModules}/node_modules $out |
35a397cd | 62 | ''; |
f27f4c9d | 63 | buildInputs = [ yarnModules gems ]; |
35a397cd | 64 | }); |
9d90e7e2 | 65 | config = writeText "mastodon_environment" '' |
b0781dbc IB |
66 | REDIS_HOST=${env.redis.host} |
67 | REDIS_PORT=${env.redis.port} | |
68 | REDIS_DB=${env.redis.db} | |
6f4574e7 IB |
69 | DB_HOST=${env.postgresql.socket} |
70 | DB_USER=${env.postgresql.user} | |
71 | DB_NAME=${env.postgresql.database} | |
9d90e7e2 | 72 | DB_PASS=${env.postgresql.password} |
6f4574e7 | 73 | DB_PORT=${env.postgresql.port} |
35a397cd IB |
74 | |
75 | LOCAL_DOMAIN=mastodon.immae.eu | |
76 | LOCAL_HTTPS=true | |
77 | ALTERNATE_DOMAINS=immae.eu | |
78 | ||
9d90e7e2 IB |
79 | PAPERCLIP_SECRET=${env.paperclip_secret} |
80 | SECRET_KEY_BASE=${env.secret_key_base} | |
81 | OTP_SECRET=${env.otp_secret} | |
35a397cd | 82 | |
9d90e7e2 IB |
83 | VAPID_PRIVATE_KEY=${env.vapid.private} |
84 | VAPID_PUBLIC_KEY=${env.vapid.public} | |
35a397cd | 85 | |
591ebd87 | 86 | SMTP_DELIVERY_METHOD=sendmail |
35a397cd | 87 | SMTP_FROM_ADDRESS=notifications@mastodon.immae.eu |
591ebd87 | 88 | SENDMAIL_LOCATION="/run/wrappers/bin/sendmail" |
35a397cd IB |
89 | PAPERCLIP_ROOT_PATH=${varDir} |
90 | ||
91 | STREAMING_CLUSTER_NUM=1 | |
92 | ||
93 | # LDAP authentication (optional) | |
94 | LDAP_ENABLED=true | |
95 | LDAP_HOST=ldap.immae.eu | |
96 | LDAP_PORT=636 | |
97 | LDAP_METHOD=simple_tls | |
98 | LDAP_BASE="dc=immae,dc=eu" | |
99 | LDAP_BIND_DN="cn=mastodon,ou=services,dc=immae,dc=eu" | |
9d90e7e2 | 100 | LDAP_PASSWORD="${env.ldap.password}" |
35a397cd IB |
101 | LDAP_UID="uid" |
102 | LDAP_SEARCH_FILTER="(&(%{uid}=%{email})(memberOf=cn=users,cn=mastodon,ou=services,dc=immae,dc=eu))" | |
103 | ''; | |
104 | ||
105 | railsRoot = stdenv.mkDerivation { | |
106 | name = "mastodon_immae"; | |
107 | inherit config mastodon; | |
108 | builder = writeText "build_mastodon_immae" '' | |
109 | source $stdenv/setup | |
110 | set -a | |
111 | source $config | |
112 | set +a | |
113 | cp -a $mastodon $out | |
114 | cd $out | |
f27f4c9d | 115 | chmod u+rwX . public |
591ebd87 IB |
116 | chmod -R u+rwX config/ |
117 | sed -i -e 's@^end$@ config.action_mailer.sendmail_settings = { location: ENV.fetch("SENDMAIL_LOCATION", "/usr/sbin/sendmail") }\nend@' config/environments/production.rb | |
2ff7e086 IB |
118 | RAILS_ENV=production ${gems}/bin/rails assets:precompile |
119 | rm -rf tmp/cache | |
120 | ln -sf ../../../../../../../${varDir}/tmp/cache tmp | |
35a397cd | 121 | ''; |
f27f4c9d | 122 | buildInputs = [ gems gems.ruby pkgs.nodejs pkgs.yarn ]; |
35a397cd IB |
123 | }; |
124 | in | |
125 | { | |
2ff7e086 | 126 | inherit railsRoot config varDir socketsDir gems; |
35a397cd IB |
127 | nodeSocket = "${socketsDir}/live_immae_node.sock"; |
128 | railsSocket = "${socketsDir}/live_immae_puma.sock"; | |
129 | } |