diff --git a/lib/LANraragi/Model/Archive.pm b/lib/LANraragi/Model/Archive.pm
index 2e93d05..777fe8c 100644
--- a/lib/LANraragi/Model/Archive.pm
+++ b/lib/LANraragi/Model/Archive.pm
@@ -15,6 +15,7 @@ use File::Path  qw(remove_tree);
 use File::Basename;
 use File::Copy "cp";
 use File::Path qw(make_path);
+use FindBin;
 
 use LANraragi::Utils::Generic    qw(render_api_response);
 use LANraragi::Utils::String     qw(trim trim_CRLF);
@@ -225,7 +226,7 @@ sub serve_thumbnail {
         } else {
 
             # If the thumbnail doesn't exist, serve the default thumbnail.
-            $self->render_file( filepath => "./public/img/noThumb.png" );
+            $self->render_file( filepath => "$FindBin::Bin/../public/img/noThumb.png" );
         }
         return;
     } else {
diff --git a/lib/LANraragi/Utils/Generic.pm b/lib/LANraragi/Utils/Generic.pm
index aa15cf1..50ed9b8 100644
--- a/lib/LANraragi/Utils/Generic.pm
+++ b/lib/LANraragi/Utils/Generic.pm
@@ -15,6 +15,7 @@ use Mojo::JSON qw(decode_json);
 use Proc::Simple;
 use Sys::CpuAffinity;
 use Config;
+use FindBin;
 
 use LANraragi::Utils::TempFolder qw(get_temp);
 use LANraragi::Utils::String     qw(trim);
@@ -166,7 +167,7 @@ sub start_shinobu {
     my $mojo = shift;
     if (IS_UNIX) {
         my $proc = Proc::Simple->new();
-        $proc->start( $^X, "./lib/Shinobu.pm" );
+        $proc->start( $^X, "$FindBin::Bin/../lib/Shinobu.pm" );
         $proc->kill_on_destroy(0);
 
         $mojo->LRR_LOGGER->debug( "Shinobu Worker new PID is " . $proc->pid );
@@ -215,7 +216,7 @@ sub get_css_list {
 
     # Get all the available CSS sheets.
     my @css;
-    opendir( my $dir, "./public/themes" ) or die $!;
+    opendir( my $dir, "$FindBin::Bin/../public/themes" ) or die $!;
     while ( my $file = readdir($dir) ) {
         if ( $file =~ /.+\.css/ ) { push( @css, $file ); }
     }
@@ -492,7 +493,7 @@ LUA
 
 sub get_version {
     # Load package.json to get version/vername/description
-    $version_info = decode_json( Mojo::File->new('package.json')->slurp ), shift unless $version_info;
+    $version_info = decode_json( Mojo::File->new("$FindBin::Bin/../package.json")->slurp ), shift unless $version_info;
     return $version_info;
 }
 
diff --git a/lib/LANraragi/Utils/I18N.pm b/lib/LANraragi/Utils/I18N.pm
index 97107e6..0a8879d 100644
--- a/lib/LANraragi/Utils/I18N.pm
+++ b/lib/LANraragi/Utils/I18N.pm
@@ -5,21 +5,24 @@ use warnings;
 use utf8;
 use base 'Locale::Maketext';
 
+# Technically, we could just not use FindBin::Bin, but then the search process
+# would go through a lot of unnecessary effort to finally find the translations
+use FindBin;
 use Locale::Maketext::Lexicon {
-    de      => [ Gettext => "../../locales/template/de.po" ],
-    en      => [ Gettext => "../../locales/template/en.po" ],
-    es      => [ Gettext => "../../locales/template/es.po" ],
-    zh      => [ Gettext => "../../locales/template/zh.po" ],
-    "zh-cn" => [ Gettext => "../../locales/template/zh.po" ],
-    fr      => [ Gettext => "../../locales/template/fr.po" ],
-    id      => [ Gettext => "../../locales/template/id.po" ],
-    ja      => [ Gettext => "../../locales/template/ja.po" ],
-    ko      => [ Gettext => "../../locales/template/ko.po" ],
-    no      => [ Gettext => "../../locales/template/nb_NO.po" ],
-    nb      => [ Gettext => "../../locales/template/nb_NO.po" ],
-    pt      => [ Gettext => "../../locales/template/pt.po" ],
-    "zh-tw" => [ Gettext => "../../locales/template/zh_Hant.po" ],
-    vi      => [ Gettext => "../../locales/template/vi.po" ],
+    de      => [ Gettext => "$FindBin::Bin/../locales/template/de.po" ],
+    en      => [ Gettext => "$FindBin::Bin/../locales/template/en.po" ],
+    es      => [ Gettext => "$FindBin::Bin/../locales/template/es.po" ],
+    zh      => [ Gettext => "$FindBin::Bin/../locales/template/zh.po" ],
+    "zh-cn" => [ Gettext => "$FindBin::Bin/../locales/template/zh.po" ],
+    fr      => [ Gettext => "$FindBin::Bin/../locales/template/fr.po" ],
+    id      => [ Gettext => "$FindBin::Bin/../locales/template/id.po" ],
+    ja      => [ Gettext => "$FindBin::Bin/../locales/template/ja.po" ],
+    ko      => [ Gettext => "$FindBin::Bin/../locales/template/ko.po" ],
+    no      => [ Gettext => "$FindBin::Bin/../locales/template/nb_NO.po" ],
+    nb      => [ Gettext => "$FindBin::Bin/../locales/template/nb_NO.po" ],
+    pt      => [ Gettext => "$FindBin::Bin/../locales/template/pt.po" ],
+    "zh-tw" => [ Gettext => "$FindBin::Bin/../locales/template/zh_Hant.po" ],
+    vi      => [ Gettext => "$FindBin::Bin/../locales/template/vi.po" ],
     _auto   => 0,
 };
 
diff --git a/lib/LANraragi/Utils/Logging.pm b/lib/LANraragi/Utils/Logging.pm
index 66dc4e0..10f2692 100644
--- a/lib/LANraragi/Utils/Logging.pm
+++ b/lib/LANraragi/Utils/Logging.pm
@@ -33,7 +33,7 @@ our $RLOG_UNSUPPORTED_WARNED = 0;
 # Get the Log folder.
 sub get_logdir {
 
-    my $log_folder = dirname(__FILE__) . "/../../../log";
+    my $log_folder = "./log";
 
     # Folder location can be overriden by LRR_LOG_DIRECTORY
     if ( $ENV{LRR_LOG_DIRECTORY} ) {
diff --git a/lib/LANraragi/Utils/TempFolder.pm b/lib/LANraragi/Utils/TempFolder.pm
index 5d7bf68..480a012 100644
--- a/lib/LANraragi/Utils/TempFolder.pm
+++ b/lib/LANraragi/Utils/TempFolder.pm
@@ -13,7 +13,7 @@ our @EXPORT_OK = qw(get_temp);
 
 #Get the current tempfolder.
 sub get_temp {
-    my $temp_folder = dirname(__FILE__) . "/../../../temp";
+    my $temp_folder = "./temp";
 
     # Folder location can be overriden by LRR_TEMP_DIRECTORY
     if ( $ENV{LRR_TEMP_DIRECTORY} ) {
