> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ahmadraza.in/llms.txt
> Use this file to discover all available pages before exploring further.

# BaseServerSetup

### Installation Guide for Various Tools and Services

#### 1. **Install Tools**

1. **Install CROC**
   ```bash theme={null}
   curl https://getcroc.schollz.com | bash
   ```

2. **Install Net Tools**
   ```bash theme={null}
   sudo apt install net-tools
   ```

3. **Download Adminer**
   ```bash theme={null}
   wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php -O miner.php
   ```

4. **Set Timezone and Hostname**
   ```bash theme={null}
   sudo timedatectl set-timezone Asia/Kolkata
   sudo timedatectl set-timezone UTC
   sudo hostnamectl set-hostname abc.com # also update the hostfile /etc/hosts with the new hostname mapped to 127.0.0.1
   ```

5. **Update and Upgrade System**
   ```bash theme={null}
   sudo apt update -y
   sudo apt upgrade -y
   ```

6. **Install PHP 8.2**
   ```bash theme={null}
   sudo apt install software-properties-common -y
   sudo add-apt-repository ppa:ondrej/php
   sudo apt update -y
   sudo apt install php8.2 -y
   sudo apt update -y
   ```

7. **Install PHP-FPM and Extensions**
   ```bash theme={null}
   sudo apt-get install -y php8.2-fpm php8.2-cli php8.2-common php8.2-json php8.2-opcache php8.2-mysql php8.2-mbstring php8.2-xml php8.2-gd php8.2-curl
   ```

8. **Set Default PHP Version**
   ```bash theme={null}
   sudo update-alternatives --set php /usr/bin/php7.2
   ```

9. **Increase PHP Upload Limit**
   ```bash theme={null}
   sudo nano /etc/php/8.2/fpm/php.ini
   sudo nano /etc/php/8.2/cli/php.ini
   # Set
   upload_max_filesize = 50M
   post_max_size = 50M
   sudo systemctl restart php8.2-fpm
   ```

10. **Install MySQL and Set Up**
    ```bash theme={null}
    sudo apt install mysql-server -y
    sudo mysql_secure_installation
    mysql -u root -p
    # Create users and databases
    CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin@12345';
    CREATE USER 'minikube'@'localhost' IDENTIFIED BY 'admin@123';
    GRANT ALL PRIVILEGES ON *.* TO 'minikube'@'localhost' WITH GRANT OPTION;
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    CREATE DATABASE <abc>;
    ```

11. **Install Node.js, npm, and nvm**
    ```bash theme={null}
    sudo apt install nodejs -y
    sudo apt install npm -y
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
    source ~/.bashrc
    nvm install <desired_version>
    nvm use <desired_version>
    nvm alias default 18
    npm install -g yarn
    npm install -g pm2
    ```

12. **Install Composer**
    ```bash theme={null}
    sudo apt install composer -y
    # Check PHP extensions used in the project
    composer check-platform-reqs
    composer show -p
    ```

13. **Install and Configure Nginx**
    ```bash theme={null}
    sudo apt remove apache2 -y
    sudo systemctl stop apache2
    sudo systemctl disable apache2
    sudo apt install nginx -y
    sudo systemctl enable nginx
    sudo systemctl start nginx
    sudo systemctl status nginx
    ```

14. **Install SSL with Certbot**
    ```bash theme={null}
    sudo snap install --classic certbot
    ```

15. **Install GitLab Runner**
    ```bash theme={null}
    sudo apt update -y
    sudo apt install -y curl
    curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
    sudo apt-get install gitlab-runner
    sudo gitlab-runner -version
    sudo gitlab-runner status
    sudo gitlab-runner start
    sudo gitlab-runner enable
    sudo gitlab-runner verify
    echo "gitlab-runner ALL=(ALL:ALL) ALL" >> /etc/sudoers.d/sudoers
    echo "gitlab-runner ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/sudoers
    ```

16. **Reload System Changes**
    ```bash theme={null}
    sudo reboot
    ```

#### 2. **Amazon Linux 2 Setup for PHP 8.2**

1. **Install PHP 8.2**
   ```bash theme={null}
   sudo yum update -y
   sudo yum install httpd php php-cli php-common php-mysqlnd -y
   sudo amazon-linux-extras install epel -y
   sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
   sudo yum-config-manager --enable remi-php82
   sudo yum install php php-cli php-common php-mysqlnd -y
   ```

2. **Configure PHP 8.2**
   ```bash theme={null}
   sudo nano /etc/php.ini
   echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
   ```

3. **Install Apache and PHP-FPM**
   ```bash theme={null}
   sudo yum install httpd mod_proxy_fcgi -y
   sudo systemctl enable httpd
   sudo systemctl start httpd
   sudo nano /etc/httpd/conf.d/php-fpm.conf
   # Add:
   <FilesMatch \.php$>
       SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost"
   </FilesMatch>
   sudo systemctl restart httpd
   ```

4. **Verify PHP Installation**
   ```bash theme={null}
   php -v
   ```

#### 3. **Install Latest Docker-Compose**

1. **Install Docker-Compose**
   ```bash theme={null}
   mkdir -p ~/.docker/cli-plugins/
   curl -SL https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
   chmod +x ~/.docker/cli-plugins/docker-compose
   sudo docker compose version
   ```

#### 4. **Run Application in Background**

1. **Run Script in Background**
   ```bash theme={null}
   nohup ./run.sh > /dev/null 2>&1 &
   ```

#### 5. **Install GitHub Action Runner**

1. **Download and Configure GitHub Action Runner**
   ```bash theme={null}
   mkdir actions-runner && cd actions-runner
   curl -o actions-runner-linux-x64-2.314.1.tar.gz -L https://github.com/actions/runner/releases/download/v2.314.1/actions-runner-linux-x64-2.314.1.tar.gz
   echo "6c726aa75b423c1137b5  actions-runner-linux-x64-2.314.1.tar.gz" | shasum -a 256 -c
   tar xzf ./actions-runner-linux-x64-2.314.1.tar.gz
   ./config.sh --url https://github.com/a/run-2shared --token 
   ./run.sh
   ```
