The following guide includes all steps needed to install a Jenkins Server on AWS EC2 (Ubuntu 16.04 LTS), using NGINX as proxy with custom tld
- Set up EC2 instance
- Selected type: t2.micro (1GB) (for this example, you can choose any type)
- AMI: Ubuntu 16.04 LTD 64bits (AWS AMI repository)
- 20GB SSD storage
- Security Group: Opened (inbound) for web ports: 80, 443 and 22
- Set up userdata script (below): This will update system and install: JRE8, Docker, Jenkins and NGINX
#!/bin/bash
sudo apt-get -y update && sudo apt-get -y upgrade
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get -y update
curl -fsSL get.docker.com -o get-docker.sh && sudo sh get-docker.sh
sudo apt-get -y install default-jre
sudo apt-get -y install jenkins nginx
- Run EC2 instance
Connect it via ssh to check all scripts/packages were successfully installed. You can enter your public ip address or public dns name for instance to see nginx default page on port 80. If userdata script didn't work for any reason, you can execute these commands manually via SSH on your EC2 instance (Order is important)
- Assign your tls domain or subdomain to instance ipv4 address.
And access it via http://subdomain.yourtld.com
- Configure nginx proxy for Jenkins
Via ssh remove default virtual host /etc/nginx/sites-available/default and create new one
sudo rm /etc/nginx/sites-available/default
sudo nano /etc/nginx/sites-available/default
Include the following configuration replacing your subdomain
upstream jenkins {
keepalive 32; # keepalive connections
server 127.0.0.1:8080; # jenkins ip and port
}
server {
listen 80; # Listen on port 80 for IPv4 requests
server_name subdomain.yourtld.com;
#this is the jenkins web root directory (mentioned in the /etc/default/jenkins file)
root /var/run/jenkins/war/;
access_log /var/log/nginx/jenkins/access.log;
error_log /var/log/nginx/jenkins/error.log;
ignore_invalid_headers off; #pass through headers from Jenkins which are considered invalid by Nginx server.
location ~ "^/static/[0-9a-fA-F]{8}\/(.*)$" {
#rewrite all static files into requests to the root
#E.g /static/12345678/css/something.css will become /css/something.css
rewrite "^/static/[0-9a-fA-F]{8}\/(.*)" /$1 last;
}
location /userContent {
#have nginx handle all the static requests to the userContent folder files
#note : This is the $JENKINS_HOME dir
root /var/lib/jenkins/;
if (!-f $request_filename){
#this file does not exist, might be a directory or a /**view** url
rewrite (.*) /$1 last;
break;
}
sendfile on;
}
location @jenkins {
sendfile off;
proxy_pass http://jenkins;
proxy_redirect default;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_max_temp_file_size 0;
#this is the maximum upload size
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffering off;
proxy_request_buffering off; # Required for HTTP CLI commands in Jenkins > 2.54
proxy_set_header Connection ""; # Clear for keepalive
}
location / {
# Optional configuration to detect and redirect iPhones
if ($http_user_agent ~* '(iPhone|iPod)') {
rewrite ^/$ /view/iphone/ redirect;
}
try_files $uri @jenkins;
}
}
Note: : Due to nginx error with logs, we create manually these files and assign them jenkins user:
sudo touch /var/log/nginx/jenkins/access.log
sudo touch /var/log/nginx/jenkins/error.log
sudo chown -hR /var/log/nginx/jenkins
And then we check nignx configuration BEFORE reload server:
sudo nginx -t
If everything is fine, we must reload/restart our nginx server:
sudo service nginx restart
- Access Jenkins via subdomain
Via browser: http://subdomain.yourtld.com
If you see Jenkins first installation screen, looks like everything is working fine!
- Enter default Jenkins password and create admin user
Default password for Jenkins is located (plain text) on our server. Access via SSH and copy it:
sudo nano /var/lib/jenkins/secrets/initialAdminPassword
Enter it inside your Jenkins installation wizard and continue creating your user.
And that's all!
good day please
on the server_name can I use my amazon public ip ?