Files
anonaddy/start.sh
Your Name 45f11105ab Fix: Create .env symlink in Dockerfile and add APP_KEY placeholder
- Create symlink from /app/code/.env to /app/data/.env in Dockerfile
- Add APP_KEY= placeholder to .env template
- Remove runtime symlink creation attempts
- This fixes key:generate error about missing .env file
2025-10-22 09:43:51 -06:00

148 lines
4.2 KiB
Bash

#!/bin/bash
set -eu
echo "==> Starting AnonAddy initialization"
# Initialize /app/data if empty
if [ ! -d "/app/data/storage" ]; then
echo "==> Initializing /app/data from /tmp/data"
cp -r /tmp/data/* /app/data/
chown -R cloudron:cloudron /app/data
fi
# Ensure proper permissions
chown -R cloudron:cloudron /app/data
chmod -R 755 /app/data/storage
# Create .env file in /app/data
echo "==> Configuring application environment"
cat > /app/data/.env <<EOF
APP_NAME="AnonAddy"
APP_KEY=
APP_ENV=production
APP_DEBUG=false
APP_URL=${CLOUDRON_APP_ORIGIN}
# Database Configuration
DB_CONNECTION=mysql
DB_HOST=${CLOUDRON_MYSQL_HOST}
DB_PORT=${CLOUDRON_MYSQL_PORT}
DB_DATABASE=${CLOUDRON_MYSQL_DATABASE}
DB_USERNAME=${CLOUDRON_MYSQL_USERNAME}
DB_PASSWORD=${CLOUDRON_MYSQL_PASSWORD}
# Redis Configuration
REDIS_HOST=${CLOUDRON_REDIS_HOST}
REDIS_PASSWORD=${CLOUDRON_REDIS_PASSWORD}
REDIS_PORT=${CLOUDRON_REDIS_PORT}
# Mail Configuration
MAIL_MAILER=smtp
MAIL_HOST=${CLOUDRON_MAIL_SMTP_SERVER}
MAIL_PORT=${CLOUDRON_MAIL_SMTP_PORT}
MAIL_USERNAME=${CLOUDRON_MAIL_SMTP_USERNAME}
MAIL_PASSWORD=${CLOUDRON_MAIL_SMTP_PASSWORD}
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@${CLOUDRON_APP_DOMAIN}
MAIL_FROM_NAME="AnonAddy"
# AnonAddy Configuration
ANONADDY_DOMAIN=${CLOUDRON_APP_DOMAIN}
ANONADDY_HOSTNAME=${CLOUDRON_APP_DOMAIN}
ANONADDY_SIGNING_KEY_FINGERPRINT=""
# Queue Configuration
QUEUE_CONNECTION=redis
QUEUE_DRIVER=redis
# Session Configuration
SESSION_DRIVER=redis
SESSION_LIFETIME=120
# Cache Configuration
CACHE_DRIVER=redis
# Log Configuration
LOG_CHANNEL=stderr
LOG_LEVEL=info
# Security
BCRYPT_ROUNDS=12
EOF
# Set proper ownership
chown cloudron:cloudron /app/data/.env
chmod 640 /app/data/.env
# Generate APP_KEY if it doesn't exist
if [ ! -f "/app/data/app_key" ]; then
echo "==> Generating application key"
cd /app/code
sudo -u cloudron php artisan key:generate --force
# Save the key to persistent storage
grep "APP_KEY=" /app/data/.env | cut -d= -f2 > /app/data/app_key
else
echo "==> Using existing application key"
APP_KEY=$(cat /app/data/app_key)
sed -i "s|APP_KEY=.*|APP_KEY=${APP_KEY}|g" /app/data/.env
fi
# Generate ANONADDY_SECRET if it doesn't exist
if [ ! -f "/app/data/anonaddy_secret" ]; then
echo "==> Generating AnonAddy secret"
ANONADDY_SECRET=$(openssl rand -hex 32)
echo "$ANONADDY_SECRET" > /app/data/anonaddy_secret
echo "ANONADDY_SECRET=${ANONADDY_SECRET}" >> /app/data/.env
else
echo "==> Using existing AnonAddy secret"
ANONADDY_SECRET=$(cat /app/data/anonaddy_secret)
echo "ANONADDY_SECRET=${ANONADDY_SECRET}" >> /app/data/.env
fi
# Run database migrations
echo "==> Running database migrations"
cd /app/code
sudo -u cloudron php artisan migrate --force
# Clear and cache configuration
echo "==> Optimizing application"
sudo -u cloudron php artisan config:clear
sudo -u cloudron php artisan cache:clear
sudo -u cloudron php artisan view:clear
sudo -u cloudron php artisan config:cache
sudo -u cloudron php artisan route:cache
# Create default admin user if database is empty
USER_COUNT=$(sudo -u cloudron php artisan tinker --execute="echo \App\Models\User::count();")
if [ "$USER_COUNT" -eq "0" ]; then
echo "==> Creating default admin user"
sudo -u cloudron php artisan tinker <<TINKER
\$user = new \App\Models\User();
\$user->username = 'admin';
\$user->email = 'admin@example.com';
\$user->password = bcrypt('password');
\$user->save();
echo "Default admin user created: admin@example.com / password";
TINKER
echo "==> IMPORTANT: Change the default password after first login!"
fi
# Configure Postfix
echo "==> Configuring Postfix"
cp /tmp/postfix-main.cf /etc/postfix/main.cf
cp /tmp/postfix-master.cf /etc/postfix/master.cf
# Update Postfix configuration with domain
sed -i "s|CLOUDRON_APP_DOMAIN|${CLOUDRON_APP_DOMAIN}|g" /etc/postfix/main.cf
sed -i "s|CLOUDRON_MAIL_DOMAIN|${CLOUDRON_MAIL_DOMAIN}|g" /etc/postfix/main.cf
# Create Postfix directories
mkdir -p /app/data/postfix/spool
mkdir -p /var/spool/postfix
chown -R postfix:postfix /var/spool/postfix
chown -R cloudron:cloudron /app/data/postfix
# Start services via supervisor
echo "==> Starting services"
exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf