Attempting to build prod env
This commit is contained in:
parent
2e8855040d
commit
b76510accc
48
Dockerfile.prod
Normal file
48
Dockerfile.prod
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
# Use the official PHP 5.6 Apache image for classic mod_php
|
||||||
|
FROM php:5.6-apache
|
||||||
|
|
||||||
|
# Install required system libraries and PHP extensions for CakePHP
|
||||||
|
RUN sed -i 's|http://deb.debian.org/debian|http://archive.debian.org/debian|g' /etc/apt/sources.list && \
|
||||||
|
sed -i 's|http://security.debian.org/debian-security|http://archive.debian.org/debian-security|g' /etc/apt/sources.list && \
|
||||||
|
sed -i '/stretch-updates/d' /etc/apt/sources.list && \
|
||||||
|
echo 'Acquire::AllowInsecureRepositories "true";' > /etc/apt/apt.conf.d/99allow-insecure && \
|
||||||
|
echo 'Acquire::AllowDowngradeToInsecureRepositories "true";' >> /etc/apt/apt.conf.d/99allow-insecure && \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install --allow-unauthenticated -y libc-client2007e-dev libkrb5-dev libpng-dev libjpeg-dev libfreetype6-dev libcurl4-openssl-dev libxml2-dev libssl-dev libmcrypt-dev libicu-dev && \
|
||||||
|
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \
|
||||||
|
docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
|
||||||
|
docker-php-ext-install mysql mbstring gd curl imap
|
||||||
|
|
||||||
|
# Set environment variables.
|
||||||
|
ENV HOME /root
|
||||||
|
|
||||||
|
# Define working directory.
|
||||||
|
WORKDIR /root
|
||||||
|
|
||||||
|
ARG COMMIT
|
||||||
|
ENV COMMIT_SHA=${COMMIT}
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
# Copy vhost config to Apache's sites-available
|
||||||
|
ADD conf/apache-vhost.conf /etc/apache2/sites-available/cmc-sales.conf
|
||||||
|
ADD conf/ripmime /bin/ripmime
|
||||||
|
|
||||||
|
RUN chmod +x /bin/ripmime \
|
||||||
|
&& a2ensite cmc-sales \
|
||||||
|
&& a2dissite 000-default \
|
||||||
|
&& a2enmod rewrite \
|
||||||
|
&& a2enmod headers
|
||||||
|
|
||||||
|
# Copy site into place.
|
||||||
|
ADD . /var/www/cmc-sales
|
||||||
|
ADD app/config/database.php /var/www/cmc-sales/app/config/database.php
|
||||||
|
RUN mkdir /var/www/cmc-sales/app/tmp
|
||||||
|
RUN mkdir /var/www/cmc-sales/app/tmp/logs
|
||||||
|
RUN chmod -R 755 /var/www/cmc-sales/app/tmp
|
||||||
|
RUN chmod +x /var/www/cmc-sales/run_vault.sh
|
||||||
|
|
||||||
|
# Ensure CakePHP tmp directory is writable by web server
|
||||||
|
RUN chmod -R 777 /var/www/cmc-sales/app/tmp
|
||||||
|
# By default, simply start apache.
|
||||||
|
CMD /usr/sbin/apache2ctl -D FOREGROUND
|
||||||
12
Dockerfile.prod.db
Normal file
12
Dockerfile.prod.db
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
# Use the same content as Dockerfile.stg.db, but for prod. If you want to customize, edit this file.
|
||||||
|
# For now, copy the staging DB Dockerfile and adjust as needed for production.
|
||||||
|
FROM mysql:5.7
|
||||||
|
|
||||||
|
ENV MYSQL_ROOT_PASSWORD=secureRootPassword
|
||||||
|
ENV MYSQL_DATABASE=cmc
|
||||||
|
ENV MYSQL_USER=cmc
|
||||||
|
ENV MYSQL_PASSWORD=xVRQI&cA?7AU=hqJ!%au
|
||||||
|
|
||||||
|
EXPOSE 3306
|
||||||
|
|
||||||
|
VOLUME ["/var/lib/mysql"]
|
||||||
20
Dockerfile.prod.go
Normal file
20
Dockerfile.prod.go
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
FROM golang:1.24-alpine AS builder
|
||||||
|
|
||||||
|
RUN apk add --no-cache git
|
||||||
|
WORKDIR /app
|
||||||
|
COPY go-app/go.mod go-app/go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
COPY go-app/ .
|
||||||
|
RUN go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
|
||||||
|
RUN sqlc generate
|
||||||
|
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o server cmd/server/main.go
|
||||||
|
|
||||||
|
FROM alpine:latest
|
||||||
|
RUN apk --no-cache add ca-certificates
|
||||||
|
WORKDIR /root/
|
||||||
|
COPY --from=builder /app/server .
|
||||||
|
COPY go-app/templates ./templates
|
||||||
|
COPY go-app/static ./static
|
||||||
|
COPY go-app/.env.example .env
|
||||||
|
EXPOSE 8082
|
||||||
|
CMD ["./server"]
|
||||||
|
|
@ -62,11 +62,21 @@ $host = $_SERVER['HTTP_HOST'];
|
||||||
// 'timeout' => '30',
|
// 'timeout' => '30',
|
||||||
// 'host' => '172.17.0.1'));
|
// 'host' => '172.17.0.1'));
|
||||||
|
|
||||||
// SMTP settings for staging
|
|
||||||
Configure::write('smtp_settings', array(
|
// SMTP settings for production
|
||||||
|
if (in_array($host, $production_hosts)) {
|
||||||
|
Configure::write('smtp_settings', array(
|
||||||
|
'port' => '25',
|
||||||
|
'timeout' => '30',
|
||||||
|
'host' => '172.17.0.1'
|
||||||
|
));
|
||||||
|
} else {
|
||||||
|
// SMTP settings for staging
|
||||||
|
Configure::write('smtp_settings', array(
|
||||||
'port' => '1025',
|
'port' => '1025',
|
||||||
'timeout' => '30',
|
'timeout' => '30',
|
||||||
'host' => 'mailpit'));
|
'host' => 'mailpit'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Mailhog SMTP settings for local development
|
// Mailhog SMTP settings for local development
|
||||||
|
|
|
||||||
26
conf/nginx-site.prod.conf
Normal file
26
conf/nginx-site.prod.conf
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
server {
|
||||||
|
server_name cmclocal;
|
||||||
|
auth_basic_user_file /etc/nginx/userpasswd;
|
||||||
|
auth_basic "Restricted";
|
||||||
|
location /go/ {
|
||||||
|
proxy_pass http://cmc-prod-go:8082;
|
||||||
|
proxy_read_timeout 300s;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
location / {
|
||||||
|
proxy_pass http://cmc-prod-php:80;
|
||||||
|
proxy_read_timeout 300s;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
listen 0.0.0.0:80;
|
||||||
|
# include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||||
|
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||||
|
|
||||||
|
}
|
||||||
78
deploy/deploy-prod.sh
Normal file
78
deploy/deploy-prod.sh
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Deploy production environment for cmc-sales
|
||||||
|
|
||||||
|
# Usage: ./deploy-prod.sh [--no-cache]
|
||||||
|
|
||||||
|
USE_CACHE=true
|
||||||
|
for arg in "$@"; do
|
||||||
|
if [[ "$arg" == "--no-cache" ]]; then
|
||||||
|
USE_CACHE=false
|
||||||
|
echo "No cache flag detected: will rebuild images without cache."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [[ "$USE_CACHE" == "true" ]]; then
|
||||||
|
echo "Using cached layers for docker build."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Starting production deployment for cmc-sales..."
|
||||||
|
echo "Setting variables..."
|
||||||
|
SERVER="cmc-sales"
|
||||||
|
REPO="git@code.springupsoftware.com:cmc/cmc-sales.git"
|
||||||
|
BRANCH="master"
|
||||||
|
PROD_DIR="cmc-sales-prod"
|
||||||
|
|
||||||
|
echo "Connecting to server $SERVER via SSH..."
|
||||||
|
# Pass variables into SSH session
|
||||||
|
ssh $SERVER \
|
||||||
|
"SERVER=$SERVER REPO='$REPO' BRANCH='$BRANCH' PROD_DIR='$PROD_DIR' USE_CACHE='$USE_CACHE' bash -s" << 'ENDSSH'
|
||||||
|
set -e
|
||||||
|
echo "Connected to $SERVER."
|
||||||
|
cd /home/cmc
|
||||||
|
# Clone or update production branch
|
||||||
|
if [ -d "$PROD_DIR" ]; then
|
||||||
|
echo "Updating existing production directory $PROD_DIR..."
|
||||||
|
cd "$PROD_DIR"
|
||||||
|
git fetch origin
|
||||||
|
git checkout $BRANCH
|
||||||
|
git reset --hard origin/$BRANCH
|
||||||
|
else
|
||||||
|
echo "Cloning repository $REPO to $PROD_DIR..."
|
||||||
|
git clone -b $BRANCH $REPO $PROD_DIR
|
||||||
|
cd "$PROD_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create .env file for go-app if it doesn't exist
|
||||||
|
ENV_PATH="/home/cmc/$PROD_DIR/go-app/.env"
|
||||||
|
echo "(Re)creating .env file for go-app..."
|
||||||
|
cat > "$ENV_PATH" <<'ENVEOF'
|
||||||
|
# Database configuration
|
||||||
|
DB_HOST=db
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_USER=cmc
|
||||||
|
DB_PASSWORD=xVRQI&cA?7AU=hqJ!%au
|
||||||
|
DB_NAME=cmc
|
||||||
|
|
||||||
|
# Root database password (for dbshell-root)
|
||||||
|
DB_ROOT_PASSWORD=secureRootPassword
|
||||||
|
|
||||||
|
# Environment variables for Go app mail configuration
|
||||||
|
SMTP_HOST="172.17.0.1"
|
||||||
|
SMTP_PORT=25
|
||||||
|
SMTP_USER=""
|
||||||
|
SMTP_PASS=""
|
||||||
|
SMTP_FROM="CMC Sales <sales@cmctechnologies.com.au>"
|
||||||
|
ENVEOF
|
||||||
|
|
||||||
|
if [[ "$USE_CACHE" == "false" ]]; then
|
||||||
|
echo "Building and starting docker compose for production (no cache)..."
|
||||||
|
docker compose -f docker-compose.prod.yml build --no-cache
|
||||||
|
docker compose -f docker-compose.prod.yml up -d --remove-orphans
|
||||||
|
else
|
||||||
|
echo "Building and starting docker compose for production (using cache)..."
|
||||||
|
docker compose -f docker-compose.prod.yml build
|
||||||
|
docker compose -f docker-compose.prod.yml up -d --remove-orphans
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Checking running containers..."
|
||||||
|
echo "Production deployment complete."
|
||||||
|
ENDSSH
|
||||||
96
docker-compose.prod.yml
Normal file
96
docker-compose.prod.yml
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
services:
|
||||||
|
nginx:
|
||||||
|
image: nginx:latest
|
||||||
|
container_name: cmc-prod-nginx
|
||||||
|
hostname: nginx-prod
|
||||||
|
ports:
|
||||||
|
- "80:80" # Production nginx on standard port
|
||||||
|
volumes:
|
||||||
|
- ./conf/nginx-site.conf:/etc/nginx/conf.d/cmc.conf
|
||||||
|
- ./userpasswd:/etc/nginx/userpasswd:ro
|
||||||
|
depends_on:
|
||||||
|
- cmc-prod-php
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- cmc-prod-network
|
||||||
|
|
||||||
|
cmc-prod-php:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile.prod
|
||||||
|
container_name: cmc-prod-php
|
||||||
|
environment:
|
||||||
|
MAIL_HOST: 172.17.0.1
|
||||||
|
MAIL_PORT: 25
|
||||||
|
DB_HOST: db
|
||||||
|
DB_PORT: 3306
|
||||||
|
DB_USER: cmc
|
||||||
|
DB_PASSWORD: xVRQI&cA?7AU=hqJ!%au
|
||||||
|
DB_NAME: cmc
|
||||||
|
volumes:
|
||||||
|
- ./userpasswd:/etc/nginx/userpasswd:ro
|
||||||
|
networks:
|
||||||
|
- cmc-prod-network
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
|
||||||
|
cmc-prod-go:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile.prod.go
|
||||||
|
container_name: cmc-prod-go
|
||||||
|
environment:
|
||||||
|
DB_HOST: db
|
||||||
|
DB_PORT: 3306
|
||||||
|
DB_USER: cmc
|
||||||
|
DB_PASSWORD: xVRQI&cA?7AU=hqJ!%au
|
||||||
|
DB_NAME: cmc
|
||||||
|
PORT: 8082
|
||||||
|
SMTP_HOST: 172.17.0.1
|
||||||
|
SMTP_PORT: 25
|
||||||
|
SMTP_USER: ""
|
||||||
|
SMTP_PASS: ""
|
||||||
|
SMTP_FROM: "sales@cmctechnologies.com.au"
|
||||||
|
ports:
|
||||||
|
- "8082:8082"
|
||||||
|
volumes:
|
||||||
|
- /var/www/cmc-sales/app/webroot/pdf:/root/webroot/pdf:ro
|
||||||
|
networks:
|
||||||
|
- cmc-prod-network
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
|
||||||
|
db:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile.prod.db
|
||||||
|
container_name: cmc-prod-db
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: secureRootPassword
|
||||||
|
MYSQL_DATABASE: cmc
|
||||||
|
MYSQL_USER: cmc
|
||||||
|
MYSQL_PASSWORD: xVRQI&cA?7AU=hqJ!%au
|
||||||
|
volumes:
|
||||||
|
- db_data:/var/lib/mysql
|
||||||
|
ports:
|
||||||
|
- "3306:3306"
|
||||||
|
networks:
|
||||||
|
- cmc-prod-network
|
||||||
|
|
||||||
|
mailpit:
|
||||||
|
image: axllent/mailpit:latest
|
||||||
|
container_name: mailpit
|
||||||
|
ports:
|
||||||
|
- "8025:8025" # Mailpit web UI
|
||||||
|
- "1025:1025" # SMTP
|
||||||
|
networks:
|
||||||
|
- cmc-prod-network
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
networks:
|
||||||
|
cmc-prod-network:
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
db_data:
|
||||||
Loading…
Reference in a new issue