2025-11-16 12:27:46 +00:00
#!/bin/bash
# Setup script for Forgejo domain (code.mnemo-cards.online)
# Usage: ./setup-forgejo-domain.sh
set -e
# Load configuration
SCRIPT_DIR = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd ) "
source " $SCRIPT_DIR /config.sh "
echo "🚀 Setting up Forgejo domain: code.mnemo-cards.online..."
# Colors for output
RED = '\033[0;31m'
GREEN = '\033[0;32m'
YELLOW = '\033[1;33m'
BLUE = '\033[0;34m'
NC = '\033[0m' # No Color
print_status( ) {
echo -e " ${ GREEN } [INFO] ${ NC } $1 "
}
print_warning( ) {
echo -e " ${ YELLOW } [WARNING] ${ NC } $1 "
}
print_error( ) {
echo -e " ${ RED } [ERROR] ${ NC } $1 "
}
print_success( ) {
echo -e " ${ GREEN } [SUCCESS] ${ NC } $1 "
}
print_info( ) {
echo -e " ${ BLUE } [INFO] ${ NC } $1 "
}
# Upload nginx config for Forgejo
print_status "Uploading Forgejo nginx configuration..."
scp " $SCRIPT_DIR /forgejo-nginx.conf " " $SERVER_USER @ $SERVER_IP :/tmp/forgejo-nginx.conf "
print_status "Setting up Forgejo domain on server..."
# Execute setup commands on server
ssh " $SERVER_USER @ $SERVER_IP " << EOF
set -e
echo "Setting up Forgejo domain configuration..."
# Install SSL certificate for code.mnemo-cards.online
if [ ! -d "/etc/letsencrypt/live/code.mnemo-cards.online" ] ; then
echo "🔐 Getting Let's Encrypt SSL certificate for code.mnemo-cards.online..."
# Stop nginx temporarily for certificate issuance
systemctl stop nginx 2>/dev/null || true
if certbot certonly --standalone -d code.mnemo-cards.online --non-interactive --agree-tos --email admin@memo-cards.online; then
echo "✅ Let's Encrypt certificate obtained successfully for code.mnemo-cards.online!"
else
echo "❌ Failed to get Let's Encrypt certificate. Generating self-signed certificate..."
if [ ! -f "/etc/ssl/certs/nginx-selfsigned-forgejo.crt" ] ; then
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/nginx-selfsigned-forgejo.key \
-out /etc/ssl/certs/nginx-selfsigned-forgejo.crt \
-subj "/C=RU/ST=Moscow/L=Moscow/O=MnemoCards/OU=IT/CN=code.mnemo-cards.online"
fi
fi
# Start nginx again
systemctl start nginx 2>/dev/null || true
else
echo "✅ Let's Encrypt certificate already exists for code.mnemo-cards.online"
fi
# Configure nginx for Forgejo
echo "Configuring nginx for Forgejo..."
# Copy Forgejo nginx configuration
cp /tmp/forgejo-nginx.conf /etc/nginx/sites-available/forgejo
# Enable Forgejo site
ln -sf /etc/nginx/sites-available/forgejo /etc/nginx/sites-enabled/forgejo
# Test nginx configuration
nginx -t
# Restart nginx
systemctl restart nginx
systemctl enable nginx
# Setup cron for certificate renewal (if not already configured)
if ! crontab -l | grep -q "code.mnemo-cards.online" ; then
echo "Setting up cron job for Forgejo certificate renewal..."
( crontab -l ; echo "0 12 * * * certbot renew --quiet --cert-name code.mnemo-cards.online" ) | crontab -
fi
2025-11-16 12:52:07 +00:00
# Update Forgejo ROOT_URL configuration
echo "Updating Forgejo ROOT_URL configuration..."
# Find Forgejo app.ini file
FORGEJO_CONFIG = ""
for config_path in "/etc/forgejo/app.ini" "/home/forgejo/custom/conf/app.ini" "/var/lib/forgejo/custom/conf/app.ini" "/opt/forgejo/custom/conf/app.ini" ; do
if [ -f " $config_path " ] ; then
FORGEJO_CONFIG = " $config_path "
echo " Found Forgejo config at: $FORGEJO_CONFIG "
break
fi
done
if [ -n " $FORGEJO_CONFIG " ] ; then
# Backup original config
cp " $FORGEJO_CONFIG " " ${ FORGEJO_CONFIG } .backup. $( date +%Y%m%d_%H%M%S) "
# Update ROOT_URL
sed -i 's|ROOT_URL.*=.*|ROOT_URL = https://code.mnemo-cards.online|' " $FORGEJO_CONFIG "
echo "Updated ROOT_URL in Forgejo configuration"
# Restart Forgejo service
if systemctl is-active --quiet forgejo 2>/dev/null; then
echo "Restarting Forgejo service..."
systemctl restart forgejo
elif systemctl is-active --quiet gitea 2>/dev/null; then
echo "Restarting Gitea service..."
systemctl restart gitea
else
echo "Warning: Could not find active Forgejo/Gitea service to restart"
fi
else
echo "Warning: Could not find Forgejo app.ini configuration file"
echo "Please manually update ROOT_URL to https://code.mnemo-cards.online in your Forgejo config"
fi
2025-11-16 12:27:46 +00:00
echo "Forgejo domain setup completed successfully!"
echo "Forgejo is now available at: https://code.mnemo-cards.online"
2025-11-16 12:52:07 +00:00
echo "Access by IP address is blocked"
2025-11-16 12:27:46 +00:00
EOF
print_success "Forgejo domain setup completed successfully! 🎉"
print_success "Forgejo is now available at: https://code.mnemo-cards.online"
print_info " Make sure DNS is configured: code.mnemo-cards.online -> $SERVER_IP "