82 lines
1.9 KiB
TypeScript
82 lines
1.9 KiB
TypeScript
/**
|
|
* Cloud-init user data generator for Discourse instances.
|
|
*/
|
|
|
|
export interface DiscourseConfig {
|
|
hostname: string;
|
|
adminEmail: string;
|
|
smtpHost?: string;
|
|
smtpPort?: number;
|
|
smtpUser?: string;
|
|
smtpPassword?: string;
|
|
}
|
|
|
|
export function generateCloudInit(config: DiscourseConfig): string {
|
|
const smtpHost = config.smtpHost || "mail.rmail.online";
|
|
const smtpPort = config.smtpPort || 587;
|
|
const smtpUser = config.smtpUser || `noreply@rforum.online`;
|
|
const smtpPassword = config.smtpPassword || "";
|
|
|
|
return `#!/bin/bash
|
|
set -e
|
|
|
|
# Swap
|
|
fallocate -l 2G /swapfile
|
|
chmod 600 /swapfile
|
|
mkswap /swapfile
|
|
swapon /swapfile
|
|
echo '/swapfile none swap sw 0 0' >> /etc/fstab
|
|
|
|
# Install Docker
|
|
apt-get update
|
|
apt-get install -y git docker.io docker-compose
|
|
systemctl enable docker
|
|
systemctl start docker
|
|
|
|
# Clone Discourse
|
|
git clone https://github.com/discourse/discourse_docker.git /var/discourse
|
|
cd /var/discourse
|
|
|
|
# Write app.yml
|
|
cat > containers/app.yml << 'APPYML'
|
|
templates:
|
|
- "templates/postgres.template.yml"
|
|
- "templates/redis.template.yml"
|
|
- "templates/web.template.yml"
|
|
- "templates/web.ssl.template.yml"
|
|
- "templates/web.letsencrypt.ssl.template.yml"
|
|
|
|
expose:
|
|
- "80:80"
|
|
- "443:443"
|
|
|
|
params:
|
|
db_default_text_search_config: "pg_catalog.english"
|
|
|
|
env:
|
|
LANG: en_US.UTF-8
|
|
DISCOURSE_DEFAULT_LOCALE: en
|
|
DISCOURSE_HOSTNAME: '${config.hostname}'
|
|
DISCOURSE_DEVELOPER_EMAILS: '${config.adminEmail}'
|
|
DISCOURSE_SMTP_ADDRESS: '${smtpHost}'
|
|
DISCOURSE_SMTP_PORT: ${smtpPort}
|
|
DISCOURSE_SMTP_USER_NAME: '${smtpUser}'
|
|
DISCOURSE_SMTP_PASSWORD: '${smtpPassword}'
|
|
DISCOURSE_SMTP_ENABLE_START_TLS: true
|
|
LETSENCRYPT_ACCOUNT_EMAIL: '${config.adminEmail}'
|
|
|
|
volumes:
|
|
- volume:
|
|
host: /var/discourse/shared/standalone
|
|
guest: /shared
|
|
- volume:
|
|
host: /var/discourse/shared/standalone/log/var-log
|
|
guest: /var/log
|
|
APPYML
|
|
|
|
# Bootstrap and start
|
|
./launcher bootstrap app
|
|
./launcher start app
|
|
`;
|
|
}
|