跳转到内容
无痕工具库 无痕工具库

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:安装后脚本的 ID
  • name:更新后的脚本名称
  • 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 packages
apt-get update
apt-get upgrade -y
# Install fail2ban for protection against brute force attacks
apt-get install -y fail2ban
systemctl enable fail2ban
systemctl start fail2ban
# Configure firewall
apt-get install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow http
ufw allow https
ufw --force enable
# Create a non-root user with sudo privileges
useradd -m -s /bin/bash admin
echo "admin ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/admin
mkdir -p /home/admin/.ssh
chmod 700 /home/admin/.ssh
# Harden SSH configuration
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd
echo "Basic security setup completed!"

WordPress 安装

#!/bin/bash
# Update system packages
apt-get update
apt-get upgrade -y
# Install LAMP stack
apt-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 modules
a2enmod rewrite
systemctl restart apache2
# Set up MySQL (non-interactive)
mysql_root_password="$(openssl rand -base64 12)"
echo "MySQL root password: $mysql_root_password" > /root/mysql_credentials.txt
chmod 600 /root/mysql_credentials.txt
# Secure MySQL installation
mysql -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 database
db_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.txt
echo "Database: $db_name" >> /root/wordpress_credentials.txt
echo "Username: $db_user" >> /root/wordpress_credentials.txt
echo "Password: $db_password" >> /root/wordpress_credentials.txt
chmod 600 /root/wordpress_credentials.txt
# Download and set up WordPress
cd /var/www/html
rm index.html
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
mv wordpress/* .
rmdir wordpress
rm latest.tar.gz
# Configure WordPress
cp wp-config-sample.php wp-config.php
sed -i "s/database_name_here/$db_name/" wp-config.php
sed -i "s/username_here/$db_user/" wp-config.php
sed -i "s/password_here/$db_password/" wp-config.php
# Set up salts
curl https://api.wordpress.org/secret-key/1.1/salt/ > salts.txt
sed -i '/AUTH_KEY/d' wp-config.php
sed -i '/SECURE_AUTH_KEY/d' wp-config.php
sed -i '/LOGGED_IN_KEY/d' wp-config.php
sed -i '/NONCE_KEY/d' wp-config.php
sed -i '/AUTH_SALT/d' wp-config.php
sed -i '/SECURE_AUTH_SALT/d' wp-config.php
sed -i '/LOGGED_IN_SALT/d' wp-config.php
sed -i '/NONCE_SALT/d' wp-config.php
sed -i "/\$table_prefix/r salts.txt" wp-config.php
rm salts.txt
# Set permissions
chown -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 packages
apt-get update
apt-get upgrade -y
# Install prerequisites
apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg
# Add Docker's official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
# Set up the Docker repository
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Install Docker
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
# Install Docker Compose
curl -L "https://github.com/docker/compose/releases/download/v2.17.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# Enable Docker to start on boot
systemctl enable docker
systemctl start docker
# Create a non-root user and add to the docker group
useradd -m -s /bin/bash dockeruser
usermod -aG docker dockeruser
# Create a simple test container
docker run -d -p 80:80 --name test-nginx nginx
echo "Docker environment setup completed!"

最佳实践

  1. 充分测试:在生产环境中使用之前,务必先在受控环境中测试你的脚本。
  2. 错误处理:在脚本中加入适当的错误处理,以便在执行过程中捕获并报告问题。
  3. 日志记录:添加信息丰富的日志消息,以跟踪进度并识别问题。
  4. 安全性:谨慎处理敏感信息。不要在脚本中硬编码凭据或敏感数据。
  5. 幂等性:将脚本设计为幂等的,即可以多次运行而不会引发问题。
  6. 超时问题:请注意,某些操作(尤其是软件包安装)可能比预期耗时更长。
  7. 版本锁定:指定软件包的确切版本,以确保部署的一致性。

故障排除

  • 如果脚本执行失败,请检查云服务器上的 /post_install.log 文件以获取错误信息。
  • 确保脚本开头有正确的 shebang 行(例如 #!/bin/bash)。
  • 请记住,脚本以 root 权限运行,因此无需在脚本中使用 sudo。
  • 如果脚本似乎卡住了,请检查是否有命令在等待用户输入(例如 apt-get 可能会请求确认)。
  • 确保删除所有隐藏和不可见的字符。上传前请尝试以 Unix / LF 换行符重新保存文件。

安装后脚本是强大的工具,可以显著简化你的云服务器部署和配置流程。通过利用 Hostinger API 来管理和应用这些脚本,你可以确保在整个基础设施中实现一致且自动化的服务器设置。

有关 Hostinger API 的更多信息,请访问 Hostinger API 文档。