While taking a final look at instance.gen before releasing I noticed that the release_env task outputs messages in broken english. Upon further inspection it seems to have even more severe issues which, in my opinion, warrant it's at least temporary removal: - We do not explain what it actually does, anywhere. Neither the task docs nor instance.gen, nor installation instructions. - It does not respect FHS on OTP releases (uses /opt/pleroma/config even though we store the config in /etc/pleroma/config.exs). - It doesn't work on OTP releases, which is the main reason it exists. Neither systemd nor openrc service files for OTP include it. - It is not mentioned in install guides other than the ones for Debian and OTP releases.2298-weird-follow-issue
@@ -1,9 +0,0 @@ | |||||
# Generate release environment file | |||||
```sh tab="OTP" | |||||
./bin/pleroma_ctl release_env gen | |||||
``` | |||||
```sh tab="From Source" | |||||
mix pleroma.release_env gen | |||||
``` |
@@ -182,7 +182,6 @@ sudo cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.se | |||||
``` | ``` | ||||
* Edit the service file and make sure that all paths fit your installation | * Edit the service file and make sure that all paths fit your installation | ||||
* Check that `EnvironmentFile` contains the correct path to the env file. Or generate the env file: `sudo -Hu pleroma mix pleroma.release_env gen` | |||||
* Enable and start `pleroma.service`: | * Enable and start `pleroma.service`: | ||||
```shell | ```shell | ||||
@@ -149,9 +149,6 @@ chown -R pleroma /etc/pleroma | |||||
# Run the config generator | # Run the config generator | ||||
su pleroma -s $SHELL -lc "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql" | su pleroma -s $SHELL -lc "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql" | ||||
# Run the environment file generator. | |||||
su pleroma -s $SHELL -lc "./bin/pleroma_ctl release_env gen" | |||||
# Create the postgres database | # Create the postgres database | ||||
su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql" | su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql" | ||||
@@ -8,7 +8,6 @@ pidfile="/var/run/pleroma.pid" | |||||
directory=/opt/pleroma | directory=/opt/pleroma | ||||
healthcheck_delay=60 | healthcheck_delay=60 | ||||
healthcheck_timer=30 | healthcheck_timer=30 | ||||
export $(cat /opt/pleroma/config/pleroma.env) | |||||
: ${pleroma_port:-4000} | : ${pleroma_port:-4000} | ||||
@@ -17,8 +17,6 @@ Environment="MIX_ENV=prod" | |||||
Environment="HOME=/var/lib/pleroma" | Environment="HOME=/var/lib/pleroma" | ||||
; Path to the folder containing the Pleroma installation. | ; Path to the folder containing the Pleroma installation. | ||||
WorkingDirectory=/opt/pleroma | WorkingDirectory=/opt/pleroma | ||||
; Path to the environment file. the file contains RELEASE_COOKIE and etc | |||||
EnvironmentFile=/opt/pleroma/config/pleroma.env | |||||
; Path to the Mix binary. | ; Path to the Mix binary. | ||||
ExecStart=/usr/bin/mix phx.server | ExecStart=/usr/bin/mix phx.server | ||||
@@ -36,9 +36,7 @@ defmodule Mix.Tasks.Pleroma.Instance do | |||||
listen_port: :string, | listen_port: :string, | ||||
strip_uploads: :string, | strip_uploads: :string, | ||||
anonymize_uploads: :string, | anonymize_uploads: :string, | ||||
dedupe_uploads: :string, | |||||
skip_release_env: :boolean, | |||||
release_env_file: :string | |||||
dedupe_uploads: :string | |||||
], | ], | ||||
aliases: [ | aliases: [ | ||||
o: :output, | o: :output, | ||||
@@ -243,24 +241,6 @@ defmodule Mix.Tasks.Pleroma.Instance do | |||||
write_robots_txt(static_dir, indexable, template_dir) | write_robots_txt(static_dir, indexable, template_dir) | ||||
if Keyword.get(options, :skip_release_env, false) do | |||||
shell_info(""" | |||||
Release environment file is skip. Please generate the release env file before start. | |||||
`MIX_ENV=#{Mix.env()} mix pleroma.release_env gen` | |||||
""") | |||||
else | |||||
shell_info("Generation the environment file:") | |||||
release_env_args = | |||||
with path when not is_nil(path) <- Keyword.get(options, :release_env_file) do | |||||
["gen", "--path", path] | |||||
else | |||||
_ -> ["gen"] | |||||
end | |||||
Mix.Tasks.Pleroma.ReleaseEnv.run(release_env_args) | |||||
end | |||||
shell_info( | shell_info( | ||||
"\n All files successfully written! Refer to the installation instructions for your platform for next steps." | "\n All files successfully written! Refer to the installation instructions for your platform for next steps." | ||||
) | ) | ||||
@@ -1,76 +0,0 @@ | |||||
# Pleroma: A lightweight social networking server | |||||
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> | |||||
# SPDX-License-Identifier: AGPL-3.0-only | |||||
defmodule Mix.Tasks.Pleroma.ReleaseEnv do | |||||
use Mix.Task | |||||
import Mix.Pleroma | |||||
@shortdoc "Generate Pleroma environment file." | |||||
@moduledoc File.read!("docs/administration/CLI_tasks/release_environments.md") | |||||
def run(["gen" | rest]) do | |||||
{options, [], []} = | |||||
OptionParser.parse( | |||||
rest, | |||||
strict: [ | |||||
force: :boolean, | |||||
path: :string | |||||
], | |||||
aliases: [ | |||||
p: :path, | |||||
f: :force | |||||
] | |||||
) | |||||
file_path = | |||||
get_option( | |||||
options, | |||||
:path, | |||||
"Environment file path", | |||||
"./config/pleroma.env" | |||||
) | |||||
env_path = Path.expand(file_path) | |||||
proceed? = | |||||
if File.exists?(env_path) do | |||||
get_option( | |||||
options, | |||||
:force, | |||||
"Environment file already exists. Do you want to overwrite the #{env_path} file? (y/n)", | |||||
"n" | |||||
) === "y" | |||||
else | |||||
true | |||||
end | |||||
if proceed? do | |||||
case do_generate(env_path) do | |||||
{:error, reason} -> | |||||
shell_error( | |||||
File.Error.message(%{action: "write to file", reason: reason, path: env_path}) | |||||
) | |||||
_ -> | |||||
shell_info("\nThe file generated: #{env_path}.\n") | |||||
shell_info(""" | |||||
WARNING: before start pleroma app please make sure to make the file read-only and non-modifiable. | |||||
Example: | |||||
chmod 0444 #{file_path} | |||||
chattr +i #{file_path} | |||||
""") | |||||
end | |||||
else | |||||
shell_info("\nThe file is exist. #{env_path}.\n") | |||||
end | |||||
end | |||||
def do_generate(path) do | |||||
content = "RELEASE_COOKIE=#{Base.encode32(:crypto.strong_rand_bytes(32))}" | |||||
File.mkdir_p!(Path.dirname(path)) | |||||
File.write(path, content) | |||||
end | |||||
end |
@@ -5,8 +5,6 @@ | |||||
defmodule Mix.Tasks.Pleroma.InstanceTest do | defmodule Mix.Tasks.Pleroma.InstanceTest do | ||||
use ExUnit.Case | use ExUnit.Case | ||||
@release_env_file "./test/pleroma.test.env" | |||||
setup do | setup do | ||||
File.mkdir_p!(tmp_path()) | File.mkdir_p!(tmp_path()) | ||||
@@ -18,8 +16,6 @@ defmodule Mix.Tasks.Pleroma.InstanceTest do | |||||
File.rm_rf(Path.join(static_dir, "robots.txt")) | File.rm_rf(Path.join(static_dir, "robots.txt")) | ||||
end | end | ||||
if File.exists?(@release_env_file), do: File.rm_rf(@release_env_file) | |||||
Pleroma.Config.put([:instance, :static_dir], static_dir) | Pleroma.Config.put([:instance, :static_dir], static_dir) | ||||
end) | end) | ||||
@@ -73,9 +69,7 @@ defmodule Mix.Tasks.Pleroma.InstanceTest do | |||||
"--dedupe-uploads", | "--dedupe-uploads", | ||||
"n", | "n", | ||||
"--anonymize-uploads", | "--anonymize-uploads", | ||||
"n", | |||||
"--release-env-file", | |||||
@release_env_file | |||||
"n" | |||||
]) | ]) | ||||
end | end | ||||
@@ -97,9 +91,6 @@ defmodule Mix.Tasks.Pleroma.InstanceTest do | |||||
assert generated_config =~ "filters: [Pleroma.Upload.Filter.ExifTool]" | assert generated_config =~ "filters: [Pleroma.Upload.Filter.ExifTool]" | ||||
assert File.read!(tmp_path() <> "setup.psql") == generated_setup_psql() | assert File.read!(tmp_path() <> "setup.psql") == generated_setup_psql() | ||||
assert File.exists?(Path.expand("./test/instance/static/robots.txt")) | assert File.exists?(Path.expand("./test/instance/static/robots.txt")) | ||||
assert File.exists?(@release_env_file) | |||||
assert File.read!(@release_env_file) =~ ~r/^RELEASE_COOKIE=.*/ | |||||
end | end | ||||
defp generated_setup_psql do | defp generated_setup_psql do | ||||
@@ -1,30 +0,0 @@ | |||||
# Pleroma: A lightweight social networking server | |||||
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> | |||||
# SPDX-License-Identifier: AGPL-3.0-only | |||||
defmodule Mix.Tasks.Pleroma.ReleaseEnvTest do | |||||
use ExUnit.Case | |||||
import ExUnit.CaptureIO, only: [capture_io: 1] | |||||
@path "config/pleroma.test.env" | |||||
def do_clean do | |||||
if File.exists?(@path) do | |||||
File.rm_rf(@path) | |||||
end | |||||
end | |||||
setup do | |||||
do_clean() | |||||
on_exit(fn -> do_clean() end) | |||||
:ok | |||||
end | |||||
test "generate pleroma.env" do | |||||
assert capture_io(fn -> | |||||
Mix.Tasks.Pleroma.ReleaseEnv.run(["gen", "--path", @path, "--force"]) | |||||
end) =~ "The file generated" | |||||
assert File.read!(@path) =~ "RELEASE_COOKIE=" | |||||
end | |||||
end |