Hostinger API 安装后脚本使用教程
安装后脚本是一种强大的自动化工具,可以在你的云服务器(VPS)安装完成后自动执行。本文将介绍什么是安装后脚本、如何使用 Hostinger API 创建和管理它们,并提供常见使用场景的实际示例。
什么是安装后脚本?
安装后脚本是在云服务器部署后自动运行的自定义 shell 脚本。它们可以帮助你:
- 自动化服务器的初始设置
- 安装软件包
- 配置服务
- 设置安全措施
- 部署应用程序
- 等等
当安装后脚本附加到云服务器实例后,它会在操作系统安装完成后立即以 root 权限执行。
技术细节
- 脚本会以可执行权限保存到云服务器上的
/post_install文件 - 脚本执行的输出会保存到
/post_install.log - 脚本大小上限为 48KB
- 脚本以 root 权限执行
使用 API 管理安装后脚本
Hostinger API 提供了多个端点来管理你的安装后脚本:
1. 创建安装后脚本
创建一个新的安装后脚本:
POST /api/vps/v1/post-install-scripts必需参数:
name:脚本的描述性名称content:实际的 shell 脚本内容
示例请求:
{ "name": "LAMP Stack Setup", "content": "#!/bin/bash\n\n# Update system packages\napt-get update\napt-get upgrade -y\n\n# Install LAMP stack\napt-get install -y apache2 mysql-server php libapache2-mod-php php-mysql\n\n# Enable services\nsystemctl enable apache2\nsystemctl enable mysql\n\n# Set up firewall\nufw allow 'Apache Full'\nufw allow 'OpenSSH'\n\necho 'LAMP stack installation complete!' > /var/www/html/index.html"}2. 获取安装后脚本列表
获取你所有的安装后脚本:
GET /api/vps/v1/post-install-scripts可选参数:
page:用于分页的页码
3. 获取指定的安装后脚本
获取指定安装后脚本的详细信息:
GET /api/vps/v1/post-install-scripts/{postInstallScriptId}必需参数:
postInstallScriptId:安装后脚本的 ID
4. 更新安装后脚本
更新现有的安装后脚本:
PUT /api/vps/v1/post-install-scripts/{postInstallScriptId}必需参数:
postInstallScriptId:安装后脚本的 IDname:更新后的脚本名称content:更新后的脚本内容
5. 删除安装后脚本
删除安装后脚本:
DELETE /api/vps/v1/post-install-scripts/{postInstallScriptId}必需参数:
postInstallScriptId:要删除的安装后脚本的 ID
在云服务器实例中使用安装后脚本
在创建或重建云服务器时,你可以通过传递 post_install_script_id 参数来指定要运行的安装后脚本:
用于新建云服务器
POST /api/vps/v1/virtual-machines/{virtualMachineId}/setup在必需参数中加入 post_install_script_id 参数:
{ "data_center_id": 1, "template_id": 4, "post_install_script_id": 12 }用于重建云服务器
POST /api/vps/v1/virtual-machines/{virtualMachineId}/recreate包含 post_install_script_id 参数:
{ "template_id": 4, "post_install_script_id": 12 }实用示例
以下是一些常见场景下的实用安装后脚本示例:
基础安全设置
#!/bin/bash
# Update system packagesapt-get updateapt-get upgrade -y
# Install fail2ban for protection against brute force attacksapt-get install -y fail2bansystemctl enable fail2bansystemctl start fail2ban
# Configure firewallapt-get install -y ufwufw default deny incomingufw default allow outgoingufw allow sshufw allow httpufw allow httpsufw --force enable
# Create a non-root user with sudo privilegesuseradd -m -s /bin/bash adminecho "admin ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/adminmkdir -p /home/admin/.sshchmod 700 /home/admin/.ssh
# Harden SSH configurationsed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_configsed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_configsystemctl restart sshd
echo "Basic security setup completed!"WordPress 安装
#!/bin/bash
# Update system packagesapt-get updateapt-get upgrade -y
# Install LAMP stackapt-get install -y apache2 mysql-server php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip
# Enable Apache modulesa2enmod rewritesystemctl restart apache2
# Set up MySQL (non-interactive)mysql_root_password="$(openssl rand -base64 12)"echo "MySQL root password: $mysql_root_password" > /root/mysql_credentials.txtchmod 600 /root/mysql_credentials.txt
# Secure MySQL installationmysql -e "UPDATE mysql.user SET Password=PASSWORD('$mysql_root_password') WHERE User='root';"mysql -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"mysql -e "DELETE FROM mysql.user WHERE User='';"mysql -e "DROP DATABASE IF EXISTS test;"mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';"mysql -e "FLUSH PRIVILEGES;"
# Create WordPress databasedb_name="wordpress"db_user="wpuser"db_password="$(openssl rand -base64 12)"
mysql -u root -p"$mysql_root_password" -e "CREATE DATABASE $db_name;"mysql -u root -p"$mysql_root_password" -e "CREATE USER '$db_user'@'localhost' IDENTIFIED BY '$db_password';"mysql -u root -p"$mysql_root_password" -e "GRANT ALL PRIVILEGES ON $db_name.* TO '$db_user'@'localhost';"mysql -u root -p"$mysql_root_password" -e "FLUSH PRIVILEGES;"
echo "WordPress database credentials:" > /root/wordpress_credentials.txtecho "Database: $db_name" >> /root/wordpress_credentials.txtecho "Username: $db_user" >> /root/wordpress_credentials.txtecho "Password: $db_password" >> /root/wordpress_credentials.txtchmod 600 /root/wordpress_credentials.txt
# Download and set up WordPresscd /var/www/htmlrm index.htmlwget https://wordpress.org/latest.tar.gztar -xzf latest.tar.gzmv wordpress/* .rmdir wordpressrm latest.tar.gz
# Configure WordPresscp wp-config-sample.php wp-config.phpsed -i "s/database_name_here/$db_name/" wp-config.phpsed -i "s/username_here/$db_user/" wp-config.phpsed -i "s/password_here/$db_password/" wp-config.php
# Set up saltscurl https://api.wordpress.org/secret-key/1.1/salt/ > salts.txtsed -i '/AUTH_KEY/d' wp-config.phpsed -i '/SECURE_AUTH_KEY/d' wp-config.phpsed -i '/LOGGED_IN_KEY/d' wp-config.phpsed -i '/NONCE_KEY/d' wp-config.phpsed -i '/AUTH_SALT/d' wp-config.phpsed -i '/SECURE_AUTH_SALT/d' wp-config.phpsed -i '/LOGGED_IN_SALT/d' wp-config.phpsed -i '/NONCE_SALT/d' wp-config.phpsed -i "/\$table_prefix/r salts.txt" wp-config.phprm salts.txt
# Set permissionschown -R www-data:www-data /var/www/html/find /var/www/html/ -type d -exec chmod 755 {} \;find /var/www/html/ -type f -exec chmod 644 {} \;
echo "WordPress installation completed!"Docker 环境搭建
#!/bin/bash
# Update system packagesapt-get updateapt-get upgrade -y
# Install prerequisitesapt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg
# Add Docker's official GPG keycurl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
# Set up the Docker repositoryadd-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Install Dockerapt-get updateapt-get install -y docker-ce docker-ce-cli containerd.io
# Install Docker Composecurl -L "https://github.com/docker/compose/releases/download/v2.17.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose
# Enable Docker to start on bootsystemctl enable dockersystemctl start docker
# Create a non-root user and add to the docker groupuseradd -m -s /bin/bash dockeruserusermod -aG docker dockeruser
# Create a simple test containerdocker run -d -p 80:80 --name test-nginx nginx
echo "Docker environment setup completed!"最佳实践
- 充分测试:在生产环境中使用之前,务必先在受控环境中测试你的脚本。
- 错误处理:在脚本中加入适当的错误处理,以便在执行过程中捕获并报告问题。
- 日志记录:添加信息丰富的日志消息,以跟踪进度并识别问题。
- 安全性:谨慎处理敏感信息。不要在脚本中硬编码凭据或敏感数据。
- 幂等性:将脚本设计为幂等的,即可以多次运行而不会引发问题。
- 超时问题:请注意,某些操作(尤其是软件包安装)可能比预期耗时更长。
- 版本锁定:指定软件包的确切版本,以确保部署的一致性。
故障排除
- 如果脚本执行失败,请检查云服务器上的
/post_install.log文件以获取错误信息。 - 确保脚本开头有正确的 shebang 行(例如
#!/bin/bash)。 - 请记住,脚本以 root 权限运行,因此无需在脚本中使用
sudo。 - 如果脚本似乎卡住了,请检查是否有命令在等待用户输入(例如 apt-get 可能会请求确认)。
- 确保删除所有隐藏和不可见的字符。上传前请尝试以 Unix / LF 换行符重新保存文件。
安装后脚本是强大的工具,可以显著简化你的云服务器部署和配置流程。通过利用 Hostinger API 来管理和应用这些脚本,你可以确保在整个基础设施中实现一致且自动化的服务器设置。
有关 Hostinger API 的更多信息,请访问 Hostinger API 文档。