split into alpine/ubuntu

This commit is contained in:
CatDeployed 2018-07-23 18:22:42 -04:00
parent d829eb70bb
commit 40506d7a70
17 changed files with 364 additions and 11 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

View File

@ -1,12 +1,14 @@
version: 2 version: 2
jobs: jobs:
build: build-alpine:
machine: true machine: true
working_directory: ~/repo/alpine
steps: steps:
- checkout - checkout:
path: ~/repo
- run: - run:
name: Build Postal Docker Container name: Build Postal Docker Container
command: docker build -t catdeployed/postal:latest . command: cd alpine && docker build -t catdeployed/postal:latest -t catdeployed/postal:alpine .
- run: - run:
name: Skip this job for Pull Requests name: Skip this job for Pull Requests
command: '[[ -v CIRCLE_PR_NUMBER ]] && circleci step halt || true' command: '[[ -v CIRCLE_PR_NUMBER ]] && circleci step halt || true'
@ -27,7 +29,7 @@ workflows:
only: only:
- master - master
jobs: jobs:
- build - build-alpine
commit: commit:
jobs: jobs:
- build - build-alpine

11
.gitignore vendored
View File

@ -1,6 +1,7 @@
data/* alpine/data/*
!data/.gitkeep !alpine/data/.gitkeep
!data/postal/.gitkeep !alpine/data/postal/.gitkeep
codeship.aes ubuntu/data/*
daily.sh !ubuntu/data/.gitkeep
!ubuntu/data/postal/.gitkeep

View File

@ -44,7 +44,7 @@ services:
depends_on: depends_on:
- postal - postal
volumes: volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro - ./src/nginx.conf:/etc/nginx/conf.d/default.conf:ro
- static_assets:/opt/postal/public:ro - static_assets:/opt/postal/public:ro
- ./data/postal/assets:/opt/postal/public/assets:ro - ./data/postal/assets:/opt/postal/public/assets:ro
volumes: volumes:

22
alpine/src/nginx.conf Normal file
View File

@ -0,0 +1,22 @@
server {
listen 80;
root /opt/postal/public;
location / {
client_max_body_size 50M;
try_files $uri $uri/index.html $uri.html @puma;
}
location /assets {
add_header Cache-Control max-age=3600;
}
location @puma {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://postal:5000;
}
}

View File

@ -0,0 +1,68 @@
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: mysql
username: root
password: {{ MYSQL_ROOT_PASSWORD }}
database: {{ MYSQL_DATABASE }}
message_db:
# Specify the connection details for your MySQL server that will be house the
# message databases for mail servers.
host: mysql
username: root
password: {{ MYSQL_ROOT_PASSWORD }}
prefix: postal
rabbitmq:
# Specify the connection details for your RabbitMQ server.
host: rabbitmq
username: {{ RABBITMQ_DEFAULT_USER }}
password: {{ RABBITMQ_DEFAULT_PASS }}
vhost: /{{ RABBITMQ_DEFAULT_VHOST }}
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}}
web_server:
bind_address: 0.0.0.0

27
ubuntu/Dockerfile Normal file
View File

@ -0,0 +1,27 @@
FROM ruby:2.4-alpine
RUN apk --no-cache add nodejs mysql-client git bash python libcap py-setuptools py-pip build-base python-dev mariadb-dev tzdata \
&& pip install j2cli \
&& git clone https://github.com/atech/postal.git /opt/postal \
&& rm -rf /var/lib/apt/lists/* \
&& gem install bundler \
&& gem install procodile \
&& gem install tzinfo-data \
&& addgroup -S postal \
&& adduser -S -G postal -h /opt/postal -s /bin/bash postal \
&& chown -R postal:postal /opt/postal/ \
&& /opt/postal/bin/postal bundle /opt/postal/vendor/bundle \
&& rm -rf /var/cache/apk/*
## Adjust permissions
RUN setcap 'cap_net_bind_service=+ep' /usr/local/bin/ruby
## Stick in required files
ADD src/docker-entrypoint.sh /docker-entrypoint.sh
ADD src/templates /templates
## Expose
EXPOSE 5000
## Startup
ENTRYPOINT ["/bin/bash", "-c", "/docker-entrypoint.sh ${*}", "--"]

52
ubuntu/docker-compose.yml Normal file
View File

@ -0,0 +1,52 @@
version: "3"
services:
postal:
image: catdeployed/postal:latest
container_name: postal
command: run
ports:
- 127.0.0.1:25:25
depends_on:
- "mysql"
- "rabbitmq"
volumes:
- static_assets:/opt/postal/public
- ./data/postal/assets:/opt/postal/public/assets
- ./src/templates/:/templates
environment:
- MYSQL_ROOT_PASSWORD=changeme
- MYSQL_DATABASE=postal
- RABBITMQ_DEFAULT_USER=postal
- RABBITMQ_DEFAULT_PASS=changeme
- RABBITMQ_DEFAULT_VHOST=postal
mysql:
image: mariadb:10
container_name: postal_mysql
volumes:
- ./data/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=changeme
- MYSQL_DATABASE=postal
rabbitmq:
image: rabbitmq:3-alpine
container_name: postal_rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=postal
- RABBITMQ_DEFAULT_PASS=changeme
- RABBITMQ_DEFAULT_VHOST=/postal
nginx:
image: nginx
restart: always
ports:
- 127.0.0.1:80:80
links:
- postal
depends_on:
- postal
volumes:
- ./src/nginx.conf:/etc/nginx/conf.d/default.conf:ro
- static_assets:/opt/postal/public:ro
- ./data/postal/assets:/opt/postal/public/assets:ro
volumes:
static_assets:

25
ubuntu/src/docker-entrypoint.sh Executable file
View File

@ -0,0 +1,25 @@
#!/bin/bash
## Generate config
if [ ! -f /opt/postal/config/postal.yml ] || [[ $(cat /opt/postal/config/postal.yml | wc -l) < 2 ]]; then
## Build Jinja2 Template
j2 /templates/postal.example.yml.j2 > /opt/postal/config/postal.example.yml
## Add in secret key building
echo "rails:" >> /opt/postal/config/postal.example.yml
echo " secret_key: {{secretkey}}" >> /opt/postal/config/postal.example.yml
## Generate config and keys
/opt/postal/bin/postal initialize-config
fi
cat /opt/postal/config/postal.yml
## Clean Up
rm -rf /opt/postal/tmp/pids/*
## Wait for MySQL to start up
echo "== Waiting for MySQL to start up =="
while ! mysqladmin ping -h mysql --silent; do
sleep 0.5
done
## Start Postal
/opt/postal/bin/postal "$@"

22
ubuntu/src/nginx.conf Normal file
View File

@ -0,0 +1,22 @@
server {
listen 80;
root /opt/postal/public;
location / {
client_max_body_size 50M;
try_files $uri $uri/index.html $uri.html @puma;
}
location /assets {
add_header Cache-Control max-age=3600;
}
location @puma {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://postal:5000;
}
}

View File

@ -0,0 +1,66 @@
web_server:
bind_address: 0.0.0.0
port: 5000
max_threads: 5
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: mysql
username: root
password: {{ MYSQL_ROOT_PASSWORD }}
database: {{ MYSQL_DATABASE }}
message_db:
# Specify the connection details for your MySQL server that will be house the
# message databases for mail servers.
host: mysql
username: root
password: {{ MYSQL_ROOT_PASSWORD }}
prefix: postal
rabbitmq:
# Specify the connection details for your RabbitMQ server.
host: rabbitmq
username: {{ RABBITMQ_DEFAULT_USER }}
password: {{ RABBITMQ_DEFAULT_PASS }}
vhost: /{{ RABBITMQ_DEFAULT_VHOST }}
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

View File

@ -0,0 +1,68 @@
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: mysql
username: root
password: {{ MYSQL_ROOT_PASSWORD }}
database: {{ MYSQL_DATABASE }}
message_db:
# Specify the connection details for your MySQL server that will be house the
# message databases for mail servers.
host: mysql
username: root
password: {{ MYSQL_ROOT_PASSWORD }}
prefix: postal
rabbitmq:
# Specify the connection details for your RabbitMQ server.
host: rabbitmq
username: {{ RABBITMQ_DEFAULT_USER }}
password: {{ RABBITMQ_DEFAULT_PASS }}
vhost: /{{ RABBITMQ_DEFAULT_VHOST }}
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}}
web_server:
bind_address: 0.0.0.0