diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2cc41dd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM crystallang/crystal:latest + +WORKDIR /app + +RUN apt-get update && apt-get install libmagic-dev -y + +COPY . . + +RUN shards install +RUN shards build --release + +ENTRYPOINT [ "docker/entrypoint.sh" ] \ No newline at end of file diff --git a/README.md b/README.md index dc6048f..4eaecf5 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,12 @@ shards build ./bin/server ``` +Alternatively, you can use Docker to make things quicker: +```bash +docker build -v ./uploads:/app/uploads --tag paste69 ./docker +docker run -d -p 8080:8080 paste69 +``` + ## Development Feel free to make pull requests! diff --git a/config/config.example.yml b/config/config.example.yml index fe156fe..e036a2d 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -1,5 +1,6 @@ -host: example.com +host: 0.0.0.0 port: 80 +site_url: 0x45.st database_url: postgres://postgres@127.0.0.1/paste69 storage: type: local diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 index 0000000..7d7047a --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +bin/cli db:create > /dev/null 2>&1 +bin/cli db:migrate > /dev/null 2>&1 + +bin/server \ No newline at end of file diff --git a/shard.yml b/shard.yml index a5d517e..59d813f 100644 --- a/shard.yml +++ b/shard.yml @@ -17,9 +17,8 @@ dependencies: crinja: github: straight-shoota/crinja crecto: - # github: Crecto/crecto - # branch: master - path: ../crecto + github: Crecto/crecto + branch: master pg: github: will/crystal-pg version: ~> 0.23.2 diff --git a/src/services/config_manager.cr b/src/services/config_manager.cr index 0b883a7..8d54816 100644 --- a/src/services/config_manager.cr +++ b/src/services/config_manager.cr @@ -4,8 +4,10 @@ module Paste69 getter config : Totem::Config DEFAULTS = { - "host" => nil, + "host" => "0.0.0.0", "port" => 8080, + "site_url" => "0.0.0.0:8080", + "use_ssl" => false, "database_url" => "sqlite://./db/data.db", "templates_dir" => "src/templates", "max_content_length" => 256 * 1024 * 1024, @@ -56,16 +58,13 @@ module Paste69 def initialize config = @config = Totem.new("config", "/etc/paste69") - config.config_paths << "~/.totem" - config.config_paths << "~/.config/totem" + config.config_paths << "~/.paste69" + config.config_paths << "~/.config/paste69" config.config_paths << "./config" - begin - config.load! - config.set_defaults(DEFAULTS) - rescue ex - puts "Fatal error loading config file: #{ex.message}" - exit(1) - end + + config.load! rescue nil + config.automatic_env + config.set_defaults(DEFAULTS) end end end diff --git a/src/services/utils_service.cr b/src/services/utils_service.cr index a89fd01..c3c7728 100644 --- a/src/services/utils_service.cr +++ b/src/services/utils_service.cr @@ -4,19 +4,13 @@ module Paste69 def initialize(@config : Paste69::ConfigManager, @type_checker : Paste69::TypeChecker); end def url_for(name, *, secret : String? = nil, anchor : String? = nil) - host = @config.get("host").as_s - port = @config.get("port").as_i - - url = host - - if port != 80 && port!= 443 - url += ":#{port}" - end + url = @config.get("site_url").as_s + ssl = @config.get("use_ssl").as_bool url = secret ? File.join(url, secret, name) : File.join(url, name) url += "##{anchor}" if anchor - scheme = port == 443 ? "https" : "http" + scheme = ssl ? "https" : "http" "#{scheme}://#{url}" end