# Deploying from a Self-Hosted GitLab Server This guide provides detailed instructions for deploying the Dispute Protocol application from a self-hosted GitLab server. ## Prerequisites - A self-hosted GitLab server (GitLab Community Edition or Enterprise Edition) - GitLab Runner installed and configured on your server - Basic familiarity with GitLab CI/CD ## Deployment Options The project includes a `.gitlab-ci.yml` file that supports two deployment methods: 1. **GitLab Pages** - For hosting directly on your GitLab instance 2. **Custom Server Deployment** - For deploying to an external web server ## Option 1: Deploying to GitLab Pages GitLab Pages provides an easy way to host static websites directly from your GitLab repository. ### Configuration Steps: 1. Ensure GitLab Pages is enabled on your self-hosted GitLab instance: - Go to Admin Area > Settings > Pages - Enable GitLab Pages and configure the domain settings 2. The existing `.gitlab-ci.yml` file already includes the necessary configuration for GitLab Pages. When you push to the `master` branch, the site will be automatically built and deployed. 3. Access your site at `https://[group-or-username].gitlab-instance.com/dispute-protocol` ## Option 2: Deploying to a Custom Web Server For more control, you can deploy to your own web server using rsync over SSH. ### Configuration Steps: 1. In your GitLab repository, go to **Settings > CI/CD > Variables** 2. Add the following variables: - `SSH_PRIVATE_KEY`: The private SSH key for connecting to your deployment server - `SSH_KNOWN_HOSTS`: Output of `ssh-keyscan your-server.com` - `SSH_USER`: Username on your deployment server - `SSH_HOST`: Hostname or IP address of your deployment server - `DEPLOY_PATH`: Path on your server where the site should be deployed 3. Edit the `.gitlab-ci.yml` file and uncomment the `deploy` job 4. Update the `url` parameter in the environment section with your actual domain 5. Push your changes to the `master` branch to trigger the deployment ### How to generate SSH_KNOWN_HOSTS value: ```bash ssh-keyscan -H your-server.com ``` ### How to generate and configure SSH keys: 1. Generate a new SSH key pair (without a passphrase for automated use): ```bash ssh-keygen -t ed25519 -C "gitlab-deploy" -f gitlab-deploy-key ``` 2. Add the public key to your server's authorized_keys: ```bash cat gitlab-deploy-key.pub >> ~/.ssh/authorized_keys ``` 3. Copy the private key content (including BEGIN and END lines) and paste it into the `SSH_PRIVATE_KEY` variable in GitLab ## Web Server Configuration ### Nginx Configuration ```nginx server { listen 80; server_name your-domain.com; root /path/to/deployment; index index.html; location / { try_files $uri $uri/ =404; } # Optional: Enable gzip compression gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; } ``` ### Apache Configuration Create a .htaccess file in your deployment directory: ```apache # Enable rewriting RewriteEngine On # If the requested resource doesn't exist as a file or directory RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Rewrite to index.html RewriteRule ^(.*)$ /index.html [L] # Cache control for static assets Header set Cache-Control "max-age=604800, public" ``` ## Manual Deployment If you prefer to deploy manually without GitLab CI/CD, you can use the included scripts: ### Testing the Build Locally Before deploying, you can test the build locally using the included `build-test.sh` script: ```bash ./build-test.sh [port] ``` Example: ```bash ./build-test.sh 8080 ``` This will build the site and start a temporary web server on the specified port (default: 8080), allowing you to verify that everything works correctly before deployment. ### Deploying to a Remote Server To deploy to your own server manually, use the included `deploy.sh` script: ```bash ./deploy.sh [username] [server] [deploy-path] ``` Example: ```bash ./deploy.sh deploy-user example.com /var/www/dispute-protocol ``` This script will build the site and then use rsync to deploy it to your server. ## Troubleshooting ### CI/CD Pipeline Fails 1. Check the pipeline logs for detailed error messages 2. Verify that the GitLab Runner is properly configured and running 3. Ensure the SSH key has the correct permissions on the target server 4. Try running the build and deploy steps manually to identify issues ### Site Not Accessible After Deployment 1. Check web server logs for errors 2. Verify file permissions in the deployment directory 3. Ensure the web server configuration is correct 4. Check that the domain DNS is pointing to the correct server