Initial AnonAddy Cloudron package
This commit is contained in:
150
start.sh
Normal file
150
start.sh
Normal file
@@ -0,0 +1,150 @@
|
||||
#!/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
|
||||
|
||||
# Link storage directory to Laravel storage
|
||||
rm -rf /app/code/storage
|
||||
ln -sf /app/data/storage /app/code/storage
|
||||
|
||||
# Create .env file
|
||||
echo "==> Configuring application environment"
|
||||
cat > /app/code/.env <<EOF
|
||||
APP_NAME="AnonAddy"
|
||||
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
|
||||
|
||||
# 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/code/.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/code/.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/code/.env
|
||||
else
|
||||
echo "==> Using existing AnonAddy secret"
|
||||
ANONADDY_SECRET=$(cat /app/data/anonaddy_secret)
|
||||
echo "ANONADDY_SECRET=${ANONADDY_SECRET}" >> /app/code/.env
|
||||
fi
|
||||
|
||||
# Set proper ownership
|
||||
chown cloudron:cloudron /app/code/.env
|
||||
chmod 640 /app/code/.env
|
||||
|
||||
# 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
|
||||
Reference in New Issue
Block a user