diff --git a/.dockerignore b/.dockerignore index 9d3991d..22fe334 100644 --- a/.dockerignore +++ b/.dockerignore @@ -13,7 +13,6 @@ Procfile.local log/* storage/* tmp/* -spec/* .git/* .github/* .vscode/* diff --git a/.gitignore b/.gitignore index 9ddce22..ccbb4c8 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,8 @@ config/lets_encrypt.pem config/signing.key config/fast_server.cert config/fast_server.key +config/postal/**/* + public/assets vendor/bundle diff --git a/Dockerfile b/Dockerfile index b0225b8..70b97a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,7 @@ RUN apt-get update \ RUN apt-get update && \ apt-get install -y --no-install-recommends \ build-essential \ + netcat \ curl \ libmariadbclient-dev \ nano \ @@ -46,6 +47,10 @@ RUN echo $VERSION > VERSION ENTRYPOINT [ "/docker-entrypoint.sh" ] CMD ["bundle", "exec"] +# ci target - use --target=ci to skip asset compilation +FROM base AS ci + +# prod target - default if no --target option is given FROM base AS prod # Copy temporary configuration file which can be used for # running the asset precompilation. diff --git a/Makefile b/Makefile index bb94f4d..245777b 100644 --- a/Makefile +++ b/Makefile @@ -96,3 +96,21 @@ ifneq ($(DOCKER_TAG_VERSION),) "$(DOCKER_IMAGE):$(DOCKER_TAG_VERSION)" && \ docker push "$(DOCKER_IMAGE):$(DOCKER_TAG_VERSION)" endif + +# ============================================================================== +# Tests +# ============================================================================== + +.PHONY: ci-test +ci-test: docker-ci-build + $(eval IMAGE := $(shell $(DOCKER_CI_BUILD_CMD) -q)) + $(eval RAND := $(shell echo "$${RANDOM}$$(date +%s)")) + POSTAL_IMAGE=$(IMAGE) \ + docker-compose -p "postal$(RAND)" run --rm postal sh -c 'bundle exec rspec'; \ + EXIT_CODE=$$?; \ + docker-compose -p "postal$(RAND)" down -v; \ + exit $$EXIT_CODE + +.PHONY: test +test: + bundle exec rspec diff --git a/config/boot.rb b/config/boot.rb index 8f801a8..ce7ade7 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -8,8 +8,8 @@ require 'bundler/setup' # Set up gems listed in the Gemfile. require_relative '../lib/postal/config' Postal.check_config! -ENV['DATABASE_URL'] = Postal.database_url ENV['RAILS_ENV'] = Postal.config.rails&.environment || 'development' + if ENV['PROC_NAME'] $0="[postal] #{ENV['PROC_NAME']}" end diff --git a/config/database.yml b/config/database.yml new file mode 100644 index 0000000..55f2c3d --- /dev/null +++ b/config/database.yml @@ -0,0 +1,8 @@ +development: + url: <%= Postal.database_url %> + +production: + url: <%= Postal.database_url %> + +test: + url: <%= Postal.database_url %> diff --git a/config/postal.dev.yml b/config/postal.dev.yml deleted file mode 100644 index e4446e0..0000000 --- a/config/postal.dev.yml +++ /dev/null @@ -1,29 +0,0 @@ -web: - host: localhost:5000 - protocol: http - -fast_server: - bind_address: 0.0.0.0 - port: 5001 - ssl_port: 5002 - -main_db: - username: root - -logging: - stdout: true - -message_db: - username: root - -rabbitmq: - username: guest - password: guest - vhost: / - -smtp_server: - port: 2525 - -rails: - environment: development - secret_key: 58e93bbe3773facec4758b49c693f48dee388b07af0d84927bb9733f939abaacf8b44f6298a5d2e96339d0f2478ec6d0b6b1c656d469a2bac4d6f4b69368870c diff --git a/config/postal.example.yml b/config/postal.example.yml deleted file mode 100644 index 9465e6b..0000000 --- a/config/postal.example.yml +++ /dev/null @@ -1,70 +0,0 @@ -web: - # The host that the management interface will be available on - host: postal.example.com - # The protocol that requests to the management interface should happen on - protocol: https - -fast_server: - # This can be enabled to enable click & open tracking on emails. It is disabled by - # default as it requires a separate static IP address on your server. - enabled: false - bind_address: - -general: - # This can be changed to allow messages to be sent from multiple IP addresses - use_ip_pools: false - -main_db: - # Specify the connection details for your MySQL database - host: 127.0.0.1 - username: postal - password: p0stalpassw0rd - database: postal - -message_db: - # Specify the connection details for your MySQL server that will be house the - # message databases for mail servers. - host: 127.0.0.1 - username: postal - password: p0stalpassw0rd - prefix: postal - -rabbitmq: - # Specify the connection details for your RabbitMQ server. - # if you have more than one RabbitMQ server (cluster), you can use array like this: - # host: - # - 10.1.1.1 - # - 10.1.1.2 - # - 10.1.1.3 - host: 127.0.0.1 - username: postal - password: p0stalpassw0rd - vhost: /postal - -dns: - # Specifies the DNS record that you have configured. Refer to the documentation at - # https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration for further - # information about these. - mx_records: - - mx.postal.example.com - smtp_server_hostname: postal.example.com - spf_include: spf.postal.example.com - return_path: rp.postal.example.com - route_domain: routes.postal.example.com - track_domain: track.postal.example.com - -smtp: - # Specify an SMTP server that can be used to send messages from the Postal management - # system to users. You can configure this to use a Postal mail server once the - # your installation has been set up. - host: 127.0.0.1 - port: 2525 - username: # Complete when Postal is running and you can - password: # generate the credentials within the interface. - from_name: Postal - from_address: postal@yourdomain.com - -rails: - # This is generated automatically by the config initialization. It should be a random - # string unique to your installation. - secret_key: {{secretkey}} diff --git a/config/postal/fast_server.cert b/config/postal/fast_server.cert new file mode 100644 index 0000000..ebaeff7 --- /dev/null +++ b/config/postal/fast_server.cert @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDBTCCAe2gAwIBAgIURjtcwuA2m7eNeogNfiNiTrxLxt0wDQYJKoZIhvcNAQEL +BQAwEjEQMA4GA1UEAwwHZGVmYXVsdDAeFw0yMTA3MjYxNzM0NDdaFw0zMTA3MjQx +NzM0NDdaMBIxEDAOBgNVBAMMB2RlZmF1bHQwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDWrUHqB2zR2C8Rvn1YQ67wso1a/uDqZwM8UntC8jLFhMtQztA9 +BIxqNeXqvPsseHPosjDbfxtGk+WVDfuC0y4Dy9dBZnaq8K+rOUJx1v8cROXlYDa3 +NH7AE4r+RqtER/17dm5M8BRyI/SjIuS1EPA9ax8DIwEeYtrEr9m/A1th1C/eWdAF +3O3ECpqzQLQRPDcHx+/2aMN0QirS23HXnZC6+S/LIKtbfUXRnPgzhh1gz71l5yaS +Pr0f6ra6/GyMf1ZVL5S1rN8ySCaPja5vrTYPJfuGfAS2WtaP5cQdl+p8YEtkT1bn +hfNA/K7wvFut1DfndQyE2aTTL7GxfADGM9/VAgMBAAGjUzBRMB0GA1UdDgQWBBQE +Zr7xtvoJkg7aJoec9fO5O5+jEzAfBgNVHSMEGDAWgBQEZr7xtvoJkg7aJoec9fO5 +O5+jEzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA6rixgFS6s +TU95R1QraSVTOMGVvxd8nY+s4cyVJ6GURyyfC/BbhXjWEHT+d+ea/ALAccYphNpS +R42XZ8Ksa8qU+Xz2ivHfjE8LiY4qfjdcdr6HsYVUV15nLQ3G0SQd1XWCNSGfbnY9 +15O6llL18byJQ/aliob718G0ckEBNYnbYt0PTESxvFPjVLJ4AKZR4Kqkq3X4ZPyK +DxNtQSPZdvTmAJRGq/hGe9o2IKyH+laMPnB6jacqe3JJuqe+bzN4xOKPMqG9w3Fe +BvMnI/CcjIR0yakIjD0I+lC5kMoF4uV6N4yMzWIMD1F+ps2QwebA81/STDy0N7oo +u6JASdYrUVGt +-----END CERTIFICATE----- diff --git a/config/postal/fast_server.key b/config/postal/fast_server.key new file mode 100644 index 0000000..f996f10 --- /dev/null +++ b/config/postal/fast_server.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDWrUHqB2zR2C8R +vn1YQ67wso1a/uDqZwM8UntC8jLFhMtQztA9BIxqNeXqvPsseHPosjDbfxtGk+WV +DfuC0y4Dy9dBZnaq8K+rOUJx1v8cROXlYDa3NH7AE4r+RqtER/17dm5M8BRyI/Sj +IuS1EPA9ax8DIwEeYtrEr9m/A1th1C/eWdAF3O3ECpqzQLQRPDcHx+/2aMN0QirS +23HXnZC6+S/LIKtbfUXRnPgzhh1gz71l5yaSPr0f6ra6/GyMf1ZVL5S1rN8ySCaP +ja5vrTYPJfuGfAS2WtaP5cQdl+p8YEtkT1bnhfNA/K7wvFut1DfndQyE2aTTL7Gx +fADGM9/VAgMBAAECggEAFiPiQ2emonHAUP0rYjoAxdQ0XekheytKmyMKkVn3QIW0 +jk32DgT1ElMitjXtVaXKlnoiLdELGBlSuS+q+9AZ08xnE9ikbnbKN0d9gc4hm2HD +sAdfPT/NvrOFRzo0maMvElehgo/UG/13UofbvIzVqg/tL96hU+fwFg7ozxliiFEw +jvpJcddIYdnUlh1Kb7lvqzeMYPSaUtLoMJeyBSBiOJPr2WqX9I050kgllJxHvTO2 +5qF88gwMvqdB+1uhHacXo43Q8sMcv/moR5bYvjrHOXT8MhKWGLe0AoQecFpfPJ/0 +r6BsjCDDEpk4Z0jfvMnU9r+jUdrZKf9Y8T7gdmjuIQKBgQDs61PVlSBSi9ONdpbL +J0t7jC4GpuiAF7Mp0BystE8jBwHDRIdkk8bY0bosrtxsc5TPWZpUSSNrwfRkzNkV +FcNjco7WYqhse31w4L5oIkoWPPgeEEB8/ohRzlQzaIcqcyUS3z1lqxi7AGcir6KC +LqYuai7H4oFCo4qjhjQt/3e5jQKBgQDn91jVbmYXJJZnzJhQlAsxQCqcXdGSM7hd +B3IzXLXQtffwIU2WWdRB6nzNO1df5JPR0VnnjSGTPl+9vP2P2YFh36gIzafcdXqr +VWGJc9lQ+XKyqRHSqXmioawxgisDaqO+xCDlgvoSIs2Qx7zTo456L0Qk/VDOx+J0 +JSbOmWIZaQKBgBuVMkd1ezPhD5oyqk+wnXse0OT5Xaw8FiHSFuSMgYIkeLIRMmol +QktP74rwOL1vn22ckvkpIrSS+i8aIlPwGrVjSvnutokav3n60HAzPcjlBEYLwlZL +E/fiO69YhhQNH83Yq79AcjqjS16gcB0T7UkOF7Ax0La/b46mO0D3syqpAoGBAOBF +egLouRXZDv4OhpkpeWTFuCz0XEHxdWekYlqcYUEIHk5xtHUQJrMQRlea7xBMjEqJ +EVZZUkPtQ13MEo946Km7NthEFe6FOvPaGfJuKocqliV8Zzn5FxwRGc3IH1QvT1+K +eo/MQYE1WvCG3N72PDOP7V+h9vXlteE7ZjjLfVg5AoGBANnnEt4oMxsvBCKQiQcJ +d+sQVEDx9KHHzYWXsFmUzhP3NlmV4CZ32wV8Eaqsf9pvJrEIjDOZ0AqZ+PBEPpJR +wI9dmKulQ2tvPfH5LOiF7Z/58J86zcthGzPt/xG39Sf7zOpt8YEyeHodwX1dBmw2 +9AHo//QVmLc9a7aZSfGli10a +-----END PRIVATE KEY----- diff --git a/config/postal/lets_encrypt.pem b/config/postal/lets_encrypt.pem new file mode 100644 index 0000000..61b376f --- /dev/null +++ b/config/postal/lets_encrypt.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEA1xHXMa1DPp9+EitqNo/LLf4pFcnxT1UwfuKCrQm7iUzoNt9f +SAsY/Q6d7qZ/mDZFwC9CTUiOswtoYuvjIOZdhigMdIUQOo7vMAnPBvXUIsdZ3qeW ++S/i+KJiOgc+dKXUlJRjGnXb2FNty9dXcsZ/Uiy7v0o1Uers9qmYQU16EhDKWgLc +X9xvXf7x9qGeAJ4Iy0nTpFoy5cSWktde2lZgJsvTBZAUKGaKA60cFPI3FN8LQoK6 +vsbM9H8tWQKxrtJ0gsqSncWZhxiO+ur4/bE4jsSXc3VyFYuhe8Yw4bkFenWQBONC +xwm+onaGw6GgAS5QbyGyYKAXPobU5KnFolESdQIDAQABAoIBAQCTnzNObdcSTPeE +ETi+asTTtPkOc6anBZpb/a4kh+GpxJg/0eLc2IE2caoF/VLnb5lA6S9hTMRmMRZd +j/w+wODBDQw/jnYtO58CIjlwVZxeoucU5YPDVxM8BnnVytMbzhe0RIYhy3QzcFCU +8iKcLZOHHB1il9UxfUdZp99SM5PugUWQbcWC2l/OPIJKDHrTkWFxlXMmxKVSGwWS +0QfqHxcJMbs9DJvhlYsIPL+mEhCT8SJH30V++dy3RFuUygBaklc2jtdkvwgTnEs9 +Tng2DyGjmcndnzbvw7BBuBcxLsxcR3qY7VGkIGTOaHNjvVN4Cuio9U3d+aX/NX1z +LU6Zd8mhAoGBAPMr3ubRebH419y4vsJy/Mh6wAFgzGXmuepj1yl25TKGViI6RnmT +ulsgXX1qQWnJWFBkXfamC19jjlsG9xeN/bBz7UhNSs0W3mYMBo6coH6YyuLjV2wQ +p+/kY+yjQ5KDRENZT5qQPw0dO+47Zbi8teuysCr6lLeflvZeJvebrZ/rAoGBAOJq +cfWNec6Z2UYZyj7Bx70iMqe3plET+3fikYQh+sFQ0/944kwOczPFoOL8uJhEXmcj +J3eTP+/b315PdsoiLn1wqwoxB377PiCXsp9wLyPuzuDo71UDyCZK5WFIfHlpt6gt +gx22NgqfyXNEWUXjXqqk3zX6JcG6MCCU7Wtrt98fAoGBAJEuqC528olnYLnPM1U1 +AedQIkKwYFiWoHlokpWW/tBjlBlrYZhEswalFCxEvDlElQ2qXs9b435YGi4Owoe1 +prkq/YglXXuFI9MZavDKYqgy4S8FPLSwXRPE8EPgVf+rj54GPJizdnGF+roJjHn3 +cUX/sV53rULUbXU6UVmUAN1xAoGBANRK7ElJ+uD9nhy9h8VqGqc7DnX1m2tAKjQR +a1GSLrTd3bkXlk+r6NatQhoyzb5vtHhOHO5gUb3L0ldyeLY0cJTLdIQczqOAXZNf +yWr3XCv7+Vwm7GkxH5TP+t1JgvSwbDSzX9IXC/rQManzdyUxeIzWBDhvMMHBmuih +2y8yk/gPAoGAbBS1kGId712dHBAGdOrvOyHwPVvAkERvLgFVAlpcyVnaLm47UILv +hwh9jzMczN1QnaCBkPwvkBEzT3k5Xt1KPBK52u+MPrpDWewF3fhnlSsztQti2NsT +4Vm0LDFEuvjvHRtU+HTm68jOJPNIYLiXyVMTxPEkYIhsqSqX2WwVgJQ= +-----END RSA PRIVATE KEY----- diff --git a/config/postal/postal.yml b/config/postal/postal.yml new file mode 100644 index 0000000..1e1cf8f --- /dev/null +++ b/config/postal/postal.yml @@ -0,0 +1,37 @@ +web_server: + bind_address: 0.0.0.0 + port: 5000 + +smtp_server: + port: 2525 + +main_db: + host: mariadb.services + username: root + password: llamafarm123 + database: postal + +message_db: + host: mariadb.services + username: root + password: llamafarm123 + prefix: postal + +rabbitmq: + host: rabbitmq.services + username: guest + password: guest + vhost: postal + +dns: + mx_records: + - mx.postal.example.com + smtp_server_hostname: postal.example.com + spf_include: spf.postal.example.com + return_path: rp.postal.example.com + route_domain: routes.postal.example.com + track_domain: track.postal.example.com + +rails: + secret_key: 18bc35146c195d77c1f716d9d4b2e22bbc538e99892276152cce133360d4f9543f5006c29c952e8d0821fcbda482d744f9663863a4c8f94b2c746c8ff63a162fe2d885312b16e2675e01cade0477e0206e3a946b9315183106e3a53bf8676b5079849a95cb0e0d90e228877bdcce49e741b1e6ed3538aaa21e0ccfd83c2a8b12 + environment: development diff --git a/config/postal/signing.key b/config/postal/signing.key new file mode 100644 index 0000000..dd8f877 --- /dev/null +++ b/config/postal/signing.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDKuLcHPYXIkYJ+IZG/k5MN6cbLeszkL94IEaFyEtubtNjEAQXb +QB5I+dMezeHg7w4I3HBjHROwxgCCBC/h5vnGM6jDO16Z1tW9FDy/FiJCPtacX0NJ +2T5gFRAWoyKoV5xYdRGgO1J2TCo63s66rpTFFwdUsgyBsESvzt6EwkxYowIDAQAB +AoGBAMMf4oQkkqYIcQtI8ons2OnWcBOhYp/s9xDbL4OmZR1NiCu5NFLiN4RUewK2 +dslUMDUVQVQVQ8OuAgUjVJdjBFwst1e3v7S73/O2W2UAXPzz0Qqzbni2LWITEYMr +uI/SfsfxmgT9tk7MqRgfBzIlFsssjsgf5vNlbTZY0oVn6ixpAkEA7IbVGwY0njU3 +OV2OQpdUL8ai1/TpitSVCnYc7nD8MDWpZFAz4u3pdWHmpXEEfplLUunLpHhThYp8 +jgKhuRsTjQJBANtpYvKMzU88qZ+TchWZaaFJPjRtaMPiOK2MAootNEKUuzbhDyLM +SSKK9vfv8VkJPHbkAa2sYwEM6rg815gHeO8CQCYGZyw5CyyEEaS/TaeW/InRvUxK +q2EOXAeahXwv3dtCRUFDQ5Qv+2BLpPDkAnz32Aw0WfDPB15orS2Hbsh7eeECQG+f +XLxij2yZQv4w5+A/LPLlrSTE6ICHDSiVSxF6z9RzkA7qTmX4odhV9DDMu+78+OrP +Ml9ljPSS2rKiGVh5rLcCQGzOocyDwtj9Aj9EohuxCJPp4N/kGF5Mv7NhEUoy7sz+ +x/vJIADAnf7/XGpQF8CnZ6yKoLKNBSmYtPg8Oi+sugg= +-----END RSA PRIVATE KEY----- diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f3d8670 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,29 @@ +version: "3" +services: + postal: + image: ${POSTAL_IMAGE} + depends_on: + - mariadb + - rabbitmq + entrypoint: ["/docker-entrypoint.sh"] + volumes: + - "./docker/ci-config:/config" + environment: + POSTAL_CONFIG_ROOT: /config + KATAPULT_CONFIG_FILE: /ci-config.yml + WAIT_FOR_TIMEOUT: 90 + WAIT_FOR_TARGETS: |- + mariadb:3306 + rabbitmq:5672 + + mariadb: + image: mariadb + restart: always + environment: + MARIADB_DATABASE: postal + MARIADB_ALLOW_EMPTY_PASSWORD: 'yes' + MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: 'yes' + + rabbitmq: + image: rabbitmq:3 + restart: always diff --git a/docker/ci-config/fast_server.cert b/docker/ci-config/fast_server.cert new file mode 100644 index 0000000..3e6064c --- /dev/null +++ b/docker/ci-config/fast_server.cert @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDBTCCAe2gAwIBAgIUexj/Ul7/jvs4L6q6H3MSYsW4FbkwDQYJKoZIhvcNAQEL +BQAwEjEQMA4GA1UEAwwHZGVmYXVsdDAeFw0yMTA3MjYxNjQwNTRaFw0zMTA3MjQx +NjQwNTRaMBIxEDAOBgNVBAMMB2RlZmF1bHQwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDRNaLmKp75o6I37JCpO2e8IIWBqLTpYGomvAWgKdB8v0AyWMcy +kE5IWZcFICBTJBpRTTHdCfrDnnqvS0AhMqpB3xPw0/DOCDhAxri6Cg4yxecXkFZP +Ckx1ga1sUb9ej8fYBWx9/g6j7waRSGtRB0zwS94tJdJa9XAVj3e97f3CEAr9wPQG +oCC/HQfSgZTho3RPik0x3Wi3Kf9JMHRbBZFDW/a/Z0KjmtFFebJNXBOH7r0Itq82 +DY14UqHtG6omZUrGu/Dsx8++USaV03rOq2fSKuol4lEqBWfqI2tzal5hE/46Glbn +ukM+/Iq4+t4ydNsYrhxetsNl3mTWiDkcmYV/AgMBAAGjUzBRMB0GA1UdDgQWBBS+ +6ok381yre3ATn7f5cx6VrBg9+jAfBgNVHSMEGDAWgBS+6ok381yre3ATn7f5cx6V +rBg9+jAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAQPFR90MKT +LiwMCCRjpTfMtKYF9rkNTIptCSResfeiwQ3KboBeE/jZzVzk1Pmy5Cvsy/i8zCfz +DcQbxKG82rmUwoPcS/Q0TKjmNcmwiLVvAuR8M8JJnZQiXux+Hb7yKgF/35U6FBuE +jqkWNpuTh5dVEC71hfl6JDuAFrQo+KguppMrbGyT5/yzU99YJR0wI0jjQlBvM9BC +JMf/IA5Q0XZFPpqFSDIud3xqrzbhBgdkBO1MRs/6NAY+pGDxQ5hWlVcn+f/spQZc +03PD+xZjtauUBfsrwk5PpOyGKL4bxgbt2S1aoIgLOjRZwpWFKQwuEcJNi9mDTU6j +mEYzeueHq+7M +-----END CERTIFICATE----- diff --git a/docker/ci-config/fast_server.key b/docker/ci-config/fast_server.key new file mode 100644 index 0000000..30796d1 --- /dev/null +++ b/docker/ci-config/fast_server.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDRNaLmKp75o6I3 +7JCpO2e8IIWBqLTpYGomvAWgKdB8v0AyWMcykE5IWZcFICBTJBpRTTHdCfrDnnqv +S0AhMqpB3xPw0/DOCDhAxri6Cg4yxecXkFZPCkx1ga1sUb9ej8fYBWx9/g6j7waR +SGtRB0zwS94tJdJa9XAVj3e97f3CEAr9wPQGoCC/HQfSgZTho3RPik0x3Wi3Kf9J +MHRbBZFDW/a/Z0KjmtFFebJNXBOH7r0Itq82DY14UqHtG6omZUrGu/Dsx8++USaV +03rOq2fSKuol4lEqBWfqI2tzal5hE/46GlbnukM+/Iq4+t4ydNsYrhxetsNl3mTW +iDkcmYV/AgMBAAECggEBALGFK7bWj5MQsIN3rsCK8dkGV4LP3sLw1uILRVLEaG6R +8i1Ge7CCFor5ylXFDui9h79ZG2iOIUSAY2X/GmmRDjtayRbfIEQTYXhFp1XlVmrq +1s594V6sRHipErkJHLNmmZLJ92dpfo7IMfBxXO6inTyBhAMXRsl73iHNXTPCkEJr +xbrnQPw5g1f7amGS09Iz4CEwVs7PABA7V1uhGRyCESp9nUrdQpHKPfjAIi+KMNZw +0Eb/Bj4NSHNokmbp2TUJ1lRAsFmunjHpgdZ18CR1G8naSjhtd11/HrQ5b0LWVdsE +0Igq1/i0Os75lFi2d8ZSPrxIp9FQd61wrujPXiOFqeECgYEA6z+VulbI1D/CTkft +nvc46xsop+j+N0BYLUzorstA2INCoORHM8rZseJ4QDJcou4gXg6NfdIkoncnTDaa +p0xZfNsP3o3lQHRiDDrzRfrTt8XogYA4MQQzHsEHarwHlRd4Ftsu43rCuLZX7g9r +BE0OsjsY3Wy9qW9UxKGA50XG0EkCgYEA46oJsayy+rIgm9EPn09j9ezGz9o5KOe6 +Pjo5CYLKVuVkkQugAozwvf/+SumxVdepA9aUQ635Euw/Dpm/2SPaiBN4H4tLhRNp +YchpiOwWg9ThC26w7jRk0rdBWUIzisZvIeBo1w5ye/HB3Ztl2MAz6Yv3SAOj0mNv +ogXzuQ3yN4cCgYAq8RlowUy5icXzOigC+4fVSsjaFarJ9SHjawWSWqHEo/k2m1Tv +/FhOo1NmDItiZmtcH/XuAL0VNwDiZZlHbqVrKCW2b1posJXxO5WKsaWSBztQ4FHh +iK24MG4lKpuLuJQAQBRIC/GdfBOC7iePym0jVaxNRvs8AYmMtxprnQ4UmQKBgQDQ +p8oktnR/QfyS8oPP7fJetbjtTUMwE1nlqHUYG3AZPjrymOX5EHWgndvRiueGFpcI +NoVCllN+nVmZpx5nA+5I4xcoSgFYIRdnkEfxPvfPsa7kTHoKh6iUW3KgPQWCPiYi +tUtBNzOEF2ooEkHA6z9o4Ggt73AY5hutMqlSxM5nRwKBgBP0OqiyHeLbORHwOZeE +459uSE7UmoJINKgRWqdGprmfQZZvzoI0jvAvRvGIt0DYyS5o25AEAO6Y84DkkXGf +8yNHXJf6F6VPt40S5XOyJ8wikmSlsfLtRWkMsdSXZtsF7zOtE6kTCewxEwrypuzs +jNrQgpSolNPcLy6+2hgbiyu5 +-----END PRIVATE KEY----- diff --git a/docker/ci-config/lets_encrypt.pem b/docker/ci-config/lets_encrypt.pem new file mode 100644 index 0000000..c872ac4 --- /dev/null +++ b/docker/ci-config/lets_encrypt.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEApj2HYkdZsxxHpaUZV3beSn7p1DeVueDcGTT17Gf/PpV+SHXI +lC1AplNcQPI5iPmg7Fyk2KedlaQQJe8BrCrtBm5X5xNbGDuN5s4N8fZ/AJZ+YZOi +fTEzixYUjuQtJ0KcdofOMBqr4F4DVIG6ZWGoEbEIdNzDCLUeFv5xBmKGRDKmtEDC +SnYcEEFR9ewEHU7KYZbiaGexX0mskKGHMQLiM+xFp6qxsx8isVn+SBo3h94TFdRH +wanFg7ZOUo7Vm1gQkclz7+KpKeWjAsBfuFisrl1cGpN0zODltGGiOQVOymccv93k +7Dw01OAmr5JCfm5Ch9V9pVGlkSykAG93UrfhVwIDAQABAoIBACe+7ECGGJ8nMsYa +3B06UVl0UImppIWliloIfIfCMZeP/HpslsE+tIdPxO3OPA1QybXZTJx0LswZRrcb +FsZIGRWBiki4Kv53Nq0pNNJWAfVtBdhkiOPvwIgPhmjHizgox+na/GQp7FAfiiJJ +Rfx5Rcq9De2K3qKVUxViTjmdksZ5Bw4RzLNAa4QEUw8oZ0QTELvBISo2m6IlLWQq +YRyA2X2bbOjIRbvGfouFLuzqqrtqy76jyamTlTGP3BV7PcJlS+HRhpgXRX1GDANz +MGijGkk+g8umTdj2CIuUbfC6DvYv1XiskPWsMw+1Vel/pKdSbT8trCluG5AGcPeB +08wViSkCgYEA099Nr/fXDqqjulG5uIO624kE5ED3AbsShsCJHQMDjX79xzljjXXm +C5nydj9xRiWB9xt8ptL4ZDOm/EyzFYJmkRWe0eMHU6vUZpbRBRMSHPQhVs4PMDtB +OJ2+sZL/vIaqF6W8VYzohEGVoN34sNDh7MRX283V2XSAgi7PEWdzVpUCgYEAyN0z +2wBftrd85harUfryZwPNh53HrA0Xku3AqKymb5ukS2uQFQ904cvxlIOxEZGVlW1r +HWwEgvd1QkiovT6FExSgQoMMShiRJDeJJVqaR0/UD7hHyvX5P8LKUosQaJUWrA09 +Y777tskJX34WWyzJgvHTnQ2TA4MQAaJEHb08+TsCgYEAzbx+PMymuWg72tY3SRQp +o7qW1Gq9MKIOqGlX+6MMlR7mocl5gUkmHMfd6LNMdHhBjsnTLk+YwfxiP4bfM5jP +rjzXXypc2AP4GbKDv7C4GwN5SEiJ+STg/XA4V0jOKqx9iL74df6BXsQs3uwM7O25 +JOe4BQoIicOWclOv4U+acU0CgYAr8ckghqpqDSa0KA1/OAnEY96ZZvmCOLMJoB5g +SLV5AXImVfgFw4XsyHOn7E/W6iTxtiiTHUi3ZnAu+jqAfKccj4yoQId1xn4qkEPe ++j16kIpyjfyW+M15F6KwAGCsoMF/Dr55jhT/3mfAjpNRizDjBwkm+QtK32enE9sX +LomidQKBgBxdncRWWwCKtD8MCW/fkK/jGFVhy4dxzgAJCGy1ThuAylkHRscTmszt +Pgp1Layd2fGWM+ohTrzPZAkoa7UqTvDxGe50ODdY4nw01/s4RGVBDbnLOBJ8yUMO +SwAgEqOjEWEyHl4tkcBWcNzu0QWPd7NPmXuh/7dAyIJ66fL3R6y1 +-----END RSA PRIVATE KEY----- diff --git a/docker/ci-config/postal.yml b/docker/ci-config/postal.yml new file mode 100644 index 0000000..982fcec --- /dev/null +++ b/docker/ci-config/postal.yml @@ -0,0 +1,51 @@ +general: + use_ip_pools: false + +web_server: + bind_address: 127.0.0.1 + port: 5000 + +smtp_server: + port: 2525 + +logging: + stdout: false + +main_db: + host: mariadb + username: root + password: + database: postal + +message_db: + host: mariadb + username: root + password: + prefix: postal + +rabbitmq: + host: rabbitmq + username: guest + password: guest + vhost: null + +dns: + mx_records: + - mx.postal.example.com + smtp_server_hostname: postal.example.com + spf_include: spf.postal.example.com + return_path: rp.postal.example.com + route_domain: routes.postal.example.com + track_domain: track.postal.example.com + +smtp: + host: 127.0.0.1 + port: 2525 + username: + password: + from_name: Postal + from_address: postal@yourdomain.com + +rails: + secret_key: 5e82ca222ccc8642fb38a8ea4b847408b983b42a497ec16b499ed89ba506a4edcab8ac015b32dbd1ea620119484e0c1dc056f97b4b37cd29146192df5ccd6abec345a0125c424daad12430a4796d108197c746f5eb8e9e1faa36a8ff8d0c5a9cf00191f997c354341fd656ca0ef9d7b40a37ea4b1b1e78fe9030fa9990dbb662 + environment: test diff --git a/docker/ci-config/signing.key b/docker/ci-config/signing.key new file mode 100644 index 0000000..4c48285 --- /dev/null +++ b/docker/ci-config/signing.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQDWt+8XMJEoeOd5DW0ETcj7oklUiyd39h71ZsBxlZSOSydsb+ft +26C/dfJmT/1W38oxhct1iuRN6ETNHNeLtwrysxhpmSiea/eU8Iv3s4WVgdTJyneT +H++yuXwOyEmb1opc7igSRfbFLkeVcYm45rnzbjf/26UaFwmtZlxPI0LZrQIDAQAB +AoGAA8cOpMjM9PpTkDSlQ1se+xZa1erw0dJ5rvWU0yq/h1VZJzY8zVl81YF8t0IX +Ae1EAGULNFEyPRCmDTnBrQqWXbB5bqZIROKT+1Ruo1Kg6OUsrSDK3cDWYM2lInB/ +/CXKo4pv82Zh9iS9qj7URFOEzEX43KNXCrfrLSOVRp+xnB0CQQDzxOhujaSqGlXW +wLdrTPRWp63SNbkhWK8FXnkeoyH02EvlWSIGQL2deDaOQk9VKd7kCes9MyWC9d7L +FO/e7GdDAkEA4X3ieo3Wted69PG3c+jN//nA1WZdgHKucGkOTk1MakqG6kf7DeVt +Uj2AFR8wxtKDYi9G+YxdKb+lI/T0CI9UTwJBALwf3UTcWRTRiCdYyPStCfAKLbIJ +tdrPRxr8orqLKPx9JG1WEVUEB5GMIYY+FF1kF9ii8wFjBHMB7rOJb+j5RmMCQA27 +U8pwzs1/Dj7SZYCagcj/1Z1pQXJsCXFxBF0CWg/y/+pOfdxnx1OFyUIAB0FkWnnl +NSZHRPkg4Zah+SZ4TAMCQQDid1Cp6nhlntpOANWIXxkJJuDVYepQN1AgCvwZ3OMl +jOfmHNFkXlzb4EYr+uoab2cXV3TNVtau7Z5/Se1ZTVSp +-----END RSA PRIVATE KEY----- diff --git a/lib/postal/config.rb b/lib/postal/config.rb index 8584f32..acda5c8 100644 --- a/lib/postal/config.rb +++ b/lib/postal/config.rb @@ -39,7 +39,7 @@ module Postal elsif __FILE__ =~ /\A\/opt\/postal/ Pathname.new("/opt/postal/config") else - Pathname.new(File.expand_path("../../../config", __FILE__)) + Pathname.new(File.expand_path("../../../config/postal", __FILE__)) end end end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 4a2dd7b..8b85eae 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -1,4 +1,4 @@ -ENV['POSTAL_CONFIG_ROOT'] = File.expand_path('../config', __FILE__) +ENV['POSTAL_CONFIG_ROOT'] ||= File.expand_path('../config', __FILE__) require File.expand_path('../../config/environment', __FILE__) require 'rspec/rails' @@ -6,6 +6,9 @@ require 'spec_helper' require 'factory_bot' require 'database_cleaner' +DatabaseCleaner.allow_remote_database_url = true +ActiveRecord::Base.logger = Logger.new("/dev/null") + FACTORIES_EXCLUDED_FROM_LINT = [] Dir[File.expand_path('../factories/*.rb', __FILE__)].each { |f| require f }