feat(deployment): add automated swap space configuration

- Create `scripts/setup-swap.sh` to dynamically detect and allocate
  a 4GB swap file to prevent OOM errors on low-RAM servers.
- Integrate the swap check gracefully into the `run.sh` orchestrator flow.
- Update `README.md` to document new sudo/disk space prerequisites
  and the updated deployment steps.
This commit is contained in:
2026-03-16 03:03:22 +08:00
parent 515d11e663
commit a521a88d38
3 changed files with 90 additions and 10 deletions

View File

@@ -1,6 +1,6 @@
# Self-Hosted GitLab Docker Deployment
Welcome to the automated, self-hosted GitLab deployment project! This setup is designed to be as "one-click" as possible while remaining highly configurable. It automatically tunes itself to your server's hardware and simplifies the setup of CI/CD runners.
Welcome to the automated, self-hosted GitLab deployment project! This setup is designed to be as "one-click" as possible while remaining highly configurable. It automatically tunes itself to your server's hardware, manages essential system swap space, and simplifies the setup of CI/CD runners.
*Last Updated: 1404/12/24 (2026/03/15)*
@@ -11,9 +11,10 @@ This project uses Docker Compose to spin up two main services:
2. **GitLab Runner**: A background service that runs your CI/CD pipeline jobs (like testing and deploying code).
**Directory Structure:**
- `run.sh`: The main launcher script. It checks your config and starts the server.
- `run.sh`: The main launcher script. It checks your config, sets up system swap, tunes resources, and starts the server.
- `.env.sample`: A template for your configuration variables.
- `docker-compose.yml`: The blueprint that tells Docker how to build the services.
- `scripts/setup-swap.sh`: Safely checks and creates a $4$ GB swap file to prevent out-of-memory crashes on smaller servers.
- `scripts/auto-tune.sh`: A smart script that calculates the perfect math variables (like $RAM \times 0.25$ for database buffers) to prevent your server from crashing.
- `scripts/setup-runner.sh`: Automates the tedious process of linking the GitLab Runner to your GitLab Server.
- `runner-config/`: An empty folder where Docker will safely store your runner's configuration.
@@ -23,7 +24,9 @@ This project uses Docker Compose to spin up two main services:
## Prerequisites
- A server running Linux (Ubuntu/Debian recommended).
- **Docker** and **Docker Compose** installed.
- Minimum hardware: 4GB RAM and 2 CPU cores (8GB RAM + 4 Cores highly recommended).
- **Sudo privileges** for your user.
- **Hardware:** Minimum $4$ GB RAM and $2$ CPU cores ($8$ GB RAM + $4$ Cores highly recommended).
- **Disk Space:** At least $15$ GB to $20$ GB of free disk space (a $4$ GB chunk will be safely reserved for swap memory if your server lacks it).
---
@@ -38,26 +41,27 @@ Before starting, GitLab needs to know your domain name, passwords, and email set
```
2. Open `.env` in your favorite text editor (e.g., `nano .env`).
3. **CRITICAL:** Change `GITLAB_EXTERNAL_URL` to your server's IP address (e.g., `http://192.168.1.50`) or domain name (e.g., `https://git.yourdomain.com`).
4. Update `GITLAB_ROOT_PASSWORD` (must be at least 8 characters).
4. Update `GITLAB_ROOT_PASSWORD` (must be at least $8$ characters).
### Step 2: Run the Orchestrator
We have provided a unified script to validate your configuration, optimize your server, and launch GitLab.
We have provided a unified script to validate your configuration, prepare your operating system, and launch GitLab.
1. Make the script executable:
```bash
chmod +x run.sh
chmod +x run.sh scripts/*.sh
```
2. Execute the script:
```bash
./run.sh
```
3. **What happens next?**
- The script will verify that you filled out the `.env` file correctly.
- It will ask if you want to run the **Auto-Tuner**. Press `y`! The auto-tuner will detect your CPU and RAM and dynamically adjust GitLab's internal memory settings in your `.env` file so it doesn't consume all your server's resources.
- Finally, it triggers Docker to download and start GitLab.
- **Validation:** The script verifies you filled out `.env` correctly.
- **Swap Check:** It checks your OS for Swap Memory. If you don't have any, it will ask permission to create a $4$ GB swap file (this requires your `sudo` password) to ensure GitLab doesn't crash during boot.
- **Auto-Tuner:** It will ask if you want to run the Auto-Tuner. Press `y`! It detects your CPU/RAM and dynamically adjusts GitLab's internal memory settings in your `.env` file.
- **Launch:** Finally, it triggers Docker to download and start GitLab.
### Step 3: Wait for GitLab to Boot
GitLab is an enterprise-grade application. Once the script finishes, **you must wait 3 to 5 minutes**.
GitLab is an enterprise-grade application. Once the script finishes, **you must wait $3$ to $5$ minutes**.
If you navigate to your URL too early, you will see a **502 Bad Gateway** error. This simply means the internal web server is up, but the database and backend application are still loading. Grab a coffee and refresh the page in a few minutes.